Maison  >  Article  >  développement back-end  >  Explication détaillée et exemples de mise en œuvre de la surveillance par lots de sites Web en Python

Explication détaillée et exemples de mise en œuvre de la surveillance par lots de sites Web en Python

高洛峰
高洛峰original
2017-03-28 14:57:571745parcourir

Cet article partage avec vous un script Python très pratique pour mettre en œuvre un suivi de disponibilité de plusieurs sites Web, avec des explications sur les points essentiels. Les amis qui ont les mêmes besoins peuvent s'y référer

">

<.> Récemment, de nouveaux sites ont été ajoutés. Avec l'augmentation du nombre de sites, la complexité de gestion a également augmenté. Comme le dit le proverbe : il est difficile de gérer trop de personnes, car j'ai trouvé qu'il était difficile de gérer trop de sites. il y a trop de sites dans ces sites, il y en a des importants et d'autres sans importance. Bien sûr, les sites importants et centraux sont plus gérés. Par exemple, certains sites qui n'ont jamais eu de problème depuis dix mille ans sont progressivement oubliés. Si un problème survient soudainement, ils sont toujours pressés de le résoudre en urgence, il est donc nécessaire de gérer ces sites de manière standardisée. Aujourd'hui, nous ferons le premier pas. , nous devons d'abord mettre en œuvre une surveillance unifiée. Ne parlons pas de la situation commerciale. Au moins, ce site n'est pas accessible, signalez-le au plus vite, n'attendez pas que le côté commercial vous donne son avis, il apparaîtra que nous. ne sont pas assez professionnels. Voyons ensuite comment utiliser Python pour implémenter la surveillance de la disponibilité de plusieurs sites Web. Le script est le suivant :

#!/usr/bin/env python
 
 
import pickle, os, sys, logging
from httplib import HTTPConnection, socket
from smtplib import SMTP
 
def email_alert(message, status):
  fromaddr = &#39;xxx@163.com&#39;
  toaddrs = &#39;xxxx@qq.com&#39;
  
  server = SMTP(&#39;smtp.163.com:25&#39;)
  server.starttls()
  server.login(&#39;xxxxx&#39;, &#39;xxxx&#39;)
  server.sendmail(fromaddr, toaddrs, &#39;Subject: %s\r\n%s&#39; % (status, message))
  server.quit()
 
def get_site_status(url):
  response = get_response(url)
  try:
    if getattr(response, &#39;status&#39;) == 200:
      return &#39;up&#39;
  except AttributeError:
    pass
  return &#39;down&#39;
    
def get_response(url):
  try:
    conn = HTTPConnection(url)
    conn.request(&#39;HEAD&#39;, &#39;/&#39;)
    return conn.getresponse()
  except socket.error:
    return None
  except:
    logging.error(&#39;Bad URL:&#39;, url)
    exit(1)
    
def get_headers(url):
  response = get_response(url)
  try:
    return getattr(response, &#39;getheaders&#39;)()
  except AttributeError:
    return &#39;Headers unavailable&#39;
 
def compare_site_status(prev_results):
  
  def is_status_changed(url):
    status = get_site_status(url)
    friendly_status = &#39;%s is %s&#39; % (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(&#39;www.baidu.com&#39;) == &#39;down&#39; and get_site_status(&#39;www.sohu.com&#39;) == &#39;down&#39;:
    return False
  return True
  
def load_old_results(file_path):
  pickledata = {}
  if os.path.isfile(file_path):
    picklefile = open(file_path, &#39;rb&#39;)
    pickledata = pickle.load(picklefile)
    picklefile.close()
  return pickledata
  
def store_results(file_path, data):
  output = open(file_path, &#39;wb&#39;)
  pickle.dump(data, output)
  output.close()
  
def main(urls):
  logging.basicConfig(level=logging.WARNING, filename=&#39;checksites.log&#39;, 
      format=&#39;%(asctime)s %(levelname)s: %(message)s&#39;, 
      datefmt=&#39;%Y-%m-%d %H:%M:%S&#39;)
  
  pickle_file = &#39;data.pkl&#39;
  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(&#39;Either the world ended or we are not connected to the net.&#39;)
    
  store_results(pickle_file, pickledata)
 
if __name__ == &#39;__main__&#39;:
  main(sys.argv[1:])
Explication des points essentiels du script :

. 1. getattr() est une fonction intégrée de python. Elle reçoit un objet et peut renvoyer la valeur de l'objet en fonction des attributs de l'objet

2. est une fonction définie en interne.

3. map() nécessite deux paramètres, l'un est une fonction et l'autre est une séquence. La fonction consiste à appliquer la méthode de fonction à chaque élément de la séquence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn