From e8e2b94f548cc6f317420d72434988d59fd08261 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Fri, 10 May 2024 22:44:05 +0200
Subject: [PATCH] update project

---
 README.md                                     |   1 +
 agent_based/inv_opengear_serial_lines.py      | 150 -------------
 {doc => img}/.gitkeep                         |   0
 {doc => img}/sample.png                       | Bin
 inv_opengear_serial_line.mkp                  | Bin 2324 -> 0 bytes
 ...nv_opengear_serial_line-0.1.1-20230614.mkp | Bin
 ...nv_opengear_serial_line-0.1.2-20240510.mkp | Bin 0 -> 2539 bytes
 .../agent_based/inv_opengear_serial_lines.py  | 197 ++++++++++++++++++
 .../packages}/inv_opengear_serial_line        |   6 +-
 .../views/inv_opengear_serial_lines.py        |   5 +-
 10 files changed, 203 insertions(+), 156 deletions(-)
 delete mode 100644 agent_based/inv_opengear_serial_lines.py
 rename {doc => img}/.gitkeep (100%)
 rename {doc => img}/sample.png (100%)
 delete mode 100644 inv_opengear_serial_line.mkp
 rename inv_opengear_serial_line-0.1.1-20230614.mkp => mkp/inv_opengear_serial_line-0.1.1-20230614.mkp (100%)
 create mode 100644 mkp/inv_opengear_serial_line-0.1.2-20240510.mkp
 create mode 100644 source/agent_based/inv_opengear_serial_lines.py
 rename {packages => source/packages}/inv_opengear_serial_line (74%)
 rename {gui => source/web/plugins}/views/inv_opengear_serial_lines.py (92%)

diff --git a/README.md b/README.md
index 3aa5ec4..bc91117 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 dcd581a..0000000
--- 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
GIT binary patch
literal 0
HcmV?d00001

literal 2324
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

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
GIT binary patch
literal 2539
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

literal 0
HcmV?d00001

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 0000000..8d22bb9
--- /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 7926a6f..ca74202 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 3187360..cd32ece 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',
-- 
GitLab