commit 3fa5fece07b0491d13510f9e489212a5b0d2c11b
Author: Arkadiusz Miƛkiewicz <ar...@maven.pl>
Date:   Tue Jul 11 11:35:19 2023 +0200

    Ver 2.0; python based variant

 check_iface.py                 | 87 ++++++++++++++++++++++++++++++++++++++++++
 nagios-plugin-check_iface.spec | 11 +++---
 2 files changed, 93 insertions(+), 5 deletions(-)
---
diff --git a/nagios-plugin-check_iface.spec b/nagios-plugin-check_iface.spec
index e6294e7..c13184d 100644
--- a/nagios-plugin-check_iface.spec
+++ b/nagios-plugin-check_iface.spec
@@ -1,15 +1,16 @@
 %define                plugin  check_iface
 Summary:       Nagios/Icinga plugin for checking network interface speed
 Name:          nagios-plugin-%{plugin}
-Version:       1.0
-Release:       3
-License:       GPL
+Version:       2.0
+Release:       1
+License:       GPL v3
 Group:         Networking
-Source0:       
https://raw.githubusercontent.com/wifibox/linux-admin-tools/master/nagios/plugins/check_net_iface
+Source0:       check_iface.py
 # Source0-md5: 30366d25cf1e3b035cf49f2d5d556cbe
 Source1:       check_iface.cfg
-URL:           
https://github.com/wifibox/linux-admin-tools/blob/master/nagios/plugins/check_net_iface
 Requires:      nagios-common
+Requires:       python3-netifaces
+Requires:       python3-psutil
 BuildArch:     noarch
 BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
diff --git a/check_iface.py b/check_iface.py
new file mode 100644
index 0000000..14dc5a2
--- /dev/null
+++ b/check_iface.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python3
+# GPL v3+
+
+import argparse
+import netifaces
+import psutil
+import sys
+
+NAGIOS_OK = 0
+NAGIOS_WARNING = 1
+NAGIOS_CRITICAL = 2
+NAGIOS_UNKNOWN = 3
+
+nagios_states = {
+        NAGIOS_OK: "OK",
+        NAGIOS_WARNING: "WARNING",
+        NAGIOS_CRITICAL: "CRITICAL",
+        NAGIOS_UNKNOWN: "UNKNOWN"
+        }
+
+nagios_state = NAGIOS_UNKNOWN
+
+def check_duplex(value):
+    allowed_duplex = [ "full", "half" ]
+    if value not in allowed_duplex:
+        raise argparse.ArgumentTypeError("must be one of: %s" % ", 
".join(allowed_duplex))
+
+    if value == "full":
+        return psutil._common.NicDuplex.NIC_DUPLEX_FULL
+    elif value == "half":
+        return psutil._common.NicDuplex.NIC_DUPLEX_HALF
+
+def get_default_iface():
+    try:
+        return netifaces.gateways()['default'][netifaces.AF_INET][1]
+    except IndexError as e:
+        return "eth0"
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--speed', '-s', action="store", type=int, default=1000, 
help='expected minimal interface speed')
+parser.add_argument('--duplex', '-d', action="store", type=check_duplex, 
default="full", help='expected duplex')
+parser.add_argument('--mtu', '-m', action="store", type=int, default=1500, 
help='expected minimal MTU')
+parser.add_argument('--interface', '-i', action="store", type=str, 
help='interface name')
+parser.add_argument("--verbose", help="Verbose mode.", action="store_true")
+
+args = parser.parse_args()
+
+try:
+
+    if not args.interface:
+        args.interface = get_default_iface()
+
+    ifs = psutil.net_if_stats()
+    if args.interface not in ifs:
+        nagios_state = NAGIOS_CRITICAL
+        print("Network interface `{iface}' not 
found".format(iface=args.interface))
+        sys.exit(nagios_state)
+
+    msgs = []
+
+    iface = ifs[args.interface]
+
+    nagios_state = NAGIOS_OK
+
+    if iface.duplex != psutil._common.NicDuplex.NIC_DUPLEX_UNKNOWN and 
iface.duplex < args.duplex:
+        nagios_state = max(nagios_state, NAGIOS_CRITICAL)
+        msgs.append("duplex={duplex} (CRITICAL, expected: 
{duplex_expected})".format(duplex=str(iface.duplex), 
duplex_expected=args.duplex))
+    else:
+        msgs.append("duplex={duplex} (OK)".format(duplex=str(iface.duplex)))
+
+    if iface.speed != 0 and iface.speed < args.speed:
+        nagios_state = max(nagios_state, NAGIOS_CRITICAL)
+        msgs.append("speed={speed} (CRITICAL, expected min: 
{speed_expected})".format(speed=iface.speed, speed_expected=args.speed))
+    else:
+        msgs.append("speed={speed} (OK)".format(speed=iface.speed))
+
+    if iface.mtu != 0 and iface.mtu != args.mtu:
+        nagios_state = max(nagios_state, NAGIOS_CRITICAL)
+        msgs.append("mtu={mtu} (CRITICAL, expected min: 
{mtu_expected})".format(mtu=iface.mtu, mtu_expected=args.mtu))
+    else:
+        msgs.append("mtu={mtu} (OK)".format(mtu=iface.mtu))
+
+    print("{state} - interface `{iface}': 
{msg}".format(state=nagios_states[nagios_state], iface=args.interface, msg=", 
".join(msgs)))
+except Exception as e:
+    print("UNKNOWN: %{e}".format(e=e))
+    nagios_state = NAGIOS_UNKNOWN
+sys.exit(nagios_state)
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/nagios-plugin-check_iface.git/commitdiff/3fa5fece07b0491d13510f9e489212a5b0d2c11b

_______________________________________________
pld-cvs-commit mailing list
pld-cvs-commit@lists.pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to