Home >Backend Development >Python Tutorial >Detailed explanation and examples of implementing batch monitoring of websites in Python

Detailed explanation and examples of implementing batch monitoring of websites in Python

高洛峰
高洛峰Original
2017-03-28 14:57:571785browse

This article shares with you a very practical Python script to implement availability monitoring of multiple websites, with explanations of core points. Friends who have the same needs can refer to it

">

Recently, some new sites have been added. With the increase of sites, the management complexity has also increased. As the saying goes: it is difficult to manage too many people. I found that it is also difficult to manage too many sites because there are many people in these sites. There are some important ones and some unimportant ones. Of course, important and core sites are more managed. For example, some sites that have never had a problem for ten thousand years are gradually forgotten by themselves. If a problem suddenly occurs one day, they are still in a hurry to fix it. Emergency treatment, so it is necessary to manage these sites in a standardized manner. Today we will take the first step. Regardless of large or small sites, we must first implement unified monitoring. Let’s not talk about the business situation. At least that site cannot be accessed. , 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. The script is 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 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:])

Explanation of the core points of the script:

1. getattr() is a built-in function of python. It receives an object and can return the value of the object according to the object attributes.

2. The compare_site_status() function returns. It is an internally defined function.

3. map() requires two parameters, one is a function and the other is a sequence. The function is to apply the function method to each element in the sequence.

The above is the detailed content of Detailed explanation and examples of implementing batch monitoring of websites in Python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn