From: Arkadiusz Miƛkiewicz Date: Thu, 23 Mar 2023 08:59:44 +0000 (+0100) Subject: Initial X-Git-Url: http://git.pld-linux.org/gitweb.cgi?a=commitdiff_plain;h=ebeb9c504d5f7e78f4c3487c48336f9a38037c47;p=packages%2Fnagios-plugin-check_sip_peer.git Initial --- ebeb9c504d5f7e78f4c3487c48336f9a38037c47 diff --git a/check_sip_peer.py b/check_sip_peer.py new file mode 100755 index 0000000..d2ef1e6 --- /dev/null +++ b/check_sip_peer.py @@ -0,0 +1,66 @@ +#!/usr/bin/python3 +# GPL v3+ arekm@pld + +import argparse +import re +import sarge +import sys + +NAGIOS_OK = 0 +NAGIOS_WARNING = 1 +NAGIOS_CRITICAL = 2 +NAGIOS_UNKNOWN = 3 + +STATUS_MAP = {NAGIOS_CRITICAL: 'CRITICAL', NAGIOS_WARNING: 'WARNING', NAGIOS_OK: 'OK', NAGIOS_UNKNOWN: 'UNKNOWN'} + +nagios_status = NAGIOS_OK + +try: + parser = argparse.ArgumentParser(description='Check SIP peer status in Asterisk') + parser.add_argument('--peer', action='store', dest='peer', help='SIP peer name', required=True) + parser.add_argument('--socket', action='store', dest='socket', help='Asterisk socket path', default=" /var/run/asterisk/asterisk.ctl") + args = parser.parse_args() +except Exception as e: + nagios_status = NAGIOS_UNKNOWN + print("{status}: {msg}".format(status=STATUS_MAP[nagios_status], msg=e)) + sys.exit(nagios_status) + +try: + cmd = '/usr/sbin/asterisk -r -s {socket} -x "sip show peer {peer}"'.format(socket=args.socket, peer=args.peer) + c = sarge.capture_both(cmd) + if c.returncode != 0: + nagios_status = NAGIOS_CRITICAL + print("{status}: peer={peer}, {msg}".format(status=STATUS_MAP[nagios_status], peer=args.peer, + msg=c.stdout.text.replace('\n', '; ') + "; " + c.stderr.text.replace('\n', '; '))) + sys.exit(nagios_status) + + host = re.search(r"Addr->IP\s+: (.*)", c.stdout.text) + if host: + host = host.group(1) + else: + host = "(unknown host)" + status = re.search(r"Status\s+: (.*)", c.stdout.text) + if not status: + nagios_status = NAGIOS_CRITICAL + print("{status}: peer={peer}, {msg}".format(status=STATUS_MAP[nagios_status], peer=args.peer, + msg=c.stdout.text.replace('\n', '; ') + "; " + c.stderr.text.replace('\n', '; '))) + sys.exit(nagios_status) + + sip_status = status.group(1) + if sip_status.find("OK") >= 0: + nagios_status = NAGIOS_OK + elif sip_status.find("LAGGED") >= 0: + nagios_status = NAGIOS_WARNING + elif sip_status.find("UNREACHABLE") >= 0: + nagios_status = NAGIOS_CRITICAL + else: + nagios_status = NAGIOS_UNKNOWN + print("{status}: peer={peer}, sip_status={sip_status}, host={host}".format(status=STATUS_MAP[nagios_status], + peer=args.peer, sip_status=sip_status, host=host)) + sys.exit(nagios_status) + +except Exception as e: + nagios_status = NAGIOS_UNKNOWN + print("{status}: peer={peer}, {msg}".format(status=STATUS_MAP[nagios_status], peer=args.peer, msg=e)) + sys.exit(nagios_status) + diff --git a/nagios-plugin-check_sip_peer.spec b/nagios-plugin-check_sip_peer.spec new file mode 100644 index 0000000..af0de82 --- /dev/null +++ b/nagios-plugin-check_sip_peer.spec @@ -0,0 +1,41 @@ +Summary: Nagios plugin to check SIP peer status +Name: nagios-plugin-check_sip_peer +Version: 0.1 +Release: 1 +License: GPL v3+ +Group: Networking +Source0: check_sip_peer.py +# Source0-md5: 6bccc1b1fcd481df7065c6285aadbe25 +BuildRequires: rpm-pythonprov +BuildRequires: rpmbuild(macros) >= 1.654 +Requires: nagios-core +Requires: nagios-plugins-libs +Requires: python3-modules +Requires: python3-sarge +BuildArch: noarch +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%define _plugindir %{_prefix}/lib/nagios/plugins +%define _sysconfdir /etc/nagios/plugins + +%define _noautoreq_perl utils + +%description +This plugin will test a SIP peer status. + +%prep +%setup -q -c -T + +%install +rm -rf $RPM_BUILD_ROOT + +install -d $RPM_BUILD_ROOT{%{_sysconfdir},%{_plugindir}} + +cp -p %{SOURCE0} $RPM_BUILD_ROOT%{_plugindir}/check_sip_peer + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(644,root,root,755) +%attr(755,root,root) %{_plugindir}/check_sip_peer