python实现批量监控网站


Posted in Python onSeptember 09, 2016

最近又新上了一部分站点,随着站点的增多,管理复杂性也上来了,俗话说:人多了不好带,我发现站点多了也不好管,因为这些站点里有重要的也有不重要的,重要核心的站点当然就管理的多一些,像一些万年都不出一次问题的,慢慢就被自己都淡忘了,冷不丁那天出个问题,还的手忙脚乱的去紧急处理,所以规范的去管理这些站点是很有必要的,今天我们就做第一步,不管大站小站,先统一把监控做起来,先不说业务情况,最起码那个站点不能访问了,要第一时间报出来,别等着业务方给你反馈,就显得我们不够专业了,那接下来我们看看如果用python实现多网站的可用性监控,脚本如下:

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

脚本核心点解释:

1、getattr()是python的内置函数,接收一个对象,可以根据对象属性返回对象的值。

2、compare_site_status()函数是返回的是一个内部定义的函数。

3、map(),需要2个参数,一个是函数,一个是序列,功能就是将序列中的每个元素应用函数方法。

Python 相关文章推荐
在Python 3中实现类型检查器的简单方法
Jul 03 Python
python+django快速实现文件上传
Oct 24 Python
python之pandas用法大全
Mar 13 Python
python调用百度REST API实现语音识别
Aug 30 Python
使用python 写一个静态服务(实战)
Jun 28 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
python 如何调用 dubbo 接口
Sep 24 Python
Python字典dict常用方法函数实例
Nov 09 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
python 写一个文件分发小程序
Dec 05 Python
利用python批量检查网站的可用性
Sep 09 #Python
Python如何判断数独是否合法
Sep 08 #Python
python框架django基础指南
Sep 08 #Python
python中星号变量的几种特殊用法
Sep 07 #Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 #Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 #Python
Python 编码处理-str与Unicode的区别
Sep 06 #Python
You might like
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
js数组操作学习总结
2013/11/04 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python实现的堆排序算法示例
2018/04/29 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
少先队入队活动方案
2014/02/08 职场文书
护理见习报告范文
2014/11/03 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript