Coverage for src/zenossapi/routers/monitor.py: 94%
98 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-25 05:47 +0000
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-25 05:47 +0000
1# -*- coding: utf-8 -*-
3"""
4Zenoss monitor_router
5"""
7from zenossapi.apiclient import ZenossAPIClientError
8from zenossapi.routers import ZenossRouter
11class MonitorRouter(ZenossRouter):
12 """
13 Class for interacting with the Zenoss monitor router
14 """
16 def __init__(self, url, headers, ssl_verify):
17 super(MonitorRouter, self).__init__(url, headers, ssl_verify,
18 'monitor_router', 'MonitorRouter')
19 self.id = None
21 def __repr__(self):
22 if self.id:
23 identifier = self.id
24 else:
25 identifier = hex(id(self))
27 return '<{0} object at {1}>'.format(
28 type(self).__name__, identifier
29 )
31 def tree(self):
32 """
33 Returns the full tree of hubs and collectors
35 Returns:
36 list(dict):
37 """
38 return self._router_request(
39 self._make_request_data(
40 'getTree',
41 data=dict(id='')
42 )
43 )
45 def list_hubs(self):
46 """
47 Returns the list of configured zenhubs
49 Returns:
50 list(dict):
51 """
52 hubs_data = self.tree()
53 hubs = []
54 for hub in hubs_data:
55 hubs.append(dict(name=hub['name'], uid=hub['uid'].replace('/zport/dmd/', '', 1)))
57 return hubs
59 def list_collectors(self):
60 """
61 Returns the list of configured collectors
63 Returns:
64 list(dict):
65 """
66 hubs_data = self.tree()
67 collectors = []
68 for hub in hubs_data:
69 for collector in hub['children']:
70 collectors.append(
71 dict(
72 name=collector['name'],
73 devcount=collector['devcount'],
74 hub=hub['name'],
75 uid=collector['uid'].replace('/zport/dmd/', '', 1)
76 )
77 )
79 return collectors
81 def get_hubs(self):
82 """
83 Get the configured hubs as objects
85 Returns:
86 list(ZenossHub):
87 """
88 hubs_data = self.tree()
89 hubs = []
90 for hub in hubs_data:
91 hubs.append(
92 ZenossHub(
93 self.api_url,
94 self.api_headers,
95 self.ssl_verify,
96 hub
97 )
98 )
100 return hubs
102 def get_hub(self, name):
103 """
104 Get a ZenossHub object
106 Arguments:
107 name (str): Name of the hub to get
109 Returns:
110 ZenossHub:
111 """
112 hubs_data = self.tree()
113 for hub in hubs_data:
114 if hub['name'] == name:
115 return ZenossHub(
116 self.api_url,
117 self.api_headers,
118 self.ssl_verify,
119 hub
120 )
122 return None
125class ZenossHub(MonitorRouter):
126 """
127 Class for Zenoss hub objects
128 """
130 def __init__(self, url, headers, ssl_verify, hub_data):
131 super(ZenossHub, self).__init__(url, headers, ssl_verify)
133 self.uid = hub_data['uid'].replace('/zport/dmd/', '', 1)
134 self.name = hub_data['name']
135 self.text = hub_data['text']
136 self.id = hub_data['id']
137 self.devcount = hub_data['devcount']
138 self.path = hub_data['path']
139 self.ccbacked = hub_data['ccbacked']
140 self.collectors = []
142 for c in hub_data['children']:
143 self.collectors.append(c['name'])
145 def get_collectors(self):
146 """
147 Get the hub's collectors as objects.
149 Returns:
150 list(ZenossCollector):
151 """
152 collectors = []
153 for c in self.collectors:
154 cinfo = self._router_request(
155 self._make_request_data(
156 'getInfo',
157 data=dict(
158 id=c
159 )
160 )
161 )
162 collectors.append(
163 ZenossCollector(
164 self.api_url,
165 self.api_headers,
166 self.ssl_verify,
167 cinfo['data']
168 )
169 )
171 return collectors
173 def get_collector(self, name):
174 """
175 Get a ZenossCollector object
177 Arguments:
178 name (str): Name of the collector to get
180 Returns:
181 ZenossCollector:
182 """
183 if name in self.collectors:
184 cinfo = self._router_request(
185 self._make_request_data(
186 'getInfo',
187 data=dict(
188 id=name
189 )
190 )
191 )
192 return ZenossCollector(
193 self.api_url,
194 self.api_headers,
195 self.ssl_verify,
196 cinfo['data']
197 )
199 return None
201 def add_collector(self, name, source=None, pool=None):
202 """
203 Add a new collector to the hub.
205 Arguments:
206 name (str): Name of the new collector
207 source (str): Name of the existing collector to use as a template
208 pool (str): The resource pool to place the collector in
210 Returns:
211 ZenossCollector:
212 """
213 if not source:
214 raise ZenossAPIClientError("You must specify a collector to use as a template.")
216 if not pool:
217 raise ZenossAPIClientError("You must specify a resource pool for the collector.")
219 collector_params = self._router_request(
220 self._make_request_data(
221 'addCollector',
222 data=dict(
223 id=name,
224 sourceId=source,
225 hubId=self.name,
226 poolId=pool
227 )
228 )
229 )
231 collector_data = self._router_request(
232 self._make_request_data(
233 'getInfo',
234 data=dict(
235 id=name
236 )
237 )
238 )
240 return ZenossCollector(
241 self.api_url,
242 self.api_headers,
243 self.ssl_verify,
244 collector_data=collector_data['data'],
245 collector_params=collector_params
246 )
249class ZenossCollector(MonitorRouter):
250 """
251 Class for Zenoss collector objects
252 """
254 def __init__(self, url, headers, ssl_verify, collector_data, collector_params=None):
255 super(ZenossCollector, self).__init__(url, headers, ssl_verify)
257 self.uid = collector_data['uid'].replace('/zport/dmd/', '', 1)
258 self.ccbacked = collector_data['ccbacked']
259 self.name = collector_data['name']
260 self.text = collector_data['text']
261 self.devcount = collector_data['devcount']
262 self.path = collector_data['path']
263 self.id = collector_data['id']
265 if not collector_params:
266 collector_params = self._router_request(
267 self._make_request_data(
268 'getCollector',
269 data=dict(
270 collectorString=self.name
271 )
272 )
273 )
275 self.configCycleInterval = collector_params['data']['configCycleInterval']
276 self.pingCycleInterval = collector_params['data']['pingCycleInterval']
277 self.discoveryNetworks = collector_params['data']['discoveryNetworks']
278 self.description = collector_params['data']['description']
279 self.modelerCycleInterval = collector_params['data']['modelerCycleInterval']
280 self.processCycleInterval = collector_params['data']['processCycleInterval']
281 self.meta_type = collector_params['data']['meta_type']
282 self.wmiqueryTimeout = collector_params['data']['wmiqueryTimeout']
283 self.statusCycleInterval = collector_params['data']['statusCycleInterval']
284 self.eventlogCycleInterval = collector_params['data']['eventlogCycleInterval']
285 self.wmibatchSize = collector_params['data']['wmibatchSize']
286 self.pingTimeOut = collector_params['data']['pingTimeOut']
287 self.winCycleInterval = collector_params['data']['winCycleInterval']
288 self.pingTries = collector_params['data']['pingTries']
289 self.inspector_type = collector_params['data']['inspector_type']
290 self.zenProcessParallelJobs = collector_params['data']['zenProcessParallelJobs']