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