From 80391d28fd69dfeef5738b1ef077ceea008c1bd9 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Fri, 27 Aug 2021 00:09:51 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_securexl.py         | 141 +++++++++++++++++++++
 checkpoint_securexl.mkp                    | Bin 2057 -> 2374 bytes
 packages/checkpoint_securexl               |  17 ++-
 web/plugins/metrics/checkpoint_securexl.py |  49 +++----
 4 files changed, 176 insertions(+), 31 deletions(-)
 create mode 100644 agent_based/checkpoint_securexl.py

diff --git a/agent_based/checkpoint_securexl.py b/agent_based/checkpoint_securexl.py
new file mode 100644
index 0000000..fc69fa1
--- /dev/null
+++ b/agent_based/checkpoint_securexl.py
@@ -0,0 +1,141 @@
+#!/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  : 2018-03-14
+#
+# Monitor status of Check Point SecureXL
+#
+# 2020-06-08: changed snmp-scan function
+#             renamed from checkpoint_securexl_status to checkpoint_securexl
+# 2021-08-26: rewritten for CMK 2.0
+#
+# snmpwalk sample
+#
+# CHECKPOINT-MIB::fwSXLStatus.0 = INTEGER: enabled(1)
+# CHECKPOINT-MIB::fwSXLConnsExisting.0 = Wrong Type (should be INTEGER): Gauge32: 51
+# CHECKPOINT-MIB::fwSXLConnsAdded.0 = Wrong Type (should be INTEGER): Gauge32: 630
+# CHECKPOINT-MIB::fwSXLConnsDeleted.0 = Wrong Type (should be INTEGER): Gauge32: 578
+# 
+# .1.3.6.1.4.1.2620.1.36.1.1.0 = INTEGER: 1
+# .1.3.6.1.4.1.2620.1.36.1.2.0 = Gauge32: 40
+# .1.3.6.1.4.1.2620.1.36.1.3.0 = Gauge32: 645
+# .1.3.6.1.4.1.2620.1.36.1.4.0 = Gauge32: 604
+#
+# sample info
+#
+# [[u'1', u'48', u'7932', u'7986']]
+#
+import time
+from dataclasses import dataclass
+from typing import Optional
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    Service,
+    check_levels,
+    SNMPTree,
+    all_of,
+    startswith,
+    any_of,
+    equals,
+    get_rate,
+    GetRateError,
+    get_value_store,
+    Result,
+    State,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    DiscoveryResult,
+    CheckResult,
+    StringTable,
+)
+
+
+@dataclass
+class CheckpointSecurexl:
+    fwSXLStatus: int
+    fwSXLConnsExisting: int
+    fwSXLConnsAdded: int
+    fwSXLConnsDeleted: int
+
+
+def parse_checkpoint_securexl(string_table: StringTable) -> Optional[CheckpointSecurexl]:
+    try:
+        wSXLStatus, fwSXLConnsExisting, fwSXLConnsAdded, fwSXLConnsDeleted = string_table[0]
+    except (ValueError, IndexError):
+        return
+
+    return CheckpointSecurexl(
+        fwSXLStatus=int(wSXLStatus),
+        fwSXLConnsExisting=int(fwSXLConnsExisting),
+        fwSXLConnsDeleted=int(fwSXLConnsDeleted),
+        fwSXLConnsAdded=int(fwSXLConnsAdded),
+    )
+
+
+def discovery_checkpoint_securexl(section: CheckpointSecurexl) -> DiscoveryResult:
+    yield Service()
+
+
+def check_checkpoint_securexl(section: CheckpointSecurexl) -> CheckResult:
+    if section.fwSXLStatus == 1:
+
+        now_time = time.time()
+        value_store = get_value_store()
+
+        yield from check_levels(
+            value=section.fwSXLConnsExisting,
+            label='Connections active',
+            metric_name='checkpoint_securexl_active',
+            render_func=lambda v: f'{v:.0f}'
+        )
+
+        for label, metric, value in [
+            ('added', 'added', section.fwSXLConnsAdded),
+            ('deleted', 'deleted', section.fwSXLConnsDeleted),
+        ]:
+            try:
+                value = get_rate(value_store, f'checkpoint_securexl_{metric}', now_time, value, raise_overflow=True)
+            except GetRateError:
+                value = 0
+            yield from check_levels(
+                value=value,
+                label=label,
+                metric_name=f'checkpoint_securexl_{metric}',
+                render_func=lambda v: f'{v:0.2f}/s',
+            )
+    else:
+        yield Result(state=State.WARN, notice='SXL not enabled')
+
+
+register.snmp_section(
+    name='checkpoint_securexl',
+    parse_function=parse_checkpoint_securexl,
+    fetch=SNMPTree(
+        base='.1.3.6.1.4.1.2620.1.36.1',  #
+        oids=[
+            '1',  # fwSXLStatus
+            '2',  # fwSXLConnsExisting
+            '3',  # fwSXLConnsAdded
+            '4',  # fwSXLConnsDeleted
+        ]
+    ),
+    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_securexl',
+    service_name='SecureXL',
+    discovery_function=discovery_checkpoint_securexl,
+    check_function=check_checkpoint_securexl,
+)
diff --git a/checkpoint_securexl.mkp b/checkpoint_securexl.mkp
index 7e7251bf3e12ecfbb3731529633b84ac046d57f2..1753e24eb19995802998ab032a43ef5b8493a5eb 100644
GIT binary patch
literal 2374
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

