From 96dab95a85d9a94c09d1176333bace05bf53b7de Mon Sep 17 00:00:00 2001 From: "Th.L" <thl-cmk@outlook.com> Date: Wed, 14 Jul 2021 18:52:27 +0200 Subject: [PATCH] update project --- agent_based/inv_cisco_wlc_aps_lwap.py | 379 ++++++++++---------- inv_cisco_wlc_aps_lwap.mkp | Bin 6395 -> 6307 bytes web/plugins/views/inv_cisco_wlc_aps_lwap.py | 4 +- web/plugins/wato/inv_cisco_wlc_aps_lwap.py | 4 +- 4 files changed, 187 insertions(+), 200 deletions(-) diff --git a/agent_based/inv_cisco_wlc_aps_lwap.py b/agent_based/inv_cisco_wlc_aps_lwap.py index 97253c4..79642b9 100644 --- a/agent_based/inv_cisco_wlc_aps_lwap.py +++ b/agent_based/inv_cisco_wlc_aps_lwap.py @@ -14,15 +14,6 @@ # 2018-09-04 : changes for CMK 1.5.x (inv_tree --> inv_tree_list) # 2021-07-11 : rewritten for CMK 2.0 -import re -import time -import binascii -from typing import List, NamedTuple - -from cmk.base.plugins.agent_based.agent_based_api.v1 import ( - OIDEnd, - OIDBytes, -) from cmk.base.plugins.agent_based.agent_based_api.v1 import ( register, SNMPTree, @@ -35,187 +26,187 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( ) _last_reboot_reason = { - 0: 'none', - 1: 'dot11gModeChange', - 2: 'ipAddressSet', - 3: 'ipAddressReset', - 4: 'rebootFromController', - 5: 'dhcpFallbackFail', - 6: 'discoveryFail', - 7: 'noJoinResponse', - 8: 'denyJoin', - 9: 'noConfigResponse', - 10: 'configController', - 11: 'imageUpgradeSuccess', - 12: 'imageOpcodeInvalid', - 13: 'imageCheckSumInvalid', - 14: 'imageDataTimeout', - 15: 'configFileInvalid', - 16: 'imageDownloadError', - 17: 'rebootFromConsole', - 18: 'rapOverAir', - 19: 'powerLow', - 20: 'crash', - 21: 'powerHigh', - 22: 'powerLoss', - 23: 'powerChange', - 24: 'componentFailure', - 25: 'watchdog', + '0': 'none', + '1': 'dot11gModeChange', + '2': 'ipAddressSet', + '3': 'ipAddressReset', + '4': 'rebootFromController', + '5': 'dhcpFallbackFail', + '6': 'discoveryFail', + '7': 'noJoinResponse', + '8': 'denyJoin', + '9': 'noConfigResponse', + '10': 'configController', + '11': 'imageUpgradeSuccess', + '12': 'imageOpcodeInvalid', + '13': 'imageCheckSumInvalid', + '14': 'imageDataTimeout', + '15': 'configFileInvalid', + '16': 'imageDownloadError', + '17': 'rebootFromConsole', + '18': 'rapOverAir', + '19': 'powerLow', + '20': 'crash', + '21': 'powerHigh', + '22': 'powerLoss', + '23': 'powerChange', + '24': 'componentFailure', + '25': 'watchdog', } _enable_disable = { - 0: 'N/A', - 1: 'enabled', - 2: 'disabled', + '0': 'N/A', + '1': 'enabled', + '2': 'disabled', } _failover_pirority = { - 0: 'N/A', - 1: 'low', - 2: 'medium', - 3: 'high', - 4: 'critical', + '0': 'N/A', + '1': 'low', + '2': 'medium', + '3': 'high', + '4': 'critical', } _power_status = { - 0: 'N/A', - 1: 'low', - 2: '15.4W', - 3: '16.8W', - 4: 'full', - 5: 'external', - 6: 'mixedmode', + '0': 'N/A', + '1': 'low', + '2': '15.4W', + '3': '16.8W', + '4': 'full', + '5': 'external', + '6': 'mixedmode', } _pwr_injector_selection = { - 0: 'N/A', - 1: 'unknown', - 2: 'installed', - 3: 'override', + '0': 'N/A', + '1': 'unknown', + '2': 'installed', + '3': 'override', } _monitor_mode_optimization = { - 0: 'N/A', - 1: 'all', - 2: 'tracking', - 3: 'wips', - 4: 'none', + '0': 'N/A', + '1': 'all', + '2': 'tracking', + '3': 'wips', + '4': 'none', } _encryption_supported = { - 0: 'N/A', - 1: 'yes', - 2: 'no', + '0': 'N/A', + '1': 'yes', + '2': 'no', } _inet_address_type = { - 0: 'N/A', - 1: 'ipv4', - 2: 'ipv6', - 3: 'ipv4z', - 4: 'ipv6z', - 16: 'dns', + '0': 'N/A', + '1': 'ipv4', + '2': 'ipv6', + '3': 'ipv4z', + '4': 'ipv6z', + '16': 'dns', } _antenna_band_mode = { - 0: 'N/A', - 1: 'not applicable', - 2: 'single', - 3: 'dual', + '0': 'N/A', + '1': 'not applicable', + '2': 'single', + '3': 'dual', } _venueconfigvenuegroup = { - 0: 'N/A', - 1: 'unspecified', - 2: 'assembly', - 3: 'business', - 4: 'educational', - 5: 'factory and industrial', - 6: 'institutional', - 7: 'mercantile', - 8: 'residential', - 9: 'storage', - 10: 'utility and misc', - 11: 'vehicular', - 12: 'outdoor', + '0': 'N/A', + '1': 'unspecified', + '2': 'assembly', + '3': 'business', + '4': 'educational', + '5': 'factory and industrial', + '6': 'institutional', + '7': 'mercantile', + '8': 'residential', + '9': 'storage', + '10': 'utility and misc', + '11': 'vehicular', + '12': 'outdoor', } _venueconfigvenuetype = { - 0: 'N/A', - 1: 'unspecified', - 2: 'unspecified assembly', - 3: 'arena', - 4: 'stadium', - 5: 'passenger terminal', - 6: 'amphitheater', - 7: 'amusement park', - 8: 'place of worship', - 9: 'convention center', - 10: 'library', - 11: 'museum', - 12: 'restaurant', - 13: 'theater', - 14: 'bar', - 15: 'coffee shop', - 16: 'zoo or aquarium', - 17: 'emergency coordination center', - 18: 'unspecified business', - 19: 'doctor or dentist office', - 20: 'bank', - 21: 'firestation', - 22: 'policestation', - 23: 'postoffice', - 24: 'professional office', - 25: 'research and development facility', - 26: 'attorney office', - 27: 'unspecified educational', - 28: 'school primary', - 29: 'school secondary', - 30: 'university or college', - 31: 'unspecified factory and industrial', - 32: 'factory', - 33: 'unspecified institutional', - 34: 'hospital', - 35: 'longterm carefacility', - 36: 'alcohol and drug rehabilitation center', - 37: 'group home', - 38: 'prison or jail', - 39: 'unspecified mercantile', - 40: 'retail store', - 41: 'grocery market', - 42: 'auomotive service station', - 43: 'shoppin gmall', - 44: 'gas station', - 45: 'unspecified residential', - 46: 'privat eresidence', - 47: 'hotel or motel', - 48: 'dormitory', - 49: 'boarding house', - 50: 'unspecified storage', - 51: 'unspecified utility', - 52: 'unspecified vehicular', - 53: 'automobile or truck', - 54: 'airplane', - 55: 'bus', - 56: 'ferry', - 57: 'ship or boat', - 58: 'train', - 59: 'motorbike', - 60: 'unspecified outdoor', - 61: 'muni mesh network', - 62: 'citypark', - 63: 'restarea', - 64: 'traffic control', - 65: 'busstop', - 66: 'kiosk', + '0': 'N/A', + '1': 'unspecified', + '2': 'unspecified assembly', + '3': 'arena', + '4': 'stadium', + '5': 'passenger terminal', + '6': 'amphitheater', + '7': 'amusement park', + '8': 'place of worship', + '9': 'convention center', + '10': 'library', + '11': 'museum', + '12': 'restaurant', + '13': 'theater', + '14': 'bar', + '15': 'coffee shop', + '16': 'zoo or aquarium', + '17': 'emergency coordination center', + '18': 'unspecified business', + '19': 'doctor or dentist office', + '20': 'bank', + '21': 'firestation', + '22': 'policestation', + '23': 'postoffice', + '24': 'professional office', + '25': 'research and development facility', + '26': 'attorney office', + '27': 'unspecified educational', + '28': 'school primary', + '29': 'school secondary', + '30': 'university or college', + '31': 'unspecified factory and industrial', + '32': 'factory', + '33': 'unspecified institutional', + '34': 'hospital', + '35': 'longterm carefacility', + '36': 'alcohol and drug rehabilitation center', + '37': 'group home', + '38': 'prison or jail', + '39': 'unspecified mercantile', + '40': 'retail store', + '41': 'grocery market', + '42': 'auomotive service station', + '43': 'shoppin gmall', + '44': 'gas station', + '45': 'unspecified residential', + '46': 'privat eresidence', + '47': 'hotel or motel', + '48': 'dormitory', + '49': 'boarding house', + '50': 'unspecified storage', + '51': 'unspecified utility', + '52': 'unspecified vehicular', + '53': 'automobile or truck', + '54': 'airplane', + '55': 'bus', + '56': 'ferry', + '57': 'ship or boat', + '58': 'train', + '59': 'motorbike', + '60': 'unspecified outdoor', + '61': 'muni mesh network', + '62': 'citypark', + '63': 'restarea', + '64': 'traffic control', + '65': 'busstop', + '66': 'kiosk', } _apsubmode = { - 0: 'N/A', - 1: 'none', - 2: 'wips', - 3: 'pppoe', - 4: 'pppoewips', + '0': 'N/A', + '1': 'none', + '2': 'wips', + '3': 'pppoe', + '4': 'pppoewips', } @@ -248,12 +239,12 @@ def parse_inv_cisco_wlc_aps_lwap(string_table: StringTable): 'max_#_of_dot11_slots': ap[1], 'name': ap[2], 'max_#_of_ethernet_slots': ap[3], - 'encryption_supported': _encryption_supported.get(int(ap[23])), + 'encryption_supported': _encryption_supported.get(ap[23]), 'tcp_mss': ap[25], - 'data_encryption': _enable_disable.get(int(ap[26])), + 'data_encryption': _enable_disable.get(ap[26]), 'port_number': ap[28], - 'venue_config_venue_group': _venueconfigvenuegroup.get(int(ap[29])), - 'venue_config_venue_type': _venueconfigvenuetype.get(int(ap[30])), + 'venue_config_venue_group': _venueconfigvenuegroup.get(ap[29]), + 'venue_config_venue_type': _venueconfigvenuetype.get(ap[30]), 'venue_config_venue_name': ap[31], 'venue_config_language': ap[32], 'trunk_vlan': ap[34], @@ -261,49 +252,49 @@ def parse_inv_cisco_wlc_aps_lwap(string_table: StringTable): 'floor_label': ap[45], 'module_inserted': ap[49], 'status_columns': { - 'antenna_band_mode': _antenna_band_mode.get(int(ap[48])), - 'encryption': _enable_disable.get(int(ap[11])), - 'failover_priority': _failover_pirority.get(int(ap[12])), - 'power_status': _power_status.get(int(ap[13])), - 'telnet': _enable_disable.get(int(ap[14])), - 'ssh': _enable_disable.get(int(ap[15])), - 'pwr_pre_std_state': _enable_disable.get(int(ap[16])), - 'pwr_injector_state': _enable_disable.get(int(ap[17])), - 'pwr_injector_selection': _pwr_injector_selection.get(int(ap[18])), + 'antenna_band_mode': _antenna_band_mode.get(ap[48]), + 'encryption': _enable_disable.get(ap[11]), + 'failover_priority': _failover_pirority.get(ap[12]), + 'power_status': _power_status.get(ap[13]), + 'telnet': _enable_disable.get(ap[14]), + 'ssh': _enable_disable.get(ap[15]), + 'pwr_pre_std_state': _enable_disable.get(ap[16]), + 'pwr_injector_state': _enable_disable.get(ap[17]), + 'pwr_injector_selection': _pwr_injector_selection.get(ap[18]), 'pwr_injector_sw_mac_addr': _render_mac_address(ap[19]), - 'wips': _enable_disable.get(int(ap[20])), - 'monitor_mode_optimization': _monitor_mode_optimization.get(int(ap[18])), - 'amsdu': _enable_disable.get(int(ap[22])), - 'admin': _enable_disable.get(int(ap[27])), - 'rogue_detection': _enable_disable.get(int(ap[24])), - 'led_state': _enable_disable.get(int(ap[33])), - 'trunk_vlan_status': _enable_disable.get(int(ap[35])), - 'submode': _apsubmode.get(int(ap[37])), - 'real_time_stats_mode_enabled': _enable_disable.get(int(ap[38])), + 'wips': _enable_disable.get(ap[20]), + 'monitor_mode_optimization': _monitor_mode_optimization.get(ap[18]), + 'amsdu': _enable_disable.get(ap[22]), + 'admin': _enable_disable.get(ap[27]), + 'rogue_detection': _enable_disable.get(ap[24]), + 'led_state': _enable_disable.get(ap[33]), + 'trunk_vlan_status': _enable_disable.get(ap[35]), + 'submode': _apsubmode.get(ap[37]), + 'real_time_stats_mode_enabled': _enable_disable.get(ap[38]), 'upgrade_from_version': ap[39], 'upgrade_to_version': ap[40], 'upgrade_failure_cause': ap[41], 'adj_channel_rogue_enabled': ap[46], 'sys_net_id': ap[47], - 'enable_module': _enable_disable.get(int(ap[50])), - 'is_universal': _enable_disable.get(int(ap[51])), + 'enable_module': _enable_disable.get(ap[50]), + 'is_universal': _enable_disable.get(ap[51]), 'universal_prime_status': ap[52], - 'is_master': _enable_disable.get(int(ap[53])), - 'ble_fw_download_status': _enable_disable.get(int(ap[54])), + 'is_master': _enable_disable.get(ap[53]), + 'ble_fw_download_status': _enable_disable.get(ap[54]), 'max_client_limit_number_trap': ap[42], 'max_client_limit_cause': ap[43], - 'max_client_limit_set': _enable_disable.get(int(ap[44])), + 'max_client_limit_set': _enable_disable.get(ap[44]), 'wlc_primary_address': wlcprimaryaddress, 'wlc_secondary_address': wlcsecondaryaddress, 'wlc_tertiary_address': wlctertiaryaddress, - 'last_reboot_reason': _last_reboot_reason.get(int(ap[10])), + 'last_reboot_reason': _last_reboot_reason.get(ap[10]), } }) return aps -def inventory_wlc_aps_lwap(params, section) -> InventoryResult: +def inventory_cisco_wlc_aps_lwap(params, section) -> InventoryResult: removecolumns = [] if params: @@ -317,24 +308,22 @@ def inventory_wlc_aps_lwap(params, section) -> InventoryResult: for key in key_columns.keys(): ap.pop(key) + status_columns = ap['status_columns'] + + ap.pop('status_columns') + for entry in removecolumns: try: ap.pop(entry) except KeyError: pass - status_columns = ap.get('status_columns', None) for entry in removecolumns: try: status_columns.pop(entry) except KeyError: pass - try: - ap.pop('status_columns') - except KeyError: - pass - yield TableRow( path=path, key_columns=key_columns, @@ -342,6 +331,7 @@ def inventory_wlc_aps_lwap(params, section) -> InventoryResult: status_columns=status_columns, ) + register.snmp_section( name='inv_cisco_wlc_aps_lwap', parse_function=parse_inv_cisco_wlc_aps_lwap, @@ -412,8 +402,7 @@ register.snmp_section( register.inventory_plugin( name='inv_cisco_wlc_aps_lwap', - inventory_function=inventory_wlc_aps_lwap, + inventory_function=inventory_cisco_wlc_aps_lwap, inventory_default_parameters={}, - inventory_ruleset_name='inv_cisco_wlc_ap_cdp_cache', + inventory_ruleset_name='inv_cisco_wlc_aps_lwap', ) - diff --git a/inv_cisco_wlc_aps_lwap.mkp b/inv_cisco_wlc_aps_lwap.mkp index 60fe55d3ee0184f91851bac43d5010ea6ef68849..432139322c4d4e9ffa33e77abbd9a51d8620cdf6 100644 GIT binary patch literal 6307 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 literal 6395 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 W{ofz^KUU${bi?Sw8NwI>!v6#8$(We{ diff --git a/web/plugins/views/inv_cisco_wlc_aps_lwap.py b/web/plugins/views/inv_cisco_wlc_aps_lwap.py index 0317984..67974dd 100644 --- a/web/plugins/views/inv_cisco_wlc_aps_lwap.py +++ b/web/plugins/views/inv_cisco_wlc_aps_lwap.py @@ -1,10 +1,10 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -import cmk.gui.utils from cmk.gui.plugins.views import ( inventory_displayhints,) from cmk.gui.i18n import _ +from cmk.gui.plugins.views.inventory import declare_invtable_view inventory_displayhints.update({ @@ -67,6 +67,4 @@ inventory_displayhints.update({ '.networking.wlan.controller.accesspoints_lwap:*.ble_fw_download_status' : {'title': _('Ble FW downaload status')}, }) -from cmk.gui.plugins.views.inventory import declare_invtable_view - declare_invtable_view('invwlcapslwap', '.networking.wlan.controller.accesspoints_lwap:', _('Cisco WLC APs LWAP info'), _('Cisco WLC APs LWAP info)')) diff --git a/web/plugins/wato/inv_cisco_wlc_aps_lwap.py b/web/plugins/wato/inv_cisco_wlc_aps_lwap.py index e2bb151..4d6be49 100644 --- a/web/plugins/wato/inv_cisco_wlc_aps_lwap.py +++ b/web/plugins/wato/inv_cisco_wlc_aps_lwap.py @@ -16,7 +16,7 @@ from cmk.gui.plugins.wato.inventory import ( RulespecGroupInventory, ) -removecolumns = [ +_removecolumns = [ ('adj_channel_rogue_enabled', 'Adj. channel rogue'), ('admin', 'Admin state'), ('amsdu', 'Aggregate MAC Service Data Unit'), @@ -78,7 +78,7 @@ def _valuespec_inv_cisco_wlc_aps_lwap(): ListChoice( title=_('list of columns to remove'), help=_('information to remove from inventory'), - choices=removecolumns, + choices=_removecolumns, default_value=[ 'adj_channel_rogue_enabled', 'amsdu', 'is_master', 'is_universal', 'submode', 'universal_prime_status', 'max_client_limit_cause', 'ble_fw_download_status', 'antenna_band_mode', -- GitLab