From 66e7062a2cff7c5bdb7f0abd5b347343d03ea452 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sat, 3 Jun 2023 17:24:02 +0200
Subject: [PATCH] update project

---
 agent_based/inv_huawei_hw_components.py     | 114 ++++++++++++++++++++
 gui/views/inv_huawei_hw_components.py       |  36 +++++++
 inv_huawei_hw_components-0.2.0-20230602.mkp | Bin 0 -> 2163 bytes
 inv_huawei_hw_components.mkp                | Bin 2092 -> 2163 bytes
 packages/inv_huawei_hw_components           |  18 ++--
 5 files changed, 159 insertions(+), 9 deletions(-)
 create mode 100644 agent_based/inv_huawei_hw_components.py
 create mode 100644 gui/views/inv_huawei_hw_components.py
 create mode 100644 inv_huawei_hw_components-0.2.0-20230602.mkp

diff --git a/agent_based/inv_huawei_hw_components.py b/agent_based/inv_huawei_hw_components.py
new file mode 100644
index 0000000..2c395dc
--- /dev/null
+++ b/agent_based/inv_huawei_hw_components.py
@@ -0,0 +1,114 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2020-07-14
+#
+# extended inventory of Huawei hardware components
+#
+# 2023-06-02: rewritten for cmk 2.1
+
+from typing import Dict, List
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    SNMPTree,
+    startswith,
+    TableRow,
+    OIDEnd,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    InventoryResult,
+    StringTable,
+)
+
+
+def _get_snmp_date(manufactured_date):
+    year = (ord(manufactured_date[0]) << 8) + ord(manufactured_date[1])
+    month = ord(manufactured_date[2])
+    day = ord(manufactured_date[3])
+    return f'{year}-{month:02d}-{day:02d}'
+
+
+def parse_inv_huawei_hw_components(string_table: List[StringTable]) -> Dict:
+    phys_entities, huawei_entities = string_table
+    section = {}
+    phys_dict = {}
+
+    for entry in phys_entities:
+        oid_end, description, name, hardware_rev, firmware_rev, software_rev, serial_num, mfg_name = entry
+        phys_dict[oid_end] = {}
+        phys_dict[oid_end]['description'] = description
+        phys_dict[oid_end]['name'] = name
+        phys_dict[oid_end]['hardware_revision'] = hardware_rev
+        phys_dict[oid_end]['firmware_revision'] = firmware_rev
+        phys_dict[oid_end]['software_revision'] = software_rev
+        phys_dict[oid_end]['vendor'] = mfg_name
+        phys_dict[oid_end]['serial_number'] = serial_num
+
+    for entry in huawei_entities:
+        oid_end, bom_id, bom_en_desc, manufactured_date, board_type, optical_vendor_sn = entry
+        if bom_en_desc != '':
+            section[oid_end] = {}
+            section[oid_end]['bom_id'] = bom_id
+            section[oid_end]['bom_description'] = bom_en_desc
+            section[oid_end]['manufactured_date'] = _get_snmp_date(manufactured_date)
+            section[oid_end]['board_type'] = board_type
+            section[oid_end].update(phys_dict[oid_end])
+            section[oid_end]['serial_number'] = optical_vendor_sn
+
+    return section
+
+
+def inventory_huawei_hw_components(section: Dict) -> InventoryResult:
+    path = ['hardware', 'components', 'huawei']
+
+    for key, value in section.items():
+        yield TableRow(
+            path=path,
+            key_columns={
+                'index': key
+            },
+            inventory_columns=value
+        )
+
+
+register.snmp_section(
+    name='inv_huawei_hw_components',
+    parse_function=parse_inv_huawei_hw_components,
+    fetch=[
+        SNMPTree(
+            base='.1.3.6.1.2.1.47.1.1.1.1',
+            oids=[
+                OIDEnd(),
+                '2',  # entPhysicalDescr
+                '7',  # entPhysicalName
+                '8',  # entPhysicalHardwareRev
+                '9',  # entPhysicalFirmwareRev
+                '10',  # entPhysicalSoftwareRev
+                '11',  # entPhysicalSerialNum
+                '12',  # entPhysicalMfgName
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.2011.5.25.31.1.1',
+            oids=[
+                OIDEnd(),
+                '2.1.1',  # hwEntityBomId
+                '2.1.2',  # hwEntityBomEnDesc
+                '2.1.4',  # hwEntityManufacturedDate
+                '2.1.11',  # hwEntityBoardType
+                '3.1.4'  # hwEntityOpticalVendorSn
+            ]
+        )
+    ],
+    detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2011')
+)
+
+register.inventory_plugin(
+    name='inv_huawei_hw_components',
+    inventory_function=inventory_huawei_hw_components,
+)
diff --git a/gui/views/inv_huawei_hw_components.py b/gui/views/inv_huawei_hw_components.py
new file mode 100644
index 0000000..aa33b5b
--- /dev/null
+++ b/gui/views/inv_huawei_hw_components.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-; py-indent-offset: 4 -*-
+
+from cmk.gui.plugins.views.utils import (
+    inventory_displayhints,
+)
+from cmk.gui.plugins.views.inventory import (
+    declare_invtable_view,
+    )
+from cmk.gui.i18n import _
+
+
+inventory_displayhints.update({
+    '.hardware.components.huawei:': {'title': _('Huawei'),
+                                     'keyorder': ['index', 'name', 'description', 'board_type', 'serial_number',
+                                                  'manufactured_date', 'vendor',
+                                                  ],
+                                     'view': 'invhuaweicomponents_of_host',
+                                     },
+    '.hardware.components.huawei:*.index': {'title': _('Index'), },
+    '.hardware.components.huawei:*.name': {'title': _('Name')},
+    '.hardware.components.huawei:*.description': {'title': _('Description'), },
+    '.hardware.components.huawei:*.bom_id': {'title': _('BOM ID'), },
+    '.hardware.components.huawei:*.bom_description': {'title': _('BOM Description')},
+    '.hardware.components.huawei:*.manufactured_date': {'title': _('Manufactured Date')},
+    '.hardware.components.huawei:*.board_type': {'title': _('Board Type'), },
+    '.hardware.components.huawei:*.software_revision': {'title': _('Software Revision'), },
+    '.hardware.components.huawei:*.firmware_revision': {'title': _('Firmware Revision'), },
+    '.hardware.components.huawei:*.hardware_revision': {'title': _('Hardware Revision'), },
+    '.hardware.components.huawei:*.serial_number': {'title': _('Serial Number'), },
+    '.hardware.components.huawei:*.vendor': {'title': _('Vendor'), },
+
+})
+
+declare_invtable_view('invhuaweicomponents', '.hardware.components.huawei:', _('Huawei hardware components'),
+                      _('Huawei hardware components'))
diff --git a/inv_huawei_hw_components-0.2.0-20230602.mkp b/inv_huawei_hw_components-0.2.0-20230602.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..aa676f3dc822dfbfacb4a2f2508a03f7f70839bd
GIT binary patch
literal 2163
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

literal 0
HcmV?d00001

diff --git a/inv_huawei_hw_components.mkp b/inv_huawei_hw_components.mkp
index 084edc35b50cb44e40f93d34bbbe1d7102e05a33..aa676f3dc822dfbfacb4a2f2508a03f7f70839bd 100644
GIT binary patch
delta 2126
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
E0EjFxKL7v#

delta 2074
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
E02LfFi2wiq

diff --git a/packages/inv_huawei_hw_components b/packages/inv_huawei_hw_components
index cce8645..acd8777 100644
--- a/packages/inv_huawei_hw_components
+++ b/packages/inv_huawei_hw_components
@@ -1,11 +1,11 @@
-{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': u'SNMP inventory for Huawei hardware components.',
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'SNMP inventory for Huawei hardware components.\n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'inventory': ['huawei_hw_components'],
-           'web': ['plugins/views/inv_huawei_hw_components.py']},
+ 'files': {'agent_based': ['inv_huawei_hw_components.py'],
+           'gui': ['views/inv_huawei_hw_components.py']},
  'name': 'inv_huawei_hw_components',
- 'num_files': 2,
- 'title': u'Inventory for Huawei hardware components',
- 'version': '20200714.v0.1c',
- 'version.min_required': '1.2.8b8',
- 'version.packaged': '1.4.0p38'}
\ No newline at end of file
+ 'title': 'Inventory for Huawei hardware components',
+ 'version': '0.2.0-20230602',
+ 'version.min_required': '2.1.0b1',
+ 'version.packaged': '2.1.0p21',
+ 'version.usable_until': '2.2.0b1'}
\ No newline at end of file
-- 
GitLab