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