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多线程编程(六):可重入锁RLock
Apr 05 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
python opencv之分水岭算法示例
Feb 24 Python
谈谈python中GUI的选择
Mar 01 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Python获取指定字符前面的所有字符方法
May 02 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
Python龙贝格法求积分实例
Feb 29 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
Python实现打包成库供别的模块调用
Jul 13 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
jQuery 树形结构的选择器
2010/02/15 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
python实现跨文件全局变量的方法
2014/07/07 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
深入浅析Python传值与传址
2018/07/10 Python
python实现QQ批量登录功能
2019/06/19 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
如何实现jdbc性能优化
2012/07/30 面试题
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
保安2014年终工作总结
2014/12/06 职场文书
导游词欢迎词
2015/02/02 职场文书
南极大冒险观后感
2015/06/05 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python