From b1103ce5b0c52af61d9debaad2df289aac45b835 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sat, 11 Sep 2021 23:21:49 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_asg_diag.py      | 186 +++++++++++++-----------
 checkpoint_asg_diag.mkp                 | Bin 3384 -> 3587 bytes
 packages/checkpoint_asg_diag            |   8 +-
 web/plugins/wato/checkpoint_asg_diag.py |  38 +++--
 4 files changed, 130 insertions(+), 102 deletions(-)

diff --git a/agent_based/checkpoint_asg_diag.py b/agent_based/checkpoint_asg_diag.py
index 42fd392..328335e 100644
--- a/agent_based/checkpoint_asg_diag.py
+++ b/agent_based/checkpoint_asg_diag.py
@@ -34,45 +34,45 @@
 # sample section
 # [
 #  [
-#   [u'On 2020-10-23, At 01:00:02, Passed: 28/30 tests. Failed tests: 11,28']
+#   ['On 2020-10-23, At 01:00:02, Passed: 28/30 tests. Failed tests: 11,28']
 #  ],
 #  [
-#   [u'1', u'System Health', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'2', u'Resources', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'3', u'Software Provision', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'4', u'Media Details', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'5', u'SSD Health', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'6', u'Firmware Verifier', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'7', u'Distribution Mode', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'8', u'DXL Balance', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'9', u'Policy', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'10', u'AMW Policy', u'2020-10-23 01:00:02', u'Passed', u'Not configured'],
-#   [u'11', u'SWB Updates', u'2020-10-23 01:00:02', u'Failed (!)', u''],
-#   [u'12', u'Installation', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'13', u'Security Group', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'14', u'Cores Distribution', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'15', u'Clock', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'16', u'Licenses', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'17', u'IPS Enhancement', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'18', u'Configuration Files', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'19', u'MAC Setting', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'20', u'ARP Consistency', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'21', u'Bond', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'22', u'IPv4 Route', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'23', u'IPv6 Route', u'2020-10-23 01:00:02', u'Passed', u'Not configured'],
-#   [u'24', u'Dynamic Routing', u'2020-10-23 01:00:02', u'Passed', u'Not configured'],
-#   [u'25', u'Local ARP', u'2020-10-23 01:00:02', u'Passed', u'Not configured'],
-#   [u'26', u'IGMP Consistency', u'2020-10-23 01:00:02', u'Passed', u'Not configured'],
-#   [u'27', u'PIM Neighbors', u'2020-10-23 01:00:02', u'Passed', u'Not configured'],
-#   [u'28', u'Core Dumps', u'2020-10-23 01:00:02', u'Failed (!)', u''],
-#   [u'29', u'Processes', u'2020-10-23 01:00:02', u'Passed', u''],
-#   [u'30', u'Performance hogs', u'2020-10-23 01:00:02', u'Passed', u'']
+#   ['1', 'System Health', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['2', 'Resources', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['3', 'Software Provision', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['4', 'Media Details', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['5', 'SSD Health', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['6', 'Firmware Verifier', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['7', 'Distribution Mode', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['8', 'DXL Balance', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['9', 'Policy', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['10', 'AMW Policy', '2020-10-23 01:00:02', 'Passed', 'Not configured'],
+#   ['11', 'SWB Updates', '2020-10-23 01:00:02', 'Failed (!)', ''],
+#   ['12', 'Installation', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['13', 'Security Group', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['14', 'Cores Distribution', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['15', 'Clock', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['16', 'Licenses', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['17', 'IPS Enhancement', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['18', 'Configuration Files', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['19', 'MAC Setting', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['20', 'ARP Consistency', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['21', 'Bond', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['22', 'IPv4 Route', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['23', 'IPv6 Route', '2020-10-23 01:00:02', 'Passed', 'Not configured'],
+#   ['24', 'Dynamic Routing', '2020-10-23 01:00:02', 'Passed', 'Not configured'],
+#   ['25', 'Local ARP', '2020-10-23 01:00:02', 'Passed', 'Not configured'],
+#   ['26', 'IGMP Consistency', '2020-10-23 01:00:02', 'Passed', 'Not configured'],
+#   ['27', 'PIM Neighbors', '2020-10-23 01:00:02', 'Passed', 'Not configured'],
+#   ['28', 'Core Dumps', '2020-10-23 01:00:02', 'Failed (!)', ''],
+#   ['29', 'Processes', '2020-10-23 01:00:02', 'Passed', ''],
+#   ['30', 'Performance hogs', '2020-10-23 01:00:02', 'Passed', '']
 #  ]
 # ]
 #
 
