Zabbix監(jiān)控調(diào)用map.get并且下載圖文件

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 17/8/28 上午9:09
# @Author  : lee
# @File    : ZabbixMaps.py
# @Software: PyCharm
# 說明: 輸入機器要查詢的園區(qū) 知道序號后磷瘤,第二次 園區(qū)+序號出圖  阿里 m6 園區(qū)命令分別是(ali,m6,yq)


import urllib.request
import http.cookiejar
import http
import urllib.parse
import urllib.request
import json
import requests
from prettytable import PrettyTable
import time
import sys

t = str(time.time()).replace('.', '')  #去掉.的時間戳 用于給圖片命名
dict_maps_name = {}

class ZabbixMaps:
    def __init__(self,area,number=-1):#,number):#),graph):
        self.area = area
        self.number = int(number)
        #self.number = number
        # self.graph = graph     #
        self.header = {"Content-Type": "application/json-rpc"}

    def get_Area_url(self): # 獲得token 并返回
        if self.area == 'area1':
            url_head = 'xxx.xxxx/'  # 寫的網(wǎng)址的頭搜变,一會要接其他網(wǎng)址
        elif self.area == 'm6':
            url_head = 'xxxxxx/'
        elif self.area == 'yq':
            url_head = '172.18.2.99'
        self.url_little = url_head
        url = 'http://%s/zabbix/api_jsonrpc.php'% url_head
        return url
    def get_token(self): # 獲得token 并返回
        data = {"jsonrpc": "2.0",
                "method": "user.login",
                "params": {
                    "user": '  ',
                    "password": '  ',
                },
                "id": 1,
                "auth": None
                }

        token = requests.post(url=self.get_Area_url(), headers=self.header, data=json.dumps(data))
        json_dict_token = json.loads(token.text)
        # print(json_dict_token['result'])
        #print(json_dict_token['result'])
        return json_dict_token['result']
    def get_mapid(self):
        counter = 0
        data = {
            "jsonrpc": "2.0",
            "method": "map.get",
            "params": {
                "output":["name","sysmapoid"], # ["hostid","name"],
            },
            "auth": self.get_token(),
            "id": 1
                        }

        # #url_m6 = 'http://xxx/zabbix/api_jsonrpc.php'
        hosts = requests.post(url=self.get_Area_url(), headers=self.header, data=json.dumps(data))
        json_dict_mapid = json.loads(hosts.text)
        #json_dict_hostid_result = json_dict_hostid['result'][0]['hostid']
        #print(json_dict_mapid['result'])
        tables = PrettyTable(['序號','監(jiān)控項'])
        tables.align['序號','監(jiān)控項'] = 'c'
        tables.horizontal_char = '-'
        tables.junction_char = "-"
        tables.left_padding_width = 3
        for i in json_dict_mapid['result']:
            dict_maps_name[counter]=i['sysmapid'],i['name']
            counter += 1
        # return json_dict_mapid['result']
        for i in dict_maps_name:
            tables.add_row([i,dict_maps_name[i][1]])

        if self.number == -1:
            print(tables)
            print('請輸入機房位置和序號:')

        else:
            #print(dict_maps_name)
            return dict_maps_name

    def url_jpg(self):
        if self.number == -1:
            url_jpg = -1

        else:
            # print(dict_graphid_name[1])
            mapid = self.get_mapid()[self.number][0]
            #print(self.get_mapid()[self.number][0])
            url_jpg = 'http://%s/zabbix/map.php?noedit=1&sysmapid=%s' % (self.url_little,mapid)
            #url_2hours = 'http://%s/zabbix/xxx.php?graphid=%s&period=7200' % (self.get_IP_Area(),self.graph_id)
        #print(url_jpg)
        return url_jpg



    def get_jpg(self):
        #print(type(self.get_IP_Area()))
        # post數(shù)據(jù)接收和處理的頁面
        posturl = 'http://%s/zabbix/index.php?request=charts.php' % self.url_little  # 從數(shù)據(jù)包中分析出采缚,處理post請求的url
        #print(posturl)
         #Referer: http://xxx.ops.com.cn/zabbix/index.php?request=charts.php%3Fddreset%3D1


        # 設置一個cookie處理器,它負責從服務器下載cookie到本地挠他,并且在發(fā)送請求時帶上本地的cookie
        cj = http.cookiejar.LWPCookieJar()
        cookie_support = urllib.request.HTTPCookieProcessor(cj)
        opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
        urllib.request.install_opener(opener)


        # 構造header扳抽,一般header至少要包含一下兩項。這兩項是從抓到的包里分析得出的殖侵。
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0',
                  'Referer': 'http://xxx.ops.xxx.com.cn/zabbix/index.php'}

        # 構造Post數(shù)據(jù)贸呢,他也是從抓大的包里分析得出的。
        postData = {    'name': ' ',
                        'password': '  ',
                         'autologin':1,
                        'enter':'Sign in'
                     }


        # 需要給Post數(shù)據(jù)編碼

        postData = urllib.parse.urlencode(postData).encode('utf-8')
        # 通過urllib2提供的request方法來向指定Url發(fā)送我們構造的數(shù)據(jù)拢军,并完成登錄過程
        request = urllib.request.Request(posturl, postData, headers)
        response = urllib.request.urlopen(request)
        text = response.read().decode()

        #下載圖片
        jpg_link = self.url_jpg()  #圖片鏈接
        if jpg_link == -1:
            pass
        else:
            path = '/Users/lee/PycharmProjects/pythonProjects//zabbix/ZabbixMaps/ZAbbixMap.jpg' #%s_%s.jpg' % (self.graph_id,t)

            urllib.request.urlretrieve(jpg_link, path)




