From 4346fbfa1f5ff518a3a5cf83271a09f51cd10e7a Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Wed, 7 Jun 2023 16:18:59 +0200
Subject: [PATCH] update project

---
 cisco_vpn_tunnel-0.4.0-20230607.mkp | Bin 0 -> 6397 bytes
 cisco_vpn_tunnel.mkp                | Bin 6413 -> 6397 bytes
 gui/metrics/cisco_vpn_tunnel.py     | 329 ++++++++++++++++++++++++++++
 gui/wato/cisco_vpn_tunnel.py        | 112 ++++++++++
 packages/cisco_vpn_tunnel           |   7 +-
 5 files changed, 444 insertions(+), 4 deletions(-)
 create mode 100644 cisco_vpn_tunnel-0.4.0-20230607.mkp
 create mode 100644 gui/metrics/cisco_vpn_tunnel.py
 create mode 100644 gui/wato/cisco_vpn_tunnel.py

diff --git a/cisco_vpn_tunnel-0.4.0-20230607.mkp b/cisco_vpn_tunnel-0.4.0-20230607.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..caf319ae4986237fae6e42e4770e93d1e0b94ad5
GIT binary patch
literal 6397
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

literal 0
HcmV?d00001

diff --git a/cisco_vpn_tunnel.mkp b/cisco_vpn_tunnel.mkp
index 29d37d1b291d301ee969286efbc7c50d0d5c90d0..caf319ae4986237fae6e42e4770e93d1e0b94ad5 100644
GIT binary patch
delta 6344
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
KXHsSW$N&J=1cFKc

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

