Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erklärung und Beispiele zur Implementierung der Batch-Überwachung von Websites in Python

Ausführliche Erklärung und Beispiele zur Implementierung der Batch-Überwachung von Websites in Python

高洛峰
高洛峰Original
2017-03-28 14:57:571783Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn