This article shares with you a very practical Python script to implement availability monitoring of multiple websites, with explanations of core points. Friends who have the same needs can refer to it
">
Recently, some new sites have been added. With the increase of sites, the management complexity has also increased. As the saying goes: it is difficult to manage too many people. I found that it is also difficult to manage too many sites because there are many people in these sites. There are some important ones and some unimportant ones. Of course, important and core sites are more managed. For example, some sites that have never had a problem for ten thousand years are gradually forgotten by themselves. If a problem suddenly occurs one day, they are still in a hurry to fix it. Emergency treatment, so it is necessary to manage these sites in a standardized manner. Today we will take the first step. Regardless of large or small sites, we must first implement unified monitoring. Let’s not talk about the business situation. At least that site cannot be accessed. , report it as soon as possible, don’t wait for the business side to give you feedback, it will appear that we are not professional enough, then let’s see how to use python to implement availability monitoring of multiple websites. The script is as follows:
#!/usr/bin/env python import pickle, os, sys, logging from httplib import HTTPConnection, socket from smtplib import SMTP def email_alert(message, status): fromaddr = 'xxx@163.com' toaddrs = 'xxxx@qq.com' server = SMTP('smtp.163.com:25') server.starttls() server.login('xxxxx', 'xxxx') server.sendmail(fromaddr, toaddrs, 'Subject: %s\r\n%s' % (status, message)) server.quit() def get_site_status(url): response = get_response(url) try: if getattr(response, 'status') == 200: return 'up' except AttributeError: pass return 'down' def get_response(url): try: conn = HTTPConnection(url) conn.request('HEAD', '/') return conn.getresponse() except socket.error: return None except: logging.error('Bad URL:', url) exit(1) def get_headers(url): response = get_response(url) try: return getattr(response, 'getheaders')() except AttributeError: return 'Headers unavailable' def compare_site_status(prev_results): def is_status_changed(url): status = get_site_status(url) friendly_status = '%s is %s' % (url, status) print friendly_status if urlin prev_resultsand prev_results[url] != status: logging.warning(status) email_alert(str(get_headers(url)), friendly_status) prev_results[url] = status return is_status_changed def is_internet_reachable(): if get_site_status('www.baidu.com') == 'down' and get_site_status('www.sohu.com') == 'down': return False return True def load_old_results(file_path): pickledata = {} if os.path.isfile(file_path): picklefile = open(file_path, 'rb') pickledata = pickle.load(picklefile) picklefile.close() return pickledata def store_results(file_path, data): output = open(file_path, 'wb') pickle.dump(data, output) output.close() def main(urls): logging.basicConfig(level=logging.WARNING, filename='checksites.log', format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') pickle_file = 'data.pkl' pickledata = load_old_results(pickle_file) print pickledata if is_internet_reachable(): status_checker = compare_site_status(pickledata) map(status_checker, urls) else: logging.error('Either the world ended or we are not connected to the net.') store_results(pickle_file, pickledata) if __name__ == '__main__': main(sys.argv[1:])
Explanation of the core points of the script:
1. getattr() is a built-in function of python. It receives an object and can return the value of the object according to the object attributes.
2. The compare_site_status() function returns. It is an internally defined function.
3. map() requires two parameters, one is a function and the other is a sequence. The function is to apply the function method to each element in the sequence.
The above is the detailed content of Detailed explanation and examples of implementing batch monitoring of websites in Python. For more information, please follow other related articles on the PHP Chinese website!