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 cf2f1ceb authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent d546fee0
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,7 @@
# Monitor Check Point Maestro SMO interfaces
#
# 2021-03-03: rewrite for CMK 2.0
# 2021-09-10: changed render function to networkbandwidth
#
# sample snmpwalk (for one interface)
# .1.3.6.1.4.1.2620.1.48.26.1.1.1.4.0 = Gauge32: 4
......@@ -48,13 +49,13 @@ import time
from typing import Mapping, Dict, List, Tuple, NamedTuple
from .agent_based_api.v1.type_defs import (
from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
DiscoveryResult,
StringTable,
CheckResult,
)
from .agent_based_api.v1 import (
from cmk.base.plugins.agent_based.agent_based_api.v1 import (
register,
Service,
equals,
......@@ -87,13 +88,13 @@ class CheckPointASGInterface(NamedTuple):
asgNetIfTx: int
def parse_checkpoint_asg_interface(string_table: List[StringTable]) -> Dict:
def parse_checkpoint_asg_interface(string_table: List[StringTable]) -> Dict[str, CheckPointASGInterface]:
parsed = {}
for entry in string_table[0]:
asgNetIfName, asgNetIfIPv4Addr, asgNetIfIPv6Addr, asgNetIfMACAddr, asgNetIfInfo, asgNetIfState, asgNetIfSpeed, asgNetIfMTU, asgNetIfDuplex, asgNetIfRx, asgNetIfTx = entry
asgNetIfName, asgNetIfIPv4Addr, asgNetIfIPv6Addr, asgNetIfMACAddr, asgNetIfInfo, asgNetIfState, \
asgNetIfSpeed, asgNetIfMTU, asgNetIfDuplex, asgNetIfRx, asgNetIfTx = entry
# if not asgNetIfIPv4Addr == asgNetIfIPv6Addr == '-': # do not add interfaces without ip address
item = '%s' % (asgNetIfName)
parsed.update({item: CheckPointASGInterface(
parsed[asgNetIfName] = CheckPointASGInterface(
asgNetIfIPv4Addr,
asgNetIfIPv6Addr,
asgNetIfMACAddr,
......@@ -104,12 +105,12 @@ def parse_checkpoint_asg_interface(string_table: List[StringTable]) -> Dict:
asgNetIfDuplex,
int(asgNetIfRx),
int(asgNetIfTx)
)})
)
return parsed
def discovery_checkpoint_asg_interface(section: Dict) -> DiscoveryResult:
def discovery_checkpoint_asg_interface(section: Dict[str, CheckPointASGInterface]) -> DiscoveryResult:
# sample section
#
# {
......@@ -134,59 +135,59 @@ def discovery_checkpoint_asg_interface(section: Dict) -> DiscoveryResult:
yield Service(item=item, parameters={'asgNetIfSpeed': section[item].asgNetIfSpeed})
def check_checkpoint_asg_interface(item, params, section: Dict) -> CheckResult:
def check_checkpoint_asg_interface(item, params, section: Dict[str, CheckPointASGInterface]) -> CheckResult:
try:
asg_interface = section[item]
except KeyError:
yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data.')
return
inv_asgNetIfSpeed = params['asgNetIfSpeed']
now = time.time()
value_store = get_value_store()
try:
in_rate = get_rate(value_store, 'in', now, asg_interface.asgNetIfRx, raise_overflow=True, )
except GetRateError as exc:
yield IgnoreResults(str(exc))
else:
yield from check_levels(in_rate, metric_name='if_in_octets', render_func=render.iobandwidth, label='In', )
out_rate = get_rate(value_store, 'out', now, asg_interface.asgNetIfTx, raise_overflow=True, )
yield from check_levels(out_rate, metric_name='if_out_octets', render_func=render.iobandwidth, label='Out', )
details = ''
details += '\nIPv4 Address: %s' % asg_interface.asgNetIfIPv4Addr
details += '\nIPv6 Address: %s' % asg_interface.asgNetIfIPv6Addr
details += '\nMAC Address: %s' % asg_interface.asgNetIfMACAddr
details += '\nType: %s' % asg_interface.asgNetIfInfo
details += '\nMTU: %s' % asg_interface.asgNetIfMTU
details += '\nDuplex: %s' % asg_interface.asgNetIfDuplex
if not asg_interface.asgNetIfIPv4Addr == '-':
summary = 'IPv4: %s' % asg_interface.asgNetIfIPv4Addr
else:
summary = 'IPv4: N/A'
yield Result(state=State.OK, summary=summary, details=details)
yield_text = 'State: %s' % asg_interface.asgNetIfState
if not asg_interface.asgNetIfState.lower() == '(up)/(up)':
yield Result(state=State.CRIT, summary=yield_text)
else:
yield Result(state=State.OK, summary=yield_text)
if not asg_interface.asgNetIfSpeed == inv_asgNetIfSpeed:
yield Result(state=State.WARN,
summary='Speed: %s (%s expected)' % (asg_interface.asgNetIfSpeed, inv_asgNetIfSpeed))
elif not asg_interface.asgNetIfSpeed == 'NA':
yield Result(state=State.OK, summary='Speed %s' % asg_interface.asgNetIfSpeed)
if not asg_interface.asgNetIfDuplex.lower():
yield Result(state=State.CRIT, summary='Duplex: %s (Full expected)' % asg_interface.asgNetIfDuplex)
else:
yield Result(state=State.OK, summary='Duplex: %s' % asg_interface.asgNetIfDuplex)
inv_asgNetIfSpeed = params['asgNetIfSpeed']
except KeyError:
pass
now = time.time()
value_store = get_value_store()
try:
in_rate = get_rate(value_store, 'in', now, asg_interface.asgNetIfRx, raise_overflow=True, )
except GetRateError as exc:
yield IgnoreResults(str(exc))
else:
yield from check_levels(in_rate, metric_name='if_in_octets', render_func=render.networkbandwidth, label='In', )
out_rate = get_rate(value_store, 'out', now, asg_interface.asgNetIfTx, raise_overflow=True, )
yield from check_levels(out_rate, metric_name='if_out_octets', render_func=render.networkbandwidth, label='Out', )
details = ''
details += '\nIPv4 Address: %s' % asg_interface.asgNetIfIPv4Addr
details += '\nIPv6 Address: %s' % asg_interface.asgNetIfIPv6Addr
details += '\nMAC Address: %s' % asg_interface.asgNetIfMACAddr
details += '\nType: %s' % asg_interface.asgNetIfInfo
details += '\nMTU: %s' % asg_interface.asgNetIfMTU
details += '\nDuplex: %s' % asg_interface.asgNetIfDuplex
if not asg_interface.asgNetIfIPv4Addr == '-':
summary = 'IPv4: %s' % asg_interface.asgNetIfIPv4Addr
else:
summary = 'IPv4: N/A'
yield Result(state=State.OK, summary=summary, details=details)
yield_text = 'State: %s' % asg_interface.asgNetIfState
if not asg_interface.asgNetIfState.lower() == '(up)/(up)':
yield Result(state=State.CRIT, summary=yield_text)
else:
yield Result(state=State.OK, summary=yield_text)
if not asg_interface.asgNetIfSpeed == inv_asgNetIfSpeed:
yield Result(state=State.WARN,
summary='Speed: %s (%s expected)' % (asg_interface.asgNetIfSpeed, inv_asgNetIfSpeed))
elif not asg_interface.asgNetIfSpeed == 'NA':
yield Result(state=State.OK, summary='Speed %s' % asg_interface.asgNetIfSpeed)
if not asg_interface.asgNetIfDuplex.lower():
yield Result(state=State.CRIT, summary='Duplex: %s (Full expected)' % asg_interface.asgNetIfDuplex)
else:
yield Result(state=State.OK, summary='Duplex: %s' % asg_interface.asgNetIfDuplex)
register.snmp_section(
......
No preview for this file type
......@@ -10,5 +10,5 @@
'title': 'Check Point Maestro SMO interfaces',
'version': '20201109.v0.1',
'version.min_required': '2.0.0b8',
'version.packaged': '2.0.0p1',
'version.packaged': '2021.07.14',
'version.usable_until': None}
\ No newline at end of file
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