From d84de2fdd95db20812441cb2e1e172fd6cc91666 Mon Sep 17 00:00:00 2001
From: Thl CMK <thl-cmk@outlook.com>
Date: Tue, 14 Jul 2020 21:41:35 +0200
Subject: [PATCH] update project

---
 inv_huawei_hw_components.mkp                  | Bin 0 -> 2092 bytes
 inventory/huawei_hw_components                |  97 ++++++++++++++++++
 packages/inv_huawei_hw_components             |  11 ++
 web/plugins/views/inv_huawei_hw_components.py |  35 +++++++
 4 files changed, 143 insertions(+)
 create mode 100644 inv_huawei_hw_components.mkp
 create mode 100644 inventory/huawei_hw_components
 create mode 100644 packages/inv_huawei_hw_components
 create mode 100644 web/plugins/views/inv_huawei_hw_components.py

diff --git a/inv_huawei_hw_components.mkp b/inv_huawei_hw_components.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..084edc35b50cb44e40f93d34bbbe1d7102e05a33
GIT binary patch
literal 2092
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
Wfj}S-2m}K0QusfXdqOt=cmM#ep)NlF

literal 0
HcmV?d00001

diff --git a/inventory/huawei_hw_components b/inventory/huawei_hw_components
new file mode 100644
index 0000000..66d3afb
--- /dev/null
+++ b/inventory/huawei_hw_components
@@ -0,0 +1,97 @@
+#!/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
+#
+
+
+def inv_huawei_hw_components(info, params):
+    def parse_huawei_hw_components(info):
+        def get_snmp_date(hwEntityManufacturedDate):
+            year = (ord(hwEntityManufacturedDate[0]) << 8) + ord(hwEntityManufacturedDate[1])
+            month = ord(hwEntityManufacturedDate[2])
+            day = ord(hwEntityManufacturedDate[3])
+            snmpDate = '%d-%02d-%02d' % (year, month, day)
+            return snmpDate
+
+        defaultEntities, huaweiEntities = info
+        entities = {}
+
+        for entry in huaweiEntities:
+            hwOID_END, hwEntityBomId, hwEntityBomEnDesc, hwEntityManufacturedDate, hwEntityBoardType, hwEntityOpticalVendorSn = entry
+
+            if hwEntityBomEnDesc != '':
+                entity = {}
+                entity['hwEntityBomId'] = hwEntityBomId
+                entity['hwEntityBomEnDesc'] = hwEntityBomEnDesc
+                entity['hwEntityManufacturedDate'] = get_snmp_date(hwEntityManufacturedDate)
+                entity['hwEntityBoardType'] = hwEntityBoardType
+                entity['serial_number'] = hwEntityOpticalVendorSn
+
+                for entry in defaultEntities:
+                    OID_END, entPhysicalDescr, entPhysicalName, entPhysicalHardwareRev, entPhysicalFirmwareRev, entPhysicalSoftwareRev, entPhysicalSerialNum, entPhysicalMfgName = entry
+                    if OID_END == hwOID_END:
+                        entity['entPhysicalDescr'] = entPhysicalDescr
+                        entity['entPhysicalName'] = entPhysicalName
+                        entity['entPhysicalHardwareRev'] = entPhysicalHardwareRev
+                        entity['entPhysicalFirmwareRev'] = entPhysicalFirmwareRev
+                        entity['entPhysicalSoftwareRev'] = entPhysicalSoftwareRev
+                        entity['entPhysicalMfgName'] = entPhysicalMfgName
+                        if entity['serial_number'] == '':
+                            entity['serial_number'] = entPhysicalSerialNum
+
+                entities[hwOID_END] = entity
+        return entities
+
+    node = inv_tree_list('hardware.components.huawei:')
+    entities = parse_huawei_hw_components(info)
+
+    for key, value in entities.items():
+        node.append({
+            'index': key,
+            'bom_id': value['hwEntityBomId'],
+            'bom_decription': value['hwEntityBomEnDesc'],
+            'manufactured_date': value['hwEntityManufacturedDate'],
+            'board_type': value['hwEntityBoardType'],
+            'description': value['entPhysicalDescr'],
+            'name': value['entPhysicalName'],
+            'hardware_revision': value['entPhysicalHardwareRev'],
+            'firmware_revision': value['entPhysicalFirmwareRev'],
+            'software_revision': value['entPhysicalSoftwareRev'],
+            'serial_number': value['serial_number'],
+            'vendor': value['entPhysicalMfgName'],
+        })
+
+    return node
+
+
+inv_info['inv_huawei_hw_components'] = {
+    'inv_function': inv_huawei_hw_components,
+    'snmp_info': [
+        ('.1.3.6.1.2.1.47.1.1.1.1', [
+            OID_END,
+            '2',  # entPhysicalDescr
+            '7',  # entPhysicalName
+            '8',  # entPhysicalHardwareRev
+            '9',  # entPhysicalFirmwareRev
+            '10',  # entPhysicalSoftwareRev
+            '11',  # entPhysicalSerialNum
+            '12',  # entPhysicalMfgName
+        ]),
+        ('.1.3.6.1.4.1.2011.5.25.31.1.1', [
+            OID_END,
+            '2.1.1',  # hwEntityBomId
+            '2.1.2',  # hwEntityBomEnDesc
+            '2.1.4',  # hwEntityManufacturedDate
+            '2.1.11',  # hwEntityBoardType
+            '3.1.4'  # hwEntityOpticalVendorSn
+        ])
+    ],
+    'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.1.2.0').startswith('.1.3.6.1.4.1.2011'),
+}
diff --git a/packages/inv_huawei_hw_components b/packages/inv_huawei_hw_components
new file mode 100644
index 0000000..cce8645
--- /dev/null
+++ b/packages/inv_huawei_hw_components
@@ -0,0 +1,11 @@
+{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': u'SNMP inventory for Huawei hardware components.',
+ 'download_url': 'https://thl-cmk.hopto.org',
+ 'files': {'inventory': ['huawei_hw_components'],
+           'web': ['plugins/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
diff --git a/web/plugins/views/inv_huawei_hw_components.py b/web/plugins/views/inv_huawei_hw_components.py
new file mode 100644
index 0000000..6f793b2
--- /dev/null
+++ b/web/plugins/views/inv_huawei_hw_components.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+
+try:
+    from cmk.gui.plugins.views.inventory import (
+        declare_invtable_view,
+        render_inv_dicttable,
+    )
+except:
+    pass
+
+inventory_displayhints.update({
+    '.hardware.components.huawei:': {'title': _('Huawei'), 'render': render_inv_dicttable,
+                                     'keyorder': ['index', 'name', 'description', 'board_type', 'serial_number',
+                                                  'manufactured_date', 'vendor',
+                                                  ],
+                                     'view': 'invhuawei_components_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_decription': {'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('invhuawei_components', '.hardware.components.huawei:', _('Huawei hardware components'),
+                      _('Huawei hardware components'))
-- 
GitLab