diff options
Diffstat (limited to 'roles/nagios_server/files/usr/lib64/nagios/plugins/check_asterisk_endpoints')
-rw-r--r-- | roles/nagios_server/files/usr/lib64/nagios/plugins/check_asterisk_endpoints | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/roles/nagios_server/files/usr/lib64/nagios/plugins/check_asterisk_endpoints b/roles/nagios_server/files/usr/lib64/nagios/plugins/check_asterisk_endpoints new file mode 100644 index 0000000..42fee08 --- /dev/null +++ b/roles/nagios_server/files/usr/lib64/nagios/plugins/check_asterisk_endpoints @@ -0,0 +1,62 @@ +#!/usr/libexec/platform-python + +# Nagios check for Asterisk PJSIP endpoints +# +# Copyright (c) 2023 stonewall@sacredheartsc.com +# MIT License https://opensource.org/licenses/MIT + +import requests +import json +import argparse +import sys +from enum import Enum + +class Status(Enum): + OK = 0 + WARN = 1 + CRIT = 2 + UNKNOWN = 3 + +parser = argparse.ArgumentParser() +parser.add_argument('-H', '--host', help='asterisk host', type=str, required=True) +parser.add_argument('-P', '--port', help='asterisk ARI port', type=int, default=8089) +parser.add_argument('-u', '--username', help='asterisk ARI username', type=str, required=True) +parser.add_argument('-p', '--password', help='asterisk ARI password', type=str, required=True) +parser.add_argument('endpoints', nargs='+', help='endpoint name to check', metavar='ENDPOINT') +args = parser.parse_args() + +try: + r = requests.get(f'https://{args.host}:{args.port}/ari/endpoints', auth=(args.username, args.password)) + + if r.status_code == 200: + state = {i['resource']: i['state'] for i in r.json() if i['technology'] == 'PJSIP'} + results = [] + + for endpoint in args.endpoints: + if endpoint in state: + status = Status.OK if state[endpoint] == 'online' else Status.CRIT + message = f'{endpoint} is {state[endpoint]}' + results.append((status, message)) + else: + results.append((Status.UNKNOWN, f'{endpoint} not found')) + + results.sort(key=lambda x:x[0].value, reverse=True) + + if results[0][0] == Status.OK: + print('all endpoints connected') + elif results[0][0] == Status.UNKNOWN: + print('endpoint(s) not found in ARI!') + else: + print('endpoint not connected!') + + for result in results: + print(f'{result[0].name}: {result[1]}') + + sys.exit(results[0][0].value) + else: + print('failed to retrieve data from ARI!') + sys.exit(Status.UNKNOWN.value) + +except Exception as e: + print(str(e)) + sys.exit(Status.UNKNOWN.value) |