1. 程式人生 > >python Django 檢測網站訪問是否正常 並郵件提醒

python Django 檢測網站訪問是否正常 並郵件提醒

最近公司專案經常出現訪問超時的情況, 各種原因都有。 因此用python 寫了個檢測專案訪問是否超時,並郵件提醒的指令碼 。

想到還有其他專案以及依賴的上游介面也需要做檢測提醒,所以用django做成了個web 專案 ,讓公司其他人自己配置需要檢測的專案 ,順便學習下python多執行緒的使用

原理很簡單, 使用 urllib 迴圈請求需檢測的網站,一旦超時發出郵件提醒

Django後臺使用 threading ,每個檢測專案發起一個執行緒來處理檢測以及郵件傳送的任務 。

後臺可以檢視專案檢測狀態 ,配置郵件,檢測頻率以及超時時間,開啟。停止監控等。



沒有前端 ,所以貼下 models 程式碼, 以及threading 的實現類

專案目錄:


models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from django.contrib import admin
import threading
from epgtest.jiankong import Jiankong
import Threads
# Create your models here.

class Monitor(models.Model):
    sname = models.CharField(max_length = 150,verbose_name=u"監控名")
    link = models.TextField(blank=True,verbose_name=u"監控地址")
    rate = models.IntegerField(blank=False,verbose_name=u"監控頻率(秒/次)")
    timeout = models.IntegerField(blank=False,verbose_name=u"超時時間(超時N秒後告警)")
    tomail = models.TextField(blank=True,verbose_name=u"告警郵件接受地址")
    title = models.TextField(blank=True,verbose_name=u"告警郵件標題")
    contents = models.TextField(blank=True,verbose_name=u"告警郵件正文")
    GENDER_CHOICES = (
        (0, u'停止監控'),
        (1, u'開啟監控'),
    )
    start = models.IntegerField(default=1 ,choices=GENDER_CHOICES)   
    def my_property(self):
        thread = Threads.GetThreads().get(self.id)
        if  not thread is None:
            if thread.is_alive():
                return '正在監控中!'
        return '監控已停止'
    my_property.short_description = "監控狀態"
    statu = property(my_property)
class MonitorAdmin(admin.ModelAdmin):
    list_display = ('sname','link','tomail','rate','timeout','title','contents','statu')
  
    def delete_model(self, request, obj):
        thread = Threads.GetThreads().get(obj.id)
        if  not thread is None:
                    if thread.is_alive():
                        thread.stop()
                        del Threads.GetThreads()[obj.id]
        obj.delete() 
 
    def save_model(self, request, obj, form, change):
        if change:# 更改的時候
            obj_original = self.model.objects.get(pk=obj.pk)
            obj.save()
            if obj.start == 1:#開啟監控
                thread = Threads.GetThreads().get(obj.id)
                if  not thread is None:
                    if thread.is_alive():
                        thread.stop()
                        del Threads.GetThreads()[obj.id]    
                t = Jiankong(rate=obj.rate,timeout=obj.timeout,link=obj.link,tomail=obj.tomail,title=obj.title,contents=obj.contents,flag=True)
                t.start()
                Threads.GetThreads()[obj.id] = t
            else : #關閉監控
                thread = Threads.GetThreads().get(obj.id)
                if  not thread is None:
                    if thread.is_alive():
                        thread.stop()
                        del Threads.GetThreads()[obj.id]
                
        else:# 新增的時候
            obj_original = None
            obj.save()
            if obj.start == 1:
                t = Jiankong(rate=obj.rate,timeout=obj.timeout,link=obj.link,tomail=obj.tomail,title=obj.title,contents=obj.contents,flag=True)
                t.start()  
                Threads.GetThreads()[obj.id] = t
                 
admin.site.register(Monitor,MonitorAdmin)

Threads.py  儲存所有啟動的監控執行緒
# coding=utf-8

__threads__ = {}


    
def GetThreads():
    return __threads__


監控類  jiankong.py

#coding:utf-8
import urllib,socket
import time
import smtplib ,sys,datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import threading
reload(sys)
sys.setdefaultencoding("utf-8")