if __name__ == "__main__":
    #一個參數(shù)
    # item = ZabbixMaps('ali')
    # item.url_jpg()
    # item.get_mapid()


    # 兩個參數(shù)
    item = ZabbixMaps('ali',2)
    # item.get_token()
    # item.get_mapid()
    # item.url_jpg()
    # item.get_jpg()
    # print('圖片下載完成楞陷!')
    if len(sys.argv) == 2:
        try:
            item = ZabbixMaps(sys.argv[1])
            item.url_jpg()
            item.get_mapid()
        except:
            print("輸入有誤")
    elif len(sys.argv) != 2:
        try:
            item = ZabbixMaps(sys.argv[1],sys.argv[2])
        # item.get_token()
            #item.get_mapid()
            item.url_jpg()
            item.get_jpg()
            print('圖片下載完成!')
        except:
            print("選項輸入有誤")
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茉唉,一起剝皮案震驚了整個濱河市固蛾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌度陆,老刑警劉巖艾凯,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異懂傀,居然都是意外死亡趾诗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門蹬蚁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恃泪,“玉大人,你說我怎么就攤上這事缚忧∥虮茫” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵闪水,是天一觀的道長糕非。 經(jīng)常有香客問我蒙具,道長,這世上最難降的妖魔是什么朽肥? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任禁筏,我火速辦了婚禮,結果婚禮上衡招,老公的妹妹穿的比我還像新娘篱昔。我一直安慰自己,他們只是感情好始腾,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布州刽。 她就那樣靜靜地躺著,像睡著了一般浪箭。 火紅的嫁衣襯著肌膚如雪穗椅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天奶栖,我揣著相機與錄音匹表,去河邊找鬼。 笑死宣鄙,一個胖子當著我的面吹牛袍镀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冻晤,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼苇羡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鼻弧?” 一聲冷哼從身側響起宣虾,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎温数,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜻势,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡撑刺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了握玛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够傍。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挠铲,靈堂內(nèi)的尸體忽然破棺而出冕屯,到底是詐尸還是另有隱情,我是刑警寧澤拂苹,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布安聘,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浴韭。R本人自食惡果不足惜丘喻,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望念颈。 院中可真熱鬧泉粉,春花似錦、人聲如沸榴芳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窟感。三九已至讨彼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肌括,已是汗流浹背点骑。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谍夭,地道東北人黑滴。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像紧索,于是被迫代替她去往敵國和親袁辈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容