From aecc3e24caeda5a772ac182f029accdfe5997bea Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Mon, 6 Sep 2021 20:59:15 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_vsx.py         | 257 ++++++++++++++++++++++++++
 checkpoint_vsx.mkp                    | Bin 44 -> 4042 bytes
 packages/checkpoint_vsx               |   2 +-
 web/plugins/metrics/checkpoint_vsx.py |  36 ++--
 4 files changed, 271 insertions(+), 24 deletions(-)
 create mode 100644 agent_based/checkpoint_vsx.py

diff --git a/agent_based/checkpoint_vsx.py b/agent_based/checkpoint_vsx.py
new file mode 100644
index 0000000..c0ad057
--- /dev/null
+++ b/agent_based/checkpoint_vsx.py
@@ -0,0 +1,257 @@
+#!/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  : 2017-17-05
+#
+# Check Point vsx Cluster status
+#
+# Monitor status of virtual systems in Check Point vsx/vsls cluster
+#
+# 2018-08-03: changed snmp scan function
+# 2018-08-13: code cleanup, add metrics
+# 2020-06-08: changed snmp-scan function
+# 2021-09-06: rewritten for CMK 2.0
+#
+# snmpwalk sample
+#
+# .1.3.6.1.4.1.2620.1.16.22.1.1.1.3.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.16.22.1.1.2.3.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.16.22.1.1.3.3.0 = STRING: "HRI"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.4.3.0 = STRING: "Virtual System"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.5.3.0 = STRING: "10.140.1.3"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.6.3.0 = STRING: "Standard"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.7.3.0 = STRING: "Active"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.8.3.0 = STRING: "Trust established"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.9.3.0 = STRING: "Standby"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.10.3.0 = Gauge32: 0
+#
+# .1.3.6.1.4.1.2620.1.16.23.1.1.2.3.0 = Gauge32: 40
+# .1.3.6.1.4.1.2620.1.16.23.1.1.3.3.0 = Gauge32: 864
+# .1.3.6.1.4.1.2620.1.16.23.1.1.4.3.0 = Gauge32: 14900
+# .1.3.6.1.4.1.2620.1.16.23.1.1.5.3.0 = STRING: "69459"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.6.3.0 = STRING: "2405"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.7.3.0 = STRING: "67054"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.8.3.0 = STRING: "0"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.9.3.0 = STRING: "4228862"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.10.3.0 = STRING: "72445"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.11.3.0 = STRING: "0"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.12.3.0 = STRING: "7074"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.13.3.0 = INTEGER: 0
+#
+import time
+from dataclasses import dataclass
+from typing import List, Dict, Optional, Tuple
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    Service,
+    Result,
+    State,
+    SNMPTree,
+    all_of,
+    startswith,
+    any_of,
+    equals,
+    Metric,
+    get_value_store,
+    get_rate,
+    GetRateError,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    DiscoveryResult,
+    CheckResult,
+    StringTable,
+)
+
+
+@dataclass
+class CheckpointVsx:
+    vsxStatusVSId: str
+    vsxStatusVsType: str
+    vsxStatusMainIP: str
+    vsxStatusPolicyName: str
+    vsxStatusVsPolicyType: str
+    vsxStatusSicTrustState: str
+    vsxStatusHAState: str
+    vsxStatusVSWeight: str
+    vsxCountersConnNum: int
+    vsxCountersConnPeakNum: int
+    vsxCountersConnTableLimit: int
+    vsxCountersIsDataValid: str
+    metrics_rate: List[Tuple[str, int]]
+
+
+def parse_checkpoint_vsx_system(string_table: StringTable) -> Optional[Dict[str, CheckpointVsx]]:
+    vsx_systems = {}
+    for entry in string_table:
+        try:
+            vsxStatusVSId, vsxStatusVsName, vsxStatusVsType, vsxStatusMainIP, vsxStatusPolicyName, vsxStatusVsPolicyType, \
+            vsxStatusSicTrustState, vsxStatusHAState, vsxStatusVSWeight, vsxCountersConnNum, vsxCountersConnPeakNum, \
+            vsxCountersConnTableLimit, vsxCountersPackets, vsxCountersDroppedTotal, vsxCountersAcceptedTotal, \
+            vsxCountersRejectedTotal, vsxCountersBytesAcceptedTotal, vsxCountersBytesDroppedTotal, \
+            vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal, vsxCountersIsDataValid = entry
+        except ValueError:
+            return
+        if vsxStatusVsType.lower() in ['virtual system']:  # , 'vsx gateway', 'virtual switch', 'virtual router'
+            vsx_systems[vsxStatusVsName] = CheckpointVsx(
+                vsxStatusVSId=vsxStatusVSId,
+                vsxStatusVsType=vsxStatusVsType,
+                vsxStatusMainIP=vsxStatusMainIP,
+                vsxStatusPolicyName=vsxStatusPolicyName,
+                vsxStatusVsPolicyType=vsxStatusVsPolicyType,
+                vsxStatusSicTrustState=vsxStatusSicTrustState,
+                vsxStatusHAState=vsxStatusHAState,
+                vsxStatusVSWeight=vsxStatusVSWeight,
+                vsxCountersConnNum=int(vsxCountersConnNum),
+                vsxCountersConnPeakNum=int(vsxCountersConnPeakNum),
+                vsxCountersConnTableLimit=int(vsxCountersConnTableLimit),
+                vsxCountersIsDataValid=vsxCountersIsDataValid,
+                metrics_rate=[
+                    ('packets_processed', int(vsxCountersPackets)),
+                    ('packets_dropped', int(vsxCountersDroppedTotal)),
+                    ('packets_accepted', int(vsxCountersAcceptedTotal)),
+                    ('packets_rejected', int(vsxCountersRejectedTotal)),
+                    ('bytes_accepted', int(vsxCountersBytesAcceptedTotal)),
+                    ('bytes_dropped', int(vsxCountersBytesDroppedTotal)),
+                    ('bytes_rejected', int(vsxCountersBytesRejectedTotal)),
+                    ('loggs_send', int(vsxCountersLoggedTotal)),
+                ],
+            )
+    return vsx_systems
+
+
+def discovery_checkpoint_vsx_system(section: Dict[str, CheckpointVsx]) -> DiscoveryResult:
+    for key in section.keys():
+        yield Service(
+            item=key,
+            parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState}
+        )
+
+
+def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx]) -> CheckResult:
+    try:
+        vsx = section[item]
+    except KeyError:
+        yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data')
+        return
+
+    now_time = time.time()
+    value_store = get_value_store()
+    metrics_prefix = 'checkpoint_vsx_'
+
+    for key, value in vsx.metrics_rate:
+        try:
+            value = get_rate(value_store, f'{metrics_prefix}{key}', now_time, int(value), raise_overflow=True)
+        except GetRateError:
+            value = 0
+        yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None))
+
+    # system information
+    yield Result(state=State.OK, summary=f'Main IP: {vsx.vsxStatusMainIP}, VS ID: {vsx.vsxStatusVSId}', details=' ')
+    # Counters
+    # infotext = f'Connections: {vsx.vsxCountersConnNum:.0f}, ' \
+    #            f'Packets prosessed: {vsx.vsxCountersPackets:.0f}/s, ' \
+    #            f'Logs send: {vsx.vsxCountersLoggedTotal:0.2f}/s')
+
+    yield Result(state=State.OK, notice=f'System name: {item}')
+    yield Result(state=State.OK, notice=f'Virtual system ID: {vsx.vsxStatusVSId}')
+    yield Result(state=State.OK, notice=f'Type: {vsx.vsxStatusVsType}')
+    yield Result(state=State.OK, notice=f'Weight: {vsx.vsxStatusVSWeight}')
+    yield Result(state=State.OK, notice=f'Main IP: {vsx.vsxStatusMainIP}')
+    yield Result(state=State.OK, notice=f'Policy name: {vsx.vsxStatusPolicyName}')
+    yield Result(state=State.OK, notice=f'Policy type: {vsx.vsxStatusVsPolicyType}')
+    yield Result(state=State.OK, notice=f'SIC status: {vsx.vsxStatusSicTrustState}')
+
+    yield Result(state=State.OK, notice=f'Conn table limit: {vsx.vsxCountersConnTableLimit}')
+    yield Result(state=State.OK, notice=f'Is data valid: {vsx.vsxCountersIsDataValid}')
+
+    if vsx.vsxCountersConnTableLimit > 0:
+        yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections',
+                     boundaries=(0, vsx.vsxCountersConnTableLimit),
+                     levels=(None, vsx.vsxCountersConnTableLimit))
+    else:
+        yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections')
+    yield Metric(value=vsx.vsxCountersConnPeakNum, name=f'{metrics_prefix}connections_peak')
+
+    if not vsx.vsxStatusHAState.lower() in ['active', 'standby']:
+        yield Result(state=State.WARN, summary=f'H/A Status: {vsx.vsxStatusHAState}')
+    else:
+        yield Result(state=State.OK, summary=f'H/A Status: {vsx.vsxStatusHAState}')
+
+    if not vsx.vsxStatusSicTrustState.lower() in ['trust established']:
+        yield Result(state=State.WARN, notice='SIC not established')
+
+    if not vsx.vsxStatusVsPolicyType.lower() in ['active']:
+        yield Result(state=State.CRIT, notice='No policy installed')
+
+    if params['policyname'] != vsx.vsxStatusPolicyName:  # policy changed
+        yield Result(
+            state=State.WARN,
+            notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}'
+        )
+
+    if params['ha_state'] != vsx.vsxStatusHAState:  # H/A state changed
+        yield Result(
+            state=State.WARN,
+            notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}'
+        )
+
+
+register.snmp_section(
+    name='checkpoint_vsx_system',
+    parse_function=parse_checkpoint_vsx_system,
+    supersedes=[
+        'checkpoint_vsx',
+        'checkpoint_vsx_connections',
+        'checkpoint_vsx_traffic',
+        'checkpoint_vsx_packets',
+        'checkpoint_vsx_status',
+    ],
+    fetch=SNMPTree(
+        base='.1.3.6.1.4.1.2620.1.16',  # CHECKPOINT-MIB::vsx
+        oids=[
+            '22.1.1.1',   # vsxStatusVSId
+            '22.1.1.3',  # vsxStatusVsName
+            '22.1.1.4',  # vsxStatusVsType
+            '22.1.1.5',  # vsxStatusMainIP
+            '22.1.1.6',  # vsxStatusPolicyName
+            '22.1.1.7',  # vsxStatusVsPolicyType
+            '22.1.1.8',  # vsxStatusSicTrustState
+            '22.1.1.9',  # vsxStatusHAState
+            '22.1.1.10',  # vsxStatusVSWeight
+            '23.1.1.2',  # vsxCountersConnNum
+            '23.1.1.3',  # vsxCountersConnPeakNum
+            '23.1.1.4',  # vsxCountersConnTableLimit
+            '23.1.1.5',  # vsxCountersPackets
+            '23.1.1.6',  # vsxCountersDroppedTotal
+            '23.1.1.7',  # vsxCountersAcceptedTotal
+            '23.1.1.8',  # vsxCountersRejectedTotal
+            '23.1.1.9',  # vsxCountersBytesAcceptedTotal
+            '23.1.1.10',  # vsxCountersBytesDroppedTotal
+            '23.1.1.11',  # vsxCountersBytesRejectedTotal
+            '23.1.1.12',  # vsxCountersLoggedTotal
+            '23.1.1.13',  # vsxCountersIsDataValid
+        ]),
+    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_vsx_system',
+    service_name='VSX System %s',
+    discovery_function=discovery_checkpoint_vsx_system,
+    check_function=check_checkpoint_vsx_system,
+    check_ruleset_name='checkpoint_vsx_system',
+    check_default_parameters={
+        'vsType': ['virtual system', 'vsx gateway', 'virtual switch', 'virtual router']
+    },
+)
diff --git a/checkpoint_vsx.mkp b/checkpoint_vsx.mkp
index bad2a15f09c29ce110000d7df390deac591fef16..daaecabfd99fbd0ffe02b7a9a423efb61f5cefc4 100644
GIT binary patch
literal 4042
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
ae>d_!rTsq||Com12?GIjodksh1pfhpdeXcA

