python批量检查网站可用性

前几天某站2个小时无法访问,最后终于触发了XX业务部门的人工报警,然后就悲剧了,领导大怒,问:怎么回事?答:公司站点太多,有些小站点访问访问量比较小也不重要,关注度下降,所以。。。,讨论最后领导下指示要尽快加所有站点的监控,不管站点大小,如果不可访问立刻要进行报警,绝对不能再次触发人工报警,不能让这种不专业的事再次发生,所以就有了今天的这个脚本,脚本如下:

脚本逻辑就是获取站点HEAD,如果正常就返回up,有问题就返回down,getattr()是python内置函数,接收一个对象,可以根据对象的属性返回对象的值,比较有意思的是compare_site_status()函数中又定义了一个函数,最后return了这个内部函数,这个函数在map()函数中进行了调用,map()函数接收2个参数,一个是函数,一个系列,在这个脚本里就是检测每个url的站点状态,如果有问题就发邮件报警,检测过的站点状态用pickle模块存在data.pkl文件中,在检测站点前先做网络连通性检测,这里定义的is_internet_reachable()函数实现比较简单,判断是否网络故障就是访问下baidu和qq,如果这2个站点都不能访问,就表示网络出问题了,不一定是站点出现问题,如果网络正常,然后才进行站点状态验证。