1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # __author__ = '北方姆Q'
4
5 from pyzabbix import ZabbixAPI
6 from plugins.duia.singleton import Singleton
7
8
9 class ZabbixFactory(Singleton):
10 def __init__(self, url, username='Admin', password='zabbix'):
11 self.obj = ZabbixAPI(url)
12 self.obj.login(username, password)
13
14 def get_hosts(self):
15 """
16 获取所有的主机信息列表
17 :return: dict in list
18 """
19 return self.obj.host.get(output='extend')
20
21 def get_host(self, name):
22 """
23 获取单台的主机信息
24 :param name: 需要获取的显示名
25 :return: dict
26 """
27 return self.obj.host.get(output='extend', filter={'name': name})[0]
28
29 def get_host_groups(self):
30 """
31 获取所有的主机组信息列表
32 :return: dict in list
33 """
34 return self.obj.hostgroup.get(output='extend')
35
36 def get_hosts_by_group(self, group_name):
37 """
38 获取某个主机组内所有主机信息列表
39 :param group_name: 主机组名
40 :return: dict in list
41 """
42 return self.obj.host.get(groupids=self.__get_host_group_id(group_name), output="extend")
43
44 def get_templates(self):
45 """
46 获取所有模版信息
47 :return: dict in list
48 """
49 return self.obj.template.get(output="extend")
50
51 def get_template(self, template_name):
52 """
53 根据名称获取单个模版信息
54 :return: dict
55 """
56 return self.obj.template.get(output='extend', filter={"host": template_name})[0]
57
58 def create_group(self, group_name):
59 """
60 创建一个新主机组
61 :param group_name: 新主机组名
62 :return: 新组id,str
63 """
64 ret = self.obj.hostgroup.create(name=group_name)
65 return ret['groupids'][0]
66
67 def create_host(self, name, ip, groups_name, templates_name, proxy_name=None, status=0):
68 """
69 创建一台新主机
70 :param name: 主机名
71 :param ip: 主机受监控ip
72 :param groups_name: 主机所在组,str、list、tuple、set
73 :param templates_name: 主机关联模版,str、list、tuple、set
74 :param proxy_name: 使用的代理名称,默认不使用
75 :param status: 是否启用,默认开启
76 :return: 新主机id,str
77 """
78 groups = [{'groupid': self.__get_host_group_id(groups_name)}] if isinstance(groups_name, str) \
79 else [{'groupid': self.__get_host_group_id(group_name)} for group_name in groups_name]
80 templates = [{'templateid': self.__get_template_id(templates_name)}] if isinstance(templates_name, str) \
81 else [{'templateid': self.__get_template_id(template_name)} for template_name in templates_name]
82
83 if proxy_name is None:
84 ret = self.obj.host.create(
85 host=name,
86 status=status,
87 groups=groups,
88 templates=templates,
89 interfaces=[{
90 'type': 1, # 监控类型
91 'main': 1, # 监控类型下第几行
92 'useip': 1, # 使用ip还是dns
93 'ip': ip, # ip框
94 'dns': '', # dns框
95 'port': '10050' # port框
96 }]
97 )
98 else:
99 ret = self.obj.host.create(
100 host=name,
101 status=status,
102 groups=groups,
103 templates=templates,
104 interfaces=[{
105 'type': 1,
106 'main': 1,
107 'useip': 1,
108 'ip': ip,
109 'dns': '',
110 'port': '10050'
111 }],
112 proxy_hostid=self.__get_proxy_id(proxy_name)
113 )
114 return ret['hostids'][0]
115
116 def __get_host_group_id(self, group_name):
117 """
118 获取某主机组id
119 :param group_name: 主机组名
120 :return: int
121 """
122 return int(self.obj.hostgroup.get(output='groupid', filter={'name': group_name.split(',')})[0].get('groupid'))
123
124 def __get_template_id(self, template_name):
125 """
126 获取某模版id
127 :param template_name: 模版名
128 :return: int
129 """
130 return int(self.obj.template.get(output='templateid', filter={'host': template_name.split(',')})[0].get('templateid'))
131
132 def __get_proxy_id(self, proxy_name):
133 """
134 获取某代理id
135 :param proxy_name: 代理名
136 :return: int
137 """
138 return int(self.obj.proxy.get(output='proxyid', filter={'host': proxy_name.split(',')})[0].get('proxyid'))