Skip to content

Commit 3a03c14

Browse files
committed
New function to recover active checks
The new function get_active_checks() return a list of active items that a Zabbix Agent should execute.
1 parent 72ac80f commit 3a03c14

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

pyzabbix/sender.py

+31
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,18 @@ def _chunk_send(self, metrics):
382382
"""
383383
messages = self._create_messages(metrics)
384384
request = self._create_request(messages)
385+
386+
return self._send_request(request)
387+
388+
def _send_request(self, request):
389+
"""Send the formated zabbix request to zabbix server.
390+
391+
:type request: str
392+
:param request: formatted zabbix request
393+
394+
:rtype: str
395+
:return: Response from Zabbix Server
396+
"""
385397
packet = self._create_packet(request)
386398

387399
for host_addr in self.zabbix_uri:
@@ -435,3 +447,22 @@ def send(self, metrics):
435447
for m in range(0, len(metrics), self.chunk_size):
436448
result.parse(self._chunk_send(metrics[m:m + self.chunk_size]))
437449
return result
450+
451+
def get_active_checks(self, host):
452+
"""Send a request to retrieve active checks
453+
454+
Format of returned items:
455+
{'key': 'KEYITEM', 'delay': 30, 'lastlogsize': 0, 'mtime': 0}
456+
457+
:type host: string
458+
:param host: host name to retrive active checks
459+
460+
:rtype: list
461+
:return: List of active checks
462+
"""
463+
request = '{{"request":"active checks","host":"{host}"}}'.format(host=host)
464+
request = request.encode("utf-8")
465+
logger.debug('Request: %s', request)
466+
467+
response = self._send_request(request)
468+
return response.get("data")

tests/test_sender.py

+17
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,20 @@ def test_send_failed(self, mock_socket):
222222
zs = ZabbixSender()
223223
with self.assertRaises(Exception):
224224
zs.send([zm])
225+
226+
@patch('pyzabbix.sender.socket.socket', autospec=autospec)
227+
def test_get_active_checks(self, mock_socket):
228+
mock_data = b'\x01\\\x00\x00\x00\x00\x00\x00\x00'
229+
mock_socket.return_value = mock_socket
230+
mock_socket.recv.side_effect = (b'ZBXD', mock_data, b'''
231+
{"response":"success","data":[{"key":"KEYITEM1","delay":30,"lastlogsize":0, \
232+
"mtime":0},{"key":"KEYITEM2","delay":300,"lastlogsize":10,"mtime":20}]}
233+
''')
234+
235+
zs = ZabbixSender()
236+
result = zs.get_active_checks("host1")
237+
self.assertIsInstance(result, list)
238+
self.assertEqual(result[0], {"key": "KEYITEM1", "delay": 30,
239+
"lastlogsize": 0, "mtime": 0})
240+
self.assertEqual(result[1], {"key": "KEYITEM2", "delay": 300,
241+
"lastlogsize": 10, "mtime": 20})

0 commit comments

Comments
 (0)