From d3a8058b45afebdbdd2b8bb2e125cb31625d38e0 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Thu, 2 Dec 2021 18:41:43 +0100 Subject: [PATCH] update project --- agent_based/checkpoint_mho_buffer.py | 229 +++++++++++++++++++ checkpoint_mho_buffers.mkp | Bin 0 -> 3003 bytes packages/checkpoint_mho_buffers | 14 ++ web/plugins/metrics/checkpoint_mho_buffer.py | 75 ++++++ 4 files changed, 318 insertions(+) create mode 100644 agent_based/checkpoint_mho_buffer.py create mode 100644 checkpoint_mho_buffers.mkp create mode 100644 packages/checkpoint_mho_buffers create mode 100644 web/plugins/metrics/checkpoint_mho_buffer.py diff --git a/agent_based/checkpoint_mho_buffer.py b/agent_based/checkpoint_mho_buffer.py new file mode 100644 index 0000000..7fb2adc --- /dev/null +++ b/agent_based/checkpoint_mho_buffer.py @@ -0,0 +1,229 @@ +#!/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 : 2020-11-30 +# +# Monitor Check Point MHO port buffers +# +# +# +# sample snmpwalk +# +# +# sample string_table +# +# +# +# sample section +# + +import time +from typing import List, NamedTuple, Optional, Dict +from dataclasses import dataclass +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, + SNMPTree, + startswith, + all_of, + any_of, + Metric, + GetRateError, + get_rate, + get_value_store, + IgnoreResultsError, + render, +) + + +@dataclass +class CheckPointMhoRxBuffer: + frames: int + octets: int + discard: int + + +@dataclass +class CheckPointMhoPortBuffer: + label: str + admin_state: str + link_state: str + buffer: Dict[str, CheckPointMhoRxBuffer] + + +def parse_checkpoint_mho_buffer(string_table: StringTable) -> Dict[str, CheckPointMhoPortBuffer]: + section = {} + for line in string_table: + _0_frames, _0_octet, _0_discard, _1_frames, _1_octet, _1_discard, _2_frames, _2_octet, _2_discard, _3_frames,\ + _3_octet, _3_discard, _4_frames, _4_octet, _4_discard, _5_frames, _5_octet, _5_discard, _6_frames, _6_octet,\ + _6_discard, _7_frames, _7_octet, _7_discard, index, label, link_state, admin_state = line + + _i = 0 + buffer = {} + for frames, octet, discard in [ + (_0_frames, _0_octet, _0_discard), + (_1_frames, _1_octet, _1_discard), + (_2_frames, _2_octet, _2_discard), + (_3_frames, _3_octet, _3_discard), + (_4_frames, _4_octet, _4_discard), + (_5_frames, _5_octet, _5_discard), + (_6_frames, _6_octet, _6_discard), + (_7_frames, _7_octet, _7_discard), + ]: + buffer[str(_i)] = CheckPointMhoRxBuffer( + frames=int(frames) if frames.isdigit() else 0, + octets=int(octet) if octet.isdigit() else 0, + discard=int(discard) if discard.isdigit() else 0, + ) + _i += 1 + + section[str(index)] = CheckPointMhoPortBuffer( + label=label, + admin_state=admin_state, + link_state=link_state, + buffer=buffer, + ) + + return section + + +def discovery_checkpoint_mho_buffer(params, section: Dict[str, CheckPointMhoPortBuffer]) -> DiscoveryResult: + for item in section.keys(): + if params['add_admin_down'] is not True and section[item].admin_state.lower() in ['down', 'na']: + continue + if params['add_link_down'] is not True and section[item].link_state.lower() == 'down': + continue + yield Service(item=item) + + +def check_checkpoint_mho_buffer(item, params, section: Dict[str, CheckPointMhoPortBuffer]) -> CheckResult: + try: + port = section[item] + except KeyError: + yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data.') + return + + yield Result(state=State.OK, summary=f'Label: {port.label}') + yield Result(state=State.OK, summary=f'Admin state: {port.admin_state}') + yield Result(state=State.OK, summary=f'Link state: {port.link_state}') + + now = time.time() + value_store = get_value_store() + metric_prefix = 'checkpoint_mho_port_buffer' + raise_ingore_res = False + + for buffer in port.buffer.keys(): + try: + value = get_rate(value_store, f'{buffer}_frames', now, port.buffer[buffer].frames, raise_overflow=True, ) + except GetRateError: + raise_ingore_res = True + else: + yield Metric(value=value, name=f'{metric_prefix}_{buffer}_frames') + + try: + value = get_rate(value_store, f'{buffer}_octets', now, port.buffer[buffer].octets, raise_overflow=True, ) + except GetRateError: + raise_ingore_res = True + else: + yield Metric(value=value, name=f'{metric_prefix}_{buffer}_octets') + + try: + value = get_rate(value_store, f'{buffer}_discards', now, port.buffer[buffer].discard, raise_overflow=True, ) + except GetRateError: + raise_ingore_res = True + else: + yield Metric(value=value, name=f'{metric_prefix}_{buffer}_discards') + + if raise_ingore_res: + raise IgnoreResultsError('Initializing counters') + + +register.snmp_section( + name='checkpoint_mho_buffer', + parse_function=parse_checkpoint_mho_buffer, + fetch=SNMPTree( + base='.1.3.6.1.4.1.2620.1.55.1', # CHECKPOINT-MIB::mhoPortsStatus + oids=[ + # '3.1.1', # mhoRxBuffPortIndex + # '3.1.2', # mhoRxBuffPortLabel + '3.1.3', # mhoRxBuff0Frames + '3.1.4', # mhoRxBuff0Octet + '3.1.5', # mhoRxBuff0Discard + '3.1.6', # mhoRxBuff1Frames + '3.1.7', # mhoRxBuff1Octet + '3.1.8', # mhoRxBuff1Discard + '3.1.9', # mhoRxBuff2Frames + '3.1.10', # mhoRxBuff2Octet + '3.1.11', # mhoRxBuff2Discard + '3.1.12', # mhoRxBuff3Frames + '3.1.13', # mhoRxBuff3Octet + '3.1.14', # mhoRxBuff3Discard + '3.1.15', # mhoRxBuff4Frames + '3.1.16', # mhoRxBuff4Octet + '3.1.17', # mhoRxBuff4Discard + '3.1.18', # mhoRxBuff5Frames + '3.1.19', # mhoRxBuff5Octet + '3.1.20', # mhoRxBuff5Discard + '3.1.21', # mhoRxBuff6Frames + '3.1.22', # mhoRxBuff6Octet + '3.1.23', # mhoRxBuff6Discard + '3.1.24', # mhoRxBuff7Frames + '3.1.25', # mhoRxBuff7Octet + '3.1.26', # mhoRxBuff7Discard + + '4.1.1', # mhoStatePortIndex + '4.1.2', # mhoStatePortLabel + '4.1.3', # mhoStateLinkState + '4.1.4', # mhoStateAdminState + # '4.1.5', # mhoStateSpeed + + # '5.1.1', # mhoSummaryPortIndex + # '5.1.2', # mhoSummaryPortLabel + # '5.1.3', # mhoSummaryLinkState + # '5.1.4', # mhoSummaryAdminState + # '5.1.5', # mhoSummarySpeed + # '5.1.6', # mhoSummaryRxFcsErr + # '5.1.7', # mhoSummaryRxErr + # '5.1.8', # mhoSummaryRxFrames + # '5.1.9', # mhoSummaryRxBytes + # '5.1.10', # mhoSummaryTxErr + # '5.1.11', # mhoSummaryTxFrames + # '5.1.12', # mhoSummaryTxBytes + + ] + ), + 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_mho_buffer', + service_name='RX buffer port %s', + discovery_function=discovery_checkpoint_mho_buffer, + discovery_ruleset_name='discovery_checkpoint_mho_buffer', + discovery_default_parameters={ + 'add_admin_down': False, + 'add_link_down': False, + }, + check_function=check_checkpoint_mho_buffer, + check_default_parameters={}, + check_ruleset_name='checkpoint_mho_buffer', +) diff --git a/checkpoint_mho_buffers.mkp b/checkpoint_mho_buffers.mkp new file mode 100644 index 0000000000000000000000000000000000000000..11e6a4ad70817b57404a7e4f39d8a73991a8a6cd GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/packages/checkpoint_mho_buffers b/packages/checkpoint_mho_buffers new file mode 100644 index 0000000..1055a92 --- /dev/null +++ b/packages/checkpoint_mho_buffers @@ -0,0 +1,14 @@ +{'author': 'cmkadmin', + 'description': 'Monitors Check Point MHO port RX buffers\n' + '\n' + 'Tested on Orchestrator MHO-140 with R8020.SP HFA_317\n', + 'download_url': '', + 'files': {'agent_based': ['checkpoint_mho_buffer.py'], + 'web': ['plugins/metrics/checkpoint_mho_buffer.py']}, + 'name': 'checkpoint_mho_buffers', + 'num_files': 2, + 'title': 'Check Point MHO port RX buffers', + 'version': '20211130.v0.0.1', + 'version.min_required': '2.0.0', + 'version.packaged': '2021.09.20', + 'version.usable_until': None} \ No newline at end of file diff --git a/web/plugins/metrics/checkpoint_mho_buffer.py b/web/plugins/metrics/checkpoint_mho_buffer.py new file mode 100644 index 0000000..9723e49 --- /dev/null +++ b/web/plugins/metrics/checkpoint_mho_buffer.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# + +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics import ( + metric_info, + graph_info, + perfometer_info, +) + + +_i = 0 +while _i < 8: + metric_info[f'checkpoint_mho_port_buffer_{_i}_frames'] = { + 'title': _(f'RX buffer {_i} frames'), + 'unit': '1/s', + 'color': f'1{_i // 2 + 1}/{chr(97 + _i % 2)}', + } + metric_info[f'checkpoint_mho_port_buffer_{_i}_octets'] = { + 'title': _(f'RX buffer {_i} octets'), + 'unit': '1/s', + 'color': f'2{_i // 2 + 1}/{chr(97 + _i % 2)}', + } + + metric_info[f'checkpoint_mho_port_buffer_{_i}_discards'] = { + 'title': _(f'RX buffer {_i} discards'), + 'unit': '1/s', + 'color': f'3{_i // 2 + 1}/{chr(97 + _i % 2)}', + } + + _i += 1 + +graph_info['checkpoint_mho_port_buffer_frames'] = { + 'title': _('Check Point MHO RX buffer frames'), + 'metrics': [ + ('checkpoint_mho_port_buffer_0_frames', 'line'), + ('checkpoint_mho_port_buffer_1_frames', 'line'), + ('checkpoint_mho_port_buffer_2_frames', 'line'), + ('checkpoint_mho_port_buffer_3_frames', 'line'), + ('checkpoint_mho_port_buffer_4_frames', 'line'), + ('checkpoint_mho_port_buffer_5_frames', 'line'), + ('checkpoint_mho_port_buffer_6_frames', 'line'), + ('checkpoint_mho_port_buffer_7_frames', 'line'), + ], +} + +graph_info['checkpoint_mho_port_buffer_octets'] = { + 'title': _('Check Point MHO RX buffer octets'), + 'metrics': [ + ('checkpoint_mho_port_buffer_0_octets', 'line'), + ('checkpoint_mho_port_buffer_1_octets', 'line'), + ('checkpoint_mho_port_buffer_2_octets', 'line'), + ('checkpoint_mho_port_buffer_3_octets', 'line'), + ('checkpoint_mho_port_buffer_4_octets', 'line'), + ('checkpoint_mho_port_buffer_5_octets', 'line'), + ('checkpoint_mho_port_buffer_6_octets', 'line'), + ('checkpoint_mho_port_buffer_7_octets', 'line'), + ], +} + +graph_info['checkpoint_mho_port_buffer_discards'] = { + 'title': _('Check Point MHO RX buffer discards'), + 'metrics': [ + ('checkpoint_mho_port_buffer_0_discards', 'line'), + ('checkpoint_mho_port_buffer_1_discards', 'line'), + ('checkpoint_mho_port_buffer_2_discards', 'line'), + ('checkpoint_mho_port_buffer_3_discards', 'line'), + ('checkpoint_mho_port_buffer_4_discards', 'line'), + ('checkpoint_mho_port_buffer_5_discards', 'line'), + ('checkpoint_mho_port_buffer_6_discards', 'line'), + ('checkpoint_mho_port_buffer_7_discards', 'line'), + ], +} -- GitLab