-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathcheck_misp_workers.py
executable file
·90 lines (79 loc) · 2.94 KB
/
check_misp_workers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/python3
#
#
# check_misp_workers.py - Returns the number of ok/dead workers in a Nagios plugin format
#
# Author: Xavier Mertens <[email protected]>
# Copyright: GPLv3 (http://gplv3.fsf.org/)
# Feel free to use the code, but please share the changes you've made
#
import argparse
import requests
import json
import sys
NAGIOS_OK = 0
NAGIOS_WARNING = 1
NAGIOS_CRITICAL = 2
NAGIOS_UNKNOWN = 3
misp_useragent = "MISP Nagios Plugin"
misp_verifycert = False
if not misp_verifycert:
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def main():
# Default thresholds
mispWarning = 1
mispCritical = 2
workers_ok = workers_dead = 0
parser = argparse.ArgumentParser(description="Nagios compatible plugin to monitor MISP workers")
parser.add_argument('-u', '--url',
dest = "mispURL",
help = "MISP URL",
metavar = 'MISPURL')
parser.add_argument('-k', '--key',
dest = "mispKey",
help = "MISP API Key",
metavar = 'MISPKEY')
parser.add_argument('-w', '--warning',
dest = "mispWarning",
help = "MISP Warning Threshold",
metavar = 'MISPWARN')
parser.add_argument('-c', '--critical',
dest = "mispCritical",
help = "MISP Critical Threshold",
metavar = 'MISPCRIT')
args = parser.parse_args()
try:
headers = {'Authorization': '{misp_key}'.format(misp_key=args.mispKey),
'Accept': 'application/json',
'content-type': 'application/json',
'User-Agent': '{misp_useragent}'.format(misp_useragent=misp_useragent)}
res = requests.get("{misp_url}/servers/getWorkers".format(misp_url=args.mispURL), headers=headers, verify=misp_verifycert).json()
for el in res:
worker = res.get(el)
if type(worker) is dict:
if 'ok' in worker:
if worker.get('ok') is True:
workers_ok += len(worker.get('workers'))
else:
workers_dead += 1
except:
workers_ok = None
workers_dead = None
format_str = "{status} - {workers} workers dead|workers_ok={workers_ok};workers_dead={workers_dead}"
try:
if workers_dead < int(args.mispWarning):
print(format_str.format(status="OK",workers=workers_dead,workers_ok=workers_ok,workers_dead=workers_dead))
rc = NAGIOS_OK
elif workers_dead < int(args.mispCritical):
print(format_str.format(status="WARNING",workers=workers_dead,workers_ok=workers_ok,workers_dead=workers_dead))
rc = NAGIOS_WARNING
else:
print(format_str.format(status="CRITICAL",workers=workers_dead,workers_ok=workers_ok,workers_dead=workers_dead))
rc = NAGIOS_CRITICAL
except:
print("UNKOWN - Cannot fetch workers status")
rc = NAGIOS_UNKNOWN
exit(rc)
if __name__ == "__main__":
main()