When you have more and more sites, you will find that management is quite complicated, so this article will share with you the function of using python to batch check the availability of the website, which is very practical for everyone to manage the website. It’s valuable, friends in need can refer to it.
">
Preface
As the number of sites increases, the management complexity also increases. As the saying goes: It is difficult to manage too many people. I found that there are too many sites. It’s not easy to manage, because some of these sites are important and some are not. Of course, the important and core sites need to be managed more. Like some sites that don’t have problems even once in ten thousand years, they are gradually forgotten by themselves. On that cold day When a problem occurs, we have to rush to deal with it urgently, so it is necessary to manage these sites in a standardized way. Today we will take the first step. No matter whether the site is large or small, we will first implement unified monitoring, let alone business. situation, at least that site cannot be accessed. You must 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. Script 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 url in prev_results and 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, which receives an object and can return the value of the object according to the object attributes.
2. The compare_site_status() function returns an internally defined function.
3. map() requires two parameters, one is a function and the other is a sequence. The function is to add each element in the sequence. Application function method.
Summary
The above is the entire content of this article, friends in need can refer to it
.The above is the detailed content of Check website availability in batches using python. For more information, please follow other related articles on the PHP Chinese website!