From 60b75521cde021fddb3f7f6e17b6954527816fe8 Mon Sep 17 00:00:00 2001
From: thl-cmk <thl-cmk@outlook.com>
Date: Thu, 25 Feb 2021 22:30:20 +0100
Subject: [PATCH] update project

---
 agent_based/checkpoint_asg_chassis.py | 215 ++++++++++++++++++++++++++
 checkpoint_asg_chassis.mkp            | Bin 2017 -> 2443 bytes
 checks/checkpoint_asg_chassis         | 150 ------------------
 packages/checkpoint_asg_chassis       |  15 +-
 4 files changed, 223 insertions(+), 157 deletions(-)
 create mode 100644 agent_based/checkpoint_asg_chassis.py
 delete mode 100644 checks/checkpoint_asg_chassis

diff --git a/agent_based/checkpoint_asg_chassis.py b/agent_based/checkpoint_asg_chassis.py
new file mode 100644
index 0000000..b5f79f8
--- /dev/null
+++ b/agent_based/checkpoint_asg_chassis.py
@@ -0,0 +1,215 @@
+#!/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-08
+#
+# Monitor Check Point Maestro SMO Chassis status (asg monitor)
+#
+# 2021-02-25: rewrite for CMK 2.x
+#
+# sample snmpwalk 
+# .1.3.6.1.4.1.2620.1.48.28.1.0 = STRING: "Multi"
+# .1.3.6.1.4.1.2620.1.48.28.2.0 = STRING: "Primary Up"
+# .1.3.6.1.4.1.2620.1.48.28.3.1.0 = STRING: "Enabled"
+# .1.3.6.1.4.1.2620.1.48.28.3.2.0 = STRING: "Enabled"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.1.1.0 = Gauge32: 1
+# .1.3.6.1.4.1.2620.1.48.28.4.1.1.2.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.48.28.4.1.2.1.0 = Gauge32: 1
+# .1.3.6.1.4.1.2620.1.48.28.4.1.2.2.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.48.28.4.1.3.1.0 = STRING: "ACTIVE"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.3.2.0 = STRING: "STANDBY"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.4.1.0 = STRING: "34"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.4.2.0 = STRING: "28"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.5.1.0 = STRING: "34"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.5.2.0 = STRING: "28"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.6.1.0 = STRING: "N/A"
+# .1.3.6.1.4.1.2620.1.48.28.4.1.6.2.0 = STRING: "N/A"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.1.1.0 = Gauge32: 1
+# .1.3.6.1.4.1.2620.1.48.28.5.1.1.2.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.48.28.5.1.1.3.0 = Gauge32: 3
+# .1.3.6.1.4.1.2620.1.48.28.5.1.2.1.0 = STRING: "1_01"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.2.2.0 = STRING: "1_02"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.2.3.0 = STRING: "2_01"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.3.1.0 = STRING: "ACTIVE"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.3.2.0 = STRING: "ACTIVE"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.3.3.0 = STRING: "ACTIVE"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.4.1.0 = STRING: "N/A"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.4.2.0 = STRING: "N/A"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.4.3.0 = STRING: "N/A"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.5.1.0 = STRING: "N/A"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.5.2.0 = STRING: "N/A"
+# .1.3.6.1.4.1.2620.1.48.28.5.1.5.3.0 = STRING: "N/A"
+#
+# sample info
+# [
+#  [
+#   [u'Multi', u'Primary Up', u'Enabled', u'Enabled']
+#  ],
+#  [
+#   [u'1', u'ACTIVE', u'34', u'34', u'N/A'],
+#   [u'2', u'STANDBY', u'28', u'28', u'N/A']
+#  ],
+#  [
+#   [u'1_01', u'ACTIVE'],
+#   [u'1_02', u'ACTIVE'],
+#   [u'2_01', u'ACTIVE']
+#  ]
+# ]
+#
+from pprint import pprint
+
+from typing import Mapping, Dict, List, Tuple, NamedTuple
+
+from .agent_based_api.v1.type_defs import (
+    DiscoveryResult,
+    CheckResult,
+    StringTable,
+)
+
+from .agent_based_api.v1 import (
+    register,
+    Service,
+    equals,
+    check_levels,
+    Result,
+    State,
+    SNMPTree,
+    startswith,
+    all_of,
+    any_of,
+)
+
+
+class CheckPointASGChassisInfo(NamedTuple):
+    mode: str
+    hamode: str
+    synctoactive: str
+    synctostandby: str
+
+class CheckPointASGChassisParams(NamedTuple):
+    id: str
+    status: str
+    grade: str
+    maxgrade: str
+    uniqueip: str
+
+class CheckPointASGChassisSgms(NamedTuple):
+    id: str
+    status: str
+
+
+class CheckPointASGChassis(NamedTuple):
+    info: CheckPointASGChassisInfo
+    chassis: List
+    sgms: List
+
+
+def parse_checkpoint_asg_chassis(string_table: List[StringTable]): #-> CheckPointASGChassis:
+    chassis = CheckPointASGChassis
+    try:
+        chassis.info = CheckPointASGChassisInfo(*string_table[0][0])
+    except TypeError:
+        return None
+    chassis.chassis = string_table[1]
+    chassis.sgms = string_table[2]
+
+    parsed = chassis
+    return parsed
+
+
+def discovery_checkpoint_asg_chassis(section: CheckPointASGChassis) -> DiscoveryResult:
+    yield Service(parameters={'inv_chassis_parms': section.chassis})
+
+
+def check_checkpoint_asg_chassis(params, section: CheckPointASGChassis) -> CheckResult:
+
+    details = ''
+    details += '\n\nTo verify this output use the "asg monitor" CLI command on the Check Point SMO,\n'
+    details += '\nChassis Mode: %s' % section.info.mode
+    details += '\nH/A Mode: %s' % section.info.hamode
+    details += '\nSync to active: %s' % section.info.synctoactive
+    details += '\nSync to standby: %s' % section.info.synctostandby
+
+    inv_chassis_parms = params['inv_chassis_parms']
+
+    for chassis in section.chassis:
+        chassis = CheckPointASGChassisParams(*chassis)
+
+        if chassis.uniqueip != 'N/A':
+             details += '\nChassis %s unique IP: %s' % (chassis.id, chassis.uniqueip)
+
+        for inv_chassis in inv_chassis_parms:
+            inv_chassis = CheckPointASGChassisParams(*inv_chassis)
+            if chassis.id == inv_chassis.id:
+                yield_text = 'Chassis %s: %s, grade: %s/%s' % (chassis.id, chassis.status,chassis.grade,chassis.maxgrade)
+                if not chassis.status.lower() in ['active', 'standby']:
+                    yield Result(state=State.CRIT, summary=yield_text)
+                elif (chassis.status != inv_chassis.status) or (chassis.grade != inv_chassis.grade) or (chassis.maxgrade != inv_chassis.maxgrade):
+                     yield Result(State.WARNING, notice=yield_text + ' (expected: %s, grade: %s/%s)' % (inv_chassis.status, inv_chassis.grade, inv_chassis.maxgrade))
+                else:
+                    yield Result(state=State.OK, summary=yield_text)
+
+    active_sgms = 0
+    for asgSgm in section.sgms:
+        asgSgm = CheckPointASGChassisSgms(*asgSgm)
+        if asgSgm.status.lower() == 'active':
+            active_sgms += 1
+        else:
+            yield Result(state=State.CRIT, notice='SGM %s state: %s' % (asgSgm.id, asgSgm.status))
+
+    yield Result(state=State.OK,
+                 summary='%d/%d SGMs active' % (active_sgms, len(section.sgms)),
+                 details=details)
+
+register.snmp_section(
+    name='checkpoint_asg_chassis',
+    parse_function=parse_checkpoint_asg_chassis,
+    fetch=[
+        SNMPTree(
+            base='.1.3.6.1.4.1.2620.1.48.28',  # CHECKPOINT-MIB::asgChassisInfo
+            oids=[
+                '1',  # asgChassisMode
+                '2',  # asgChassisHAMode
+                '3.1',  # asgSyncToActive
+                '3.2',  # asgSyncToStandby
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.2620.1.48.28.4.1',  # CHECKPOINT-MIB::asgChassisParamsEntry
+            oids=[
+                '2',  # asgChassisParamsID
+                '3',  # asgChassisParamsStatus
+                '4',  # asgChassisParamsGrade
+                '5',  # asgChassisParamsMaxGrade
+                '6',  # asgChassisParamsUniqueIP
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.2620.1.48.28.5.1',  # CHECKPOINT-MIB::asgSGMEntry
+            oids=[
+                '2',  # asgSGMID
+                '3',  # asgSGMStatus
+            ]
+        ),
+    ],
+    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_chassis',
+    service_name='ASG Chassis',
+    discovery_function=discovery_checkpoint_asg_chassis,
+    check_function=check_checkpoint_asg_chassis,
+    check_default_parameters={},
+    check_ruleset_name='checkpoint_asg_chassis',
+)
diff --git a/checkpoint_asg_chassis.mkp b/checkpoint_asg_chassis.mkp
index 14565ef2dc0ed28272a091ec4348e12e15683031..66011fb9cde3dd8299317411a28dd3a8248346c7 100644
GIT binary patch
delta 2442
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
IrvOj@0DGglD*ylh

delta 2013
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

diff --git a/checks/checkpoint_asg_chassis b/checks/checkpoint_asg_chassis
deleted file mode 100644
index dc3aad8..0000000
--- a/checks/checkpoint_asg_chassis
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/python
-# -*- encoding: utf-8; py-indent-offset: 4 -*-
-#
-# License: GNU General Public License v2
-#
-# Author: thl-cmk[at]outlook[dot]com
-# URL   : https://thl-cmk.hopto.org
-# Date  : 2020-11-08
-#
-# Monitor Check Point Maestro SMO Chassis status (asg monitor)
-#
-# sample snmpwalk 
-# .1.3.6.1.4.1.2620.1.48.28.1.0 = STRING: "Multi"
-# .1.3.6.1.4.1.2620.1.48.28.2.0 = STRING: "Primary Up"
-# .1.3.6.1.4.1.2620.1.48.28.3.1.0 = STRING: "Enabled"
-# .1.3.6.1.4.1.2620.1.48.28.3.2.0 = STRING: "Enabled"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.1.1.0 = Gauge32: 1
-# .1.3.6.1.4.1.2620.1.48.28.4.1.1.2.0 = Gauge32: 2
-# .1.3.6.1.4.1.2620.1.48.28.4.1.2.1.0 = Gauge32: 1
-# .1.3.6.1.4.1.2620.1.48.28.4.1.2.2.0 = Gauge32: 2
-# .1.3.6.1.4.1.2620.1.48.28.4.1.3.1.0 = STRING: "ACTIVE"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.3.2.0 = STRING: "STANDBY"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.4.1.0 = STRING: "34"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.4.2.0 = STRING: "28"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.5.1.0 = STRING: "34"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.5.2.0 = STRING: "28"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.6.1.0 = STRING: "N/A"
-# .1.3.6.1.4.1.2620.1.48.28.4.1.6.2.0 = STRING: "N/A"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.1.1.0 = Gauge32: 1
-# .1.3.6.1.4.1.2620.1.48.28.5.1.1.2.0 = Gauge32: 2
-# .1.3.6.1.4.1.2620.1.48.28.5.1.1.3.0 = Gauge32: 3
-# .1.3.6.1.4.1.2620.1.48.28.5.1.2.1.0 = STRING: "1_01"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.2.2.0 = STRING: "1_02"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.2.3.0 = STRING: "2_01"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.3.1.0 = STRING: "ACTIVE"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.3.2.0 = STRING: "ACTIVE"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.3.3.0 = STRING: "ACTIVE"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.4.1.0 = STRING: "N/A"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.4.2.0 = STRING: "N/A"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.4.3.0 = STRING: "N/A"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.5.1.0 = STRING: "N/A"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.5.2.0 = STRING: "N/A"
-# .1.3.6.1.4.1.2620.1.48.28.5.1.5.3.0 = STRING: "N/A"
-#
-# sample info
-# [
-#  [
-#   [u'Multi', u'Primary Up', u'Enabled', u'Enabled']
-#  ],
-#  [
-#   [u'1', u'ACTIVE', u'34', u'34', u'N/A'],
-#   [u'2', u'STANDBY', u'28', u'28', u'N/A']
-#  ],
-#  [
-#   [u'1_01', u'ACTIVE'],
-#   [u'1_02', u'ACTIVE'],
-#   [u'2_01', u'ACTIVE']
-#  ]
-# ]
-#
-
-def inventory_checkpoint_asg_chassis(info):
-
-    chassis_info, chassis_params, asgsgms = info
-    try:
-        asgChassisMode, asgChassisHAMode, asgSyncToActive, asgSyncToStandby = chassis_info[0]
-        yield None, {'inv_state': info}
-    except IndexError:
-        pass
-
-
-def check_checkpoint_asg_chassis(_no_item, params, info):
-    chassis_info, chassis_params, asgsgms = info
-
-    asgChassisMode, asgChassisHAMode, asgSyncToActive, asgSyncToStandby = chassis_info[0]
-
-    if params:
-        inv_chassis_info, inv_chassis_params, inv_asgsgms = params.get('inv_state')
-
-    infotext = ''
-    longoutput = ''
-    state = 0
-
-    longoutput += '\n\nTo verify this output use the "asg monitor" CLI command on the Check Point SMO,\n'
-    longoutput += '\nChassis Mode: %s' %  asgChassisMode
-    longoutput += '\nH/A Mode: %s' % asgChassisHAMode
-    longoutput += '\nSync to active: %s' % asgSyncToActive
-    longoutput += '\nSync to standby: %s' % asgSyncToStandby
-
-    for chassis in chassis_params:
-        asgChassisParamsID, asgChassisParamsStatus, asgChassisParamsGrade, asgChassisParamsMaxGrade, asgChassisParamsUniqueIP = chassis
-
-        if asgChassisParamsUniqueIP != 'N/A':
-            longoutput += '\nChassis %s unique IP: %s' % (asgChassisParamsID, asgChassisParamsUniqueIP)
-
-        for inv_chassis in inv_chassis_params:
-            inv_asgChassisParamsID, inv_asgChassisParamsStatus, inv_asgChassisParamsGrade, inv_asgChassisParamsMaxGrade, inv_asgChassisParamsUniqueIP = inv_chassis
-            if asgChassisParamsID == inv_asgChassisParamsID:
-                yield_text = 'Chassis %s: %s, grade: %s/%s' % (asgChassisParamsID, asgChassisParamsStatus, asgChassisParamsGrade, asgChassisParamsMaxGrade)
-                if not asgChassisParamsStatus.lower() in ['active', 'standby']:
-                    yield 2, yield_text
-                elif (asgChassisParamsStatus != inv_asgChassisParamsStatus) or (asgChassisParamsGrade != inv_asgChassisParamsGrade) or (asgChassisParamsMaxGrade != inv_asgChassisParamsMaxGrade):
-                    yield 1, yield_text + ' (expected: %s, grade: %s/%s)' % (inv_asgChassisParamsStatus, asgChassisParamsGrade, asgChassisParamsMaxGrade)
-                else:
-                    yield 0, yield_text
-
-    active_sgms = 0
-    for asgSgm in asgsgms:
-        asgSGMID, asgSGMStatus = asgSgm
-        if asgSGMStatus == 'ACTIVE':
-            active_sgms += 1
-        else:
-            yield 2, 'SGM %s state: %s' % (asgSGMID, asgSGMStatus)
-
-    yield 0, '%d/%d SGMs active' % (active_sgms, len(asgsgms))
-
-    yield state, infotext + longoutput + '\n'
-
-
-check_info['checkpoint_asg_chassis'] = {
-    'check_function': check_checkpoint_asg_chassis,
-    'inventory_function': inventory_checkpoint_asg_chassis,
-    'service_description': "ASG Chassis",
-    'snmp_scan_function': scan_checkpoint,
-    'group': 'checkpoint_asg_chassis',
-    'snmp_info': [(
-        '.1.3.6.1.4.1.2620.1.48.28',  # CHECKPOINT-MIB::asgChassisInfo
-        [
-            '1',    # asgChassisMode
-            '2',    # asgChassisHAMode
-            '3.1',  # asgSyncToActive
-            '3.2',  # asgSyncToStandby
-        ]),
-        ('.1.3.6.1.4.1.2620.1.48.28.4.1',  # CHECKPOINT-MIB::asgChassisParamsEntry
-         [
-             '2',   # asgChassisParamsID
-             '3',   # asgChassisParamsStatus
-             '4',   # asgChassisParamsGrade
-             '5',   # asgChassisParamsMaxGrade
-             '6',   # asgChassisParamsUniqueIP
-         ]),
-        ('.1.3.6.1.4.1.2620.1.48.28.5.1',  # CHECKPOINT-MIB::asgSGMEntry
-         [
-             '2',  # asgSGMID
-             '3',  # asgSGMStatus
-         ]
-         )
-    ],
-    'includes': ['checkpoint.include'],
-}
\ No newline at end of file
diff --git a/packages/checkpoint_asg_chassis b/packages/checkpoint_asg_chassis
index 06d8f23..789bde6 100644
--- a/packages/checkpoint_asg_chassis
+++ b/packages/checkpoint_asg_chassis
@@ -1,11 +1,12 @@
-{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': u'Monitor Check Point Maestro SMO Chassis status (asg monitor)',
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Monitor Check Point Maestro SMO Chassis status (asg '
+                'monitor)\n',
  'download_url': 'http://thl-cmk.hopto.org/',
- 'files': {'checks': ['checkpoint_asg_chassis']},
+ 'files': {'agent_based': ['checkpoint_asg_chassis.py']},
  'name': 'checkpoint_asg_chassis',
  'num_files': 1,
- 'title': u'Check Point Maestro SMO ASG Chassis',
- 'version': '20201107.v0.1',
- 'version.min_required': '1.4.0p38',
- 'version.packaged': '1.6.0p15',
+ 'title': 'Check Point Maestro SMO ASG Chassis',
+ 'version': '20210225.v0.2',
+ 'version.min_required': '2.0.0i1',
+ 'version.packaged': '2020.11.27',
  'version.usable_until': None}
\ No newline at end of file
-- 
GitLab