diff --git a/agent_based/checkpoint_asg_vsls.py b/agent_based/checkpoint_asg_vsls.py index 43ce98e5f83cc9469e02a64323956ef659f3e281..a649d3fd68b2e1d544a3ad273278fecfe497e3ad 100644 --- a/agent_based/checkpoint_asg_vsls.py +++ b/agent_based/checkpoint_asg_vsls.py @@ -35,7 +35,7 @@ # ['50', '1 2'] # ], # [ -# ['0', 'k01001s11-017500009', '1', '1', 'OK', 'Primary chassis health is good.', '2', '2', '1', '1', '', ''] +# ['0', 'k01001s11-017500009', '1', '1', 'OK', 'Primary chassis health is good.', '2', '2', '1', '1'] # ] # ] # @@ -45,7 +45,7 @@ # VsPrimaryChassis='1', VsActiveChassis='1', VsHealth='OK', # VsReason='Primary chassis health is good.', ChassisState=[(2, 2), (1, 1)]) -from typing import List, Tuple, Optional +from typing import List, NamedTuple, Optional from dataclasses import dataclass from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( DiscoveryResult, @@ -66,17 +66,24 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import ( ) +class CheckpoinstAsgVlslChassis(NamedTuple): + InterfacesUp: int + InterfacesTotal: int + FwksUp: int + FwksTotal: int + + @dataclass class CheckpointAsgVsls: SgmRatio: str - SystemPrimaryChassis: str + SystemPrimaryChassis: list Vsid: str VsName: str VsPrimaryChassis: str VsActiveChassis: str VsHealth: str VsReason: str - ChassisState: List[Tuple[int, int]] + ChassisState: List[CheckpoinstAsgVlslChassis] def parse_checkpoint_asg_vsls(string_table: List[StringTable]) -> Optional[CheckpointAsgVsls]: @@ -87,14 +94,15 @@ def parse_checkpoint_asg_vsls(string_table: List[StringTable]) -> Optional[Check return try: - Vsid, VsName, VsPrimaryChassis, VsActiveChassis, VsHealth, VsReason, VsChassis1FwksUp, VsChassis1FwksTotal, \ - VsChassis2FwksUp, VsChassis2FwksTotal, VsChassis3FwksUp, VsChassis3FwksTotal = chassis_state[0] + Vsid, VsName, VsPrimaryChassis, VsActiveChassis, VsHealth, VsReason, \ + VsChassis1InterfacesUp, VsChassis1InterfacesTotal, VsChassis1FwksUp, VsChassis1FwksTotal, \ + VsChassis2InterfacesUp, VsChassis2InterfacesTotal, VsChassis2FwksUp, VsChassis2FwksTotal, = chassis_state[0] except (IndexError, ValueError): return return CheckpointAsgVsls( SgmRatio=SgmRatio, - SystemPrimaryChassis=SystemPrimaryChassis, + SystemPrimaryChassis=SystemPrimaryChassis.strip(), Vsid=Vsid, VsName=VsName, VsPrimaryChassis=VsPrimaryChassis, @@ -102,9 +110,18 @@ def parse_checkpoint_asg_vsls(string_table: List[StringTable]) -> Optional[Check VsHealth=VsHealth, VsReason=VsReason, ChassisState=[ - (int(VsChassis1FwksUp), int(VsChassis1FwksTotal)), - (int(VsChassis2FwksUp), int(VsChassis2FwksTotal)), - # (int(VsChassis3FwksUp), int(VsChassis3FwksTotal)), + CheckpoinstAsgVlslChassis( + int(VsChassis1InterfacesUp), + int(VsChassis1InterfacesTotal), + int(VsChassis1FwksUp), + int(VsChassis1FwksTotal) + ), + CheckpoinstAsgVlslChassis( + int(VsChassis2InterfacesUp), + int(VsChassis2InterfacesTotal), + int(VsChassis2FwksUp), + int(VsChassis2FwksTotal) + ), ] ) @@ -114,10 +131,11 @@ def discovery_checkpoint_asg_vsls(section: CheckpointAsgVsls) -> DiscoveryResult def check_checkpoint_asg_vsls(params, section: CheckpointAsgVsls) -> CheckResult: - SystemPrimaryChassis = section.SystemPrimaryChassis.strip().split(' ') inv_asgVslsVsActiveChassis = params['discovery_active_chassis'] longoutput = '' + longoutput += f'\nThreshold ratio for failover: {section.SgmRatio}' + longoutput += f'\nMethod for defaulting Chassis per each VS: {section.SystemPrimaryChassis}' longoutput += f'\nSystem name: {section.VsName}' longoutput += f'\nHealth status: {section.VsHealth}' longoutput += f'\nHealth reason: {section.VsReason}' @@ -132,14 +150,20 @@ def check_checkpoint_asg_vsls(params, section: CheckpointAsgVsls) -> CheckResult else: yield Result(state=State.OK, notice=yield_text) - for chassis in SystemPrimaryChassis: - VsChassisFwksUp, VsChassisFwksTotal = section.ChassisState[int(chassis) - 1] - yield_text = f'Chassis {chassis}: {VsChassisFwksUp}/{VsChassisFwksTotal} SGMs UP' + chassis = 0 + for InterfacesUp, InterfacesTotal, VsChassisFwksUp, VsChassisFwksTotal in section.ChassisState: + chassis += 1 + yield_text = f'Chassis {chassis}: {VsChassisFwksUp}/{VsChassisFwksTotal} SGMs Up' if VsChassisFwksUp != VsChassisFwksTotal: yield Result(state=State.CRIT, notice=yield_text) else: yield Result(state=State.OK, summary=yield_text) + yield_text = f'Interfaces: {InterfacesUp}/{InterfacesTotal} (Up/Total)' + if InterfacesUp != InterfacesTotal: + yield Result(state=State.CRIT, notice=yield_text) + else: + yield Result(state=State.OK, summary=yield_text) register.snmp_section( name='checkpoint_asg_vsls', @@ -161,12 +185,14 @@ register.snmp_section( '4', # asgVslsVsActiveChassis '5', # asgVslsVsHealth '6', # asgVslsVsReason + '7', # asgVslsVsChassis1InterfacesUp + '8', # asgVslsVsChassis1InterfacesTotal '9', # asgVslsVsChassis1FwksUp '10', # asgVslsVsChassis1FwksTotal + '21', # asgVslsVsChassis2InterfacesUp + '22', # asgVslsVsChassis2InterfacesTotal '23', # asgVslsVsChassis2FwksUp '24', # asgVslsVsChassis2FwksTotal - '33', # asgVslsVsChassis3FwksUp - '34', # asgVslsVsChassis3FwksTotal ] ), ], diff --git a/checkpoint_asg_vsls.mkp b/checkpoint_asg_vsls.mkp index 06e71246815a9af5efef8ceed1cc85702cf023e8..55870c42e3541ae6158d8e5488d1062443690112 100644 Binary files a/checkpoint_asg_vsls.mkp and b/checkpoint_asg_vsls.mkp differ diff --git a/packages/checkpoint_asg_vsls b/packages/checkpoint_asg_vsls index 910b669ac782b86463e3bfe7cdd68a1e267c4760..22fb51e100e0bb5e47ffa45955193298dd4baf25 100644 --- a/packages/checkpoint_asg_vsls +++ b/packages/checkpoint_asg_vsls @@ -7,5 +7,5 @@ 'title': 'Check Point Maestro SMO ASG VSLS Chassis', 'version': '20210911.v0.2', 'version.min_required': '2.0.0', - 'version.packaged': '2021.07.14', + 'version.packaged': '2021.09.20', 'version.usable_until': None} \ No newline at end of file