From cc9f1d5574cc75fcd39c77b892a3f6d2f4160107 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Tue, 21 Feb 2023 20:01:38 +0100 Subject: [PATCH] update project --- CHANGELOG | 2 + agent_based/cisco_wlc.py | 68 +++++++++++++++++++++++++++++++--- cisco_wlc.mkp | Bin 8451 -> 9213 bytes packages/cisco_wlc | 5 +-- web/plugins/wato/cisco_wlc.py | 5 ++- 5 files changed, 71 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7305a00..4599d9c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -17,3 +17,5 @@ 2022-04-01: added RADIO MAC address 2022-05-31: removed "Software" from snmp detect function 2022-10-23: fixed warning in upgrade "non-empty params vanished" for vpn_entry +2023-02-21: added cluster function (backport from check_mk) THX to roger[dot]ellenberger[at]wagner[dot]ch + diff --git a/agent_based/cisco_wlc.py b/agent_based/cisco_wlc.py index f36ff2f..87133bb 100644 --- a/agent_based/cisco_wlc.py +++ b/agent_based/cisco_wlc.py @@ -26,10 +26,12 @@ # 2022-04-01: added RADIO MAC address # 2022-05-31: removed "Software" from snmp detect function # 2022-10-23: fixed warning on upgrade "non-empty params vanished" for inv_ap_info +# 2023-02-21: added cluster function (backport from check_mk) THX to roger[dot]ellenberger[at]wagner[dot]ch +# from time import time from dataclasses import dataclass -from typing import Optional, List, Dict +from typing import Optional, List, Dict, Mapping, Any, Union from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( DiscoveryResult, CheckResult, @@ -120,6 +122,8 @@ class InvApInfo: cdp_neigh_platform: Optional[str] = None +Section = Dict[str, Ap] + _operationasl_state = { 1: 'associated', 2: 'disassociating', @@ -152,7 +156,6 @@ _cdp_speed = { '5': 'auto', } - _interface_displayhints = { 'ethernet': 'eth', 'fastethernet': 'Fa', @@ -168,6 +171,12 @@ _interface_displayhints = { 'management': 'Ma', } +_map_states = { + "1": (State.OK, "online"), + "2": (State.CRIT, "critical"), + "3": (State.WARN, "warning"), +} + def _get_short_if_name(ifname: str) -> str: """ @@ -293,7 +302,6 @@ def parse_cisco_wlc(string_table: List[StringTable]) -> Optional[Dict[str, Ap]]: lwap_info=_get_lwapap_info(ap_oid_end, lwapap), ) }) - return parsed @@ -304,7 +312,7 @@ def parse_cisco_wlc(string_table: List[StringTable]) -> Optional[Dict[str, Ap]]: ########################################################################### -def discovery_cisco_wlc(section: Dict[str, Ap]) -> DiscoveryResult: +def discovery_cisco_wlc(section: Section) -> DiscoveryResult: for ap_name in section.keys(): ap = section.get(ap_name) @@ -334,7 +342,7 @@ def discovery_cisco_wlc(section: Dict[str, Ap]) -> DiscoveryResult: ########################################################################### -def check_cisco_wlc(item, params, section: Dict[str, Ap]) -> CheckResult: +def check_cisco_wlc(item, params, section: Section) -> CheckResult: ap_missing_state = params.get('state_ap_missing', 1) if params.get('inv_ap_info'): inv_ap_info = InvApInfo( @@ -571,6 +579,48 @@ def check_cisco_wlc(item, params, section: Dict[str, Ap]) -> CheckResult: else: yield Result(state=State.WARN, summary='AP data from discovery missing.') +########################################################################### +# +# Cluster function +# +########################################################################### + + +def _node_not_found(item: str, params: Mapping[str, Any]) -> Result: + infotext = "Accesspoint not found" + for ap_name, ap_state in params.get("ap_name", []): + if item.startswith(ap_name): + return Result(state=ap_state, summary=infotext) + return Result(state=State.CRIT, summary=infotext) + + +def _ap_info(node: Optional[str], wlc_status: Union[str, Ap]) -> Result: + wlc_status = str(wlc_status.ap_info.ap_operationstatus) if isinstance(wlc_status, Ap) else wlc_status + status, state_readable = _map_states.get(wlc_status, (State.UNKNOWN, f"unknown[{wlc_status}]")) + return Result(state=status, + summary="Accesspoint: %s%s" % (state_readable, (" (connected to %s)" % node) if node else ""), + ) + + +def cluster_check_cisco_wlc( + item: str, + params: Mapping[str, Any], + section: Mapping[str, Optional[Section]], +) -> CheckResult: + + for node, node_section in section.items(): + if node_section is not None and item in node_section: + yield _ap_info(node, node_section[item]) + yield from check_cisco_wlc(item, params, node_section) + return + yield _node_not_found(item, params) + +########################################################################### +# +# Register SNMP section +# +########################################################################### + register.snmp_section( name='cisco_wlc', @@ -635,6 +685,13 @@ register.snmp_section( contains('.1.3.6.1.2.1.1.1.0', 'C9800'), # sysDescr -> IOS-XE )) +########################################################################### +# +# Register Check Plugin +# +########################################################################### + + register.check_plugin( name='cisco_wlc', service_name='AP %s', @@ -656,4 +713,5 @@ register.check_plugin( # 'inv_ap_info': {}, }, check_ruleset_name='cisco_wlc', + cluster_check_function=cluster_check_cisco_wlc, ) diff --git a/cisco_wlc.mkp b/cisco_wlc.mkp index c52c8c134ed37078a3f4ba5e450b8f1543d2009d..45dd8e4c2cf646e68e9b0486f7db3808d26c9a72 100644 GIT binary patch literal 9213 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 literal 8451 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 Mb<z@{uA!j*2WudWegFUf diff --git a/packages/cisco_wlc b/packages/cisco_wlc index ca244c5..e2cb239 100644 --- a/packages/cisco_wlc +++ b/packages/cisco_wlc @@ -12,9 +12,8 @@ 'web': ['plugins/wato/cisco_wlc.py', 'plugins/metrics/cisco_wlc.py']}, 'name': 'cisco_wlc', - 'num_files': 3, 'title': 'monitor Cisco WLC APs', - 'version': '20221023.v0.6b', + 'version': '20230221.v0.7', 'version.min_required': '2.0.0', - 'version.packaged': '2021.09.20', + 'version.packaged': '2.1.0p21', 'version.usable_until': None} \ No newline at end of file diff --git a/web/plugins/wato/cisco_wlc.py b/web/plugins/wato/cisco_wlc.py index 6a10e24..c0ed795 100644 --- a/web/plugins/wato/cisco_wlc.py +++ b/web/plugins/wato/cisco_wlc.py @@ -109,6 +109,7 @@ def _parameter_valuespec_cisco_wlc(): help=_('The configured value must match a AP item as reported by the monitored ' 'device. For example: "AP1.4"'), allow_empty=False, + size=40, ), TextUnicode( title=_('AP Alias'), @@ -116,8 +117,10 @@ def _parameter_valuespec_cisco_wlc(): 'the text configured in the "AP item name" field. The alias will ' 'be shown in the check info'), allow_empty=False, + size=40, ), - ] + ], + orientation='horizontal', ), title=_('AP alias'), add_label=_('Add name'))), -- GitLab