create baseclass for disk states

This commit is contained in:
2025-02-09 23:37:01 +01:00
parent 0c03905aed
commit a161f98a5d

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
""" Template python check for SNMP checks developed by teccle""" """SNMP based Synology DMS / DMS UC checks"""
"""dependencys: """dependencys:
- pip3 install nagiosplugin - pip3 install nagiosplugin
- pip3 install argparse - pip3 install argparse
@@ -8,7 +8,7 @@
- https://easysnmp.readthedocs.io/en/latest/session_api.html - https://easysnmp.readthedocs.io/en/latest/session_api.html
""" """
__version__ = '0.7.1' __version__ = '0.8.0'
__author__ = 'anima' __author__ = 'anima'
# imports # 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) session = Session(hostname=hostname, version=snmp_version, community=snmp_community)
return session 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. # 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): class SNMPSynologyCPUResource(nagiosplugin.Resource):
def __init__(self, session) -> None: def __init__(self, session) -> None:
@@ -306,7 +350,6 @@ class SNMPSynologyCPUResource(nagiosplugin.Resource):
nagiosplugin.Metric: single metric element (return) nagiosplugin.Metric: single metric element (return)
""" """
baseoid = '.1.3.6.1.4.1.6574.1' baseoid = '.1.3.6.1.4.1.6574.1'
oids = dict()
result = self.session.get(baseoid + '.7.1.0').value result = self.session.get(baseoid + '.7.1.0').value
return nagiosplugin.Metric(name='cpu', value=int(result), uom='%', context='cpu_scalar_context') 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): class SNMPSynologyMemoryResource(nagiosplugin.Resource):
def __init__(self, session) -> None: def __init__(self, session) -> None:
@@ -328,7 +371,6 @@ class SNMPSynologyMemoryResource(nagiosplugin.Resource):
nagiosplugin.Metric: single metric element (return) nagiosplugin.Metric: single metric element (return)
""" """
baseoid = '.1.3.6.1.4.1.6574.1' baseoid = '.1.3.6.1.4.1.6574.1'
oids = dict()
result = self.session.get(baseoid + '.7.2.0').value result = self.session.get(baseoid + '.7.2.0').value
return nagiosplugin.Metric(name='memory', value=int(result), uom='%', context='memory_scalar_context') return nagiosplugin.Metric(name='memory', value=int(result), uom='%', context='memory_scalar_context')
@@ -336,7 +378,6 @@ class SNMPSynologyMemoryResource(nagiosplugin.Resource):
self.session = session self.session = session
# #
# Arguments # Arguments
# #
@@ -364,6 +405,7 @@ def parse_args() -> argparse.Namespace:
'firmware', 'firmware',
'cpu', 'cpu',
'memory', 'memory',
'disk',
], ],
help='check mode to run') help='check mode to run')
@@ -444,6 +486,12 @@ def main():
nagiosplugin.ScalarContext(name='memory_scalar_context', warning=args.warning, critical=args.critical), nagiosplugin.ScalarContext(name='memory_scalar_context', warning=args.warning, critical=args.critical),
nagiosplugin.Summary()) nagiosplugin.Summary())
check.name = "Memory Usage" 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 _: case _:
raise nagiosplugin.CheckError(f'Unknown check mode: {args.check_mode}') raise nagiosplugin.CheckError(f'Unknown check mode: {args.check_mode}')