From eea76693cb988a644903b25173e059e1f91e7f97 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Sun, 12 Sep 2021 22:16:44 +0200 Subject: [PATCH] update project --- agent_based/checkpoint_asg_vsls.py | 189 +++++++++++++++++++++++++++++ checkpoint_asg_vsls.mkp | Bin 1838 -> 2314 bytes packages/checkpoint_asg_vsls | 14 +-- 3 files changed, 196 insertions(+), 7 deletions(-) create mode 100644 agent_based/checkpoint_asg_vsls.py diff --git a/agent_based/checkpoint_asg_vsls.py b/agent_based/checkpoint_asg_vsls.py new file mode 100644 index 0000000..43ce98e --- /dev/null +++ b/agent_based/checkpoint_asg_vsls.py @@ -0,0 +1,189 @@ +#!/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-07 +# +# Monitor Check Point Maestro SMO Vsls Chassis status +# +# 2021-09-11: rewritten for CMK 2.0 +# +# sample snmpwalk +# .1.3.6.1.4.1.2620.1.48.30.20.1.0 = Gauge32: 50 +# .1.3.6.1.4.1.2620.1.48.30.20.2.0 = STRING: "1 2 " +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.1.1.0 = Gauge32: 0 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.2.1.0 = STRING: "k01001s11-017500009" +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.3.1.0 = Gauge32: 1 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.4.1.0 = Gauge32: 1 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.5.1.0 = STRING: "OK" +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.6.1.0 = STRING: "Primary chassis health is good." +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.7.1.0 = Gauge32: 0 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.8.1.0 = Gauge32: 0 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.9.1.0 = Gauge32: 2 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.10.1.0 = Gauge32: 2 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.21.1.0 = Gauge32: 0 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.22.1.0 = Gauge32: 0 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.23.1.0 = Gauge32: 1 +# .1.3.6.1.4.1.2620.1.48.30.20.10.1.24.1.0 = Gauge32: 1 +# +# sample string_table +# [ +# [ +# ['50', '1 2'] +# ], +# [ +# ['0', 'k01001s11-017500009', '1', '1', 'OK', 'Primary chassis health is good.', '2', '2', '1', '1', '', ''] +# ] +# ] +# +# +# sample section +# CheckpointAsgVsls(SgmRatio='50', SystemPrimaryChassis='1 2 ', Vsid='0', VsName='k01001s11-017500009', +# VsPrimaryChassis='1', VsActiveChassis='1', VsHealth='OK', +# VsReason='Primary chassis health is good.', ChassisState=[(2, 2), (1, 1)]) + +from typing import List, Tuple, Optional +from dataclasses import dataclass +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, + equals, + Result, + State, + SNMPTree, + startswith, + all_of, + any_of, +) + + +@dataclass +class CheckpointAsgVsls: + SgmRatio: str + SystemPrimaryChassis: str + Vsid: str + VsName: str + VsPrimaryChassis: str + VsActiveChassis: str + VsHealth: str + VsReason: str + ChassisState: List[Tuple[int, int]] + + +def parse_checkpoint_asg_vsls(string_table: List[StringTable]) -> Optional[CheckpointAsgVsls]: + chassis_info, chassis_state = string_table + try: + SgmRatio, SystemPrimaryChassis = chassis_info[0] + except (IndexError, ValueError): + return + + try: + Vsid, VsName, VsPrimaryChassis, VsActiveChassis, VsHealth, VsReason, VsChassis1FwksUp, VsChassis1FwksTotal, \ + VsChassis2FwksUp, VsChassis2FwksTotal, VsChassis3FwksUp, VsChassis3FwksTotal = chassis_state[0] + except (IndexError, ValueError): + return + + return CheckpointAsgVsls( + SgmRatio=SgmRatio, + SystemPrimaryChassis=SystemPrimaryChassis, + Vsid=Vsid, + VsName=VsName, + VsPrimaryChassis=VsPrimaryChassis, + VsActiveChassis=VsActiveChassis, + VsHealth=VsHealth, + VsReason=VsReason, + ChassisState=[ + (int(VsChassis1FwksUp), int(VsChassis1FwksTotal)), + (int(VsChassis2FwksUp), int(VsChassis2FwksTotal)), + # (int(VsChassis3FwksUp), int(VsChassis3FwksTotal)), + ] + ) + + +def discovery_checkpoint_asg_vsls(section: CheckpointAsgVsls) -> DiscoveryResult: + yield Service(parameters={'discovery_active_chassis': section.VsActiveChassis}) + + +def check_checkpoint_asg_vsls(params, section: CheckpointAsgVsls) -> CheckResult: + SystemPrimaryChassis = section.SystemPrimaryChassis.strip().split(' ') + inv_asgVslsVsActiveChassis = params['discovery_active_chassis'] + + longoutput = '' + longoutput += f'\nSystem name: {section.VsName}' + longoutput += f'\nHealth status: {section.VsHealth}' + longoutput += f'\nHealth reason: {section.VsReason}' + yield Result(state=State.OK, notice=longoutput) + + if section.VsHealth != 'OK': + yield Result(state=State.WARN, notice=f'Health: {section.VsHealth}, Reason: {section.VsReason}') + + yield_text = f'Primary/Active chassis: {section.VsPrimaryChassis}/{section.VsActiveChassis}' + if inv_asgVslsVsActiveChassis != section.VsActiveChassis: + yield Result(state=State.WARN, notice=yield_text) + 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' + if VsChassisFwksUp != VsChassisFwksTotal: + yield Result(state=State.CRIT, notice=yield_text) + else: + yield Result(state=State.OK, summary=yield_text) + + +register.snmp_section( + name='checkpoint_asg_vsls', + parse_function=parse_checkpoint_asg_vsls, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.2620.1.48.30.20', # CHECKPOINT-MIB::asgVslsInfo + oids=[ + '1', # asgVslsSgmRatio + '2', # asgVslsSystemPrimaryChassis + ] + ), + SNMPTree( + base='.1.3.6.1.4.1.2620.1.48.30.20.10.1', # CHECKPOINT-MIB::asgVslsStateEntry + oids=[ + '1', # asgVslsVsid + '2', # asgVslsVsName + '3', # asgVslsVsPrimaryChassis + '4', # asgVslsVsActiveChassis + '5', # asgVslsVsHealth + '6', # asgVslsVsReason + '9', # asgVslsVsChassis1FwksUp + '10', # asgVslsVsChassis1FwksTotal + '23', # asgVslsVsChassis2FwksUp + '24', # asgVslsVsChassis2FwksTotal + '33', # asgVslsVsChassis3FwksUp + '34', # asgVslsVsChassis3FwksTotal + ] + ), + ], + detect=any_of( + startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'), + all_of( + equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'), + equals('.1.3.6.1.4.1.2620.1.6.1.0', 'SVN Foundation'), + ) + ) +) + +register.check_plugin( + name='checkpoint_asg_vsls', + service_name='ASG VSLS', + discovery_function=discovery_checkpoint_asg_vsls, + check_function=check_checkpoint_asg_vsls, + check_default_parameters={}, + check_ruleset_name='checkpoint_asg_vsls', +) diff --git a/checkpoint_asg_vsls.mkp b/checkpoint_asg_vsls.mkp index b3ef880568d8256383aa7cb46d180c45363ba00d..6c2bd0bc6b58a8046603c103a61fada1adfec2eb 100644 GIT binary patch literal 2314 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 literal 1838 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 diff --git a/packages/checkpoint_asg_vsls b/packages/checkpoint_asg_vsls index 06a26a4..910b669 100644 --- a/packages/checkpoint_asg_vsls +++ b/packages/checkpoint_asg_vsls @@ -1,11 +1,11 @@ -{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': u'Monitor Check Point Maestro SMO VSLS Chassis status', +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'Monitor Check Point Maestro SMO VSLS Chassis status\n', 'download_url': 'http://thl-cmk.hopto.org/', - 'files': {'checks': ['checkpoint_asg_vsls']}, + 'files': {'agent_based': ['checkpoint_asg_vsls.py']}, 'name': 'checkpoint_asg_vsls', 'num_files': 1, - 'title': u'Check Point Maestro SMO ASG VSLS Chassis', - 'version': '20201107.v0.1', - 'version.min_required': '1.4.0p38', - 'version.packaged': '1.6.0p15', + 'title': 'Check Point Maestro SMO ASG VSLS Chassis', + 'version': '20210911.v0.2', + 'version.min_required': '2.0.0', + 'version.packaged': '2021.07.14', 'version.usable_until': None} \ No newline at end of file -- GitLab