diff --git a/agent_based/checkpoint_asg_interface.py b/agent_based/checkpoint_asg_interface.py index 608fa25b7adf7e9ac54e6e9eb5e6e815758a1a7c..e5b5421acabf55513eb72bf29e89ad624eb60349 100644 --- a/agent_based/checkpoint_asg_interface.py +++ b/agent_based/checkpoint_asg_interface.py @@ -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( diff --git a/checkpoint_asg_interface.mkp b/checkpoint_asg_interface.mkp index afc8d5541053c490a3cc5a95109765f3c1354e93..8f761411c1f27b9b1ca53ae97818f0d6943510a6 100644 Binary files a/checkpoint_asg_interface.mkp and b/checkpoint_asg_interface.mkp differ diff --git a/packages/checkpoint_asg_interface b/packages/checkpoint_asg_interface index daa8f3517159a71974da7f58acb22e6410d5e87b..a7a370c88c964d362a37bcb59ab91c81e5fed38b 100644 --- a/packages/checkpoint_asg_interface +++ b/packages/checkpoint_asg_interface @@ -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