delta 13
UcmX>lufrza&A~A*Wg?pz02)ODl>h($

diff --git a/packages/checkpoint_vsx b/packages/checkpoint_vsx
index cd48699..078afc8 100644
--- a/packages/checkpoint_vsx
+++ b/packages/checkpoint_vsx
@@ -9,7 +9,7 @@
                 ' - monitors VSX virtual system counters '
                 '(connections/packets/bytes/logs).\n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'agent_based': ['checkpoint_vsx.ps'],
+ 'files': {'agent_based': ['checkpoint_vsx.py'],
            'web': ['plugins/metrics/checkpoint_vsx.py']},
  'name': 'checkpoint_vsx',
  'num_files': 2,
diff --git a/web/plugins/metrics/checkpoint_vsx.py b/web/plugins/metrics/checkpoint_vsx.py
index a4700f2..d423fd9 100644
--- a/web/plugins/metrics/checkpoint_vsx.py
+++ b/web/plugins/metrics/checkpoint_vsx.py
@@ -17,6 +17,7 @@ from cmk.gui.plugins.metrics import (
     graph_info,
     perfometer_info,
 )
+
 metric_info['checkpoint_vsx_connections'] = {
     'title': _('Connections active'),
     'unit': 'count',
@@ -70,35 +71,25 @@ metric_info['checkpoint_vsx_bytes_rejected'] = {
     'color': '33/a',
 }
 
-metric_info['checkpoint_vsx_logges_send'] = {
+metric_info['checkpoint_vsx_loggs_send'] = {
     'title': _('Loggs send'),
     'unit': '1/s',
     'color': '14/a',
 }
 
-check_metrics['check_mk-checkpoint_vsx'] = {
-    'connections': {'name': 'checkpoint_vsx_connections', },
-    'connections_peak': {'name': 'checkpoint_vsx_connections_peak', },
-    'connections_limit': {'name': 'checkpoint_vsx_connections_limit', },
-    'packets_processed': {'name': 'checkpoint_vsx_packets_processed', },
-    'packets_dropped': {'name': 'checkpoint_vsx_packets_dropped', },
-    'packets_accepted': {'name': 'checkpoint_vsx_packets_accepted', },
-    'packets_rejected': {'name': 'checkpoint_vsx_packets_rejected', },
-    'bytes_accepted': {'name': 'checkpoint_vsx_bytes_accepted', },
-    'bytes_dropped': {'name': 'checkpoint_vsx_bytes_dropped', },
-    'bytes_rejected': {'name': 'checkpoint_vsx_bytes_rejected', },
-    'logges_send': {'name': 'checkpoint_vsx_logges_send', },
-}
-
-graph_info['checkpoint_vsx_connections']={
+graph_info['checkpoint_vsx_connections'] = {
     'title': _('Check Point VSX: Connections'),
     'metrics': [
         ('checkpoint_vsx_connections_peak', 'line'),
         ('checkpoint_vsx_connections', 'area'),
-    ]
+    ],
+    'scalars': [
+        ('checkpoint_vsx_connections:crit', _('crit')),
+        # ('checkpoint_vsx_connections:warn', _('warn')),
+    ],
 }
 
-graph_info['checkpoint_vsx_packets']={
+graph_info['checkpoint_vsx_packets'] = {
     'title': _('Check Point VSX: Packets'),
     'metrics': [
         ('checkpoint_vsx_packets_rejected', 'line'),
@@ -108,7 +99,7 @@ graph_info['checkpoint_vsx_packets']={
     ]
 }
 
-graph_info['checkpoint_vsx_bytes']={
+graph_info['checkpoint_vsx_bytes'] = {
     'title': _('Check Point VSX: Bytes'),
     'metrics': [
         ('checkpoint_vsx_bytes_rejected', 'line'),
@@ -117,7 +108,7 @@ graph_info['checkpoint_vsx_bytes']={
     ]
 }
 
-graph_info['checkpoint_vsx_logges_send']={
+graph_info['checkpoint_vsx_logges_send'] = {
     'title': _('Check Point VSX: Logs'),
     'metrics': [
         ('checkpoint_vsx_logges_send', 'line'),
@@ -128,14 +119,13 @@ perfometer_info.append(('stacked', [
     {
         'type': 'logarithmic',
         'metric': 'checkpoint_vsx_connections',
-        'half_value': 259200.0,
+        'half_value': 50000.0,
         'exponent': 2,
     },
     {
         'type': 'logarithmic',
         'metric': 'checkpoint_vsx_packets_processed',
-        'half_value': 25920.0,
+        'half_value': 50000.0,
         'exponent': 2,
     },
 ]))
-
-- 
GitLab