亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實(shí)現(xiàn)批量監(jiān)控網(wǎng)站

 更新時(shí)間:2016年09月09日 08:48:54   作者:mindg  
本文給大家分享的是一個(gè)非常實(shí)用的,python實(shí)現(xiàn)多網(wǎng)站的可用性監(jiān)控的腳本,并附上核心點(diǎn)解釋,有相同需求的小伙伴可以參考下

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

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

腳本核心點(diǎn)解釋:

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ù)方法。

相關(guān)文章

  • Python queue隊(duì)列原理與應(yīng)用案例分析

    Python queue隊(duì)列原理與應(yīng)用案例分析

    這篇文章主要介紹了Python queue隊(duì)列原理與應(yīng)用,結(jié)合具體案例形式分析了Python queue隊(duì)列的原理、功能、實(shí)現(xiàn)方法與使用技巧,需要的朋友可以參考下
    2019-09-09
  • Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例

    Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例

    這篇文章主要介紹了Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python 對(duì)圖片進(jìn)行簡(jiǎn)單的處理

    python 對(duì)圖片進(jìn)行簡(jiǎn)單的處理

    介紹一些圖片處理的Python代碼,有了這些處理代碼,我們可以很方便的處理一些圖片,Python這里處理圖片一般都使用Pillow包,有此需求的朋友可以參考下
    2021-06-06
  • 使用Python中的tkinter模塊作圖的方法

    使用Python中的tkinter模塊作圖的方法

    Python是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言。tkinter模塊(“Tk 接口”)是Python的標(biāo)準(zhǔn)Tk GUI工具包的接口。接下來通過本文給大家介紹Python中的tkinter模塊作圖教程,需要的朋友參考下
    2017-02-02
  • Python使用Matplotlib實(shí)現(xiàn)創(chuàng)建動(dòng)態(tài)圖形

    Python使用Matplotlib實(shí)現(xiàn)創(chuàng)建動(dòng)態(tài)圖形

    動(dòng)態(tài)圖形是使可視化更具吸引力和用戶吸引力的好方法,它幫助我們以有意義的方式展示數(shù)據(jù)可視化,本文將利用Matplotlib實(shí)現(xiàn)繪制一些常用動(dòng)態(tài)圖形,希望對(duì)大家有所幫助
    2024-02-02
  • Python中的map()、apply()、applymap()的區(qū)別小結(jié)

    Python中的map()、apply()、applymap()的區(qū)別小結(jié)

    map()、apply()和applymap()方法是Python中常用的轉(zhuǎn)換方法,,輸出的結(jié)果及類型完全取決于作為給定方法的參數(shù)的函數(shù),本文就來介紹一下這三種方法的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Python元組拆包和具名元組解析實(shí)例詳解

    Python元組拆包和具名元組解析實(shí)例詳解

    這篇文章主要介紹了Python元組拆包和具名元組解析,下面的內(nèi)容就圍繞元組作為數(shù)據(jù)記錄屬性展開,并介紹帶字段名的具名元組函數(shù)namedtuple,列表屬性不再本文中敘述。
    2018-03-03
  • Pycharm虛擬環(huán)境創(chuàng)建并使用命令行指定庫(kù)的版本進(jìn)行安裝

    Pycharm虛擬環(huán)境創(chuàng)建并使用命令行指定庫(kù)的版本進(jìn)行安裝

    Pycharm創(chuàng)建的項(xiàng)目,使用了虛擬環(huán)境,對(duì)庫(kù)的版本進(jìn)行管理,有些項(xiàng)目的對(duì)第三方庫(kù)的版本要求不同,可使用虛擬環(huán)境進(jìn)行管理,直接想通過pip命令安裝可以參考下本文的操作步驟
    2022-07-07
  • django框架用戶權(quán)限中的session緩存到redis中的方法

    django框架用戶權(quán)限中的session緩存到redis中的方法

    今天小編就為大家分享一篇django框架用戶權(quán)限中的session緩存到redis中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法

    利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法

    今天小編就為大家分享一篇利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評(píng)論