literal 2057
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

diff --git a/packages/checkpoint_securexl b/packages/checkpoint_securexl
index 7741455..266afe9 100644
--- a/packages/checkpoint_securexl
+++ b/packages/checkpoint_securexl
@@ -1,11 +1,14 @@
-{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': u'Monitors Check Point SecureXL status\nhas Perfdata for: active, added and deleted connections\nWarning if status not enabled\n',
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Monitors Check Point SecureXL status\n'
+                'has Perfdata for: active, added and deleted connections\n'
+                'Warning if status not enabled\n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'checks': ['checkpoint_securexl'],
+ 'files': {'agent_based': ['checkpoint_securexl.py'],
            'web': ['plugins/metrics/checkpoint_securexl.py']},
  'name': 'checkpoint_securexl',
  'num_files': 2,
- 'title': u'Check Point SecureXL status',
- 'version': '20200608.v.0.0.2',
- 'version.min_required': '1.2.8b8',
- 'version.packaged': '1.4.0p38'}
\ No newline at end of file
+ 'title': 'Check Point SecureXL status',
+ 'version': '20210826.v.0.0.3',
+ '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/metrics/checkpoint_securexl.py b/web/plugins/metrics/checkpoint_securexl.py
index 8b6e2ed..8634597 100644
--- a/web/plugins/metrics/checkpoint_securexl.py
+++ b/web/plugins/metrics/checkpoint_securexl.py
@@ -1,5 +1,5 @@
-#!/usr/bin/python
-# -*- encoding: utf-8; py-indent-offset: 4 -*-
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
 #
 # License: GNU General Public License v2
 #
@@ -10,48 +10,49 @@
 # Check Point SecureXL staus metrics plugin
 # checkpoint_securexl
 #
-metric_info['checkpoint_securexl_connections_active'] = {
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics import (
+    metric_info,
+    graph_info,
+    perfometer_info,
+)
+
+metric_info['checkpoint_securexl_active'] = {
     'title': _('Connections active'),
     'unit': 'count',
     'color': '26/a',
 }
-metric_info['checkpoint_securexl_connections_added'] = {
+metric_info['checkpoint_securexl_added'] = {
     'title': _('Connections added'),
     'unit': '1/s',
     'color': '21/a',
 }
-metric_info['checkpoint_securexl_connections_deleted'] = {
+metric_info['checkpoint_securexl_deleted'] = {
     'title': _('Connections deleted'),
     'unit': '1/s',
     'color': '31/a',
 }
 
-check_metrics['check_mk-checkpoint_securexl'] = {
-    'connections_active': {'name': 'checkpoint_securexl_connections_active', },
-    'connections_added': {'name': 'checkpoint_securexl_connections_added', },
-    'connections_deleted': {'name': 'checkpoint_securexl_connections_deleted', },
-}
-
-graph_info.append({
+graph_info['checkpoint_securexl_connections_active'] = {
     'title': _('Check Point SecureXL Connections active'),
     'metrics': [
-        ('checkpoint_securexl_connections_active', 'area'),
+        ('checkpoint_securexl_active', 'area'),
 
     ],
-})
+}
 
-graph_info.append({
+graph_info['checkpoint_securexl_connections_rate'] = {
     'title': _('Check Point SecureXL Connections added/deleted'),
     'metrics': [
-        ('checkpoint_securexl_connections_deleted', '-area'),
-        ('checkpoint_securexl_connections_added', 'area'),
+        ('checkpoint_securexl_deleted', '-area'),
+        ('checkpoint_securexl_added', 'area'),
     ],
-})
-
+}
 
 perfometer_info.append({
-        'type': 'logarithmic',
-        'metric': 'checkpoint_securexl_connections_active',
-        'half_value': 2000.0,
-        'exponent': 2,
-    },)
\ No newline at end of file
+    'type': 'logarithmic',
+    'metric': 'checkpoint_securexl_active',
+    'half_value': 2000.0,
+    'exponent': 2,
+}, )
-- 
GitLab