Python 获取zabbix数据图并发邮件

#! /usr/bin/env python
# coding=utf-8
# Andy_f

import time, os,datetime
import urllib
import urllib2
import cookielib
import MySQLdb
import smtplib
from email.mime.multipart import MIMEMultipart  # 导入MIMEMultipart类
from email.mime.text import MIMEText  # 导入MIMEText类
from email.mime.image import MIMEImage  # 导入MIMEImage类

screens = ["NGINX_flow","mysql"]

now_date = time.strftime("%Y-%m-%d")
save_graph_path = "./weeks/%s" % time.strftime("%Y-%m-%d")
if not os.path.exists(save_graph_path):
    os.makedirs(save_graph_path)

zabbix_host = "zbx.XXXX.com"
username = "Admin"
password = "XXXX&zabbix"
width = 750
height = 200

# graph Time period, s
period = 604800

# zabbix DB
dbhost = "192.168.22.22"
dbport = 3317
dbuser = "XXXX_read"
dbpasswd = "XXXX_read"
dbname = "zabbix"

def mysql_query(sql):
    try:
        conn = MySQLdb.connect(host=dbhost, user=dbuser, passwd=dbpasswd, port=dbport, connect_timeout=20)
        conn.select_db(dbname)
        cur = conn.cursor()
        count = cur.execute(sql)
        if count == 0:
            result = 0
        else:
            result = cur.fetchall()
            return result
        cur.close()
        conn.close()

    except MySQLdb.Error, e:
        print "mysql error:", e

def get_graph(zabbix_host, username, password, screen, width, height, period, save_graph_path):
    for i in mysql_query("select screenid from screens where name=‘%s‘" % (screen)):

        for screenid in i:
            graphid_list = []
            for c in mysql_query("select resourceid from screens_items where screenid=‘%s‘" % (int(screenid))):
                for d in c:
                    graphid_list.append(int(d))

            for graphid in graphid_list:
                login_opt = urllib.urlencode({
                    "name": username,
                    "password": password,
                    "autologin": 1,
                    "enter": "Sign in"})

                get_graph_opt = urllib.urlencode({
                    "graphid": graphid,
                    "screenid": screenid,
                    "width": width,
                    "height": height,
                    "period": period})

                cj = cookielib.CookieJar()
                opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
                login_url = r"http://%s/index.php" % zabbix_host
                save_graph_url = r"http://%s/chart2.php" % zabbix_host
                opener.open(login_url, login_opt).read()
                data = opener.open(save_graph_url, get_graph_opt).read()
                filename = "%s/%s_%s.png" % (save_graph_path, screenid, graphid)
                f = open(filename, "wb")
                f.write(data)
                f.close()

class SendHtmlMail(object):

    def __init__(self):
        self.HOST = "smtp.exmail.qq.com"
        self.SUBJECT = u"每周官网流量数据报表"
        self.TO = [‘[email protected]‘,‘[email protected]‘]
        self.FROM = "[email protected]"

    def addimg(self,src, imgid):
        fp = open(src, ‘rb‘)
        msgImage = MIMEImage(fp.read())
        fp.close()
        msgImage.add_header(‘Content-ID‘, imgid)
        return msgImage

    def Send(self):
        msg = MIMEMultipart(‘related‘)
        msgtext = MIMEText("""

                        <img>
                        <table width="600" border="0" cellspacing="0" cellpadding="4">
                             <tr  bgcolor="#CECFAD" height="30" >
                                <td  colspan="8" style="text-align: center;font-size: large"> 网贷之家周流量报告(责任人:gaogd) </td>
                             </tr>

                            <tr bgcolor="#EFEBDE" height="100" duokan-code-cn>
                                <td><img src="cid:bbs"></td>
                            </tr>
                             <tr bgcolor="#EFEBDE" height="100"duokan-code-cn>
                                <td><img src="cid:www"></td>
                            </tr>
                            <tr bgcolor="#EFEBDE" height="100"duokan-code-cn>
                                <td><img src="cid:no"></td>
                            </tr>
                            <tr bgcolor="#CECFAD" height="20" duokan-code-cn>
                                <td colspan=2>官方流量报告 <a href="http://zbx.XXXX.com">更多>></a></td>
                            </tr>
                        </table>
                        """, "html", "utf-8")

        msg.attach(msgtext)
        msg.attach(self.addimg("./weeks/%s/36_1904.png"%now_date, "no"))
        msg.attach(self.addimg("./weeks/%s/36_1917.png"%now_date, "www"))
        msg.attach(self.addimg("./weeks/%s/36_1928.png"%now_date, "bbs"))

        msg[‘Subject‘] = self.SUBJECT
        msg[‘From‘] = self.FROM
        msg[‘To‘] = ",".join(self.TO)
        print msg[‘To‘]

        try:
            server = smtplib.SMTP()  # 创建一个SMTP()对象
            server.connect(self.HOST, "25")  # 通过connect方法连接smtp主机
            server.starttls()  # 启动安全传输模式
            server.login("[email protected]", "[email protected]*aX")  # 邮箱账号登录校验
            server.sendmail(msg[‘From‘], self.TO, msg.as_string())  # 邮件发送
            server.quit()  # 断开smtp连接
            print "邮件发送成功!"
        except Exception, e:
            print "失败:" + str(e)

