• Python script to create Screen from all Items/Graphs of a host


    #!/usr/bin/env python
    import urllib2
    import json
    import argparse
    
    
    def authenticate(url, username, password):
        values = {'jsonrpc': '2.0',
                  'method': 'user.login',
                  'params': {
                      'user': username,
                      'password': password
                  },
                  'id': '0'
                  }
    
        data = json.dumps(values)
        req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
        response = urllib2.urlopen(req, data)
        output = json.loads(response.read())
    
        try:
            message = output['result']
        except:
            message = output['error']['data']
            print message
            quit()
    
        return output['result']
    
    
    def getGraph(hostname, url, auth, graphtype, dynamic, columns):
        if (graphtype == 0):
            selecttype = ['graphid']
            select = 'selectGraphs'
        if (graphtype == 1):
            selecttype = ['itemid', 'value_type']
            select = 'selectItems'
    
        values = {'jsonrpc': '2.0',
                  'method': 'host.get',
                  'params': {
                      select: selecttype,
                      'output': ['hostid', 'host'],
                      'searchByAny': 1,
                      'filter': {
                          'host': hostname
                      }
                  },
                  'auth': auth,
                  'id': '2'
                  }
    
        data = json.dumps(values)
        req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
        response = urllib2.urlopen(req, data)
        host_get = response.read()
    
        output = json.loads(host_get)
        # print json.dumps(output)
    
        graphs = []
        if (graphtype == 0):
            for i in output['result'][0]['graphs']:
                graphs.append(i['graphid'])
    
        if (graphtype == 1):
            for i in output['result'][0]['items']:
                if int(i['value_type']) in (0, 3):
                    graphs.append(i['itemid'])
    
        graph_list = []
        x = 0
        y = 0
    
        for graph in graphs:
            graph_list.append({
                "resourcetype": graphtype,
                "resourceid": graph,
                "width": "500",
                "height": "100",
                "x": str(x),
                "y": str(y),
                "colspan": "1",
                "rowspan": "1",
                "elements": "0",
                "valign": "0",
                "halign": "0",
                "style": "0",
                "url": "",
                "dynamic": str(dynamic)
            })
            x += 1
            if x == columns:
                x = 0
                y += 1
    
        return graph_list
    
    
    def screenCreate(url, auth, screen_name, graphids, columns):
        # print graphids
        if len(graphids) % columns == 0:
            vsize = len(graphids) / columns
        else:
            vsize = (len(graphids) / columns) + 1
    
        values = {"jsonrpc": "2.0",
                  "method": "screen.create",
                  "params": [{
                      "name": screen_name,
                      "hsize": columns,
                      "vsize": vsize,
                      "screenitems": []
                  }],
                  "auth": auth,
                  "id": 2
                  }
    
        for i in graphids:
            values['params'][0]['screenitems'].append(i)
    
        data = json.dumps(values)
        req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
        response = urllib2.urlopen(req, data)
        host_get = response.read()
    
        output = json.loads(host_get)
    
        try:
            message = output['result']
        except:
            message = output['error']['data']
    
        print json.dumps(message)
    
    
    def main():
        url = 'http://<zabbix url>/zabbix/api_jsonrpc.php'
        username = "Your API Users Username"
        password = "Your API Users Username"
    
        parser = argparse.ArgumentParser(description='Create Zabbix screen from all of a host Items or Graphs.')
        parser.add_argument('hostname', metavar='H', type=str,
                            help='Zabbix Host to create screen from')
        parser.add_argument('screenname', metavar='N', type=str,
                            help='Screen name in Zabbix.  Put quotes around it if you want spaces in the name.')
        parser.add_argument('-c', dest='columns', type=int, default=3,
                            help='number of columns in the screen (default: 3)')
        parser.add_argument('-d', dest='dynamic', action='store_true',
                            help='enable for dynamic screen items (default: disabled)')
        parser.add_argument('-t', dest='screentype', action='store_true',
                            help='set to 1 if you want to create only simple graphs of items, no previously defined graphs will be added to screen (default 0)')
    
        args = parser.parse_args()
        hostname = args.hostname
        screen_name = args.screenname
        columns = args.columns
        dynamic = (1 if args.dynamic else 0)
        screentype = (1 if args.screentype else 0)
    
        auth = authenticate(url, username, password)
        graphids = getGraph(hostname, url, auth, screentype, dynamic, columns)
    
        print "Screen Name: " + screen_name
        print "Total Number of Graphs: " + str(len(graphids))
    
        screenCreate(url, auth, screen_name, graphids, columns)
    
    if __name__ == '__main__':
        main()

    转载,调用zabbix接口画screen

  • 相关阅读:
    注解-案例
    注解(Annotation)
    适合新手看的超详细CentOS Linux 7 安装Tomcat8过程
    CentOS Linux 7 提示 lsof: 未找到命令
    解决MySql报错:1130
    Spring Boot 创建自定义的properties文件
    spring boot 使用Schedule创建轻量级定时任务
    4.Java数组模块
    3.IDEA开发工具
    2.java基础语法
  • 原文地址:https://www.cnblogs.com/mikeluwen/p/7509115.html
Copyright © 2020-2023  润新知