Check website availability in batches using python

高洛峰
Release: 2017-03-28 14:53:12
Original
2008 people have browsed it

When you have more and more sites, you will find that management is quite complicated, so this article will share with you the function of using python to batch check the availability of the website, which is very practical for everyone to manage the website. It’s valuable, friends in need can refer to it.

">

Preface

As the number of sites increases, the management complexity also increases. As the saying goes: It is difficult to manage too many people. I found that there are too many sites. It’s not easy to manage, because some of these sites are important and some are not. Of course, the important and core sites need to be managed more. Like some sites that don’t have problems even once in ten thousand years, they are gradually forgotten by themselves. On that cold day When a problem occurs, we have to rush to deal with it urgently, so it is necessary to manage these sites in a standardized way. Today we will take the first step. No matter whether the site is large or small, we will first implement unified monitoring, let alone business. situation, at least that site cannot be accessed. You must 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. Script 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 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:])
Copy after login

Explanation of the core points of the script:

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

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

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

Summary

The above is the entire content of this article, friends in need can refer to it

.

The above is the detailed content of Check website availability in batches using python. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template