Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit 4e65fe32 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent a447a4d9
No related branches found
No related tags found
No related merge requests found
...@@ -9,3 +9,6 @@ ...@@ -9,3 +9,6 @@
2021-04-29: rename from checkpoint_soft_raid in to checkpoint_raid 2021-04-29: rename from checkpoint_soft_raid in to checkpoint_raid
2021-08-10: rewritten for CMK 2.0 2021-08-10: rewritten for CMK 2.0
2022-11-30: WATO: fixed CheckParameterRulespecWithoutItem (from CheckParameterRulespecWithItem) 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
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
# but only 6 Disks are in the default hardware # but only 6 Disks are in the default hardware
# 2021-04-29: rename from checkpoint_soft_raid in to checkpoint_raid # 2021-04-29: rename from checkpoint_soft_raid in to checkpoint_raid
# 2021-08-10: rewritten for CMK 2.0 # 2021-08-10: rewritten for CMK 2.0
# 2023-04-23: refactoring
# #
# sample snmpwalk (one volume / two disks) # sample snmpwalk (one volume / two disks)
# #
...@@ -57,21 +58,19 @@ ...@@ -57,21 +58,19 @@
# #
# sample info # sample info
# #
# [[[u'1', u'0', u'2', u'2', u'1952448512', u'0', u'1', u'931']], # [[['1', '0', '2', '2', '1952448512', '0', '1', '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'], # [['1', '0', '0', '0', 'ATA ', 'ST1000NM0033-9ZM', 'SN04', '1953525168', '0', '0', '100', '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']]] # ['2', '0', '1', '1', 'ATA ', 'ST1000NM0033-9ZM', 'SN04', '1953525168', '0', '0', '100', '931']]]
# #
# #
from dataclasses import dataclass from dataclasses import dataclass
from typing import List, Dict from typing import List, Dict
from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
DiscoveryResult, DiscoveryResult,
CheckResult, CheckResult,
StringTable, StringTable,
) )
from cmk.base.plugins.agent_based.agent_based_api.v1 import ( from cmk.base.plugins.agent_based.agent_based_api.v1 import (
register, register,
Service, Service,
...@@ -87,28 +86,28 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import ( ...@@ -87,28 +86,28 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
@dataclass @dataclass
class RaidDisk: class RaidDisk:
diskindex: int index: int
diskvolumeid: str volume_id: str
diskid: int disk_id: int
diskvendor: str vendor: str
diskproductid: str product_id: str
diskrevision: str revision: str
diskmaxlba: int max_lba: int
diskstate: int state: int
diskflags: str flags: str
disksyncstate: int sync_state: int
disksize: int size: int
@dataclass @dataclass
class RaidVolume: class RaidVolume:
volumeindex: int index: int
volumetype: str type: str
numofdisksonraid: int num_of_disks_on_raid: int
volumemaxlba: int max_lba: int
volumestate: int state: int
volumeflags: str flags: str
volumesize: int size: int
disks: List[RaidDisk] disks: List[RaidDisk]
...@@ -201,41 +200,40 @@ def parse_checkpoint_raid(string_table: List[StringTable]) -> Dict[str, RaidVolu ...@@ -201,41 +200,40 @@ def parse_checkpoint_raid(string_table: List[StringTable]) -> Dict[str, RaidVolu
disks = [] disks = []
for disk in raw_disks: for disk in raw_disks:
diskindex, diskvolumeid, diskid, disknumber, diskvendor, diskproductid, diskrevision, diskmaxlba, diskstate, \ index, volume_id, disk_id, number, vendor, product_id, revision, max_lba, state, flags, sync_state, size = disk
diskflags, disksyncstate, disksize = disk
if diskindex.isdigit(): if index.isdigit():
disks.append(RaidDisk( disks.append(RaidDisk(
diskindex=int(diskindex), index=int(index),
diskvolumeid=diskvolumeid, volume_id=volume_id.strip(),
diskid=int(disknumber), disk_id=int(number),
diskvendor=diskvendor, vendor=vendor.strip(),
diskproductid=diskproductid, product_id=product_id.strip(),
diskrevision=diskrevision, revision=revision.strip(),
diskmaxlba=int(diskmaxlba), max_lba=int(max_lba),
diskstate=int(diskstate), state=int(state),
diskflags=_get_flags(diskflags, _raid_disk_flags), flags=_get_flags(flags, _raid_disk_flags),
disksyncstate=int(disksyncstate), sync_state=int(sync_state),
disksize=int(disksize) size=int(size)
)) ))
for volume in raw_volumes: for volume in raw_volumes:
volumeindex, volumeid, volumetype, numofdisksonraid, volumemaxlba, volumestate, volumeflags, volumesize = volume index, volume_id, _type, num_of_disks_on_raid, max_lba, state, flags, size = volume
if volumeindex.isdigit(): if index.isdigit():
volumes[volumeid] = RaidVolume( volumes[volume_id] = RaidVolume(
volumeindex=int(volumeindex), index=int(index),
volumetype=_raid_volume_type.get(int(volumetype), f'unknown ({volumetype}'), type=_raid_volume_type.get(int(_type), f'unknown ({_type}'),
numofdisksonraid=int(numofdisksonraid), num_of_disks_on_raid=int(num_of_disks_on_raid),
volumemaxlba=int(volumemaxlba), max_lba=int(max_lba),
volumestate=int(volumestate), state=int(state),
volumeflags=_get_flags(volumeflags, _raid_volume_flags), flags=_get_flags(flags, _raid_volume_flags),
volumesize=int(volumesize), size=int(size),
disks=[] disks=[]
) )
for disk in disks: for disk in disks:
if disk.diskvolumeid == volumeid: if disk.volume_id == volume_id:
volumes[volumeid].disks.append(disk) volumes[volume_id].disks.append(disk)
return volumes return volumes
...@@ -254,52 +252,51 @@ def check_checkpoint_raid(item, params, section: Dict[str, RaidVolume]) -> Check ...@@ -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') yield Result(state=State.CRIT, summary='Volume not found in SNMP Data')
return return
# volume infos # volume info
details = '' details = ''
details += f'Volume Type: {volume.volumetype}, ' details += f'Volume Type: {volume.type}, '
details += f'# of Disks: {volume.numofdisksonraid}, ' details += f'# of Disks: {volume.num_of_disks_on_raid}, '
details += f'Size: {volume.volumesize}GB, ' details += f'Size: {volume.size}GB, '
details += f'max LBA: {volume.volumemaxlba}, ' details += f'max LBA: {volume.max_lba}, '
details += f'Flags: {volume.volumeflags}' details += f'Flags: {volume.flags}'
summary = '' summary = ''
summary += f'{volume.volumetype}, ' summary += f'{volume.type}, '
summary += f'{volume.numofdisksonraid} disks, ' summary += f'{volume.num_of_disks_on_raid} disks, '
summary += f'{volume.volumesize}GB, ' summary += f'{volume.size}GB, '
summary += f'State: {_raid_volume_state.get(volume.volumestate)}' 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) yield Result(state=State.CRIT, summary=summary, details=details)
else: else:
yield Result(state=State.OK, summary=summary, details=details) yield Result(state=State.OK, summary=summary, details=details)
# disk infos # disk info
disks = volume.disks disks = volume.disks
disks_in_array = 0 disks_in_array = 0
disks_online = 0 disks_online = 0
disks_ignored = 0 disks_ignored = 0
for disk in disks: for disk in disks:
diskid = disk.diskid if str(disk.disk_id) not in ignore_disks:
if not str(diskid) in ignore_disks:
disks_in_array += 1 disks_in_array += 1
syncstate = disk.disksyncstate syncstate = disk.sync_state
details = '' details = ''
details += f'Disk ID: {diskid}, ' details += f'Disk ID: {disk.disk_id}, '
details += f'State: {_raid_disk_state.get(disk.diskstate)}, ' details += f'State: {_raid_disk_state.get(disk.state)}, '
details += f'Sync: {syncstate}%, ' details += f'Sync: {syncstate}%, '
details += f'Size: {disk.disksize}GB, ' details += f'Size: {disk.size}GB, '
if disk.diskmaxlba > 0: if disk.max_lba > 0:
details += f'max LBA: {disk.diskmaxlba}, ' details += f'max LBA: {disk.max_lba}, '
if disk.diskvendor != 'UNKNOWN': if disk.vendor != 'UNKNOWN':
details += f'Vendor: {disk.diskvendor}, ' details += f'Vendor: {disk.vendor}, '
details += f'Product ID: {disk.diskproductid}, ' details += f'Product ID: {disk.product_id}, '
if disk.diskrevision != '': if disk.revision != '':
details += f'Revision: {disk.diskrevision}, ' details += f'Revision: {disk.revision}, '
details += f'Flags: {disk.diskflags}' details += f'Flags: {disk.flags}'
if disk.diskstate != 0: if disk.state != 0:
yield Result(state=State.CRIT, 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) details=details)
else: else:
yield Result(state=State.OK, notice=details, yield Result(state=State.OK, notice=details,
......
No preview for this file type
#!/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'),
))
...@@ -2,12 +2,10 @@ ...@@ -2,12 +2,10 @@
'description': 'monitor Check Point appliance RAID arrays\n', 'description': 'monitor Check Point appliance RAID arrays\n',
'download_url': 'https://thl-cmk.hopto.org', 'download_url': 'https://thl-cmk.hopto.org',
'files': {'agent_based': ['checkpoint_raid.py'], 'files': {'agent_based': ['checkpoint_raid.py'],
'checkman': ['checkpoint_raid'], 'gui': ['wato/checkpoint_raid.py']},
'web': ['plugins/wato/checkpoint_raid.py']},
'name': 'checkpoint_raid', 'name': 'checkpoint_raid',
'num_files': 3,
'title': 'Check Point appliance RAID', 'title': 'Check Point appliance RAID',
'version': '20221130.v0.4a', 'version': '1.0.0-20230422',
'version.min_required': '2.0.0', 'version.min_required': '2.1.0b1',
'version.packaged': '2021.09.20', 'version.packaged': '2.1.0p21',
'version.usable_until': None} 'version.usable_until': None}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment