From b9b5fa8b2a9a73117e121e3aeb00ccc48db9d6fe Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Mon, 29 May 2023 16:46:17 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_vsx_system.py     |   1 +
 checkman/checkpoint_vsx_system           |   9 +-
 checkpoint_vsx_system-0.4.0-20230529.mkp | Bin 0 -> 6360 bytes
 checkpoint_vsx_system.mkp                | Bin 5731 -> 6360 bytes
 gui/metrics/checkpoint_vsx_system.py     | 138 +++++++++++++++++++++++
 gui/wato/checkpoint_vsx_system.py        | 131 +++++++++++++++++++++
 packages/checkpoint_vsx_system           |  12 +-
 7 files changed, 280 insertions(+), 11 deletions(-)
 create mode 100644 checkpoint_vsx_system-0.4.0-20230529.mkp
 create mode 100644 gui/metrics/checkpoint_vsx_system.py
 create mode 100644 gui/wato/checkpoint_vsx_system.py

diff --git a/agent_based/checkpoint_vsx_system.py b/agent_based/checkpoint_vsx_system.py
index 9c7114f..d906990 100644
--- a/agent_based/checkpoint_vsx_system.py
+++ b/agent_based/checkpoint_vsx_system.py
@@ -22,6 +22,7 @@
 #             the active connections (suggested by raulcurro[at]gmail[dot]com)
 #             moved Main IP to details, if it is not an IPv4 address
 # 2022-10-23: fixed warning on upgrade "non-empty params vanished" for policyname and ha_state
+# 2023-05-29: moved gui files to ~/local/lib/check_mk/gui/plugins/...
 #
 # snmpwalk sample
 #
diff --git a/checkman/checkpoint_vsx_system b/checkman/checkpoint_vsx_system
index a94a921..7cf5bf2 100644
--- a/checkman/checkpoint_vsx_system
+++ b/checkman/checkpoint_vsx_system
@@ -6,11 +6,11 @@ license: GPL
 distribution: check_mk
 description:
  This plugin monitors the state of Check Point VSX gateways.
- With default settings the VSX system gets {critical} if the H/A state is other than activ/standby, 
- the SIC trust is not established or the policy type is not active. The monitoring state becomes 
- {warning} if the policy name or the H/A state is differnet from discovery time. All this states are 
+ With default settings the VSX system gets {critical} if the H/A state is other than activ/standby,
+ the SIC trust is not established or the policy type is not active. The monitoring state becomes
+ {warning} if the policy name or the H/A state is differnet from discovery time. All this states are
  configurable via WATO.
- 
+
 item:
  The system name.
 
@@ -41,4 +41,3 @@ Here you can define all the monitoring states.
          'state_policy_changed': 1,  # policy name changed
          'state_ha_changed': 1,  # H/A state changed
         }
-
diff --git a/checkpoint_vsx_system-0.4.0-20230529.mkp b/checkpoint_vsx_system-0.4.0-20230529.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..016ade099771945f98c99a34b47b1cba44f23d7b
GIT binary patch
literal 6360
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

literal 0
HcmV?d00001

diff --git a/checkpoint_vsx_system.mkp b/checkpoint_vsx_system.mkp
index f335a03ae8961d13940c10c580473ea43cfaba67..016ade099771945f98c99a34b47b1cba44f23d7b 100644
GIT binary patch
literal 6360
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

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

diff --git a/gui/metrics/checkpoint_vsx_system.py b/gui/metrics/checkpoint_vsx_system.py
new file mode 100644
index 0000000..55692d0
--- /dev/null
+++ b/gui/metrics/checkpoint_vsx_system.py
@@ -0,0 +1,138 @@
+#!/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-13
+#
+# Check Point VSX status metrics plugin
+# checkpoint_vsx
+#
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics.utils import (
+    metric_info,
+    graph_info,
+    perfometer_info,
+    check_metrics,
+)
+
+metric_info['checkpoint_vsx_connections'] = {
+    'title': _('Connections active'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_vsx_connections_peak'] = {
+    'title': _('Connections peak'),
+    'unit': 'count',
+    'color': '21/a',
+}
+metric_info['checkpoint_vsx_connections_limit'] = {
+    'title': _('Connections limit'),
+    'unit': 'count',
+    'color': '31/a',
+}
+
+metric_info['checkpoint_vsx_packets_processed'] = {
+    'title': _('Packets processed'),
+    'unit': '1/s',
+    'color': '12/a',
+}
+metric_info['checkpoint_vsx_packets_dropped'] = {
+    'title': _('Packets dropped'),
+    'unit': '1/s',
+    'color': '22/a',
+}
+metric_info['checkpoint_vsx_packets_accepted'] = {
+    'title': _('Packets accepted'),
+    'unit': '1/s',
+    'color': '32/a',
+}
+metric_info['checkpoint_vsx_packets_rejected'] = {
+    'title': _('Packets rejected'),
+    'unit': '1/s',
+    'color': '42/a',
+}
+
+metric_info['checkpoint_vsx_bytes_accepted'] = {
+    'title': _('Bytes accepted'),
+    'unit': 'bytes/s',
+    'color': '13/a',
+}
+metric_info['checkpoint_vsx_bytes_dropped'] = {
+    'title': _('Bytes dropped'),
+    'unit': 'bytes/s',
+    'color': '23/a',
+}
+metric_info['checkpoint_vsx_bytes_rejected'] = {
+    'title': _('Bytes rejected'),
+    'unit': 'bytes/s',
+    'color': '33/a',
+}
+
+metric_info['checkpoint_vsx_loggs_send'] = {
+    'title': _('Loggs send'),
+    'unit': '1/s',
+    'color': '14/a',
+}
+
+check_metrics['check_mk-checkpoint_vsx_system'] = {
+    'checkpoint_vsx_connections_peak':  {'auto_graph': False},
+    'checkpoint_vsx_connections_limit':  {'auto_graph': False},
+}
+
+graph_info['checkpoint_vsx_connections'] = {
+    'title': _('Check Point VSX: Connections'),
+    'metrics': [
+        ('checkpoint_vsx_connections', 'area'),
+    ],
+    'scalars': [
+        ('checkpoint_vsx_connections:crit', _('crit')),
+        ('checkpoint_vsx_connections:warn', _('warn')),
+        ('checkpoint_vsx_connections_limit', _('limit')),
+        ('checkpoint_vsx_connections_peak', _('peak')),
+    ],
+}
+
+graph_info['checkpoint_vsx_packets'] = {
+    'title': _('Check Point VSX: Packets'),
+    'metrics': [
+        ('checkpoint_vsx_packets_rejected', 'stack'),
+        ('checkpoint_vsx_packets_dropped', 'stack'),
+        ('checkpoint_vsx_packets_accepted', 'stack'),
+        ('checkpoint_vsx_packets_processed', 'line'),
+    ]
+}
+
+graph_info['checkpoint_vsx_bytes'] = {
+    'title': _('Check Point VSX: Bytes'),
+    'metrics': [
+        ('checkpoint_vsx_bytes_rejected', 'line'),
+        ('checkpoint_vsx_bytes_dropped', 'line'),
+        ('checkpoint_vsx_bytes_accepted', 'line'),
+    ]
+}
+
+graph_info['checkpoint_vsx_loggs_send'] = {
+    'title': _('Check Point VSX: Logs'),
+    'metrics': [
+        ('checkpoint_vsx_loggs_send', 'area'),
+    ]
+}
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_vsx_connections',
+        'half_value': 50000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_vsx_packets_processed',
+        'half_value': 50000.0,
+        'exponent': 2,
+    },
+]))
diff --git a/gui/wato/checkpoint_vsx_system.py b/gui/wato/checkpoint_vsx_system.py
new file mode 100644
index 0000000..2f1e6d3
--- /dev/null
+++ b/gui/wato/checkpoint_vsx_system.py
@@ -0,0 +1,131 @@
+#!/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  : 2021-09-07
+#
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    TextAscii,
+    Tuple,
+    Integer,
+    MonitoringState,
+    ListChoice,
+    TextUnicode,
+)
+
+from cmk.gui.plugins.wato.utils import (
+    CheckParameterRulespecWithItem,
+    rulespec_registry,
+    RulespecGroupCheckParametersNetworking,
+    RulespecGroupCheckParametersDiscovery,
+    HostRulespec,
+)
+
+
+def _parameter_valuespec_checkpoint_vsx_system():
+    return Dictionary(
+        elements=[
+            ('levels_upper_absolute',
+             Tuple(
+                 title=_('Maximum number of firewall connections'),
+                 help=_('This rule sets upper limits to the current number of connections through '
+                        'a Checkpoint firewall.'),
+                 elements=[
+                     Integer(title=_('Warning at'), minvalue=0, unit=_('connections')),
+                     Integer(title=_('Critical at'), minvalue=0, unit=_('connections')),
+                 ])),
+            ('levels_lower_absolute',
+             Tuple(
+                 title=_('Minimum number of firewall connections'),
+                 help=_('This rule sets lower limits to the current number of connections through '
+                        'a Checkpoint firewall.'),
+                 elements=[
+                     Integer(title=_('Warning blow'), minvalue=0, unit=_('connections')),
+                     Integer(title=_('Critical below'), minvalue=0, unit=_('connections')),
+                 ])),
+            ('state_sic_not_established',
+             MonitoringState(
+                 title=_('State if SIC is not established'),
+                 help=_('Monitoring state if SIC is not established'),
+                 default_value=2,
+             )),
+            ('state_ha_not_act_stb',
+             MonitoringState(
+                 title=_('State if H/A state not active/standby'),
+                 help=_('Monitoring state if H/A state not active or standby'),
+                 default_value=2,
+             )),
+            ('state_policy_not_installed',
+             MonitoringState(
+                 title=_('State if no policy is installed'),
+                 help=_('Monitoring state if no policy is installed'),
+                 default_value=2,
+             )),
+            ('state_policy_changed',
+             MonitoringState(
+                 title=_('State on policy name change'),
+                 help=_('Monitoring status on policy name change'),
+                 default_value=1,
+             )),
+            ('state_ha_changed',
+             MonitoringState(
+                 title=_('State on H/A state change'),
+                 help=_('Monitoring status on H/A state change'),
+                 default_value=1,
+             )),
+            ('policyname',  # added by plugin discovery function
+             TextUnicode()),
+            ('ha_state',  # added by plugin discovery function
+             TextUnicode()),
+        ],
+        hidden_keys=['policyname', 'ha_state'],
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name='checkpoint_vsx_system',
+        group=RulespecGroupCheckParametersNetworking,
+        match_type='dict',
+        parameter_valuespec=_parameter_valuespec_checkpoint_vsx_system,
+        title=lambda: _('Check Point VSX system'),
+        item_spec=lambda: TextAscii(title=_('VSX System name'), ),
+    ))
+
+
+def _valuespec_discovery_checkpoint_vsx_system():
+    _vs_types = [
+        ('virtual system', 'Virtual System'),
+        ('vsx gateway', 'VSX Gateway'),
+        ('virtual switch', 'Virtual Switch'),
+        ('virtual router', 'Virtual Router'),
+    ]
+    return Dictionary(
+            title=_('Check Point VSX system'),
+            elements=[
+                ('vs_type',
+                 ListChoice(
+                     title=_('VS types to discover'),
+                     help=_('Virtual system types to discover. Note: if you select "VSX Gateway", '
+                            'this will also discover ClusterXL systems.'),
+                     choices=_vs_types,
+                     default_value=[
+                         'virtual system',
+                     ],
+                 )),
+            ],
+        )
+
+
+rulespec_registry.register(
+    HostRulespec(
+        group=RulespecGroupCheckParametersDiscovery,
+        match_type='dict',
+        name='discovery_checkpoint_vsx_system',
+        valuespec=_valuespec_discovery_checkpoint_vsx_system,
+    ))
diff --git a/packages/checkpoint_vsx_system b/packages/checkpoint_vsx_system
index 917e539..ee4de64 100644
--- a/packages/checkpoint_vsx_system
+++ b/packages/checkpoint_vsx_system
@@ -13,12 +13,12 @@
                 'checkpoint_vsx_status\n',
  'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/check-point/gateway/checkpoint_vsx_system',
  'files': {'agent_based': ['checkpoint_vsx_system.py'],
-           'web': ['plugins/metrics/checkpoint_vsx_system.py',
-                   'plugins/wato/checkpoint_vsx_system.py']},
+           'checkman': ['checkpoint_vsx_system'],
+           'gui': ['metrics/checkpoint_vsx_system.py',
+                   'wato/checkpoint_vsx_system.py']},
  'name': 'checkpoint_vsx_system',
- 'num_files': 3,
  'title': 'Check Point VSX system status and counter',
- 'version': '20221023.v.0.3c',
- 'version.min_required': '2.0.0',
- 'version.packaged': '2021.09.20',
+ 'version': '0.4.0-20230529',
+ 'version.min_required': '2.1.0b1',
+ 'version.packaged': '2.1.0p21',
  'version.usable_until': None}
\ No newline at end of file
-- 
GitLab