orabbix結合python傳送圖形報表(二)

jeanron100發表於2015-08-24
   在之前的博文中分享過透過結合python來傳送圖形報表郵件的例子。
http://blog.itpub.net/23718752/viewspace-1776784/
當然我們還是需要實現,意味著那些碰到的硬骨頭都需要啃下來,大體的思路如下,每個步驟都有一些難點。    
1.知道screenid和graphid和mysql表的關聯關係
2.利用screenid和graphid得到對應的報表圖片
3.把圖形儲存在臨時目錄下
4.把圖形以附件的形式傳送。
首先就是表的關聯。這個部分還真沒有什麼捷徑,最好的方法就是自己去根據裡面的資料去找規律,至少從我的嘗試,沒有找到對應的datamodel之類的文件,不過這個開源的一個優點就是表定義還是很規範的,能夠根據字面意思就基本能夠看出來對應的資料含義。
我們可以根據圖片的連結地址來倒推,連結地址一般為                 for screenid in i:
                    graphid_list = []
                    #for c in mysql_query("select resourceid from screens_items where screenid='%s'"%(int(screenid))):
                    for c in mysql_query("select graphid from graphs where templateid=1047 "):

                        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)
                        html += '<img width="600" height="250" src="http://%s/%s/%s/%s.%s.png">'%(zabbix_host,save_graph_path.split("/")[len(save_graph_path.split("/"))-2],save_graph_path.split("/")[len(save_graph_path.split("/"))-1],screenid,graphid)
                        f = open(filename,"wb")
                        f.write(data)
                        f.close()

至於傳送郵件,還是繼續套用python的工具包來做。可以採用下面的方式來傳送html格式的郵件。

def send_mail2(user,subject,content):
        me = mail_head+"<"+mail_user+"@"+mail_postfix+">"
        print me
       # msg = MIMEText(content,'plain','utf-8')
        msg = MIMEText(content,_subtype="html",_charset="utf8")
        #msg['Subject'] = Header(subject,'utf-8')
        msg['From'] = me
        msg['to'] = user
        global sendstatus
        global senderr

        try:
                smtp = smtplib.SMTP()
                smtp.connect(mail_host)
                #smtp.login(mail_user,mail_pass)
                smtp.sendmail(me,user,msg.as_string())
                smtp.close()
                print 'send ok'
                sendstatus = True
        except Exception,e:
                senderr = str(e)
                print senderr
                sendstatus = False

        logging.debug(user + ' ' + subject + ' ' + content)

這兩個部分都結合起來,得到圖片,然後作為附件傳送郵件,整個監控傳送圖形報表的工作就基本完成了。
可能有些地方還是沒有說的很清楚,我們可以繼續討論。我也在不斷完善這個部分。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1781581/,如需轉載,請註明出處,否則將追究法律責任。

相關文章