if __name__ == ‘__main__‘:
    print ‘start:: ‘,datetime.datetime.now()
    now_date = datetime.datetime.now().strftime("%Y-%m-%d")
    for screen in screens:
         get_graph(zabbix_host, username, password, screen, width, height, period, save_graph_path)
    send_obj = SendHtmlMail()
    send_obj.Send()
    print ‘stop:: ‘, datetime.datetime.now()
时间: 2024-10-12 16:22:24

Python 获取zabbix数据图并发邮件的相关文章

python获取外网IP并发邮件

第一步:通过ip138来爬取外网ip 第二部:通过python的smtplib模块和email来发送邮件,具体用法去网上搜索,下面是代码示例: #!/usr/bin/env python #coding:utf-8 import urllib2 import re import smtplib from email.MIMEText import MIMEText from email.Header import Header ##################################

使用python获取webservice数据并输出到文件

上头要求设置TCP备案检查,给了个WEBSERVICE接口.查了2天,才确认还是python比较好用,我这水平也就写个脚本把数据导出,过滤检索还是用的shell.写此文备忘.WEBSERVICE接口脚本如下: #! /usr/bin/python #coding:utf-8 import codecs import suds def main(file_name, out_file): url = 'http://121.14.4.210:8088/icpautobj/ws/getIcp?wsd

Python 获取接口数据,解析JSON,写入文件

Python 获取接口数据,解析JSON,写入文件 用于练手的例子,从国家气象局接口上获取JSON数据,将它写入文件中,并解析JSON: 总的来说,在代码量上,python代码量要比java少很多.而且python看起来更直观一些: 以下是代码: import types import urllib2 import json duan ="--------------------------" #在控制台断行区别的 #利用urllib2获取网络数据 def registerUrl():

利用python获取股票数据

一.利用pandas API接口 Pandas库提供了专门从财经网站获取金融数据的API接口,可作为量化交易股票数据获取的另一种途径,该接口在urllib3库基础上实现了以客户端身份访问网站的股票数据. 通过查看Pandas的手册可以发现,第一个参数为股票代码,苹果公司的代码为"AAPL",国内股市采用的输入方式“股票代码”+“对应股市”,上证股票在股票代码后面加上“.SS”,深圳股票在股票代码后面加上“.SZ”.DataReader可从多个金融网站获取到股票数据,如“Yahoo! F

shell脚本获取zabbix监控图

因为领导提出需要每天看几次服务器的流量图,今天早上9点上班开始截图,十多台服务器.指定时间12小时流量图,截完图反复对照好几遍,一是怕选错主机,二是怕搞错时间段.使用zabbix时间不长,一直感觉很别扭,容易出错.加上中间还做了一点其他东西的统计,最后等邮件发出的时候都已经是10点以后了. 这样下去,恐怕是影响仕途啊.若再加上有什么其他的事情,估计领导可以一边吃午饭一边看报表了,我只能选择吃土了... 网上教程比较多,python写的,perl写的,应为暂时没这方面基础,照搬过来运行报错就无解了

python获取天气状况并以邮件的形式发到目的邮箱

python爬取天气情况 下面为示例代码: from urllib.request import urlopen from bs4 import BeautifulSoup from urllib.error import HTTPError import smtplib from email.mime.text import MIMEText from email.utils import formataddr import time """爬虫程序是一个需要后期投入很大维

数据统计并发邮件脚本

#!/usr/bin/env python2 #-*- coding:utf-8 -*- #Author : zhanglejie #Time: 2017/05/18 ''' 生成wifi数据最近7天(不含当天)回传列表:天数,MAC 判断依据:数据回传后会创建相应的文件,文件名包含mac和时间(以天为分界), 获取文件名,提取出mac和时间,从而知道mac哪天有数据回传哪天没有 ''' import os import datetime from email.mime.text import 

Python学习笔记(十五)用Python获取本地数据

f1 = open(r'E:\Python\Data\data1.txt') #读取data1.txt文件,使用系统默认缓冲区大小, 为了读取快点,使用缓存吧! f = open(r'E:\Python\Data\data2.txt', 'w') f.write('Hello World !') f.close() f = open(r'E:\Python\Data\data2.txt', 'r') p1 = f.read(5) # 先读5个字节 p2 = f.read() # 余下的都读出来f

python 获取excel数据 自动登陆

import xlrdimport timeimport unittestfrom selenium import webdriver class u8819(unittest.TestCase): global loginurl global driverpath loginurl = 'http://www.effevo.com' driverpath = 'D:\\chromedriver.exe' userpath = 'D:\\data.xlsx' #获取data.xlsx中的用户数据