add raid space usage
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
- https://easysnmp.readthedocs.io/en/latest/session_api.html
|
||||
"""
|
||||
|
||||
__version__ = '0.11.0'
|
||||
__version__ = '0.12.0'
|
||||
__author__ = 'anima'
|
||||
|
||||
# imports
|
||||
@@ -126,6 +126,42 @@ class SNMPSynologyDisk():
|
||||
return disks
|
||||
|
||||
|
||||
#
|
||||
# Synology [DSM & DSM UC] Checks raids (baseclass)
|
||||
#
|
||||
class SNMPSynologyRaid():
|
||||
def __init__(self, session):
|
||||
self.session = session
|
||||
|
||||
def get_raids(self):
|
||||
raids = list()
|
||||
baseoid = '.1.3.6.1.4.1.6574.3'
|
||||
oids = dict()
|
||||
oids['index'] = '1'
|
||||
oids['name'] = '2'
|
||||
oids['status'] = '3'
|
||||
oids['free'] = '4'
|
||||
oids['total'] = '5'
|
||||
oids['hotspare'] = '6'
|
||||
|
||||
raid_ids = list()
|
||||
results = self.session.walk(baseoid)
|
||||
for result in results:
|
||||
if '6574.3.1.1.1.' in result.oid:
|
||||
raid_ids.append(result.value)
|
||||
|
||||
for raid in raid_ids:
|
||||
tmp_raid = dict()
|
||||
for result in results:
|
||||
for name, oid in oids.items():
|
||||
if '6574.3.1.1.' + oid + '.' + raid in result.oid:
|
||||
tmp_raid[name] = result.value
|
||||
break
|
||||
raids.append(tmp_raid)
|
||||
|
||||
return raids
|
||||
|
||||
|
||||
#
|
||||
# Synology General Summary
|
||||
#
|
||||
@@ -516,6 +552,32 @@ class SNMPSynologyDiskHealthResult(nagiosplugin.Result):
|
||||
return f'Health of {self.metric.name} is in status {status}!'
|
||||
|
||||
|
||||
#
|
||||
# Synology [DSM & DSM UC] Checks RAID status
|
||||
#
|
||||
class SNMPSynologyRaidSpaceResource(nagiosplugin.Resource, SNMPSynologyRaid):
|
||||
def __init__(self, session) -> None:
|
||||
self.session = session
|
||||
|
||||
def probe(self) -> list:
|
||||
"""check memory usage in %
|
||||
|
||||
Returns:
|
||||
Generator[nagisplugin.Metric]: multiple metric elements (yield)
|
||||
"""
|
||||
raids = self.get_raids()
|
||||
for raid in raids:
|
||||
# skip storage pools because they already full of there volumes
|
||||
# works only with default naming maybe as argument ?
|
||||
if raid['name'].startswith('Storage Pool'):
|
||||
continue
|
||||
used_space_in_percent = 100 - int(int(raid['free']) / int(raid['total']) * 100)
|
||||
yield nagiosplugin.Metric(name='raid_' + raid["name"].lower().replace(' ', '_'), value=used_space_in_percent, uom='%', context='raid_space_scalar_context')
|
||||
|
||||
def __init__(self, session) -> None:
|
||||
self.session = session
|
||||
|
||||
|
||||
#
|
||||
# Arguments
|
||||
#
|
||||
@@ -548,6 +610,7 @@ def parse_args() -> argparse.Namespace:
|
||||
'disk_ident',
|
||||
'disk_life',
|
||||
'disk_sectors',
|
||||
'raid',
|
||||
],
|
||||
help='check mode to run')
|
||||
|
||||
@@ -654,6 +717,11 @@ def main():
|
||||
nagiosplugin.ScalarContext(name='disk_sectors_scalar_context', warning=args.warning, critical=args.critical),
|
||||
nagiosplugin.Summary())
|
||||
check.name = "Disk BadSectors"
|
||||
case 'raid':
|
||||
check = nagiosplugin.Check(SNMPSynologyRaidSpaceResource(session=session),
|
||||
nagiosplugin.ScalarContext(name='raid_space_scalar_context', warning=args.warning, critical=args.critical),
|
||||
nagiosplugin.Summary())
|
||||
check.name = "Raid space usage"
|
||||
case _:
|
||||
raise nagiosplugin.CheckError(f'Unknown check mode: {args.check_mode}')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user