diff --git a/README.md b/README.md index 3aa5ec47a30c6c79a3d19d183d844e11fd1ed011..bc91117ce12ce3d507199a66add3bcbd1e966adb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[PACKAGE]: ../../raw/master/mkp/inv_opengear_serial_line-0.1.2-20240510.mkp "inv_opengear_serial_line-0.1.2-20240510.mkp" # Hardware inventory ### Plugin Info diff --git a/agent_based/inv_opengear_serial_lines.py b/agent_based/inv_opengear_serial_lines.py deleted file mode 100644 index dcd581afe14371487fd0b83a9aca06175384b081..0000000000000000000000000000000000000000 --- a/agent_based/inv_opengear_serial_lines.py +++ /dev/null @@ -1,150 +0,0 @@ -#!/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 : 20212-07-08 -# File : inv_opengear_serial_line -# -# inventory of opengear console servers serial lines -# -# 2023-02-20: moved gui files from ~/local/share/check_mk/... to ~/local/lib/check_mk... -# 2023-06-16: removed unused inventory_ruleset_name and params - -from cmk.base.plugins.agent_based.agent_based_api.v1 import ( - register, - SNMPTree, - TableRow, - startswith, - OIDEnd, -) -from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( - StringTable, - InventoryResult, -) - -_opengear_state = { - '1': 'on', - '2': 'off', -} - -_opengear_log_level = { - '1': 'disabled', - '2': 'connect', - '3': 'inputAndOutput', - '4': 'inputOnly', - '5': 'outputOnly', -} - -_opengear_mode = { - '1': 'none', - '2': 'console', - '3': 'sdt', - '4': 'terminal', - '5': 'bridge', -} - -_opengear_flow_control = { - '1': 'none', - '2': 'hardware', - '3': 'software', -} - -_opengear_stop_bits = { - '1': 'one', - '2': 'two', - '3': 'oneAndAHalf', -} - -_opengear_parity = { - '1': 'none', - '2': 'odd', - '3': 'even', - '4': 'mark', - '5': 'space', -} - - -def parse_inv_opengear_serial_lines(string_table: StringTable): - section = [] - - for index, label, speed, databits, parity, stopbits, flowcontrol, mode, loglevel, \ - dcd, dtr, dsr, cts, rts in string_table: - entry = { - 'key_columns': { - 'index': f'{int(index):02}' - }, - 'inventory_columns': { - 'label': label, - 'speed': speed, - 'databits': databits, - 'parity': _opengear_parity.get(parity, parity), - 'stopbits': _opengear_stop_bits.get(stopbits, stopbits), - 'flowcontrol': _opengear_flow_control.get(flowcontrol, flowcontrol), - 'mode': _opengear_mode.get(mode, mode), - 'loglevel': _opengear_log_level.get(loglevel, loglevel), - 'cts': _opengear_state[cts], - - 'dcd': _opengear_state[dcd], - 'dtr': _opengear_state[dtr], - 'rts': _opengear_state[rts], - }, - 'status_columns': { - - } - } - - section.append(entry) - - return section - - -def inventory_bgp_peers(section) -> InventoryResult: - path = ['hardware', 'serial_lines'] - - for entry in section: - yield TableRow( - path=path, - key_columns=entry['key_columns'], - inventory_columns=entry['inventory_columns'], - status_columns=entry['status_columns'] - ) - - -register.snmp_section( - name='inv_opengear_serial_lines', - parse_function=parse_inv_opengear_serial_lines, - fetch=SNMPTree( - base='.1.3.6.1.4.1.25049.17.2.1', # OG-STATUSv2-MIB:orgSerialPortEntry - oids=[ - OIDEnd(), # line index - '2', # ogSerialPortLabel - '3', # ogSerialPortSpeed - '4', # ogSerialPortDataBits - '5', # ogSerialPortParity - '6', # ogSerialPortStopBits - '7', # ogSerialPortFlowControl - '8', # ogSerialPortMode - '9', # ogSerialPortLogLevel - # '10', # ogSerialPortRxBytes - # '11', # ogSerialPortTxBytes - # '12', # ogSerialPortFramingErrors - # '13', # ogSerialPortParityErrors - # '14', # ogSerialPortOverrunErrors - # '15', # ogSerialPortBreaks - '16', # ogSerialPortDCD - '17', # ogSerialPortDTR - '18', # ogSerialPortDSR - '19', # ogSerialPortCTS - '20', # ogSerialPortRTS - ] - ), - detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.25049'), # sysObjectID == opengear -) - -register.inventory_plugin( - name='inv_opengear_serial_lines', - inventory_function=inventory_bgp_peers, -) diff --git a/doc/.gitkeep b/img/.gitkeep similarity index 100% rename from doc/.gitkeep rename to img/.gitkeep diff --git a/doc/sample.png b/img/sample.png similarity index 100% rename from doc/sample.png rename to img/sample.png diff --git a/inv_opengear_serial_line.mkp b/inv_opengear_serial_line.mkp deleted file mode 100644 index 649054826aca7e12dbc7a1d67442a29494fa4ce3..0000000000000000000000000000000000000000 Binary files a/inv_opengear_serial_line.mkp and /dev/null differ diff --git a/inv_opengear_serial_line-0.1.1-20230614.mkp b/mkp/inv_opengear_serial_line-0.1.1-20230614.mkp similarity index 100% rename from inv_opengear_serial_line-0.1.1-20230614.mkp rename to mkp/inv_opengear_serial_line-0.1.1-20230614.mkp diff --git a/mkp/inv_opengear_serial_line-0.1.2-20240510.mkp b/mkp/inv_opengear_serial_line-0.1.2-20240510.mkp new file mode 100644 index 0000000000000000000000000000000000000000..3708e3fe24d7b7f2fd460bea62a388d829e8771f Binary files /dev/null and b/mkp/inv_opengear_serial_line-0.1.2-20240510.mkp differ diff --git a/source/agent_based/inv_opengear_serial_lines.py b/source/agent_based/inv_opengear_serial_lines.py new file mode 100644 index 0000000000000000000000000000000000000000..8d22bb970386d1b893d128cc3715d75aaa2d4597 --- /dev/null +++ b/source/agent_based/inv_opengear_serial_lines.py @@ -0,0 +1,197 @@ +#!/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 : 20212-07-08 +# File : inv_opengear_serial_line +# +# inventory of opengear console servers serial lines +# +# 2023-02-20: moved gui files from ~/local/share/check_mk/... to ~/local/lib/check_mk... +# 2023-06-16: removed unused inventory_ruleset_name and params +# 2024-05-10: fixed wrong inventory function name +# integrated .1.3.6.1.4.1.25049.17.2.1 and .1.3.6.1.4.1.25049.10.19.2.2.1 + +from collections.abc import Mapping, Sequence +from typing import List + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + OIDEnd, + SNMPTree, + TableRow, + register, + startswith, +) +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + InventoryResult, + StringTable, +) + +_opengear_state = { + '0': 'off', + '1': 'on', + '2': 'off', +} + +_opengear_log_level = { + '1': 'disabled', + '2': 'connect', + '3': 'inputAndOutput', + '4': 'inputOnly', + '5': 'outputOnly', +} + +_opengear_mode = { + '1': 'none', + '2': 'console', + '3': 'sdt', + '4': 'terminal', + '5': 'bridge', +} + +_opengear_flow_control = { + '1': 'none', + '2': 'hardware', + '3': 'software', +} + +_opengear_stop_bits = { + '1': 'one', + '2': 'two', + '3': 'oneAndAHalf', +} + +_opengear_parity = { + '1': 'none', + '2': 'odd', + '3': 'even', + '4': 'mark', + '5': 'space', +} + +SECTION = Sequence[Mapping[str, Mapping[str, str]]] + + +def parse_inv_opengear_serial_lines(string_table: List[StringTable]) -> SECTION | None: + try: + raw_data, raw_data_v2 = string_table + except ValueError: + return + + if not raw_data: + raw_data = raw_data_v2 + + section = [] + + for line in raw_data: + try: + index, label, speed, databits, parity, stopbits, flowcontrol, mode, loglevel, dcd, dtr, dsr, cts, rts = line + except ValueError: + return + + entry = { + 'key_columns': { + 'index': f'{int(index):02}' + }, + 'inventory_columns': { + 'label': label, + 'speed': speed, + 'databits': databits, + 'parity': _opengear_parity.get(parity, parity), + 'stopbits': _opengear_stop_bits.get(stopbits, stopbits), + 'flowcontrol': _opengear_flow_control.get(flowcontrol, flowcontrol), + 'mode': _opengear_mode.get(mode, mode), + 'loglevel': _opengear_log_level.get(loglevel, loglevel), + 'cts': _opengear_state[cts], + + 'dcd': _opengear_state[dcd], + 'dtr': _opengear_state[dtr], + 'rts': _opengear_state[rts], + }, + 'status_columns': { + } + } + + section.append(entry) + + return section + + +def inv_opengear_serial_lines(section: SECTION) -> InventoryResult: + path = ['hardware', 'serial_lines'] + + for entry in section: + yield TableRow( + path=path, + key_columns=entry['key_columns'], + inventory_columns=entry['inventory_columns'], + status_columns=entry['status_columns'] + ) + + +register.snmp_section( + name='inv_opengear_serial_lines', + parse_function=parse_inv_opengear_serial_lines, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.25049.17.2.1', # OG-STATUSv2-MIB:orgSerialPortEntry + oids=[ + OIDEnd(), # line index + '2', # ogSerialPortLabel + '3', # ogSerialPortSpeed + '4', # ogSerialPortDataBits + '5', # ogSerialPortParity + '6', # ogSerialPortStopBits + '7', # ogSerialPortFlowControl + '8', # ogSerialPortMode + '9', # ogSerialPortLogLevel + # '10', # ogSerialPortRxBytes + # '11', # ogSerialPortTxBytes + # '12', # ogSerialPortFramingErrors + # '13', # ogSerialPortParityErrors + # '14', # ogSerialPortOverrunErrors + # '15', # ogSerialPortBreaks + '16', # ogSerialPortDCD + '17', # ogSerialPortDTR + '18', # ogSerialPortDSR + '19', # ogSerialPortCTS + '20', # ogSerialPortRTS + ] + ), + SNMPTree( + base='.1.3.6.1.4.1.25049.10.19.2.2.1', # + oids=[ + OIDEnd(), # line index + '2', # ogSerialPortLabel + '3', # ogSerialPortSpeed + '4', # ogSerialPortDataBits + '5', # ogSerialPortParity + '6', # ogSerialPortStopBits + '7', # ogSerialPortFlowControl + '8', # ogSerialPortMode + '9', # ogSerialPortLogLevel + # '10', # ogSerialPortRxBytes + # '11', # ogSerialPortTxBytes + # '12', # ogSerialPortFramingErrors + # '13', # ogSerialPortParityErrors + # '14', # ogSerialPortOverrunErrors + # '15', # ogSerialPortBreaks + '16', # ogSerialPortDCD + '17', # ogSerialPortDTR + '18', # ogSerialPortDSR + '19', # ogSerialPortCTS + '20', # ogSerialPortRTS + ] + ), + ], + + detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.25049'), +) + +register.inventory_plugin( + name='inv_opengear_serial_lines', + inventory_function=inv_opengear_serial_lines, +) diff --git a/packages/inv_opengear_serial_line b/source/packages/inv_opengear_serial_line similarity index 74% rename from packages/inv_opengear_serial_line rename to source/packages/inv_opengear_serial_line index 7926a6f2c6154ddcb08873733a28402a8c1031e6..ca742028618c0feed6264b6a4d79c2a04f7618a4 100644 --- a/packages/inv_opengear_serial_line +++ b/source/packages/inv_opengear_serial_line @@ -2,10 +2,10 @@ 'description': 'Inventory for opengear KVM devices serial lines\n', 'download_url': 'https://thl-cmk.hopto.org', 'files': {'agent_based': ['inv_opengear_serial_lines.py'], - 'gui': ['views/inv_opengear_serial_lines.py']}, + 'web': ['plugins/views/inv_opengear_serial_lines.py']}, 'name': 'inv_opengear_serial_line', 'title': 'opengear serial line inventory', - 'version': '0.1.1-20230614', + 'version': '0.1.2-20240510', 'version.min_required': '2.2.0b1', - 'version.packaged': '2.2.0p2', + 'version.packaged': '2.2.0p24', 'version.usable_until': None} diff --git a/gui/views/inv_opengear_serial_lines.py b/source/web/plugins/views/inv_opengear_serial_lines.py similarity index 92% rename from gui/views/inv_opengear_serial_lines.py rename to source/web/plugins/views/inv_opengear_serial_lines.py index 3187360920e3f2eacecdb3329bbcbf308c8d8881..cd32ece3cc84a25acd8c65827ab52b37730cd8b7 100644 --- a/gui/views/inv_opengear_serial_lines.py +++ b/source/web/plugins/views/inv_opengear_serial_lines.py @@ -11,18 +11,17 @@ # 2023-02-20: moved from ~/local/share/check_mk/... to ~/local/lib/check_mk... # 2023-06-14: removed declare_invtable_view from view definition on cmk 2.2 (see werk 15493) # changed inventory_displayhints import (see werk 15493) - +# 2024-05-10: moved back to ~/local/share/check_mk/... from ~/local/lib/check_mk... fixed crash in web.log from cmk.gui.i18n import _ from cmk.gui.views.inventory.registry import inventory_displayhints - inventory_displayhints.update({ '.hardware.serial_lines:': { 'title': _('Serial lines'), 'keyorder': [ 'index', - 'label', + 'label', 'speed', 'databits', 'parity', 'stopbits', 'flowcontrol' ], 'view': 'invseriallines_of_host',