class Jiankong(threading.Thread):
    def __init__(self,rate,timeout,link,tomail,title,contents,flag):
        threading.Thread.__init__(self)
        self.rate = rate
        self.timeout = timeout
        self.link = link
        self.tomail = tomail
        self.title = title
        self.contents = contents
        self.flag = flag
    def sendMail(self):
        # 第三方 SMTP 服務
        mail_host="smtp.xxxxx.cn"  #設定伺服器
        mail_user="xxxxx.cn"    #使用者名稱
        mail_pass="xxxxxx"   #口令 
         
         
        sender = '
[email protected]
' receivers = [self.tomail] # 接收郵件,可設定為你的QQ郵箱或者其他郵箱 #建立一個帶附件的例項 message = MIMEMultipart() message['From'] = Header("xx", 'utf-8') message['To'] = Header(" , ".join(receivers), 'utf-8') today = datetime.datetime.today(); subject = self.title + today.strftime('%Y-%m-%d %H:%M:%S') message['Subject'] = Header(subject, 'utf-8') #郵件正文內容 message.attach(MIMEText(self.contents, 'plain', 'utf-8')) #設定郵件名片(html格式) # html = file('qianming.html').read().decode("utf-8") # message.attach(MIMEText(html, 'html', 'utf-8')) try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 為 SMTP 埠號 smtpObj.login(mail_user,mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print "郵件傳送成功" except smtplib.SMTPException,e: print "Error: 無法傳送郵件" + repr(e) def run(self): socket.setdefaulttimeout(self.timeout) while self.flag: status = 0 try: status=urllib.urlopen(self.link).code except Exception: print "" if status != 200: self.sendMail() time.sleep(self.rate) def stop(self): self.flag = False


相關推薦

python Django 檢測網站訪問是否正常 郵件提醒

最近公司專案經常出現訪問超時的情況, 各種原因都有。 因此用python 寫了個檢測專案訪問是否超時,並郵件提醒的指令碼 。 想到還有其他專案以及依賴的上游介面也需要做檢測提醒,所以用django做成了個web 專案 ,讓公司其他人自己配置需要檢測的專案 ,順便學習下py

python腳本實現訪問日誌合

python 訪問日誌網易雲對象存儲的訪問日誌默認按小時生成一個日誌文件,不利於統計當日整體數據,於是考慮將多個日誌文 件合並到一個文件中 #!/usr/bin/evn python # -*- coding:utf-8 -*- import nos import time import sys impor

Django 統計網站訪問次數、訪問 ip 、訪問端點及次數

個人部落格:http://www.iamnancy.top 有時候寫完部落格,想知道網站每天的訪問量,都有哪些人訪問,都是來自什麼地方的訪客,都訪問了哪些端點。 效果如下: 編寫 blog/models.py # 訪問網站的 ip 地址、端點和次數 class User

python爬取網站上的圖片儲存到本地

  1.匯入需要的模組requests,BeautifulSoup,os(用於檔案讀寫)。   2.建立一個類,並初始化。 class BeautifulPicture: def __init__(self): # 類的初始化操作 self.headers = {

python django學習製作一個音樂網站將專案部署到阿里雲伺服器

本音樂網站參考了黃永祥編寫的書本《玩轉Django 2.0》。 有興趣的同學留言,我將你喜歡的歌曲新增進去。     網址:http://xiaomokuaipao.com/   一、資料庫的設計: 1.歌曲資訊表:記錄了歌

Python獲取個人網站的所有課程下載鏈接和密碼,保存到Mongodb中

