bundlewrap/bundles/icinga2/files/check_usv_snmp

70 lines
2.1 KiB
Python

#!/usr/bin/env python3
from sys import argv, exit
from easysnmp import Session
try:
hostname = argv[1]
community = argv[2]
except IndexError:
print('Usage: {} <hostname> <snmp_community>'.format(argv[0]))
exit(3)
try:
session = Session(hostname=hostname, community=community, version=2)
items = session.walk('iso.3.6.1.2.1.33')
result = {}
for item in items:
result[item.oid[len('iso.3.6.1.2.1.33')+1:]] = item.value
warn = set()
crit = set()
if int(result['1.2.2.0']):
warn.add('USV is on battery!')
# Estimated runtime in minutes
if int(result['1.2.3.0']) < 15:
crit.add('Remaining runtime is less than 15 minutes! Only {} minutes left.'.format(result['1.2.3.0']))
elif int(result['1.2.3.0']) < 25:
warn.add('Remaining runtime is less than 25 minutes! Only {} minutes left.'.format(result['1.2.3.0']))
# Battery status in percent
if int(result['1.2.4.0']) < 10:
crit.add('Remaining runtime is less than 10%! Only {}% left.'.format(result['1.2.4.0']))
elif int(result['1.2.4.0']) < 25:
warn.add('Remaining runtime is less than 25%! Only {}% left.'.format(result['1.2.4.0']))
# Output load in percent
if int(result['1.4.4.1.5.1']) > 90:
crit.add('Output Power is more than 90% of rated capacity: {} W'.format(result['1.4.4.1.4.1']))
elif int(result['1.4.4.1.5.1']) > 80:
warn.add('Output Power is more than 80% of rated capacity: {} W'.format(result['1.4.4.1.4.1']))
for line in sorted(crit):
print(line)
for line in sorted(warn):
print(line)
if crit:
exit(2)
elif warn:
exit(1)
else:
print('{model} running{from_bat} at {out_pct}% load ({out_w} W), battery at {bat_pct}% ({bat_min} min)'.format(
model=result['1.1.2.0'],
out_pct=result['1.4.4.1.5.1'],
out_w=result['1.4.4.1.4.1'],
bat_pct=result['1.2.4.0'],
bat_min=result['1.2.3.0'],
from_bat=' from battery' if int(result['1.2.2.0']) else '',
))
exit(0)
except Exception as e:
print(repr(e))
exit(3)