Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit 265aacf6 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent 2cfa83ce
No related branches found
No related tags found
No related merge requests found
#!/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-08-01
#
# monitor Check Point Application control
#
# 2017-06-17: added last update check
# 2017-01-03: fixed inventory function for bad ino data
# 2017-01-03: fixed lastupdate check
# 2018-03-08: fixed update status, changed snmp scan function and inventory
# 2018-03-15: code cleanup
# 2020-06-07: code cleanup
# 2020-06-08: changed snmp-scan function
# 2021-04-29: added option to adjust version string time format
# 2021-08-23: rewritten for CMK 2.0
#
# sample info
# [[u'valid', u'Mon Jul 1 01:00:00 2019', u'Contract is up to date.', u'new',
# u'Gateway was updated with database version: 16072904.', u'The next update will be run as scheduled.',
# u'16072904', u'0', u'', u'0', u'', u'']]
#
import time
from dataclasses import dataclass
from typing import Optional
from cmk.base.plugins.agent_based.agent_based_api.v1 import (
register,
Service,
Result,
check_levels,
State,
SNMPTree,
all_of,
startswith,
any_of,
equals,
)
from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
DiscoveryResult,
CheckResult,
StringTable,
)
@dataclass
class CheckpointApcl:
subscriptionstatus: str
subscriptionexpdate: str
subscriptiondesc: str
updatestatus: str
updatedesc: str
nextupdate: str
version: str
radstatuscode: int
radstatusdesc: str
statuscode: int
statusshortdesc: str
statuslongdesc: str
def _lastupdate_check(updateversion, timeformat):
updateversion = updateversion[:-2]
if len(updateversion) == 5:
updateversion = '0' + updateversion
try:
lastupdate = int(
(time.time() - time.mktime(time.strptime(updateversion, timeformat))) / 86400)
except ValueError:
return 'unknown'
return lastupdate
def parse_checkpoint_apcl(string_table: StringTable) -> Optional[CheckpointApcl]:
try:
subscriptionstatus, subscriptionexpdate, subscriptiondesc, updatestatus, updatedesc, nextupdate, \
version, radstatuscode, radstatusdesc, statuscode, statusshortdesc, statuslongdesc = string_table[0]
except (ValueError, IndexError):
return
return CheckpointApcl(
subscriptionstatus=subscriptionstatus,
subscriptionexpdate=subscriptionexpdate,
subscriptiondesc=subscriptiondesc,
updatestatus=updatestatus,
updatedesc=updatedesc,
nextupdate=nextupdate,
version=version,
radstatuscode=int(radstatuscode),
radstatusdesc=radstatusdesc,
statuscode=int(statuscode),
statusshortdesc=statusshortdesc,
statuslongdesc=statuslongdesc,
)
def discovery_checkpoint_apcl(section: CheckpointApcl) -> DiscoveryResult:
yield Service()
def check_checkpoint_apcl(params, section: CheckpointApcl) -> CheckResult:
yield Result(state=State.OK, summary=f'Subscription: {section.subscriptionstatus}')
yield Result(state=State.OK, summary=f'Valid until: {section.subscriptionexpdate}')
yield Result(state=State.OK, summary=f'Update status: {section.updatestatus}')
yield Result(state=State.OK, summary=f'Version: {section.version}')
yield Result(state=State.OK, notice=f'Subscription description: {section.subscriptiondesc}')
yield Result(state=State.OK, notice=f'Update description : {section.updatedesc}')
yield Result(state=State.OK, notice=f'Next update : {section.nextupdate}')
yield Result(state=State.OK, notice=f'RAD status description : {section.radstatusdesc}')
yield Result(state=State.OK, notice=f'Status short description: {section.statusshortdesc}')
yield Result(state=State.OK, notice=f'Status long description : {section.statuslongdesc}')
if section.subscriptionstatus != 'valid':
if len(section.subscriptiondesc) != 0:
yield Result(state=State.WARN, notice=section.subscriptiondesc)
else:
yield Result(state=State.WARN, notice='Subscription is not valid')
if (section.updatestatus != 'up-to-date') and (section.updatestatus != 'new'):
if len(section.updatedesc) > 2:
yield Result(state=State.WARN, notice=section.updatedesc)
else:
yield Result(state=State.WARN, notice='No update')
if section.radstatuscode != 0:
if len(section.radstatusdesc) != 0:
yield Result(state=State.WARN, notice=section.radstatusdesc)
else:
yield Result(state=State.WARN, notice='Application Control Engine is not up and running')
lastupdate = _lastupdate_check(section.version, params['timeformat'])
if str(lastupdate).isdigit():
yield from check_levels(
value=lastupdate,
label='Last update days ago',
levels_upper=params['levels_no_update'],
notice_only=True,
render_func=lambda v: f'{v:d}',
)
else:
yield Result(state=State.WARN, notice=f'Last update: {lastupdate}')
if section.statuscode != 0:
if section.statuslongdesc != '':
yield Result(state=State.CRIT, summary=f'{section.statuslongdesc}')
else:
yield Result(state=State.CRIT, summary='Problem')
else:
yield Result(state=State.OK, notice=f'Status long description: {section.statuslongdesc}')
register.snmp_section(
name='checkpoint_apcl',
parse_function=parse_checkpoint_apcl,
fetch=SNMPTree(
base='.1.3.6.1.4.1.2620.1.39', # CHECKPOINT-MIB
oids=[
'1.1', # applicationControlSubscriptionStatus
'1.2', # applicationControlSubscriptionExpDate
'1.3', # applicationControlSubscriptionDesc
'2.1', # applicationControlUpdateStatus
'2.2', # applicationControlUpdateDesc
'2.3', # applicationControlNextUpdate
'2.4', # applicationControlVersion
'3.1', # radstatuscode
'3.2', # radstatusdescription
'101', # applicationControlStatusCode
'102', # applicationControlStatusShortDesc
'103', # applicationControlStatusLongDesc
]
),
detect=any_of(
startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'),
all_of(
equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'),
equals('.1.3.6.1.4.1.2620.1.6.1.0', 'SVN Foundation'),
)
)
)
register.check_plugin(
name='checkpoint_apcl',
service_name='Application control',
discovery_function=discovery_checkpoint_apcl,
check_function=check_checkpoint_apcl,
check_ruleset_name='checkpoint_apcl',
check_default_parameters={
'levels_no_update': (7, 14),
'timeformat': '%y%m%d',
}
)
No preview for this file type
{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
'description': u'Monitors Check Point Application control\nchecks Update status and contract status\n',
{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
'description': 'Monitors Check Point Application control\n'
'checks Update status and contract status\n',
'download_url': 'https://thl-cmk.hopto.org',
'files': {'checks': ['checkpoint_apcl'],
'files': {'agent_based': ['checkpoint_apcl.py'],
'web': ['plugins/wato/checkpoint_apcl.py']},
'name': 'checkpoint_application_control',
'num_files': 2,
'title': u'Check Point Application control',
'title': 'Check Point Application control',
'version': '20200608.v0.1.2e',
'version.min_required': '1.2.8b8',
'version.packaged': '1.6.0p12',
'version.packaged': '2021.07.14',
'version.usable_until': None}
\ No newline at end of file
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# License: GNU General Public License v2
#
......@@ -9,29 +9,42 @@
# Content: wato plugin for snmp check 'checkpoint_apcl'
# to configure waring/critical levels for last update
#
register_check_parameters(
subgroup_applications,
'checkpoint_apcl',
_('Check Point Application Control'),
Dictionary(
from cmk.gui.i18n import _
from cmk.gui.valuespec import (
Dictionary,
Integer,
TextAscii,
Tuple,
DropdownChoice,
)
from cmk.gui.plugins.wato import (
CheckParameterRulespecWithItem,
rulespec_registry,
RulespecGroupCheckParametersNetworking,
)
def _parameter_valuespec_checkpoint_apcl():
return Dictionary(
elements=[
('no_update_warn',
Integer(
title=_('Warning if no update'),
help=_('Warning if version older then days'),
unit=_('days'),
default_value=7,
minvalue=1,
label=_('warning if no updates since'),
)),
('no_update_crit',
Integer(
title=_('Critical if no update'),
help=_('critical if version older then days'),
unit=_('days'),
default_value=14,
minvalue=1,
label=_('critical if no updates since'),
('levels_no_update',
Tuple(
title=_('Maximum days no update'),
elements=[
Integer(
title=_('Warning at'),
unit='days',
default_value=7,
minvalue=1,
help=_('Warning if version older then days')),
Integer(
title=_('Critical at'),
unit='days',
default_value=14,
minvalue=1,
help=_('critical if version older then days'))
],
)),
('timeformat',
DropdownChoice(
......@@ -44,7 +57,14 @@ register_check_parameters(
('%d%m%y', _('DDMMYY')),
])),
],
),
None,
match_type='dict',
)
)
rulespec_registry.register(
CheckParameterRulespecWithItem(
check_group_name='checkpoint_apcl',
group=RulespecGroupCheckParametersNetworking,
match_type='dict',
parameter_valuespec=_parameter_valuespec_checkpoint_apcl,
title=lambda: _('Check Point Application Control'),
))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment