From ffb3da95bd8b37f2b3178b26145ec6ee31ef4bac Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sun, 23 Apr 2023 19:08:42 +0200
Subject: [PATCH] update project

---
 CHANGELOG                        |   3 +
 agent_based/checkpoint_fw_ls.py  | 171 ++++++++++++++++---------------
 agent_based/checkpoint_fwm_ls.py | 119 +++++++++++----------
 checkman/checkpoint_fw_ls        |  52 +++++-----
 checkpoint_log_server.mkp        | Bin 6707 -> 6712 bytes
 gui/metrics/checkpoint_fw_log.py | 143 ++++++++++++++++++++++++++
 gui/wato/checkpoint_fw_ls.py     |  55 ++++++++++
 gui/wato/checkpoint_fwm_ls.py    |  46 +++++++++
 packages/checkpoint_log_server   |  13 ++-
 9 files changed, 435 insertions(+), 167 deletions(-)
 create mode 100644 gui/metrics/checkpoint_fw_log.py
 create mode 100644 gui/wato/checkpoint_fw_ls.py
 create mode 100644 gui/wato/checkpoint_fwm_ls.py

diff --git a/CHANGELOG b/CHANGELOG
index e7d0bc9..b1f5762 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -8,3 +8,6 @@
 2021-06-14: rewrite for cmk 2.0, added wato for checkpoint_fw_ls
 2021-08-09: fixed empty string_table, fixed log server default state
 2021-08-16: code cleanup
+2023-04-23: refactoring
+            moved wato files to ~/local/lib/check_mk/gui/plugins/wato
+	    moved metrics file to ~/local/lib/check_mk/gui/plugins/metrics
diff --git a/agent_based/checkpoint_fw_ls.py b/agent_based/checkpoint_fw_ls.py
index 5319ef1..7ab842f 100644
--- a/agent_based/checkpoint_fw_ls.py
+++ b/agent_based/checkpoint_fw_ls.py
@@ -16,25 +16,27 @@
 # 2021-06-14: rewrite for cmk 2.0, added wato
 # 2021-08-09: fixed empty string_table, fixed log server default state
 # 2021-08-16: code cleanup
+# 2023-04-23: refactoring
+
 #
 # sample snmpwalk
 #
 # CHECKPOINT-MIB::fwLSConnOverall.0 = INTEGER: 0
 # CHECKPOINT-MIB::fwLSConnOverallDesc.0 = STRING: Security Gateway is reporting logs as defined
-# CHECKPOINT-MIB::fwLSConnIndex.1.0 = Gauge32: 1
-# CHECKPOINT-MIB::fwLSConnIndex.2.0 = Gauge32: 2
-# CHECKPOINT-MIB::fwLSConnName.1.0 = STRING: 10.140.2.203
-# CHECKPOINT-MIB::fwLSConnName.2.0 = STRING: 10.140.2.103
-# CHECKPOINT-MIB::fwLSConnState.1.0 = Gauge32: 0
-# CHECKPOINT-MIB::fwLSConnState.2.0 = Gauge32: 2
-# CHECKPOINT-MIB::fwLSConnStateDesc.1.0 = STRING: Log-Server Connected
-# CHECKPOINT-MIB::fwLSConnStateDesc.2.0 = STRING: Log-Server Disconnected
-# CHECKPOINT-MIB::fwLSConnSendRate.1.0 = Gauge32: 0
-# CHECKPOINT-MIB::fwLSConnSendRate.2.0 = Gauge32: 0
+# CHECKPOINT-MIB::index.1.0 = Gauge32: 1
+# CHECKPOINT-MIB::index.2.0 = Gauge32: 2
+# CHECKPOINT-MIB::name.1.0 = STRING: 10.140.2.203
+# CHECKPOINT-MIB::name.2.0 = STRING: 10.140.2.103
+# CHECKPOINT-MIB::state.1.0 = Gauge32: 0
+# CHECKPOINT-MIB::state.2.0 = Gauge32: 2
+# CHECKPOINT-MIB::state_desc.1.0 = STRING: Log-Server Connected
+# CHECKPOINT-MIB::state_desc.2.0 = STRING: Log-Server Disconnected
+# CHECKPOINT-MIB::send_rate.1.0 = Gauge32: 0
+# CHECKPOINT-MIB::send_rate.2.0 = Gauge32: 0
 # CHECKPOINT-MIB::fwLocalLoggingDesc.0 = STRING: Logs are written to log server
 # CHECKPOINT-MIB::fwLocalLoggingStat.0 = INTEGER: 0
-# CHECKPOINT-MIB::fwLocalLoggingWriteRate.0 = Gauge32: 0
-# CHECKPOINT-MIB::fwLoggingHandlingRate.0 = Gauge32: 0
+# CHECKPOINT-MIB::local_logging_write_rate.0 = Gauge32: 0
+# CHECKPOINT-MIB::logging_handling_rate.0 = Gauge32: 0
 #
 # .1.3.6.1.4.1.2620.1.1.30.1.0 = INTEGER: 0
 # .1.3.6.1.4.1.2620.1.1.30.2.0 = STRING: "Security Gateway is reporting logs as defined"
@@ -56,29 +58,27 @@
 #
 # sample info
 # log server running
-# [[[u'0', u'Security Gateway is reporting logs as defined', u'Logs are written to log server', u'0']],
-#  [[u'1', u'192.168.10.10', u'0', u'Log-Server Connected'],
-#   [u'2', u'192.168.10.11', u'2', u'Backup Log-Server Not Active']]]
+# [[['0', 'Security Gateway is reporting logs as defined', 'Logs are written to log server', '0']],
+#  [['1', '192.168.10.10', '0', 'Log-Server Connected'],
+#   ['2', '192.168.10.11', '2', 'Backup Log-Server Not Active']]]
 #
 # no log server
 # [[], []]
 #
 
 from typing import NamedTuple, List, Dict, Optional
-
 from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
     DiscoveryResult,
     CheckResult,
     StringTable,
 )
-
 from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     register,
     Service,
     equals,
     Result,
     State,
-    Metric,
+    check_levels,
     SNMPTree,
     startswith,
     all_of,
@@ -87,29 +87,29 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
 
 
 class CheckPointFwLsOverAll(NamedTuple):
-    fwlsconnoverall: int
-    fwlsconnoveralldesc: str
-    fwlocalloggingdesc: str
-    fwlocalloggingstat: int
-    fwLocalLoggingWriteRate: Optional[int]
-    fwLoggingHandlingRate: Optional[int]
+    conn_over_all: int
+    conn_over_all_desc: str
+    local_logging_desc: str
+    local_logging_stat: int
+    local_logging_write_rate: Optional[int]
+    logging_handling_rate: Optional[int]
 
 
 class CheckPointFwLs(NamedTuple):
