diff --git a/checks/check_snmp_synology.py b/checks/check_snmp_synology.py index 7112426..af89977 100755 --- a/checks/check_snmp_synology.py +++ b/checks/check_snmp_synology.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -""" Template python check for SNMP checks developed by teccle""" +"""SNMP based Synology DMS / DMS UC checks""" """dependencys: - pip3 install nagiosplugin - pip3 install argparse @@ -8,7 +8,7 @@ - https://easysnmp.readthedocs.io/en/latest/session_api.html """ -__version__ = '0.7.1' +__version__ = '0.8.0' __author__ = 'anima' # imports @@ -82,6 +82,50 @@ def init_snmp_session(hostname: str = 'localhost', snmp_version: str | int = '2' session = Session(hostname=hostname, version=snmp_version, community=snmp_community) return session + +# +# Synology [DSM & DSM UC] Checks disk staus (baseclass) +# +class SNMPSynologyDisk(): + def __init__(self, session): + self.session = session + + def get_disks(self): + disks = list() + baseoid = '.1.3.6.1.4.1.6574.2.1.1' + oids = dict() + oids['index'] = '1' + oids['id'] = '2' + oids['model'] = '3' + oids['type'] = '4' + oids['status'] = '5' + oids['temp'] = '6' + oids['role'] = '7' + oids['retry'] = '8' + oids['badSectors'] = '9' + oids['identFail'] = '10' + oids['remainLife'] = '11' + oids['name'] = '12' + oids['health'] = '13' + + disk_ids = list() + results = self.session.walk(baseoid) + for result in results: + if '6574.2.1.1.1.' in result.oid: + disk_ids.append(result.value) + + for disk in disk_ids: + tmp_disk = dict() + for result in results: + for name, oid in oids.items(): + if '6574.2.1.1.' + oid + '.' + disk in result.oid: + tmp_disk[name] = result.value + break + disks.append(tmp_disk) + + return disks + + # # Synology [DSM & DSM UC] System partition status. # @@ -293,7 +337,7 @@ class SNMPSynologyFirmwareResult(nagiosplugin.Result): # -# Synology [DSM & DSM UC] Utilization % is the sum of user and system CPU usage +# Synology [DSM] Utilization % is the sum of user and system CPU usage # class SNMPSynologyCPUResource(nagiosplugin.Resource): def __init__(self, session) -> None: @@ -306,7 +350,6 @@ class SNMPSynologyCPUResource(nagiosplugin.Resource): nagiosplugin.Metric: single metric element (return) """ baseoid = '.1.3.6.1.4.1.6574.1' - oids = dict() result = self.session.get(baseoid + '.7.1.0').value return nagiosplugin.Metric(name='cpu', value=int(result), uom='%', context='cpu_scalar_context') @@ -315,7 +358,7 @@ class SNMPSynologyCPUResource(nagiosplugin.Resource): # -# Synology [DSM & DSM UC] Utilization % is the sum of user and system CPU usage +# Synology [DSM] Utilization % is the sum of user and system CPU usage # class SNMPSynologyMemoryResource(nagiosplugin.Resource): def __init__(self, session) -> None: @@ -328,7 +371,6 @@ class SNMPSynologyMemoryResource(nagiosplugin.Resource): nagiosplugin.Metric: single metric element (return) """ baseoid = '.1.3.6.1.4.1.6574.1' - oids = dict() result = self.session.get(baseoid + '.7.2.0').value return nagiosplugin.Metric(name='memory', value=int(result), uom='%', context='memory_scalar_context') @@ -336,7 +378,6 @@ class SNMPSynologyMemoryResource(nagiosplugin.Resource): self.session = session - # # Arguments # @@ -364,6 +405,7 @@ def parse_args() -> argparse.Namespace: 'firmware', 'cpu', 'memory', + 'disk', ], help='check mode to run') @@ -444,6 +486,12 @@ def main(): nagiosplugin.ScalarContext(name='memory_scalar_context', warning=args.warning, critical=args.critical), nagiosplugin.Summary()) check.name = "Memory Usage" + case 'disk': + # check = nagiosplugin.Check(SNMPSynologyDiskResource(session=session), + # nagiosplugin.ScalarContext(name='memory_scalar_context', warning=args.warning, critical=args.critical), + # nagiosplugin.Summary()) + # check.name = "Memory Usage" + pass case _: raise nagiosplugin.CheckError(f'Unknown check mode: {args.check_mode}')