-
-from typing import Mapping, Dict, List, Tuple, NamedTuple
+import time
+from typing import List, NamedTuple
 
 from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
     DiscoveryResult,
@@ -90,92 +90,102 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     startswith,
     all_of,
     any_of,
+    check_levels,
 )
 
 
-class CheckPointASGDiagSummary(NamedTuple):
+class CheckpointAsgDiagSummary(NamedTuple):
     date: str
     time: str
+    days_ago: int
     passed: int
     maxtest: int
     failed: list
 
 
-class CheckPointASGDiag(NamedTuple):
-    summary: CheckPointASGDiagSummary
-    tests: List
+class CheckpointAsgDiagTest(NamedTuple):
+    index: str
+    name: str
+    lastrun: str
+    result: str
+    comment: str
 
 
-def parse_checkpoint_asg_diag(string_table: List[StringTable]) -> CheckPointASGDiag:
-    asgSummary, asgTests = string_table
+class CheckpointAsgDiag(NamedTuple):
+    summary: CheckpointAsgDiagSummary
+    tests: List[CheckpointAsgDiagTest]
 
-    # ToDo: change date to real date string, and add warn/crit if last run to old
 
+def parse_checkpoint_asg_diag(string_table: List[StringTable]) -> CheckpointAsgDiag:
+    asgSummary, asgTests = string_table
+
+    # sample asgSummary [['On 2020-10-23, At 01:00:02, Passed: 28/30 tests. Failed tests: 11,28']]
     if len(asgSummary) != 0:
         asgSummary = asgSummary[0][0]