diff --git a/gui/metrics/cisco_vpn_tunnel.py b/gui/metrics/cisco_vpn_tunnel.py
new file mode 100644
index 0000000..45025ae
--- /dev/null
+++ b/gui/metrics/cisco_vpn_tunnel.py
@@ -0,0 +1,329 @@
+#!/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-12-29
+#
+# Cisco VPN Tunnel metrics plugin
+#
+
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics.utils import (
+    metric_info,
+    graph_info,
+    perfometer_info,
+)
+
+#####################################################################################################################
+#
+# define metrics for bgp peer perfdata
+#
+#####################################################################################################################
+
+
+metric_info['cisco_vpn_tunnel_cikeTunActiveTime'] = {
+    'title': _('IKE active time'),
+    'help': _(''),
+    'unit': 's',
+    'color': '26/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunInOctets'] = {
+    'title': _('IKE Bytes in'),
+    'unit': 'bytes/s',
+    'color': '11/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutOctets'] = {
+    'title': _('IKE Bytes out'),
+    'help': _(''),
+    'unit': 'bytes/s',
+    'color': '21/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunInPkts'] = {
+    'title': _('IKE packets in'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '31/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutPkts'] = {
+    'title': _('IKE packets out'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '41/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunInDropPkts'] = {
+    'title': _('IKE packets dropped in'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '12/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutDropPkts'] = {
+    'title': _('IKE packets dropped out'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '22/a',
+}
+
+metric_info['cisco_vpn_tunnel_cikeTunInNotifys'] = {
+    'title': _('IKE in notifies'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '32/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutNotifys'] = {
+    'title': _('IKE out notifies'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '42/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunInP2Exchgs'] = {
+    'title': _('IKE in phase 2 exchanges'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '13/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutP2Exchgs'] = {
+    'title': _('IKE out phase 2 exchanges'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '23/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunInP2ExchgInvalids'] = {
+    'title': _('IKE in phase 2 exchanges invalid'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '33/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutP2ExchgInvalids'] = {
+    'title': _('IKE out phase 2 exchanges invalid'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '43/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunInP2ExchgRejects'] = {
+    'title': _('IKE in phase 2 exchanges rejected'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '14/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutP2ExchgRejects'] = {
+    'title': _('IKE out phase 2 exchanges rejected'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '24/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunInP2SaDelRequests'] = {
+    'title': _('IKE in phase 2 SA delete requests'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '34/a',
+}
+metric_info['cisco_vpn_tunnel_cikeTunOutP2SaDelRequests'] = {
+    'title': _('IKE out phase 2 SA delete requests'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '44/a',
+}
+
+# IPSec counter
+
+metric_info['cisco_vpn_tunnel_cipSecTunActiveTime'] = {
+    'title': _('IPSec active time'),
+    'help': _(''),
+    'unit': 's',
+    'color': '26/b',
+}
+
+metric_info['cisco_vpn_tunnel_ipsec_sa_count'] = {
+    'title': _('IPSec SA count'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '12/b',
+}
+
+metric_info['cisco_vpn_tunnel_cipSecTunHcInOctets'] = {
+    'title': _('IPSec Bytes in'),
+    'help': _(''),
+    'unit': 'bytes/s',
+    'color': '11/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunHcOutOctets'] = {
+    'title': _('IPSec Bytes out'),
+    'help': _(''),
+    'unit': 'bytes/s',
+    'color': '21/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunInPkts'] = {
+    'title': _('IPSec packets in'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '31/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunOutPkts'] = {
+    'title': _('IPSec packets out'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '41/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunInDropPkts'] = {
+    'title': _('IPSec packets dropped in'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '11/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunOutDropPkts'] = {
+    'title': _('IPSec packets dropped out'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '21/b',
+}
+
+metric_info['cisco_vpn_tunnel_cipSecTunHcInDecompOctets'] = {
+    'title': _('IPSec in decompressed octets'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '32/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunHcOutUncompOctets'] = {
+    'title': _('IPSec out compressed octets'),
+    'help': _(''),
+    'unit': '1/s',
+    'color': '41/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunInAuths'] = {
+    'title': _('IPSec in authentication\'s'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '13/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunOutAuths'] = {
+    'title': _('IPSec out authentication\'s'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '23/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunInAuthFails'] = {
+    'title': _('IPSec in authentication\'s failed'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '33/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunOutAuthFails'] = {
+    'title': _('IPSec out authentication\'s failed'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '43/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunInDecrypts'] = {
+    'title': _('IPSec in decryption\'s'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '15/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunOutEncrypts'] = {
+    'title': _('IPSec out encryption\'s'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '25/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunInDecryptFails'] = {
+    'title': _('IPSec in decryption\'s failed'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '35/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunOutEncryptFails'] = {
+    'title': _('IPSec out encryption\'s failed'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '45/b',
+}
+metric_info['cisco_vpn_tunnel_cipSecTunInReplayDropPkts'] = {
+    'title': _('IPSec in replay packets dropped'),
+    'help': _(''),
+    'unit': 'count',
+    'color': '16/b',
+}
+
+######################################################################################################################
+#
+# how to graph perdata for cisco_vpn_tunnel
+#
+######################################################################################################################
+
+
+graph_info['cisco_vpn_tunnel_ike_uptime'] = {
+    'title': _('IKE active time'),
+    'metrics': [
+        ('cisco_vpn_tunnel_cikeTunActiveTime', 'area'),
+    ],
+}
+graph_info['cisco_vpn_tunnel_ike_octets'] = {
+    'title': _('IKE Bytes/s'),
+    'metrics': [
+        ('cisco_vpn_tunnel_cikeTunOutOctets', '-area'),
+        ('cisco_vpn_tunnel_cikeTunInOctets', 'area'),
+    ],
+}
+graph_info['cisco_vpn_tunnel_ike_packets'] = {
+    'title': _('IKE packets/s'),
+    'metrics': [
+        ('cisco_vpn_tunnel_cikeTunOutDropPkts', '-line'),
+        ('cisco_vpn_tunnel_cikeTunInDropPkts', 'line'),
+        ('cisco_vpn_tunnel_cikeTunOutPkts', '-line'),
+        ('cisco_vpn_tunnel_cikeTunInPkts', 'line'),
+    ],
+}
+
+graph_info['cisco_vpn_tunnel_ipsec_uptime'] = {
+    'title': _('IPSec active time'),
+    'metrics': [
+        ('cisco_vpn_tunnel_cipSecTunActiveTime', 'area'),
+    ],
+}
+graph_info['cisco_vpn_tunnel_ipsec_sa_count'] = {
+    'title': _('IPSec SA count'),
+    'metrics': [
+        ('cisco_vpn_tunnel_ipsec_sa_count', 'area'),
+    ],
+}
+graph_info['cisco_vpn_tunnel_ipsec_octets'] = {
+    'title': _('IPSec Bytes/s'),
+    'metrics': [
+        ('cisco_vpn_tunnel_cipSecTunHcOutOctets', '-area'),
+        ('cisco_vpn_tunnel_cipSecTunHcInOctets', 'area'),
+    ],
+}
+graph_info['cisco_vpn_tunnel_pckets'] = {
+    'title': _('IPSec packets/s'),
+    'metrics': [
+        ('cisco_vpn_tunnel_cipSecTunOutDropPkts', '-stack'),
+        ('cisco_vpn_tunnel_cipSecTunInDropPkts', 'stack'),
+        ('cisco_vpn_tunnel_cipSecTunOutPkts', '-stack'),
+        ('cisco_vpn_tunnel_cipSecTunInPkts', 'stack'),
+    ],
+}
+
+######################################################################################################################
+#
+# define perf-o-meter for cisco_vpn_tunnel uptime active time
+#
+######################################################################################################################
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'cisco_vpn_tunnel_cikeTunActiveTime',
+        'half_value': 2592000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'cisco_vpn_tunnel_cipSecTunActiveTime',
+        'half_value': 2592000.0,
+        'exponent': 2,
+    },
+]))
diff --git a/gui/wato/cisco_vpn_tunnel.py b/gui/wato/cisco_vpn_tunnel.py
new file mode 100644
index 0000000..3addeb9
--- /dev/null
+++ b/gui/wato/cisco_vpn_tunnel.py
@@ -0,0 +1,112 @@
+#!/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-12-28
+
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    TextAscii,
+    Tuple,
+    MonitoringState,
+    ListOf,
+    IPv4Address,
+    TextUnicode,
+    FixedValue,
+)
+
+from cmk.gui.plugins.wato.utils import (
+    CheckParameterRulespecWithItem,
+    rulespec_registry,
+    RulespecGroupCheckParametersNetworking,
+    RulespecGroupCheckParametersDiscovery,
+    HostRulespec,
+)
+
+
+def _parameter_valuespec_cisco_vpn_tunnel():
+    return Dictionary(
+        elements=[
+            ('tunnels',
+             ListOf(
+                 Tuple(
+                     title=_('VPN Tunnel Endpoints'),
+                     elements=[
+                         IPv4Address(
+                             title=_('Peer IP-Address'),
+                             help=_('The configured value must match a tunnel reported by the monitored '
+                                    'device.'),
+                         ),
+                         TextUnicode(
+                             title=_('Tunnel Alias'),
+                             help=_('You can configure an individual alias here for the tunnel matching '
+                                    'the IP-Address or Name configured in the field above.'),
+                         ),
+                         MonitoringState(
+                             default_value=2,
+                             title=_('State if tunnel is not found'),
+                         ),
+                         MonitoringState(
+                             default_value=1,
+                             title=_('State if tunnel has no active IPSec SA'),
+                         ),
+                     ]),
+                 add_label=_('Add tunnel'),
+                 movable=False,
+                 title=_('VPN tunnel specific configuration'),
+             )),
+            ('state',
+             MonitoringState(
+                 title=_('Default state to report when tunnel can not be found anymore'),
+                 help=_('Default state if a tunnel, which is not listed above in this rule, '
+                        'can no longer be found.'),
+                 default_value=2,
+             )),
+            ('missing_ipsec_sa_state',
+             MonitoringState(
+                 title=_('Default state to report when tunnel has no active IPSec SA'),
+                 help=_('Default state if a tunnel, which is not listed above in this rule, '
+                        'has no active IPSec SA.'),
+                 default_value=1,
+             )),
+        ],
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name='cisco_vpn_tunnel',
+        group=RulespecGroupCheckParametersNetworking,
+        item_spec=lambda: TextAscii(title=_('IP-Address of Tunnel Endpoint'), ),
+        match_type='dict',
+        parameter_valuespec=_parameter_valuespec_cisco_vpn_tunnel,
+        title=lambda: _('Cisco VPN Tunnel'),
+    ))
+
+
+def _valuespec_discovery_cisco_vpn_tunnel():
+    return Dictionary(
+            title=_('VPN Tunnel discovery'),
+            elements=[(
+                'discover_aggressive_mode',
+                FixedValue(
+                    True,
+                    default_value=False,
+                    title=_('Discover aggressive mode VPN Tunnel'),
+                    totext=_('Discover aggressive mode VPN Tunnel'),
+                ),
+            )],
+        )
+
+
+rulespec_registry.register(
+    HostRulespec(
+        group=RulespecGroupCheckParametersDiscovery,
+        match_type='dict',
+        name='discovery_cisco_vpn_tunnel',
+        valuespec=_valuespec_discovery_cisco_vpn_tunnel,
+    ))
diff --git a/packages/cisco_vpn_tunnel b/packages/cisco_vpn_tunnel
index c31c390..c6352d6 100644
--- a/packages/cisco_vpn_tunnel
+++ b/packages/cisco_vpn_tunnel
@@ -6,11 +6,10 @@
                 'in/out octets and packets.\n',
  'download_url': 'https://thl-cmk.hopto.org',
  'files': {'agent_based': ['cisco_vpn_tunnel.py'],
-           'web': ['plugins/metrics/cisco_vpn_tunnel.py',
-                   'plugins/wato/cisco_vpn_tunnel.py']},
+           'gui': ['metrics/cisco_vpn_tunnel.py', 'wato/cisco_vpn_tunnel.py']},
  'name': 'cisco_vpn_tunnel',
  'title': 'Monitor Cisco VPN Tunnel',
- 'version': '20230607.v0.4',
- 'version.min_required': '2.0.0b1',
+ 'version': '0.4.0-20230607',
+ 'version.min_required': '2.1.0b1',
  'version.packaged': '2.1.0p21',
  'version.usable_until': None}
\ No newline at end of file
-- 
GitLab