Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erklärung und Beispiele zur Implementierung der Batch-Überwachung von Websites in Python
Dieser Artikel stellt Ihnen ein sehr praktisches Python-Skript zur Implementierung der Verfügbarkeitsüberwachung mehrerer Websites vor, mit Erläuterungen zu den Kernpunkten. Freunde, die die gleichen Bedürfnisse haben, können darauf verweisen
">
Mit der Zunahme der Websites ist auch die Verwaltungskomplexität gestiegen. Wie das Sprichwort sagt: Es ist schwierig, zu viele Websites zu verwalten Es gibt zu viele Standorte in diesen Sites. Es gibt einige wichtige und einige unwichtige Sites. Natürlich werden einige Sites, die seit zehntausend Jahren nie ein Problem hatten, allmählich vergessen Wenn eines Tages plötzlich ein Problem auftritt, ist es immer noch wichtig, diese Standorte standardisiert zu verwalten. Unabhängig davon, ob es sich um große oder kleine Standorte handelt Lassen Sie uns zunächst nicht über die Geschäftssituation sprechen. Melden Sie es so schnell wie möglich. Warten Sie nicht, bis die Geschäftsseite Ihnen Feedback gibt sind nicht professionell genug. Dann sehen wir uns an, wie man mit Python die Verfügbarkeitsüberwachung mehrerer Websites implementiert:
#!/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:])
Erklärung der Kernpunkte des Skripts:
1. getattr() ist eine integrierte Funktion von Python und kann den Wert des Objekts gemäß den Objektattributen zurückgeben ist eine intern definierte Funktion.
3. Der eine ist eine Funktion und der andere eine Sequenz. Die Funktion besteht darin, die Funktionsmethode auf jedes Element in der Sequenz anzuwenden.
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung und Beispiele zur Implementierung der Batch-Überwachung von Websites in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!