Maison  >  Article  >  développement back-end  >  Vérifier la disponibilité du site Web par lots à l'aide de Python

Vérifier la disponibilité du site Web par lots à l'aide de Python

高洛峰
高洛峰original
2017-03-28 14:53:122018parcourir

Lorsque vous avez de plus en plus de sites, vous constaterez que la gestion est assez compliquée, cet article partagera donc avec vous la fonction d'utiliser python pour vérifier par lots la disponibilité du site, ce qui est très pratique pour que chacun gère le site Web. C’est précieux, les amis dans le besoin peuvent s’y référer. > C'est également difficile à gérer, car certains de ces sites sont importants et d'autres non. Bien sûr, les sites importants et centraux sont davantage gérés comme certains sites qui n'ont pas eu de problème depuis dix mille ans. été oubliés par eux-mêmes. Lors de cette journée froide, lorsqu'un problème survient, nous devons nous précipiter pour le résoudre de toute urgence. Il est donc nécessaire de gérer ces sites de manière standardisée. Aujourd'hui, nous ferons le premier pas. est grand ou petit, nous devons d'abord mettre en œuvre une surveillance unifiée, sans parler de la situation commerciale, au moins ce site n'est pas accessible. N'attendez pas que le côté commercial vous donne son avis. Il semble que nous ne soyons pas assez professionnels. Voyons ensuite comment utiliser Python pour implémenter la surveillance de la disponibilité de plusieurs sites Web. Script Comme suit :

Explication des points essentiels du script :

1. getattr() est une fonction intégrée de Python, qui reçoit un objet et peut renvoyer la valeur de l'objet en fonction des attributs de l'objet 🎜>2 La fonction compare_site_status() renvoie 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 à convertir chaque élément de la séquence

Résumé
#!/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:])

Ce qui précède. C'est tout le contenu de cet article, les amis dans le besoin peuvent s'y référer.

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