bundlewrap/bundles/icinga2/files/check_freifunk_node
2023-02-05 17:30:58 +01:00

80 lines
1.7 KiB
Python

#!/usr/bin/env python3
from sys import argv, exit
from requests import get
meshviewer_url = argv[1]
node_id = argv[2]
node = None
try:
for n in get(meshviewer_url).json()['nodes']:
if node_id == n['node_id']:
node = n
break
if not node:
print('CRITICAL: Node {} not found in {}'.format(
node_id,
meshviewer_url,
))
exit(2)
if not node['is_online']:
print('CRITICAL: Node "{}" is offline!'.format(
node['hostname'],
))
exit(2)
crit = set()
warn = set()
if node['loadavg'] > 1:
warn.add('has high load: {}'.format(
node['loadavg'],
))
if node['rootfs_usage'] > 0.9:
crit.add('rootfs usage is {}%'.format(
int(node['rootfs_usage']*100)
))
elif node['rootfs_usage'] > 0.8:
warn.add('rootfs usage is {}%'.format(
int(node['rootfs_usage']*100)
))
if node['memory_usage'] > 0.9:
crit.add('ram usage is {}%'.format(
int(node['memory_usage']*100)
))
elif node['memory_usage'] > 0.8:
warn.add('ram usage is {}%'.format(
int(node['memory_usage']*100)
))
for line in sorted(crit):
print('CRITICAL: Node "{}" {}'.format(
node['hostname'],
line,
))
for line in sorted(warn):
print('WARNING: Node "{}" {}'.format(
node['hostname'],
line,
))
if crit:
exit(2)
elif warn:
exit(1)
else:
print('Node "{}" reports no errors'.format(
node['hostname'],
))
exit(0)
except Exception as e:
print(repr(e))
exit(3)