diff --git a/checks/check_snmp_synology.py b/checks/check_snmp_synology.py index fba315a..5d69603 100755 --- a/checks/check_snmp_synology.py +++ b/checks/check_snmp_synology.py @@ -292,6 +292,26 @@ class SNMPSynologyFirmwareResult(nagiosplugin.Result): return f'Firmware of {self.metric.value["model"]} (SN: {self.metric.value["sn"]}; Version: {self.metric.value["version"]}) is in status {status}!' +# +# Synology [DSM & DSM UC] Utilization % is the sum of user and system CPU usage +# +class SNMPSynologyCPUResource(nagiosplugin.Resource): + def __init__(self, session) -> None: + self.session = session + + def probe(self) -> list: + """check system temperature in °C + + Returns: + 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') + + def __init__(self, session) -> None: + self.session = session @@ -320,6 +340,7 @@ def parse_args() -> argparse.Namespace: 'powersupply', 'fans', 'firmware', + 'cpu', ], help='check mode to run') @@ -390,6 +411,11 @@ def main(): SNMPSynologyFirmwareContext(name='firmware_context'), nagiosplugin.Summary()) check.name = "Firmware" + case 'cpu': + check = nagiosplugin.Check(SNMPSynologyCPUResource(session=session), + nagiosplugin.ScalarContext(name='cpu_scalar_context', warning=args.warning, critical=args.critical), + nagiosplugin.Summary()) + check.name = "CPU Usage" case _: raise nagiosplugin.CheckError(f'Unknown check mode: {args.check_mode}')