-        return CheckPointASGDiag(
-            summary=CheckPointASGDiagSummary(
+        passed, max = asgSummary[28:].split('.')[0].split(' ')[1].split('/')
+        return CheckpointAsgDiag(
+            summary=CheckpointAsgDiagSummary(
                 date=asgSummary[3:13],
                 time=asgSummary[18:26],
-                passed=int(asgSummary[28:].split(".")[0].split(' ')[1].split('/')[0]),
-                maxtest=int(asgSummary[28:].split(".")[0].split(' ')[1].split('/')[1]),
+                days_ago=int((time.time() - time.mktime(time.strptime(asgSummary[3:13], '%Y-%m-%d'))) / 86400),
+                passed=int(passed),
+                maxtest=int(max),
                 failed=list(map(int, asgSummary.split(':')[-1].strip(' ').split(',')))
             ),
-            tests=asgTests
+            tests=[CheckpointAsgDiagTest(*test) for test in asgTests]
         )
 
 
-def discovery_checkpoint_asg_diag(section: CheckPointASGDiag) -> DiscoveryResult:
+def discovery_checkpoint_asg_diag(section: CheckpointAsgDiag) -> DiscoveryResult:
     yield Service(parameters={})
 
 
-def check_checkpoint_asg_diag(params, section: CheckPointASGDiag) -> CheckResult:
-    class CheckPointASGDiagTest(NamedTuple):
-        index: str
-        name: str
-        lastrun: str
-        result: str
-        comment: str
-
-    summary = ''
-    summary += 'Last run on: %s at: %s' % (section.summary.date, section.summary.time)
-    summary += ' Passed %d/%d tests' % (section.summary.passed, section.summary.maxtest)
-    if len(section.summary.failed) > 0:
-        summary += ' Failed: %s' % ','.join(map(str, section.summary.failed))
-
-    details = '\n\nTo verify this output use the "asg diag verify" command on the Check Point SMO cli,\n'
-
-    for test in section.tests:
-        test = CheckPointASGDiagTest(*test)
-        if test.comment == '':
-            details += '\nIndex: %s, Name: %s, LastRun: %s, Restult: %s' % (
-                test.index, test.name, test.lastrun, test.result)
-        else:
-            details += '\nIndex: %s, Name: %s, LastRun: %s, Restult: %s, Comment: %s' % (
-                test.index, test.name, test.result, test.result, test.comment)
-
-    state = State.OK
-
-    asg_diag_ignore = []
-    asg_diag_warning = []
-
-    if params:
-        asg_diag_ignore = params.get('asg_diag_ignore', [])
-        asg_diag_warning = params.get('asg_diag_warning', [])
+def check_checkpoint_asg_diag(params, section: CheckpointAsgDiag) -> CheckResult:
+    state = 0
+    asg_diag_ignore = params['asg_diag_ignore']
+    asg_diag_warning = params['asg_diag_warning']
     asg_diag_ignore.sort()
+    asg_diag_warning.sort()
+
+    yield Result(state=State.OK, summary=f'Last run on: {section.summary.date} at: {section.summary.time}')
+    yield from check_levels(
+        value=section.summary.days_ago,
+        label='Days ago',
+        levels_upper=params['levels_upper_last_run'],
+        render_func=lambda v: str(v)
+    )
 
+    summary = f'Tests Passed {section.summary.passed}/{section.summary.maxtest},'
+    if len(section.summary.failed) > 0:
+        summary += f' Failed: {",".join(map(str, section.summary.failed))}'
     if len(asg_diag_ignore) > 0:
-        summary += ', Ignored tests: %s' % ','.join(map(str, asg_diag_ignore))
+        summary += f', Ignored: {",".join(map(str, asg_diag_ignore))}'
 
     for test in section.summary.failed:
-        if not test in asg_diag_ignore:
+        if test not in asg_diag_ignore:
             if test in asg_diag_warning:
-                if state == State.OK:
-                    state = State.WARN
+                state = max(state, 1)
             else:
-                state = State.CRIT
+                state = 2
+
+    yield Result(state=State(state), summary=summary)
 
-    yield Result(state=state, summary=summary, details=details)
+    yield Result(
+        state=State.OK,
+        notice='\nTo verify this output use the "asg diag verify" command on the Check Point SMO CLI.\n'
+    )
+
+    for test in section.tests:
+        result = test.result
+        if result.lower().startswith('failed'):
+            if int(test.index) in asg_diag_ignore:
+                result = result.replace(' (!)', '')
+            elif int(test.index) not in asg_diag_warning:
+                result = result.replace(' (!)', ' (!!)')
+        notice = f'Index: {test.index}, Name: {test.name}, LastRun: {test.lastrun}, Restult: {result}'
+        if test.comment != '':
+            notice += f', Comment: {test.comment}'
+        yield Result(state=State.OK, notice=notice)
 
 
 register.snmp_section(
@@ -213,6 +223,10 @@ register.check_plugin(
     service_name='ASG Diag',
     discovery_function=discovery_checkpoint_asg_diag,
     check_function=check_checkpoint_asg_diag,
-    check_default_parameters={},
+    check_default_parameters={
+        'levels_upper_last_run': (3, 5),
+        'asg_diag_ignore': [],
+        'asg_diag_warning': [],
+    },
     check_ruleset_name='checkpoint_asg_diag',
 )
diff --git a/checkpoint_asg_diag.mkp b/checkpoint_asg_diag.mkp
index cbfad34e8bd7a552d20c4cf805a2a5440bef81e6..171cfa571e614c1ad2a223fd023adce8f2502954 100644
GIT binary patch
literal 3587
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
HNJ8>Idvfv3

literal 3384
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
OKKu^|CTMp6cmM#+gO^YM

diff --git a/packages/checkpoint_asg_diag b/packages/checkpoint_asg_diag
index 6b01fc2..4077643 100644
--- a/packages/checkpoint_asg_diag
+++ b/packages/checkpoint_asg_diag
@@ -1,16 +1,14 @@
 {'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
  'description': 'Monitor Check Point Maestro SMO Test status (asg diag '
                 'verify)\n'
-                '\n'
-                '- 2020-11-03: initial release for CMK 1.6.x\n'
-                '- 2021-03-01: rewrite for CMK 2.x\n',
+                '\n',
  'download_url': 'http://thl-cmk.hopto.org/',
  'files': {'agent_based': ['checkpoint_asg_diag.py'],
            'web': ['plugins/wato/checkpoint_asg_diag.py']},
  'name': 'checkpoint_asg_diag',
  'num_files': 2,
  'title': 'Check Point Maestro SMO ASG Diag',
- 'version': '20210301.v0.1',
- 'version.min_required': '2.0.0b8',
+ '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
diff --git a/web/plugins/wato/checkpoint_asg_diag.py b/web/plugins/wato/checkpoint_asg_diag.py
index f2257df..70ec267 100644
--- a/web/plugins/wato/checkpoint_asg_diag.py
+++ b/web/plugins/wato/checkpoint_asg_diag.py
@@ -6,8 +6,8 @@ from cmk.gui.i18n import _
 from cmk.gui.valuespec import (
     Dictionary,
     Integer,
-    TextAscii,
     ListOfStrings,
+    Tuple,
 )
 
 from cmk.gui.plugins.wato import (
@@ -19,24 +19,41 @@ from cmk.gui.plugins.wato import (
 
 def _parameter_valuespec_checkpoint_asg_diag():
     return Dictionary(elements=[
+        ('levels_upper_last_run',
+         Tuple(
+             title=_('Maximum days no run "asg diag verify"'),
+             elements=[
+                 Integer(
+                     title=_('Warning at'),
+                     unit='days',
+                     default_value=3,
+                     minvalue=1,
+                 ),
+                 Integer(
+                     title=_('Critical at'),
+                     unit='days',
+                     default_value=5,
+                     minvalue=1,
+                 )
+             ],
+         )),
         ('asg_diag_ignore',
          ListOfStrings(
-             title=_('Index list of ASG Diag tests to ignore'),
+             title=_('Index list of ignored failde tests'),
              orientation='horizontal',
              allow_empty=False,
              valuespec=Integer(minvalue=1, maxvalue=99),
-             help=_('there will be no warning/critical if this tests are not "Passed"'),
-         )
-         ),
+             help=_('This tests will be ignored if the are not "Passed". The monitoring state will stay OK'),
+         )),
         ('asg_diag_warning',
          ListOfStrings(
-             title=_('Set monitoring state to warining if ASG Diag state is "Failed" for the following tests'),
+             title=_('Indix list of WARNING only failed tests'),
              orientation='horizontal',
              allow_empty=False,
              valuespec=Integer(minvalue=1, maxvalue=99),
-             help=_('there will be only warning if this tests are not "Passed", else there will be a critical.'),
-         )
-         ),
+             help=_('For this tests the monitoring state will be WARNING if the test result is not "Passed", '
+                    'all other failed tests set the monitoring state to CRITICAL.'),
+         )),
     ])
 
 
@@ -44,8 +61,7 @@ rulespec_registry.register(
     CheckParameterRulespecWithItem(
         check_group_name='checkpoint_asg_diag',
         group=RulespecGroupCheckParametersNetworking,
-        item_spec=lambda: TextAscii(title=_('Check Point ASG Diag'), ),
         match_type='dict',
         parameter_valuespec=_parameter_valuespec_checkpoint_asg_diag,
         title=lambda: _('Check Point ASG Diag'),
-    ))
\ No newline at end of file
+    ))
-- 
GitLab