-    fwLSConnIndex: int
-    fwLSConnName: str
-    fwLSConnState: int
-    fwLSConnStateDesc: str
-    fwLSConnSendRate: Optional[int]
+    index: int
+    name: str
+    state: int
+    state_desc: str
+    send_rate: Optional[int]
 
 
-_fwLSConnState_des = {
+_state_desc = {
     0: 'Ok',
     1: 'Error',
     2: 'Not Active',
 }
 
-_fwLocalLoggingStat = {
+_state = {
     0: 'Logging to log servers',
     1: 'Logging local configured',
     2: 'Logging local due to connectivity',
@@ -117,79 +117,90 @@ _fwLocalLoggingStat = {
 }
 
 
-def parse_checkpoint_fw_ls(string_table: List[StringTable]) -> Optional[Dict]:
+def parse_checkpoint_fw_ls(string_table: List[StringTable]) -> Optional[Dict[str, any]]:
     over_all, log_servers = string_table
     try:
-        fwlsconnoverall, fwlsconnoveralldesc, fwlocalloggingdesc, fwlocalloggingstat, fwlocalloggingwriterate, \
-        fwlogginghandlingrate = over_all[0]
+        conn_over_all, conn_over_all_desc, local_logging_desc, local_logging_stat, local_logging_write_rate, \
+        logging_handling_rate = over_all[0]
     except (IndexError, ValueError):
         return
 
     parsed = {}
     parsed.update({'over all': CheckPointFwLsOverAll(
-        fwlsconnoverall=int(fwlsconnoverall),
-        fwlsconnoveralldesc=fwlsconnoveralldesc,
-        fwlocalloggingdesc=fwlocalloggingdesc,
-        fwlocalloggingstat=int(fwlocalloggingstat),
-        fwLocalLoggingWriteRate=int(fwlocalloggingwriterate) if fwlocalloggingwriterate.isdigit() else None,
-        fwLoggingHandlingRate=int(fwlogginghandlingrate) if fwlogginghandlingrate.isdigit() else None,
+        conn_over_all=int(conn_over_all),
+        conn_over_all_desc=conn_over_all_desc,
+        local_logging_desc=local_logging_desc,
+        local_logging_stat=int(local_logging_stat),
+        local_logging_write_rate=int(local_logging_write_rate) if local_logging_write_rate.isdigit() else None,
+        logging_handling_rate=int(logging_handling_rate) if logging_handling_rate.isdigit() else None,
     )})
 
-    for fwLSConnIndex, fwLSConnName, fwLSConnState, fwLSConnStateDesc, fwLSConnSendRate in log_servers:
-        parsed.update({fwLSConnName: CheckPointFwLs(
-            fwLSConnIndex=int(fwLSConnIndex),
-            fwLSConnName=fwLSConnName,
-            fwLSConnState=int(fwLSConnState),
-            fwLSConnStateDesc=fwLSConnStateDesc,
-            fwLSConnSendRate=int(fwLSConnSendRate) if fwLSConnSendRate.isdigit() else None,
+    for index, name, state, state_desc, send_rate in log_servers:
+        parsed.update({name: CheckPointFwLs(
+            index=int(index),
+            name=name,
+            state=int(state),
+            state_desc=state_desc,
+            send_rate=int(send_rate) if send_rate.isdigit() else None,
         )})
 
         return parsed
 
 
-def discovery_checkpoint_fw_ls(section: Dict) -> DiscoveryResult:
+def discovery_checkpoint_fw_ls(section: Dict[str, any]) -> DiscoveryResult:
     for key in section.keys():
         yield Service(item=key)
 
 
-def check_checkpoint_fw_ls(item, params, section: Dict) -> CheckResult:
+def check_checkpoint_fw_ls(item, params, section: Dict[str, any]) -> CheckResult:
     if item == 'over all':
         over_all = section['over all']
 
-        if over_all.fwLocalLoggingWriteRate is not None:  # R80.10 and up
-            yield Metric(name='checkpoint_fw_ls_localloggingwriterate', value=over_all.fwLocalLoggingWriteRate)
-        if over_all.fwLoggingHandlingRate is not None:
-            yield Metric(name='checkpoint_fw_ls_logginghandlingrate', value=over_all.fwLoggingHandlingRate)
-
-        yield Result(state=State(over_all.fwlsconnoverall), summary=over_all.fwlsconnoveralldesc)
-        if over_all.fwlocalloggingdesc != '':
-            if over_all.fwlocalloggingstat in [1, 3]:
-                yield Result(state=State.WARN, summary=over_all.fwlocalloggingdesc)
-            elif over_all.fwlocalloggingstat == 2:
-                yield Result(state=State.CRIT, summary=over_all.fwlocalloggingdesc)
+        yield Result(state=State(over_all.conn_over_all), summary=over_all.conn_over_all_desc)
+        if over_all.local_logging_desc != '':
+            if over_all.local_logging_stat in [1, 3]:
+                yield Result(state=State.WARN, summary=over_all.local_logging_desc)
+            elif over_all.local_logging_stat == 2:
+                yield Result(state=State.CRIT, summary=over_all.local_logging_desc)
             else:
-                yield Result(state=State.OK, notice=over_all.fwlocalloggingdesc)
+                yield Result(state=State.OK, notice=over_all.local_logging_desc)
+
+        for key, value, label in [
+            ('checkpoint_fw_ls_logginghandlingrate', over_all.logging_handling_rate, 'Logging handling rate'),
+            ('checkpoint_fw_ls_localloggingwriterate', over_all.local_logging_write_rate, 'Local logging write rate'),
+        ]:
+            if value is not None:
+                yield from check_levels(
+                    value=value,
+                    label=label,
+                    metric_name=key,
+                    render_func=lambda v: f'{v}/s',
+                    boundaries=(0, None),
+                )
+
     else:
         try:
             log_server = section[item]
-        except IndexError:
+        except KeyError:
             return
 
-        print(params)
-        if log_server.fwLSConnSendRate is not None:  # R80.10 and up
-            yield Metric(name='checkpoint_fw_ls_lsconnsendrate', value=log_server.fwLSConnSendRate)
-
-        if log_server.fwLSConnState == 1:
+        if log_server.state == 1:
             yield Result(state=State.CRIT, summary='State: Connection error')
         else:
-            yield Result(state=State.OK, summary=f'State: {log_server.fwLSConnStateDesc}')
+            yield Result(state=State.OK, summary=f'State: {log_server.state_desc}')
 
-        exp_connection_state = params['exp_connection_status']
-        mon_connection_state = params['mon_connection_state']
+        if log_server.state_desc.lower() != params["exp_connection_status"].lower():
+            yield Result(state=State(params["mon_connection_state"]),
+                         summary=f'Expected connection state: {params["exp_connection_status"]}')
 
-        if log_server.fwLSConnStateDesc.lower() != exp_connection_state.lower():
-            yield Result(state=State(mon_connection_state),
-                         summary=f'Expected connection state: {exp_connection_state}')
+        if log_server.send_rate is not None:  # R80.10 and up
+            yield from check_levels(
+                value=log_server.send_rate,
+                label='Sending rate',
+                metric_name='checkpoint_fw_ls_lsconnsendrate',
+                render_func=lambda v: f'{v}/s',
+                boundaries=(0, None),
+            )
 
 
 register.snmp_section(
@@ -203,18 +214,18 @@ register.snmp_section(
                 '2',  # fwLSConnOverallDesc
                 '4',  # fwLocalLoggingDesc
                 '5',  # fwLocalLoggingStat
-                '6',  # fwLocalLoggingWriteRate
-                '7',  # fwLoggingHandlingRate
+                '6',  # local_logging_write_rate
+                '7',  # logging_handling_rate
             ]
         ),
         SNMPTree(
             base='.1.3.6.1.4.1.2620.1.1.30.3.1',  # CHECKPOINT-MIB::fwLSConnEntry
             oids=[
-                '1',  # fwLSConnIndex
-                '2',  # fwLSConnName
-                '3',  # fwLSConnState
-                '4',  # fwLSConnStateDesc
-                '5',  # fwLSConnSendRate
+                '1',  # index
+                '2',  # name
+                '3',  # state
+                '4',  # state_desc
+                '5',  # send_rate
             ]
         )
 
diff --git a/agent_based/checkpoint_fwm_ls.py b/agent_based/checkpoint_fwm_ls.py
index 57b01eb..c3fd60a 100644
--- a/agent_based/checkpoint_fwm_ls.py
+++ b/agent_based/checkpoint_fwm_ls.py
@@ -17,7 +17,7 @@
 # 2021-06-14: rewrite for cmk 2.0
 # 2021-08-09: fixed empty string_table
 # 2021-08-16: code cleanup
-#
+# 2023-04-23: refactoring
 
 #
 # sample snmpwalk (R77.30)
@@ -86,10 +86,10 @@
 # CHECKPOINT-MIB::lsGWState.1.0 = STRING: Connected
 # CHECKPOINT-MIB::lsGWLastLoginTime.1.0 = STRING: N/A
 # CHECKPOINT-MIB::lsGWLogReceiveRate.1.0 = Gauge32: 0
-# CHECKPOINT-MIB::lsIndexerInfoTotalReadLogs.0 = Wrong Type (should be Gauge32 or Unsigned32): STRING: "20171"
-# CHECKPOINT-MIB::lsIndexerInfoTotalUpdatesAndLogsIndexed.0 = Wrong Type (should be Gauge32 or Unsigned32): STRING: "2607010"
-# CHECKPOINT-MIB::lsIndexerInfoTotalReadLogsErrors.0 = Wrong Type (should be Gauge32 or Unsigned32): STRING: "0"
-# CHECKPOINT-MIB::lsIndexerInfoTotalUpdatesAndLogsIndexedErrors.0 = Wrong Type (should be Gauge32 or Unsigned32): STRING: "9021"
+# CHECKPOINT-MIB::lsIndexerInfoTotalReadLogs.0 = STRING: "20171"
+# CHECKPOINT-MIB::lsIndexerInfoTotalUpdatesAndLogsIndexed.0 = STRING: "2607010"
+# CHECKPOINT-MIB::lsIndexerInfoTotalReadLogsErrors.0 = STRING: "0"
+# CHECKPOINT-MIB::lsIndexerInfoTotalUpdatesAndLogsIndexedErrors.0 = STRING: "9021"
 # CHECKPOINT-MIB::lsIndexerInfoUpdatesAndLogsIndexedRate.0 = Gauge32: 4
 # CHECKPOINT-MIB::lsIndexerInfoReadLogsRate.0 = Gauge32: 0
 # CHECKPOINT-MIB::lsIndexerInfoUpdatesAndLogsIndexedRatePeak.0 = Gauge32: 10
@@ -137,20 +137,18 @@
 # .1.3.6.1.4.1.2620.1.11.103.0 = STRING: "Log Server is not running"
 #
 # sample info
-# [[[u'Check Point Log Server', u'6', u'0', u'4663', u'1', u'0', u'OK', u'OK']], []]
+# [[['Check Point Log Server', '6', '0', '4663', '1', '0', 'OK', 'OK']], []]
 #
 # no logserver active
 # [[], []]
 #
 
 from typing import NamedTuple, List, Optional
-
 from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
     DiscoveryResult,
     CheckResult,
     StringTable,
 )
-
 from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     register,
     Service,
@@ -158,6 +156,7 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     Result,
     State,
     Metric,
+    check_levels,
     SNMPTree,
     startswith,
     all_of,
@@ -166,20 +165,20 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
 
 
 class CheckPointFwmR77(NamedTuple):
-    lsvermajor: str
-    lsverminor: str
-    lsbuildnumber: int
-    lsfwmisalive: int
-    lsstatcode: int
-    lsstatshortdescr: str
-    lsstatlongdescr: str
+    ver_major: str
+    ver_minor: str
+    build_number: int
+    is_alive: int
+    state: int
+    state_short_desc: str
+    state_long_desc: str
 
 
 class CheckPointFwmR80(NamedTuple):
-    UpdatesAndLogsIndexedRate: int
-    ReadLogsRate: int
-    UpdatesAndLogsIndexedRatePeak: int
-    ReadLogsRatePeak: int
+    updates_and_logs_indexed_rate: int
+    read_logs_rate: int
+    updates_and_logs_indexed_rate_peak: int
+    read_logs_rate_peak: int
 
 
 class CheckPointFwm(NamedTuple):
@@ -189,44 +188,40 @@ class CheckPointFwm(NamedTuple):
 
 def parse_checkpoint_fwm_ls(string_table: List[StringTable]) -> Optional[CheckPointFwm]:
     try:
-        lsvermajor, lsverminor, lsbuildnumber, lsfwmisalive, lsstatcode, lsstatshortdescr, \
-        lsstatlongdescr = string_table[0][0]
+        ver_major, ver_minor, build_number, is_alive, state, state_short_desc, \
+        state_long_desc = string_table[0][0]
     except (IndexError, ValueError):
         return
 
-    checkpointfwmr77 = CheckPointFwmR77(
-        lsvermajor=lsvermajor,
-        lsverminor=lsverminor,
-        lsbuildnumber=lsbuildnumber,
-        lsfwmisalive=int(lsfwmisalive),
-        lsstatcode=int(lsstatcode),
-        lsstatshortdescr=lsstatshortdescr,
-        lsstatlongdescr=lsstatlongdescr,
+    r77 = CheckPointFwmR77(
+        ver_major=ver_major,
+        ver_minor=ver_minor,
+        build_number=build_number,
+        is_alive=int(is_alive),
+        state=int(state),
+        state_short_desc=state_short_desc,
+        state_long_desc=state_long_desc,
     )
 
     try:
-        UpdatesAndLogsIndexedRate, ReadLogsRate, UpdatesAndLogsIndexedRatePeak, ReadLogsRatePeak = string_table[1][0]
-    except IndexError:
-        return CheckPointFwm(
-            R77=checkpointfwmr77,
-            R80=None,
-        )
-    except ValueError:
+        updates_and_logs_indexed_rate, read_logs_rate, updates_and_logs_indexed_rate_peak, \
+        read_logs_rate_peak = string_table[1][0]
+    except (IndexError, ValueError):
         return CheckPointFwm(
-            R77=checkpointfwmr77,
+            R77=r77,
             R80=None,
         )
 
-    checkpointfwmr80 = CheckPointFwmR80(
-        UpdatesAndLogsIndexedRate=int(UpdatesAndLogsIndexedRate),
-        ReadLogsRate=int(ReadLogsRate),
-        UpdatesAndLogsIndexedRatePeak=int(UpdatesAndLogsIndexedRatePeak),
-        ReadLogsRatePeak=int(ReadLogsRatePeak),
+    r80 = CheckPointFwmR80(
+        updates_and_logs_indexed_rate=int(updates_and_logs_indexed_rate),
+        read_logs_rate=int(read_logs_rate),
+        updates_and_logs_indexed_rate_peak=int(updates_and_logs_indexed_rate_peak),
+        read_logs_rate_peak=int(read_logs_rate_peak),
     )
 
     return CheckPointFwm(
-        R77=checkpointfwmr77,
-        R80=checkpointfwmr80,
+        R77=r77,
+        R80=r80,
     )
 
 
@@ -235,22 +230,38 @@ def discovery_checkpoint_fwm_ls(section: CheckPointFwm) -> DiscoveryResult:
 
 
 def check_checkpoint_fwm_ls(params, section: CheckPointFwm) -> CheckResult:
-    yield Result(state=State.OK, summary=f'Version: {section.R77.lsvermajor}.{section.R77.lsverminor}')
-    yield Result(state=State.OK, summary=f'Build: {section.R77.lsbuildnumber}')
+    yield Result(state=State.OK, summary=f'Version: {section.R77.ver_major}.{section.R77.ver_minor}')
+    yield Result(state=State.OK, summary=f'Build: {section.R77.build_number}')
 
     if not params['ignore_status_on_r80_10']:
-        if section.R77.lsfwmisalive != 1:
+        if section.R77.is_alive != 1:
             yield Result(state=State.CRIT, summary='Is not alive')
-        if section.R77.lsstatcode != 0:
+        if section.R77.state != 0:
             yield Result(state=State.CRIT,
-                         summary=f'Status: {section.R77.lsstatshortdescr}',
-                         details=f'Status: {section.R77.lsstatlongdescr}')
+                         summary=f'Status: {section.R77.state_short_desc}',
+                         details=f'Status: {section.R77.state_long_desc}')
+
     if section.R80 is not None:
+        for key, value, label in [
+            ('checkpoint_fwm_ls_readlogsrate',
+             section.R80.read_logs_rate,
+             'Logs read rate'),
+            ('checkpoint_fwm_ls_updatesandlogsindexedrate',
+             section.R80.updates_and_logs_indexed_rate,
+             'Updates and logs index rate',),
+        ]:
+            if value is not None:
+                yield from check_levels(
+                    label=label,
+                    value=value,
+                    metric_name=key,
+                    render_func=lambda v: f'{v}/s',
+                    boundaries=(0, None),
+                )
+
         for key, value in [
-            ('checkpoint_fwm_ls_updatesandlogsindexedrate', section.R80.UpdatesAndLogsIndexedRate),
-            ('checkpoint_fwm_ls_updatesandlogsindexedratepeak', section.R80.UpdatesAndLogsIndexedRatePeak),
-            ('checkpoint_fwm_ls_readlogsrate', section.R80.ReadLogsRate),
-            ('checkpoint_fwm_ls_readlogsratepeak', section.R80.ReadLogsRatePeak),
+            ('checkpoint_fwm_ls_updatesandlogsindexedratepeak', section.R80.updates_and_logs_indexed_rate_peak),
+            ('checkpoint_fwm_ls_readlogsratepeak', section.R80.read_logs_rate_peak),
         ]:
             if value is not None:
                 yield Metric(name=key, value=value)
diff --git a/checkman/checkpoint_fw_ls b/checkman/checkpoint_fw_ls
index 29a1f88..5df3d27 100644
--- a/checkman/checkpoint_fw_ls
+++ b/checkman/checkpoint_fw_ls
@@ -1,26 +1,26 @@
-title: Checkpoint Firewalls: Status of Connection to the log server
-agents: snmp
-catalog: hw/network/checkpoint
-license: GPL
-distribution: https://thl-cmk.hopto.org
-description:
- This check monitors the connection form the firewall to the log server.
- The service for the log server connection will be in the state {CRIT} if there
- is an connection error or the connection state changes (for example form connected
- to disconnected). The overall state changes to {WARN}/{CRIT} if the gateway
- reports an overall state of error or warning. For "Local Logging" the over all
- service changes to {WARN} if the gateway reports "local logging configured" or
- "local logging due to high rate". If the Gateway reports "Logging local due to
- connectivity" the overall state changes to {CRIT}.
-
- This check was tested with Check Point R77.10/R77.20/R77.30 and R80.10.
-
- Note: the perfdata may not be available on R77.x
-
-inventory:
- The inventory creates one service for each log server and one service for the
- over all log server connection status.
-
-item:
- The item will be created from the IP address of the log server(s). For the over
- all service the item is static "over all".
+title: Checkpoint Firewalls: Status of Connection to the log server
+agents: snmp
+catalog: hw/network/checkpoint
+license: GPL
+distribution: https://thl-cmk.hopto.org
+description:
+ This check monitors the connection form the firewall to the log server.
+ The service for the log server connection will be in the state {CRIT} if there
+ is an connection error or the connection state changes (for example form connected
+ to disconnected). The overall state changes to {WARN}/{CRIT} if the gateway
+ reports an overall state of error or warning. For "Local Logging" the over all
+ service changes to {WARN} if the gateway reports "local logging configured" or
+ "local logging due to high rate". If the Gateway reports "Logging local due to
+ connectivity" the overall state changes to {CRIT}.
+
+ This check was tested with Check Point R77.10/R77.20/R77.30 and R80.10.
+
+ Note: the perfdata may not be available on R77.x
+
+inventory:
+ The inventory creates one service for each log server and one service for the
+ over all log server connection status.
+
+item:
+ The item will be created from the IP address of the log server(s). For the over
+ all service the item is static "over all".
diff --git a/checkpoint_log_server.mkp b/checkpoint_log_server.mkp
index 22ff9234a6d976dbb9507f2131b2c591a189f036..f19e0886c6f0ff252a002943cb6b2437864ffcdd 100644
GIT binary patch
literal 6712
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

literal 6707
zcma);<s%#p;JByfqo*0h$!Uh^>Fzo;UDKSLZezN;Yns#CnbS^pOn29giTnNjg75eH
z?s@UNd|o_sac|#t6-Qg4BCYIgtQ_539b7<WPOf%lo;DudHXfXOJbb)7pLqqjym`3z
zEV-N=-QJvwJG!oQG{3z6fDFyu`TaL^SMi2jU<(KIv}!)rs@S|nARJn}45}qIyqN(w
zXzoEaDN|Ca+VhytFTUb8<{ITt;zti`CsCzjw1CXS`0d}6_J_P+jJz&j?Y`m!PSYJ(
z$x#3NNuE=G{IZQx())ly_%HN0lvP7Zsna8v_+gQ6z<l4o4%;EW!GBnM7GMAGYe1l<
z1!krT#d7_3&nCC<@y_mx)-KU9aM9~}i(u%!h~oW>S1t5D;Ko+&P-w5kQ5Z$oyCGJi
z*Vs`VoAvYC7uv`6xm9{f``+s+O3lI!d?wE!sFz}6iM6xHfq<!wc~pFrf~p;TF{f!F
z$yMn=fSi+-2qCu1lIBRh-zFL*kaS&i*c(2`apzP!@bRtS>)zHE-QIQ&q0lwYUdO23
zR;Lp*s-qLCy=>EL2~+5092v1qxIh8trES~h+Io8z<BKn6ftk0BgD}2sbCL#qDo3=a
z|6q)ex39DCYkv-AfdGPlZ(`k%Sx;SWgn^-#9}Q8YdE$IrGA2>9^WIZUtM?sd4F9g$
zfbMC;sbSe4UWvE0P}@%ni?Eo`Snl}gX<Sp$d4*o%Iy;k5*YA$w*?xDB;{7IhM@sR!
z%5omTgJ(=5ZzA3khX#LnDyBO)d+ww(OXIY;IuxJo>oYMF6}kD8cqt+|gGAiB4<S#x
zY*~>=nP(&|0{NY|+29h1=(5)EKq|IIJ|Vfx%ubiHol?vcwv}H*82BM*z@ji%-N0pB
zFKS{Gx*Wd8C7(Y^Ix8brnYHy6lv0iuE5YPjua|%};}x2Dv7I~yslToDz%!4ft`K|4
ze{``U4niEgs(uzxv0s7mF?nvVC{YVanZNxZ`w?wF1!Cn1eLub0J?zn8ryL`uiC%q?
zlC)cpxz|k|b4ATpB-WSEXy1arbi4~kyZu>68vMwbBKXP!fz_+;Jl!e49{K9~`Csz6
z#z@?+>1J|LU$0AK#nnw__%s5)p5rh?q}|$+pg&}8(@*Iy60C7>@!O-Gg%LO7Df+?s
zkf}!)6LI+fl9tGOmXgqn_ODQrh&E^wNc@v*9A4aK+cX%F7EKazH+;-H!Nyz$YQ)TI
z=a~Q`6d#ucI`_EtSU#5){`-Y(c>9HsG`a`*F42&X?}}c9fgh7NhDQ}EiiXVU${uZo
zby#G5=`PUuGrh_wdsCkAReHUTMn*CJ@B@qd$)#g7Hv6WbYmB5&K1K2%fBKyW3F=8y
z%y2~ovCA^M%-WK?@ZuBO;(ILxS(=*N8PO?J)25SJ*SGO4rj}e}U*d?Q;_)K;EEmGa
zLA}@)#jCWR{&GO2+SvanUN44m!Kd*V&)o$7v9f>exr5&iRj96t&h=SL{dxX-0lzGi
zq{+{_3>N$6#b@}3rm)wY=5UUaDrsYGBn>+5L-!|NJw{*Sifl(y9^@V554y3Co;(tZ
z=-Nyr5MyS{AUIj>`1<Dlcg+Lru8B57hMe>{F%RQqb&m3qz}8poX(-|dj4q!8t@`je
z^hkw-5WB%qJn)SaF-+`5M7cCeyP-^Mz<YdA`4`i2iGF+tSh?%lG#X;6gNU9gA1nPt
zW0}In>5tKC4>rpQhkARRm#o#N68FOjyf7(PV1CQ6m90B1(=q_<zgtp+6HV~5Cc#gU
zNZDJACkbLm@>TqS(3P6tGbbaO^z>JVP#BV6OVY|Zq;ngfW-q{G%I4C=hG;vf`K}lL
zbVi4f4~{B<*0Zz4$7@}V(s(x%tg;p_QfngOa66(b*Z$!(-?N{9zu%k0Yjb&2*4cbo
z?;0B@p*2?K9f>uZ(PJ;Cahbu9H&*=2brd%`@?+flN`<PhciO$^7CI0Y7uQ%0?qYOu
zUYMeg12a?nSnTRKlNLrFpIHICkOFUx8l!FNuo?R~?PNLCRYR6Xh&;WY9~%yynb${x
zkTARv#~6PXwivh3yKU=$lfgloOq0e;QI#pv)UBX!FYqGJF>Lp6M{M0Z#?$FhihRNY
zABlu5wx}8tT0F#h?i2vkjz{OLk2m=}t?pg!X-TB*isU6fR>Cvj*`whmh|2ls<=BSu
zmIvJ+w;|L9Pcol#5G{*Tmr3GRnT;xzhg(wW*YH=NPtJu%QBHK=TjZfa8!i)VVZd|1
zh1NA@rE+Mn9R~X=bxC7(Hwn`FVg*u+D(bm*HyHLIZeVkh=7|E_+jj0fi<*xOF!{4G
z!P_BLn;YVcCCBZy;U1>-?e5*Mcy6MF-X)KDdNx@?X6iC3*PB~DdHByHL)gw3*@E^D
zQk@-`d%g(@8_5`8m`EEX@~zp8<)rq!d96f8rfWPfH)*kw`np;nn(k6;>K^8LCC*vB
z>E%QFxk0ro#ge(8GBBE(l#ssBJM1{TrL|t>St2zpTi!5&q%#%;)`d~X?Dk~S!G7v5
zCsxIt>4(+DvXWJxVYecX*d}(L%>!|x_Zl0=UqNol79R0%`IVN~Osbkhsgh}E)$vJ2
zQTQTKA7qS%>bvEl{&4bKxrAES6*i61>36BTa*~g1)<@6-P-7@#gNxn6E6ol;Xc7@C
ztSzBjk8`auW3L-Z-?nBx+~v{y&8-H7!jT_dE+TU=NM>IbJytyWewx95&`4*0tq56~
z6gvftH)=`EG00W4Cg~rwei>#usybCHn%GTKjhrkG;c=<NZ_2Q7UT%4g^m4{H$1iTv
zSTPs|SqLLY$kQD!JBrqGZ!AR!X#R|J<RsmgZ=@ZbRG8`rT~>Dq6JUH*yAX(Vx4~sS
zr{{MOymuF2D$<O&E1Tnl$@k6a+Wa>IRMS>nNma-AYwTias76BkwysQtkU(zEhPf(z
zh^XCU)-=*GlEp-}SSeJf%*n#xw>043iO+q4u`QO`Kk=NE)&FYFRV8TWPsv|~ACjx)
z3#V*Fpoq7%TLITGi*gol@FtU=McG4aCi<8Z6<_|l(KVQ~>{t93K0EK^B2#7~R6(L|
z4P^kUhchTJrmKMPCMA#75<0Gr_^noB;kV$&x-it>JZF+JT-!J&bM!q<!pDe3wNm#c
z&p>hX<t?u#S1EABq%#HYCd{`5yh62;<`vrpqu)J=rK?}6@R8({k%~60h^)0@frNOq
z&Zcu$enFXO<i6uNHdFTy=CJ`E2l@s2YjgO@7pVVW0XtfwtO>Re?!u2}9!p_Y$7JOJ
z|9azWF#@~$Vm_VfibW*FqiYKdehs87jXh$-R-b*pmlc5rpzYGWkk^(^Az2ttRMJ?3
zWH<eTiY?fEL_a#4SE6d1cK%Q6ZW6#z%w$Vq$(LZp%o=x3jJNMx)cgXN9FMtg=c{(V
z`fjfzP-Z67;>R&Eai~XJfGp9w61g*u6|dd4!0?+njqh$qX|?P2nGf$LeU?uynt8IV
z`9`iZ$2L*7n^bkbv4m$VNRKUy#6+v%dKX{q%VLCbw9S&0eWWR7@=;KqH+P4)>}YMa
z)wd6(mH8>Fp@Q6<rldR!q!|@QGN-@tk^Bxj#W*Knm0@rgOxC9h%!{q^B+GV{@e?a0
zBrq096peA`AAj<jw;=i`=tt|N8$p$L;P>nvR!9xhSyswS;yB^03q7rh<a{SIDvBkB
zuv(4uJ73lBzY<NH*8nu(>n+$HCzveQvTYhy=v?s0UYv(vPG?pGG_lV(H}fp2w>rww
zQSsyoRo-UI0|RI{H*^Dv>xsH$oShn(g2e~HNpbUg52?JOPqz_0J~CL$CRyt2O<M!f
zSmgJXiN6QD`#4shr7;0blnTnhNyx&tY}r3y^_2l(zm+;Dc>S-frR7QK8tt4yLTvAz
zkK6MZU3=VGw;fd;na*To26rbSj^6J}Wk7M9Pv*?^YZ@jer{G9KNexs@wO0b*F6$(c
z@;C%bGCp(+sr4wSb{iaTK&+ke=1%KXk=gDI&4r^(hOtgkyG~&}KdMN9KH%UjkNQ~r
z(<=HQqobRJRv5gpv^~hh8vL^StEY*Rb=uB~11YPIM_LOzl$bo#s+FB~he7xy^ge12
z+?Af(m6YHDW+iA6=_8KQDmji;xYt)E4q8qUd$lINJXibZCakzVXaULTN~|XO?dQ1_
zCIcK7*=uT!f67gRClsDEAeVX;2%JWocdAavmP0P!@0576+I#7LlGTWr=fu<fg|G3B
z!iFYwga`xBKFjvMAO4Z6Q#w5mW4gx%=hKV>;}3~Hn+~ZPSD2eWTu?rYys^^bF0a;r
zWNN?f4v<b^VLhXokntL&RAmeIIa-KVL|*ikBb7zx3(LB3sSa~_tV=EWh-5BY2mBiK
zBy?0Q_vU=AbgC${|9(4u>O81dTZnb=td?QHYB;TqT5|}<;zY+>ZR#_SNp*J`Qlxh5
z(pN}#cLP6UTbCH{fEJQ*=e+3VixS&(^q74V8wMoTht{Kd4UC(Yz~>LAl;b=@L%u+T
z)bkXc;VQsNjg`v``nR({*fRCw%_U7h@z+X_I!d=8ty9JhzkutB4x~l53zN!TdpVl>
z=iE5u&7lb&cyCE1W>5FB<Cy)XJo#Yxj=m-&3AsMDUlA_JU8>A(>{^1NAAGVsv9pe+
z`jnP~Ga+K#Y9<!rH1hZomC^?BkohiEZx2g`%I**hx7X8j9Z}~i^_y#&t<!NdK!eX4
zr61P@ebV!BKf>9^CCmd2(!rNi7l=&SpYG|XBpLaa>ER+0$+J1$N6ZW)AWvs%;hZk)
z*dDj_+6q=GVMkWwp-HNmotc)XDoC%-La?Vy1NMqWfs9<7i0cYhf_>IAl22!LUiFyn
zla9Z@vPX`t##KIlnMLsUWAfjg+tR~)T5-gg{djirwLvx+rLk(9xrnFD+`XV@DePX}
zLEJKK;%mP=RhwPKvU^J}E5Jbqr~ci|PxjdX4TwT8*DfCG%thLfDshGsGE4m9H=nWF
z3w6W7gyBa{>NbKg!(GPDD|Y>b+tvm_Lw$H6PTIL=i;XY)8>=^Jc^zXK*VH6IGb0kW
zykQp6rz5r3KhJMeMXpOaFr$t7Fw19LwcFm$F>A0799Zt`sTBwKZGSmTHDSLJiq2^b
zW-^AW9PMQl8T6G~_1+gG=u$Fl@~4+(ElV3Thq`o~cUKEuDm!n$!A(7qfVr`3JVx@>
zeIMs(MP0OJzg^zOsg)op@k;G<{)VO#9VMJuM<wdHRu{%HSp|*_)1c{N+t#pEV&Kfw
zd-ak92X(lOa)E7793Fw_V+Hp)&PLjc&o5Cmp(Vp+c&%M-C+nPE*-d4){>NRc9M2r*
z8<0BTU9p30dx(jXrRJ2GQ)npdH(@l4CH+mR2}R{iWkEnY8X$#E(Kj7#Xi8<7mPSEr
zN9V0g2CTdKW>Z?yBJwla!1)ze=^b1)#<hu=@@H48sXg3%%K3C8Gi7aah6nke5u~~t
z5fIl_YOefcXOPw(gL^tyJm%~$YQK^6%!DoFS6pgd9TSddX}t9*)qkZ7V5b8Se*4Vq
zdT`kb#+PK<Twi%r*&yp#1Q9_nWv+f@Pvc0xrPivToWQ7+gw?|2G3R+boe^md*(V;(
zwT1&y(Yq?WeWNf}wsmYk8(%DXVB0l-NnSLV;xztJ<Cd3=+`nm16f$y~`QMp<yOMEc
z6H4?<YhFD6NA_{F;D~Y(-C~%O;I{4u``BG8rMAu&;S#B_Hg3{Om|~8{*efJZ`q@7>
z{^5SE9F|#TwiZ;H=a{UPAJD@NFIVqdNoUrslvqe-)*3fE{4WJ6ATAxZ=oy!UOUY(9
z!YO?|UUmK71%KJV?O;;#K~hFPHCVN_j=7Loxg9?(D4umgZ2H+)v0%_btyuVDIzKW{
z`1bUs>@l(WzKT=lV99uIqJf$bo{7mvd_zlu#a~=uczIfw@wfg<C@RK(B&?c6{|f|v
zkE!PhZW}K&o8Le>SziQSK&C-~%S-bwQ<AkW<vR9-buTJY!3(%nBa^`kn1Oh&La?X8
zr>=_0;1?o7U?|PTua<3v3M1NHe&@A9!oI1n4wc8>AyB6NAIg<A7Z;5*kdVaA`)*NB
zexB{~h}sMM_f+ehf8bJ<w%wxM0YPVnyBqnDk=<MM(tR{lceubWFjd#M^X0s=i=^B1
z{WzT5!Ttt`R232C;A4NszfNp5X_>vlpJ!ONGtSYKtVVDzIkwyf1!F$EgLrIFyM+2d
z;s0GtltKy7`DwBfHk!VmpPmW7?tIZJY;AJ;mwu^Y*F21{LDeA)q~9o7Ip*ygRAZ%7
z4|&3KW$^o~h^<in*whI9X@)wwr`i(ImQdcyFTT#b3Ao&j{>&nihtoa$Ah&e%W<W7i
zn2672nCbF*d=(}~KTG5GUGo#qM9<XMleQ&*Lf&;W$8O2mR!DJxj|oFi(@oYQRB+bY
z+wQmV$*v7<R$GCHI-bvm<5iSb-iJa7h)_f!<A7g&N5?2t+#gNX&X6GK#Sg+4&M3e5
zT-C;h>Wa`+(S!r!N**Y7VtE$!Om;dIc#G+#=P*^_kIHT4B!D<H={Jxn6qU1lJ74~l
zYpx6+YL7G9364n&#x@oubggvCm#0}F@Zj@oe)YLehk)D(RzfXCgtZim29ywK?Ac5{
z+JWU!<$G>8jJ&@^e<QF9k@$qUavjXWH~)Ynr$Qpf0DS>{-B$oEx}ufPVLCOeGSj&)
z??d869iV7R(e&iesQ2N40r$-me%2OA;Y{b<gAAVZVR4d=zBmJv8Q}t-0x#bB>22^V
zN1$|K(gw9+2-cWgSbvw82=FMm9cQE`=lTijPu-53W?;A$yL#yPksK_KI~N^xv5~aJ
zb~)|z`LhLUb4iMFM^<}=QeTe*Qg-#bg46e;q!>I2X*6|zm^H(N*K2*LlOI}@mfZhP
zfB#gNsQ-Olbs=uetz@*31X73k@6$)*twKl#bk`g{IdxCK_gHk{<?4xKJU7ch7CY|t
zP2Nb#5A+FAgy)CQ<LbT+6NF|$-beKLxY-C}&37{8KAG=}ylmuWS|iP#d~dt<O*9lK
zI1mKa*ga66VRz}_QMx@eFP_AN0Q?3gN7`OMd(@X88dMDe$VdxrA`X8CXaMTHksB9D
zZ8EtbVEN+iullxn0?SY7kL7Qa50p7U9S!%0`zBU^r&r<wGk1K>TYv)0sgGayLnjIA
z5P#p{fk>-=M$nOL=JLc9aqx*V2wPp(1hfX{62(ZD%-@!iF@4=z<riXqL^)vVIP=x}
z3-XC(lIsc3Cj4PEUA{jJ<j)!*v{7=4XW;_*DAXY3*nhoJs?3ro75Efje1zT(UngX`
znh0@b6wl`*8Fr^DOEH<fp+W9g!0Hk-ZP-DzZyJsNg>L>RfSaz}FU!0@VU+~;mQ8&6
zzIP(eb!0!{ZgZg<^0cK*VjQ<im6IjPY5cyBa`YG3u#c4A5_-6k74kmA`9Mh#JX9Hw
zwbuT4%>TZ*=?Cec5cz#)!z=B4r*n9gnM<MqF>+#pRaMt`VBIbK=%2p<MvBGJ8F%_*
zRl`l#{2T2+=CR#eM_F0<VrT^V6*7M2Kls>FiN3wFGiUihT2DE`?d_v{VaSTeGo3|c
zNo&<%bN>UeQQ`)~nz*Yi)@rs6rRb&Z?T;#MTlh<mY%F%cDO48^4D_?3SM^D9iQAlI
zlb;YVZ7SWj+VG`$;lXkXuWT$}TprLj?4?_&S8|9^?j!4szFL}=w}oOI5&4GU4f=sG
zgND_e{w>+Wj6^fape6#{8Tjc!zy;RT{VfM<zfdQlvCt!sB9Y*|7R7Co))sb{hi1MG
zxx8rc8|KH$&yH1_T6cmPgV#8-KvS+z`))1cz|{E!M7kvjN)E5Z1F){nug1_<1~3GO
zDoA(WwmUN_BI`ahId!;k{O7eRGA*@LPG2AiDg?s9iV@uyJ!hbgB(zVF9!>0Wleh+9
z3{1zG?>@2b$s9&g%T(LFKFUu|BnLEbI(5GK*kN8ssZX!~pTEzTBN4#yGb9xrRv`Gb
zauLaQ8ocn!quQr-?txlls&=Rsyu7GC*G*1ykQapa^~rPm9c0sZnrMZl%CrgJpkp!m
zg=rwi%!bl54fJD)R_f6V%KIJz#JT)^=Q@59k2H>`IQVMaE%jip@QTxG`dzYO_gM;j
zPrt&@WFt&eNHo>-QGG@h&G}o4`E+50Wq0#wKI0U?p}IG>PvmUfDn~`!YWs*JY^JU)
zsys|?au}}&oJ8d1hO@+w_|6nK*nr$cXeqJge-0q=p8zXxceVb~`lSp$Y&SKvdP?8)
zN-yGvIqcddUdl#D+bQyb;r9!_^B6JL6BbN9o2gac&bA3?en|G}5Db6(7KOIf3VtJ#
z%*55$=D<&!mgPnXSZPmBzg@BP)ww#lMvg`yyRIRw@lm6Q&F#0t$k6(sV1ZX;{52A=
zX@tLEOa4Bt(pB82#qBarh@HF!K@fvWOH2U;S!LwmGoVK30+aN0x;b!t5ncoMO{0YZ
z+KnwDl0#FJh%~p^NEqa|HQ)MH*P;Z3hgc{gb;<Vzr=9`M5Rbif$a%gsB>uSfLuY*O
zaO`kj5u+zoeSiCTx3DMXXpee*o3?kfP<Fm7uYDHfOAqU#QvIj(>ps)i%!O@TrF{NR
z`F9MPRH{r?0@X?`ZNp%8xoH(E75R8Ojy-&!5pbLdL>45A_tPn{&^xKEzL1>u6?&v;
rbS?hx`59%)Y6mhBqjy#Lzud<E<w*X&^KdwTM7gA9GkQaT^5*{mVlQ0%

diff --git a/gui/metrics/checkpoint_fw_log.py b/gui/metrics/checkpoint_fw_log.py
new file mode 100644
index 0000000..ad2f815
--- /dev/null
+++ b/gui/metrics/checkpoint_fw_log.py
@@ -0,0 +1,143 @@
+#!/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-17
+#
+# Check Point Logserver metrics plugins
+# checkpoint_fw_ls / checkpoint_fwm_ls
+#
+# 2023-04-22: moved metrics file to ~/local/lib/check_mk/gui/plugins/metrics
+#
+
+from cmk.gui.i18n import _
+from cmk.gui.plugins.metrics.utils import (
+    metric_info,
+    graph_info,
+    perfometer_info
+)
+
+metric_info['checkpoint_fw_ls_localloggingwriterate'] = {
+    'title': _('Local Logging Writing Rate'),
+    'unit': '1/s',
+    'color': '11/a',
+}
+metric_info['checkpoint_fw_ls_logginghandlingrate'] = {
+    'title': _('Logging Handling Rate'),
+    'unit': '1/s',
+    'color': '21/a',
+}
+metric_info['checkpoint_fw_ls_lsconnsendrate'] = {
+    'title': _('Sending Rate'),
+    'unit': '1/s',
+    'color': '31/a',
+}
+
+metric_info['checkpoint_fwm_ls_updatesandlogsindexedrate'] = {
+    'title': _('Updates and logs index rate'),
+    'unit': '1/s',
+    'color': '12/a',
+}
+metric_info['checkpoint_fwm_ls_updatesandlogsindexedratepeak'] = {
+    'title': _('Updates and logs peak index rate'),
+    'unit': '1/s',
+    'color': '22/a',
+}
+
+metric_info['checkpoint_fwm_ls_readlogsrate'] = {
+    'title': _('Logs read rate'),
+    'unit': '1/s',
+    'color': '26/a',
+}
+metric_info['checkpoint_fwm_ls_readlogsratepeak'] = {
+    'title': _('Logs read peak rate'),
+    'unit': '1/s',
+    'color': '22/a',
+}
+
+graph_info['checkpoint_fw_ls_over_all'] = {
+    'title': _('Check Point Firewall Logserver: over all'),
+    'metrics': [
+        ('checkpoint_fw_ls_localloggingwriterate', 'line'),
+        ('checkpoint_fw_ls_logginghandlingrate', 'line'),
+    ],
+    'optional_metrics': [
+        'checkpoint_fw_ls_localloggingwriterate',
+        'checkpoint_fw_ls_logginghandlingrate',
+    ],
+    'range': (0, 'checkpoint_fw_ls_logginghandlingrate:max'),
+}
+
+graph_info['checkpoint_fw_ls_gateway'] = {
+    'title': _('Check Point Firewall Log server'),
+    'metrics': [
+        ('checkpoint_fw_ls_lsconnsendrate', 'line'),
+    ],
+    'range': (0, 'checkpoint_fw_ls_lsconnsendrate:max'),
+}
+
+graph_info['checkpoint_fwm_ls_management_read'] = {
+    'title': _('Check Point Management Firewall Log server read rate'),
+    'metrics': [
+        ('checkpoint_fwm_ls_readlogsratepeak', 'line'),
+        ('checkpoint_fwm_ls_readlogsrate', 'line'),
+    ],
+    'optional_metrics': [
+        'checkpoint_fwm_ls_readlogsratepeak',
+        'checkpoint_fwm_ls_readlogsrate',
+    ],
+    'range': (0, 'checkpoint_fwm_ls_readlogsrate:max'),
+}
+
+graph_info['checkpoint_fwm_ls_management_indexed'] = {
+    'title': _('Check Point Management Firewall Log server index rate'),
+    'metrics': [
+        ('checkpoint_fwm_ls_updatesandlogsindexedratepeak', 'line'),
+        ('checkpoint_fwm_ls_updatesandlogsindexedrate', 'line'),
+    ],
+    'optional_metrics': [
+        'checkpoint_fwm_ls_updatesandlogsindexedratepeak',
+        'checkpoint_fwm_ls_updatesandlogsindexedrate',
+    ],
+    'range': (0, 'checkpoint_fwm_ls_updatesandlogsindexedrate:max'),
+}
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_fw_ls_localloggingwriterate',
+        'half_value': 1000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_fw_ls_logginghandlingrate',
+        'half_value': 1000.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append({
+    'type': 'logarithmic',
+    'metric': 'checkpoint_fw_ls_lsconnsendrate',
+    'half_value': 500.0,
+    'exponent': 2,
+})
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_fwm_ls_readlogsrate',
+        'half_value': 1000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_fwm_ls_updatesandlogsindexedrate',
+        'half_value': 1000.0,
+        'exponent': 2,
+    },
+]))
diff --git a/gui/wato/checkpoint_fw_ls.py b/gui/wato/checkpoint_fw_ls.py
new file mode 100644
index 0000000..d25ac26
--- /dev/null
+++ b/gui/wato/checkpoint_fw_ls.py
@@ -0,0 +1,55 @@
+#!/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  : 2016-07-29
+#
+# 2023-04-23: moved wato file to ~/local/lib/check_mk/gui/plugins/wato
+#
+
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    TextAscii,
+    MonitoringState,
+    DropdownChoice,
+)
+from cmk.gui.plugins.wato.utils import (
+    CheckParameterRulespecWithItem,
+    rulespec_registry,
+    RulespecGroupCheckParametersNetworking,
+)
+
+
+def _parameter_valuespec_checkpoint_fw_ls():
+    return Dictionary(elements=[
+        ('exp_connection_status',
+         DropdownChoice(
+             title=_('Expected connection status for the log server'),
+             choices=[
+                 ('Backup Log-Server Not Active', _('Backup: The log server is a backup log server')),
+                 ('Log-Server Connected', _('Connected: The gateway is connected to the log server')),
+                 ('Log-Server Disconnected', _('Disconnected: The gateway is not connected to the log server')),
+             ],
+             default_value='Log-Server Connected',
+             )),
+        ('mon_connection_state',
+         MonitoringState(
+             default_value=1,
+             title=_('State if connection state differs from expected state.'),
+         )),
+    ])
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name='checkpoint_fw_ls',
+        group=RulespecGroupCheckParametersNetworking,
+        item_spec=lambda: TextAscii(title=_('Log server IP'), ),
+        match_type='dict',
+        parameter_valuespec=_parameter_valuespec_checkpoint_fw_ls,
+        title=lambda: _('Check Point Firewall gateway log server'),
+    ))
diff --git a/gui/wato/checkpoint_fwm_ls.py b/gui/wato/checkpoint_fwm_ls.py
new file mode 100644
index 0000000..e315740
--- /dev/null
+++ b/gui/wato/checkpoint_fwm_ls.py
@@ -0,0 +1,46 @@
+#!/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  : 2016-07-29
+#
+# 2023-04-23: moved wato file to ~/local/lib/check_mk/gui/plugins/wato
+
+
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    TextAscii,
+    FixedValue,
+)
+from cmk.gui.plugins.wato.utils import (
+    CheckParameterRulespecWithItem,
+    rulespec_registry,
+    RulespecGroupCheckParametersNetworking,
+)
+
+
+def _parameter_valuespec_checkpoint_fwm_ls():
+    return Dictionary(elements=[
+        ('ignore_status_on_r80_10',
+         FixedValue(
+             True,
+             title=_('Ignore status and alive on Check Point R80.10'),
+             totext=_(''),
+             default_value=False,
+         )),
+    ])
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name='checkpoint_fwm_ls',
+        group=RulespecGroupCheckParametersNetworking,
+        item_spec=lambda: TextAscii(title=_('Check Point Firewall management log server'), ),
+        match_type='dict',
+        parameter_valuespec=_parameter_valuespec_checkpoint_fwm_ls,
+        title=lambda: _('Check Point Firewall management log server'),
+    ))
diff --git a/packages/checkpoint_log_server b/packages/checkpoint_log_server
index 103a1dd..398a352 100644
--- a/packages/checkpoint_log_server
+++ b/packages/checkpoint_log_server
@@ -5,13 +5,12 @@
  'download_url': 'https://thl-cmk.hopto.org',
  'files': {'agent_based': ['checkpoint_fw_ls.py', 'checkpoint_fwm_ls.py'],
            'checkman': ['checkpoint_fw_ls', 'checkpoint_fwm_ls'],
-           'web': ['plugins/metrics/checkpoint_fw_log.py',
-                   'plugins/wato/checkpoint_fwm_ls.py',
-                   'plugins/wato/checkpoint_fw_ls.py']},
+           'gui': ['metrics/checkpoint_fw_log.py',
+                   'wato/checkpoint_fw_ls.py',
+                   'wato/checkpoint_fwm_ls.py']},
  'name': 'checkpoint_log_server',
- 'num_files': 7,
  'title': 'Check Point Log service status',
- 'version': '20210816.v0.2b',
- 'version.min_required': '2.0.0',
- 'version.packaged': '2021.09.20',
+ 'version': '0.3.0-20230423',
+ 'version.min_required': '2.1.0b1',
+ 'version.packaged': '2.1.0p21',
  'version.usable_until': None}
\ No newline at end of file
-- 
GitLab