add raid status check
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
- https://easysnmp.readthedocs.io/en/latest/session_api.html
|
||||
"""
|
||||
|
||||
__version__ = '0.12.0'
|
||||
__version__ = '0.13.0'
|
||||
__author__ = 'anima'
|
||||
|
||||
# imports
|
||||
@@ -578,6 +578,63 @@ class SNMPSynologyRaidSpaceResource(nagiosplugin.Resource, SNMPSynologyRaid):
|
||||
self.session = session
|
||||
|
||||
|
||||
class SNMPSynologyRaidStatusResource(nagiosplugin.Resource, SNMPSynologyRaid):
|
||||
def __init__(self, session) -> None:
|
||||
self.session = session
|
||||
|
||||
def probe(self) -> list:
|
||||
"""check staus and health of all raids
|
||||
|
||||
Returns:
|
||||
Generator[nagisplugin.Metric]: multiple metric elements (yield)
|
||||
"""
|
||||
raids = self.get_raids()
|
||||
for raid in raids:
|
||||
yield nagiosplugin.Metric(name=raid['name'], value=raid, context='raid_status_context')
|
||||
|
||||
|
||||
|
||||
class SNMPSynologyRaidStatusContext(nagiosplugin.Context):
|
||||
def __init__(self, name):
|
||||
super().__init__(name, fmt_metric='{name} is', result_cls=SNMPSynologyRaidStatusResult)
|
||||
|
||||
def evaluate(self, metric, resource):
|
||||
if metric.value['status'] in ['12', '18']:
|
||||
return self.result_cls(nagiosplugin.Critical, "critical", metric)
|
||||
elif metric.value['status'] in range(2,21):
|
||||
return self.result_cls(nagiosplugin.Warn, "warning", metric)
|
||||
elif metric.value['status'] == '1':
|
||||
return self.result_cls(nagiosplugin.Ok, "ok", metric)
|
||||
return self.result_cls(nagiosplugin.Unknown, "unknown", metric)
|
||||
|
||||
|
||||
class SNMPSynologyRaidStatusResult(nagiosplugin.Result):
|
||||
def __str__(self):
|
||||
if self.metric.value['status'] == '1': status = 'Normal'
|
||||
elif self.metric.value['status'] == '2': status = 'Repairing'
|
||||
elif self.metric.value['status'] == '3': status = 'Migrating'
|
||||
elif self.metric.value['status'] == '4': status = 'Expanding'
|
||||
elif self.metric.value['status'] == '5': status = 'Deleting'
|
||||
elif self.metric.value['status'] == '6': status = 'Creating'
|
||||
elif self.metric.value['status'] == '7': status = 'RaidSyncing'
|
||||
elif self.metric.value['status'] == '8': status = 'RaidParityChecking'
|
||||
elif self.metric.value['status'] == '9': status = 'RaidAssembling'
|
||||
elif self.metric.value['status'] == '10': status = 'Canceling'
|
||||
elif self.metric.value['status'] == '11': status = 'Degrade'
|
||||
elif self.metric.value['status'] == '12': status = 'Crashed'
|
||||
elif self.metric.value['status'] == '13': status = 'DataScrubbing'
|
||||
elif self.metric.value['status'] == '14': status = 'RaidDeploying'
|
||||
elif self.metric.value['status'] == '15': status = 'RaidUnDeploying'
|
||||
elif self.metric.value['status'] == '16': status = 'RaidMountCache'
|
||||
elif self.metric.value['status'] == '17': status = 'RaidUnmountCache'
|
||||
elif self.metric.value['status'] == '18': status = 'RaidExpandingUnnishedSHR'
|
||||
elif self.metric.value['status'] == '19': status = 'RaidConvertSHRToPool'
|
||||
elif self.metric.value['status'] == '20': status = 'RaidMigrateSHR1ToSHR2'
|
||||
elif self.metric.value['status'] == '21': status = 'RaidUnknownStatus'
|
||||
else: status = 'unknown'
|
||||
return f'{self.metric.name} is in status {status}!'
|
||||
|
||||
|
||||
#
|
||||
# Arguments
|
||||
#
|
||||
@@ -611,6 +668,7 @@ def parse_args() -> argparse.Namespace:
|
||||
'disk_life',
|
||||
'disk_sectors',
|
||||
'raid',
|
||||
'raid_space',
|
||||
],
|
||||
help='check mode to run')
|
||||
|
||||
@@ -718,6 +776,11 @@ def main():
|
||||
nagiosplugin.Summary())
|
||||
check.name = "Disk BadSectors"
|
||||
case 'raid':
|
||||
check = nagiosplugin.Check(SNMPSynologyRaidStatusResource(session=session),
|
||||
SNMPSynologyRaidStatusContext(name='raid_status_context'),
|
||||
SNMPSynologySummary())
|
||||
check.name = "Raid status"
|
||||
case 'raid_space':
|
||||
check = nagiosplugin.Check(SNMPSynologyRaidSpaceResource(session=session),
|
||||
nagiosplugin.ScalarContext(name='raid_space_scalar_context', warning=args.warning, critical=args.critical),
|
||||
nagiosplugin.Summary())
|
||||
|
||||
Reference in New Issue
Block a user