one find() net agent play col pat 進行 jpg 1、獲取網站課程的分類地址; ‘‘‘ 爬取屌絲首頁,獲取每個分類名稱和鏈接 ‘‘‘ import requests from lxml import etree headers = {

阿里雲部署django實現公網訪問 SSH實現遠端控制 linux rhel7下安裝python django初探-建立簡單的部落格系統(一) django初探-建立簡單的部落格系統(二)

  本博的主要目的是對阿里雲部署django實現公網訪問進行一次簡單的記錄,方便日後查詢。   內容目錄:   (1)申請阿里雲伺服器及安全組配置   (2)實現ssh遠端控制   (3)實現ftp檔案傳輸   (4)安裝python3,在centos下同時使用python2和python3   

【Mac系統 + Python + Django】之開發一個釋出會系統【Django模型(二)】 【Mac系統 + Mysql】之安裝Mysql資料庫 【Python + Mysql】之用pymysql庫連線Mysql資料庫進行增刪改查操作

上一部分給大家介紹Django的檢視。 接下來繼續來了解Django框架,來看第二部分,此部分是對資料庫的操作。   目錄: 一、設計系統表 二、admin後臺管理 三、基本資料訪問(SQLite資料庫) 四、Django配置MySQL   &

python django建立資料庫表連線mysql資料庫(附mysql 8.0.12安裝)

先寫下mysql zip安裝方式,在環境變數中加入mysql/bin路徑,把zip解壓到C:\program files下,在最外層資料夾建立my-default.ini 寫入內容: [mysqld]  basedir=C:\Program Files\MySQL data

python django建立資料庫表連線mysql資料庫(附mysql安裝)

先寫下mysql zip安裝方式,在環境變數中加入mysql/bin路徑,把zip解壓到C:\program files下,在最外層資料夾建立my-default.ini 寫入內容: [mysqld]  basedir=C:\Program Files\MySQL d

python Django 資料匯入表格,下載到本地的實現

1.首先把資料匯入表格 上面是建立表表格檔案,其中有三列,分別操作人,報表時間,異常資訊、   利用xlwt.easyxf(‘’)進行單元格字型顏色,樣式的設定 上圖實現設定單元格的寬度 實現資料的寫入檔案 wb.save("home_app

[Python爬蟲] 爬蟲例項:獲取政府網站公示資料儲存到MongoDB資料庫

前言 在上一篇文章 https://blog.csdn.net/xHibiki/article/details/84134554 中,我們介紹了Mongo資料庫以及管理工具Studio3T和admin

python+django PyCharm下建立執行我們的第一個Django工程:https://blog.csdn.net/Tomonkey/article/details/50922279

1:使用者通過瀏覽器輸入相應的 URL 發起 HTTP 請求(一般是 GET/POST) 2:Django 接受到請求,檢測 urls.py 檔案,找到和使用者輸入的 URL 相匹配的項,並呼叫該 URL 對應的檢視函式(view),例如,通常來說 urls.py 檔案裡的程式碼是這樣

使用Python和OpenCV檢測影象中的物體將物體裁剪下來

介紹 碩士階段的畢設是關於昆蟲影象分類的,程式碼寫到一半,上週五導師又給我新的昆蟲圖片資料集了,新圖片中很多圖片很大,但是圖片中的昆蟲卻很小,所以我就想著先處理一下圖片,把圖片中的昆蟲裁剪下來,這樣除去大部分無關背景,應該可以提高識別率。 原圖片舉例(將紅色

python--Django網站開發(1)

為了快速上手,我們通過開發一個簡單的web專案來學習Django的網站開發!!! 上篇文章中我們已經安裝好了虛擬環境,此次我們直接啟動虛擬環境開始本次專案。 啟動環境 cd到虛擬環境目錄執行:命令列:activate 建立專案 cd到自己想要建立專案的目錄執行,命令列:djang

Python Django使用HttpResponse返回圖片顯示

views# 1.03 讀取圖片demo def read_img(request): """ : 讀取圖片 :param request: :return: "

python科學計算(利用numpy建立訪問陣列)

利用numpy建立並訪問陣列 引入numpy包: import numpy as np 建立np陣列 a = np.array([1,2,3,4]) #b = np.array([1,2,3,4],[5,6,7,8]) #報錯 c = np.array([[1,2,3,4]

Python網路爬蟲(九):爬取頂點小說網站全部小說,存入MongoDB

前言:本篇部落格將爬取頂點小說網站全部小說、涉及到的問題有:Scrapy架構、斷點續傳問題、Mongodb資料庫相關操作。 背景: Python版本:Anaconda3 執行平臺:Windows IDE:PyCharm 資料庫:MongoDB 瀏