#!/usr/bin/env python3 from sys import exit from requests import get SIPGATE_USER = '${node.metadata['icinga2']['sipgate_user']}' SIPGATE_PASS = '${node.metadata['icinga2']['sipgate_pass']}' try: r = get( 'https://api.sipgate.com/v2/balance', auth=(SIPGATE_USER, SIPGATE_PASS), 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)