49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from json import load
|
|
from sys import exit
|
|
|
|
from requests import get
|
|
|
|
with open('/etc/icinga2/notification_config.json') as f:
|
|
CONFIG = load(f)
|
|
|
|
try:
|
|
r = get(
|
|
'https://api.sipgate.com/v2/balance',
|
|
auth=(CONFIG['sipgate']['user'], CONFIG['sipgate']['password']),
|
|
headers={'Accept': 'application/json'},
|
|
)
|
|
|
|
if r.status_code == 401:
|
|
# Status code 401 means our login data is wrong. Since we're
|
|
# using the same login data in icinga_notification_wrapper, we
|
|
# won't be able to send SMS either. This should *not* result in
|
|
# this check going UNKNOWN.
|
|
print('CRITICAL: Getting the account balance failed with status code 401!')
|
|
exit(2)
|
|
else:
|
|
r.raise_for_status()
|
|
except Exception as e:
|
|
print(repr(e))
|
|
exit(3)
|
|
|
|
# No, we can't combine those two try..except blocks, because a connection
|
|
# error means the check is UNKNOWN, but a parsing error is CRITICAL.
|
|
try:
|
|
json = r.json()
|
|
money = json['amount']/10000
|
|
|
|
if money < 2:
|
|
print('CRITICAL: Only {} {} left in account!'.format(money, json['currency']))
|
|
exit(2)
|
|
elif money < 3:
|
|
print('WARNING: Only {} {} left in account!'.format(money, json['currency']))
|
|
exit(1)
|
|
else:
|
|
print('Account holds {} {}.'.format(money, json['currency']))
|
|
exit(0)
|
|
except Exception as e:
|
|
# API changed, returned malformed JSON or whatever. This is an error.
|
|
print(repr(e))
|
|
exit(2)
|