国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

利用python批量檢查網(wǎng)站的可用性

2019-11-25 16:35:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

隨著站點(diǎn)的增多,管理復(fù)雜性也上來(lái)了,俗話(huà)說(shuō):人多了不好帶,我發(fā)現(xiàn)站點(diǎn)多了也不好管,因?yàn)檫@些站點(diǎn)里有重要的也有不重要的,重要核心的站點(diǎn)當(dāng)然就管理的多一些,像一些萬(wàn)年都不出一次問(wèn)題的,慢慢就被自己都淡忘了,冷不丁那天出個(gè)問(wèn)題,還的手忙腳亂的去緊急處理,所以規(guī)范的去管理這些站點(diǎn)是很有必要的,今天我們就做第一步,不管大站小站,先統(tǒng)一把監(jiān)控做起來(lái),先不說(shuō)業(yè)務(wù)情況,最起碼那個(gè)站點(diǎn)不能訪問(wèn)了,要第一時(shí)間報(bào)出來(lái),別等著業(yè)務(wù)方給你反饋,就顯得我們不夠?qū)I(yè)了,那接下來(lái)我們看看如果用python實(shí)現(xiàn)多網(wǎng)站的可用性監(jiān)控,腳本如下:

#!/usr/bin/env python  import pickle, os, sys, loggingfrom httplib import HTTPConnection, socketfrom 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:])

腳本核心點(diǎn)解釋?zhuān)?/strong>

1、getattr()是python的內(nèi)置函數(shù),接收一個(gè)對(duì)象,可以根據(jù)對(duì)象屬性返回對(duì)象的值。

2、compare_site_status()函數(shù)是返回的是一個(gè)內(nèi)部定義的函數(shù)。

3、map() ,需要2個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是序列,功能就是將序列中的每個(gè)元素應(yīng)用函數(shù)方法。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容,有需要的朋友們可以參考借鑒。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 商城县| 新昌县| 武山县| 聂荣县| 永仁县| 南通市| 中西区| 巴彦淖尔市| 墨竹工卡县| 定兴县| 石阡县| 屏南县| 丰城市| 松阳县| 华蓥市| 盖州市| 贵阳市| 民权县| 开封县| 金沙县| 张家界市| 梓潼县| 临清市| 宁都县| 延庆县| 卓尼县| 泽普县| 射洪县| 大港区| 荣成市| 普洱| 永丰县| 出国| 松江区| 疏勒县| 加查县| 会同县| 宝丰县| 开原市| 景宁| 库车县|