From 4e65fe326c971db962435aac80f25f39552387ce Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Sun, 23 Apr 2023 13:37:56 +0200 Subject: [PATCH] update project --- CHANGELOG | 3 + agent_based/checkpoint_raid.py | 153 ++++++++++++++++----------------- checkpoint_raid.mkp | Bin 5222 -> 4295 bytes gui/wato/checkpoint_raid.py | 51 +++++++++++ packages/checkpoint_raid | 10 +-- 5 files changed, 133 insertions(+), 84 deletions(-) create mode 100644 gui/wato/checkpoint_raid.py diff --git a/CHANGELOG b/CHANGELOG index 248ffb5..d21df15 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,3 +9,6 @@ 2021-04-29: rename from checkpoint_soft_raid in to checkpoint_raid 2021-08-10: rewritten for CMK 2.0 2022-11-30: WATO: fixed CheckParameterRulespecWithoutItem (from CheckParameterRulespecWithItem) +2023-04-23: refactoring + moved wato file to ~/local/lib/check_mk/gui/plugins/wato + moved rule set from networking to hardware diff --git a/agent_based/checkpoint_raid.py b/agent_based/checkpoint_raid.py index 3208552..6024403 100644 --- a/agent_based/checkpoint_raid.py +++ b/agent_based/checkpoint_raid.py @@ -18,6 +18,7 @@ # but only 6 Disks are in the default hardware # 2021-04-29: rename from checkpoint_soft_raid in to checkpoint_raid # 2021-08-10: rewritten for CMK 2.0 +# 2023-04-23: refactoring # # sample snmpwalk (one volume / two disks) # @@ -57,21 +58,19 @@ # # sample info # -# [[[u'1', u'0', u'2', u'2', u'1952448512', u'0', u'1', u'931']], -# [[u'1', u'0', u'0', u'0', u'ATA ', u'ST1000NM0033-9ZM', u'SN04', u'1953525168', u'0', u'0', u'100', u'931'], -# [u'2', u'0', u'1', u'1', u'ATA ', u'ST1000NM0033-9ZM', u'SN04', u'1953525168', u'0', u'0', u'100', u'931']]] +# [[['1', '0', '2', '2', '1952448512', '0', '1', '931']], +# [['1', '0', '0', '0', 'ATA ', 'ST1000NM0033-9ZM', 'SN04', '1953525168', '0', '0', '100', '931'], +# ['2', '0', '1', '1', 'ATA ', 'ST1000NM0033-9ZM', 'SN04', '1953525168', '0', '0', '100', '931']]] # # from dataclasses import dataclass from typing import List, Dict - from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( DiscoveryResult, CheckResult, StringTable, ) - from cmk.base.plugins.agent_based.agent_based_api.v1 import ( register, Service, @@ -87,28 +86,28 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import ( @dataclass class RaidDisk: - diskindex: int - diskvolumeid: str - diskid: int - diskvendor: str - diskproductid: str - diskrevision: str - diskmaxlba: int - diskstate: int - diskflags: str - disksyncstate: int - disksize: int + index: int + volume_id: str + disk_id: int + vendor: str + product_id: str + revision: str + max_lba: int + state: int + flags: str + sync_state: int + size: int @dataclass class RaidVolume: - volumeindex: int - volumetype: str - numofdisksonraid: int - volumemaxlba: int - volumestate: int - volumeflags: str - volumesize: int + index: int + type: str + num_of_disks_on_raid: int + max_lba: int + state: int + flags: str + size: int disks: List[RaidDisk] @@ -201,41 +200,40 @@ def parse_checkpoint_raid(string_table: List[StringTable]) -> Dict[str, RaidVolu disks = [] for disk in raw_disks: - diskindex, diskvolumeid, diskid, disknumber, diskvendor, diskproductid, diskrevision, diskmaxlba, diskstate, \ - diskflags, disksyncstate, disksize = disk + index, volume_id, disk_id, number, vendor, product_id, revision, max_lba, state, flags, sync_state, size = disk - if diskindex.isdigit(): + if index.isdigit(): disks.append(RaidDisk( - diskindex=int(diskindex), - diskvolumeid=diskvolumeid, - diskid=int(disknumber), - diskvendor=diskvendor, - diskproductid=diskproductid, - diskrevision=diskrevision, - diskmaxlba=int(diskmaxlba), - diskstate=int(diskstate), - diskflags=_get_flags(diskflags, _raid_disk_flags), - disksyncstate=int(disksyncstate), - disksize=int(disksize) + index=int(index), + volume_id=volume_id.strip(), + disk_id=int(number), + vendor=vendor.strip(), + product_id=product_id.strip(), + revision=revision.strip(), + max_lba=int(max_lba), + state=int(state), + flags=_get_flags(flags, _raid_disk_flags), + sync_state=int(sync_state), + size=int(size) )) for volume in raw_volumes: - volumeindex, volumeid, volumetype, numofdisksonraid, volumemaxlba, volumestate, volumeflags, volumesize = volume - - if volumeindex.isdigit(): - volumes[volumeid] = RaidVolume( - volumeindex=int(volumeindex), - volumetype=_raid_volume_type.get(int(volumetype), f'unknown ({volumetype}'), - numofdisksonraid=int(numofdisksonraid), - volumemaxlba=int(volumemaxlba), - volumestate=int(volumestate), - volumeflags=_get_flags(volumeflags, _raid_volume_flags), - volumesize=int(volumesize), + index, volume_id, _type, num_of_disks_on_raid, max_lba, state, flags, size = volume + + if index.isdigit(): + volumes[volume_id] = RaidVolume( + index=int(index), + type=_raid_volume_type.get(int(_type), f'unknown ({_type}'), + num_of_disks_on_raid=int(num_of_disks_on_raid), + max_lba=int(max_lba), + state=int(state), + flags=_get_flags(flags, _raid_volume_flags), + size=int(size), disks=[] ) for disk in disks: - if disk.diskvolumeid == volumeid: - volumes[volumeid].disks.append(disk) + if disk.volume_id == volume_id: + volumes[volume_id].disks.append(disk) return volumes @@ -254,52 +252,51 @@ def check_checkpoint_raid(item, params, section: Dict[str, RaidVolume]) -> Check yield Result(state=State.CRIT, summary='Volume not found in SNMP Data') return - # volume infos + # volume info details = '' - details += f'Volume Type: {volume.volumetype}, ' - details += f'# of Disks: {volume.numofdisksonraid}, ' - details += f'Size: {volume.volumesize}GB, ' - details += f'max LBA: {volume.volumemaxlba}, ' - details += f'Flags: {volume.volumeflags}' + details += f'Volume Type: {volume.type}, ' + details += f'# of Disks: {volume.num_of_disks_on_raid}, ' + details += f'Size: {volume.size}GB, ' + details += f'max LBA: {volume.max_lba}, ' + details += f'Flags: {volume.flags}' summary = '' - summary += f'{volume.volumetype}, ' - summary += f'{volume.numofdisksonraid} disks, ' - summary += f'{volume.volumesize}GB, ' - summary += f'State: {_raid_volume_state.get(volume.volumestate)}' + summary += f'{volume.type}, ' + summary += f'{volume.num_of_disks_on_raid} disks, ' + summary += f'{volume.size}GB, ' + summary += f'State: {_raid_volume_state.get(volume.state)}' - if volume.volumestate != 0: + if volume.state != 0: yield Result(state=State.CRIT, summary=summary, details=details) else: yield Result(state=State.OK, summary=summary, details=details) - # disk infos + # disk info disks = volume.disks disks_in_array = 0 disks_online = 0 disks_ignored = 0 for disk in disks: - diskid = disk.diskid - if not str(diskid) in ignore_disks: + if str(disk.disk_id) not in ignore_disks: disks_in_array += 1 - syncstate = disk.disksyncstate + syncstate = disk.sync_state details = '' - details += f'Disk ID: {diskid}, ' - details += f'State: {_raid_disk_state.get(disk.diskstate)}, ' + details += f'Disk ID: {disk.disk_id}, ' + details += f'State: {_raid_disk_state.get(disk.state)}, ' details += f'Sync: {syncstate}%, ' - details += f'Size: {disk.disksize}GB, ' - if disk.diskmaxlba > 0: - details += f'max LBA: {disk.diskmaxlba}, ' - if disk.diskvendor != 'UNKNOWN': - details += f'Vendor: {disk.diskvendor}, ' - details += f'Product ID: {disk.diskproductid}, ' - if disk.diskrevision != '': - details += f'Revision: {disk.diskrevision}, ' - details += f'Flags: {disk.diskflags}' - if disk.diskstate != 0: + details += f'Size: {disk.size}GB, ' + if disk.max_lba > 0: + details += f'max LBA: {disk.max_lba}, ' + if disk.vendor != 'UNKNOWN': + details += f'Vendor: {disk.vendor}, ' + details += f'Product ID: {disk.product_id}, ' + if disk.revision != '': + details += f'Revision: {disk.revision}, ' + details += f'Flags: {disk.flags}' + if disk.state != 0: yield Result(state=State.CRIT, - notice=f'Disk ID: {diskid}, state: {_raid_disk_state.get(disk.diskstate)}', + notice=f'Disk ID: {disk.disk_id}, state: {_raid_disk_state.get(disk.state)}', details=details) else: yield Result(state=State.OK, notice=details, diff --git a/checkpoint_raid.mkp b/checkpoint_raid.mkp index 2f91b54a32afecadceafd6a0df09d1425942ebdd..ccd9616e9527e761c260ba99eebd4a1e0d57923b 100644 GIT binary patch literal 4295 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 I*;rWr1Fp+$`~Uy| literal 5222 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 diff --git a/gui/wato/checkpoint_raid.py b/gui/wato/checkpoint_raid.py new file mode 100644 index 0000000..3c57522 --- /dev/null +++ b/gui/wato/checkpoint_raid.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2020-11-10 +# +# Check_MK checkpoint_raid WATO plugin +# +# 2023-04-23: moved wato file to ~/local/lib/check_mk/gui/plugins/wato +# moved rule set from networking to hardware + +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + TextAscii, + TextUnicode, +) +from cmk.gui.plugins.wato.utils import ( + CheckParameterRulespecWithItem, + rulespec_registry, + RulespecGroupCheckParametersHardware, +) + + +def _parameter_valuespec_checkpoint_raid(): + return Dictionary( + help=_(''), + elements=[ + ('ignore_disks', + TextUnicode( + title=_('list of comma separated disk IDs to ignore'), + help=_('This is useful for RAID Arrays with missing disks, like on the Smart-1 5150. There the ' + 'array is configured for 12 Disk but in the default Hardware are only 6 Disks.'), + allow_empty=False, + )), + ], + ) + + +rulespec_registry.register( + CheckParameterRulespecWithItem( + check_group_name='checkpoint_raid', + group=RulespecGroupCheckParametersHardware, + item_spec=lambda: TextAscii(title=_('RAID ID'), ), + match_type='dict', + parameter_valuespec=_parameter_valuespec_checkpoint_raid, + title=lambda: _('Check Point RAID'), + )) diff --git a/packages/checkpoint_raid b/packages/checkpoint_raid index b29eb9f..1665477 100644 --- a/packages/checkpoint_raid +++ b/packages/checkpoint_raid @@ -2,12 +2,10 @@ 'description': 'monitor Check Point appliance RAID arrays\n', 'download_url': 'https://thl-cmk.hopto.org', 'files': {'agent_based': ['checkpoint_raid.py'], - 'checkman': ['checkpoint_raid'], - 'web': ['plugins/wato/checkpoint_raid.py']}, + 'gui': ['wato/checkpoint_raid.py']}, 'name': 'checkpoint_raid', - 'num_files': 3, 'title': 'Check Point appliance RAID', - 'version': '20221130.v0.4a', - 'version.min_required': '2.0.0', - 'version.packaged': '2021.09.20', + 'version': '1.0.0-20230422', + 'version.min_required': '2.1.0b1', + 'version.packaged': '2.1.0p21', 'version.usable_until': None} \ No newline at end of file -- GitLab