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檢測批量URL狀態,並將返回正常的URL保存文件
pythonur#!/usr/bin/python
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學習之網站的編寫(HTML,CSS,JS)(二十四)----------示例,點贊,點讚的同時旁邊出現一個逐漸變大的+1殘影並很快消失
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <st
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 瀏