aboutsummaryrefslogtreecommitdiffstats
path: root/roles/nagios_server/files/usr/lib64/nagios/plugins/check_asterisk_endpoints
diff options
context:
space:
mode:
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_endpoints62
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)