zabbix:MojoWebQQ掉线提醒

MojoWebQQ容易自动停止客户端,因此在停止时增加通知功能。
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os,sys
import pyinotify
from functions import *
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
tmp='/tmp'
QRCODE='/tmp/mojo_webqq_qrcode_default.png'
def smail(mailfrom, receivers, subject, body, att):
sender = 'sender@test.com'
mailtotag = 'devops all'
smtpserver = 'smtp.test.com'
username = 'sender@test.com'
password = 'app_Test123456'
# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header(mailfrom, 'utf-8')
message['To'] = Header(mailtotag, 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
# 邮件正文内容
if isinstance(body, unicode):
body = str(body)
message.attach(MIMEText(body, 'plain', 'utf-8'))
# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open(att, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename=二维码.png'
message.attach(att1)
att2 = MIMEText(open(att, 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename=att'
# message.attach(att2)
message["Accept-Language"] = "zh-CN"
message["Accept-Charset"] = "ISO-8859-1,utf-8"
try:
smtpObj = smtplib.SMTP(smtpserver)
smtpObj.login(username, password)
smtpObj.sendmail(sender, receivers, message.as_string())
print "mail send"
except smtplib.SMTPException:
print "Error: send failed"
class OnIOHandler(pyinotify.ProcessEvent):
def process_IN_CREATE(self, event):
print('Action', "create file: %s " % os.path.join(event.path, event.name))
if os.path.join(event.path, event.name)=='/tmp/mojo_webqq_qrcode_default.png':
mailfrom = 'sender@test.com'
receivers = ['me@test.com', 'me1@test.com'] # 接收邮件
subject = 'QQ二维码登录'
body = '手机扫码登录'
att = os.path.join(event.path, event.name)
smail(mailfrom, receivers, subject, body, att)
def process_IN_DELETE(self, event):
print('Action', "delete file: %s " % os.path.join(event.path, event.name))
if os.path.join(event.path, event.name)=='mojo_webqq_pid_default.pid':
mailfrom = 'sender@test.com'
receivers = ['me@test.com', 'me1@test.com'] # 接收邮件
subject = 'QQ已经离线'
body = '请及时重新登录'
att = ''
smail(mailfrom, receivers, subject, body, att)
def process_IN_MODIFY(self, event):
print('Action', "modify file: %s " % os.path.join(event.path, event.name))
def auto_compile(path='.'):
wm = pyinotify.WatchManager()
mask = pyinotify.IN_CREATE | pyinotify.IN_DELETE | pyinotify.IN_MODIFY
notifier = pyinotify.ThreadedNotifier(wm, OnIOHandler())
notifier.start()
wm.add_watch(path, mask, rec=True, auto_add=True)
print('Start Watch', 'Start monitoring %s' % path)
while True:
try:
notifier.process_events()
if notifier.check_events():
notifier.read_events()
except KeyboardInterrupt:
notifier.stop()
break
if __name__ == "__main__":
auto_compile(tmp)