From e62e96484ca1db40fe1a977590a755d3dfa20313 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sat, 27 Nov 2021 15:40:24 +0100
Subject: [PATCH] update project

---
 agent_based/inv_epsm.py | 174 ++++++++++++++++++++++++++++++++++++++++
 inv_epsm.mkp            | Bin 0 -> 2029 bytes
 packages/inv_epsm       |  11 +++
 3 files changed, 185 insertions(+)
 create mode 100644 agent_based/inv_epsm.py
 create mode 100644 inv_epsm.mkp
 create mode 100644 packages/inv_epsm

diff --git a/agent_based/inv_epsm.py b/agent_based/inv_epsm.py
new file mode 100644
index 0000000..6d877ce
--- /dev/null
+++ b/agent_based/inv_epsm.py
@@ -0,0 +1,174 @@
+#!/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  : 2021-11-27
+#
+# inventory of ePowerSwitch
+# https://www.neol.com/en/products/epowerswitch/
+
+# sample snmpwalk
+# eps8XM-private::version.0 = STRING: "v 3.1.2.2"
+# eps8XM-private::DeviceId."" = STRING: "M0"
+# eps8XM-private::DeviceId.1 = STRING: "S1"
+# eps8XM-private::DeviceId.17 = STRING: "TH1"
+# eps8XM-private::DeviceName."" = STRING: "F_Master"
+# eps8XM-private::DeviceName.1 = STRING: "F_Satellit"
+# eps8XM-private::DeviceName.17 = STRING: "SEN-1"
+# eps8XM-private::DeviceActivated."" = Wrong Type (should be INTEGER): STRING: "1"
+# eps8XM-private::DeviceActivated.1 = Wrong Type (should be INTEGER): STRING: "1"
+# eps8XM-private::DeviceActivated.17 = Wrong Type (should be INTEGER): STRING: "1"
+# eps8XM-private::DeviceDetected."" = Wrong Type (should be INTEGER): STRING: "1"
+# eps8XM-private::DeviceDetected.1 = Wrong Type (should be INTEGER): STRING: "1"
+# eps8XM-private::DeviceDetected.17 = Wrong Type (should be INTEGER): STRING: "1"
+# eps8XM-private::DeviceType."" = STRING: "PowerSwitch"
+# eps8XM-private::DeviceType.1 = STRING: "Power Switch 8-Port"
+# eps8XM-private::DeviceType.17 = STRING: "TH Sensor"
+# eps8XM-private::DeviceVersion."" = STRING: "v 3.3.0.0"
+# eps8XM-private::DeviceVersion.1 = STRING: "v 4.0.0.5"
+# eps8XM-private::DeviceVersion.17 = STRING: "v 7.10.0.0"
+#
+# .1.3.6.1.4.1.24734.13.1.1.0 = STRING: "v 3.1.2.2"
+# .1.3.6.1.4.1.24734.13.2.1.1.1.0 = STRING: "M0"
+# .1.3.6.1.4.1.24734.13.2.1.1.1.1 = STRING: "S1"
+# .1.3.6.1.4.1.24734.13.2.1.1.1.17 = STRING: "TH1"
+# .1.3.6.1.4.1.24734.13.2.1.1.2.0 = STRING: "F_Master"
+# .1.3.6.1.4.1.24734.13.2.1.1.2.1 = STRING: "F_Satellit"
+# .1.3.6.1.4.1.24734.13.2.1.1.2.17 = STRING: "SEN-1"
+# .1.3.6.1.4.1.24734.13.2.1.1.3.0 = Wrong Type (should be INTEGER): STRING: "1"
+# .1.3.6.1.4.1.24734.13.2.1.1.3.1 = Wrong Type (should be INTEGER): STRING: "1"
+# .1.3.6.1.4.1.24734.13.2.1.1.3.17 = Wrong Type (should be INTEGER): STRING: "1"
+# .1.3.6.1.4.1.24734.13.2.1.1.4.0 = Wrong Type (should be INTEGER): STRING: "1"
+# .1.3.6.1.4.1.24734.13.2.1.1.4.1 = Wrong Type (should be INTEGER): STRING: "1"
+# .1.3.6.1.4.1.24734.13.2.1.1.4.17 = Wrong Type (should be INTEGER): STRING: "1"
+# .1.3.6.1.4.1.24734.13.2.1.1.5.0 = STRING: "PowerSwitch"
+# .1.3.6.1.4.1.24734.13.2.1.1.5.1 = STRING: "Power Switch 8-Port"
+# .1.3.6.1.4.1.24734.13.2.1.1.5.17 = STRING: "TH Sensor"
+# .1.3.6.1.4.1.24734.13.2.1.1.6.0 = STRING: "v 3.3.0.0"
+# .1.3.6.1.4.1.24734.13.2.1.1.6.1 = STRING: "v 4.0.0.5"
+# .1.3.6.1.4.1.24734.13.2.1.1.6.17 = STRING: "v 7.10.0.0"
+#
+# sample string_table
+# [
+#  [
+#   ['v 3.1.2.2']
+#  ],
+#  [
+#   ['M0', 'F_Master', '1', '1', 'PowerSwitch', 'v 3.3.0.0'],
+#   ['S1', 'F_Satellit', '1', '1', 'Power Switch 8-Port', 'v 4.0.0.5'],
+#   ['TH1', 'SEN-1', '1', '1', 'TH Sensor', 'v 7.10.0.0']
+#  ]
+# ]
+#
+# sample section
+# {
+#  'devices':
+#   [
+#    {'id': 'M0', 'name': 'F_Master', 'type': 'PowerSwitch', 'version': 'v 3.3.0.0',
+#     'status_columns': {'activated': '1', 'detected': '1'}},
+#    {'id': 'S1', 'name': 'F_Satellit', 'type': 'Power Switch 8-Port', 'version': 'v 4.0.0.5',
+#     'status_columns': {'activated': '1', 'detected': '1'}},
+#    {'id': 'TH1', 'name': 'SEN-1', 'type': 'TH Sensor', 'version': 'v 7.10.0.0',
+#     'status_columns': {'activated': '1', 'detected': '1'}}
+#   ],
+#  'version': 'v 3.1.2.2'
+# }
+
+from typing import List, NamedTuple, Optional, Dict, Any
+
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    StringTable,
+    InventoryResult,
+)
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    SNMPTree,
+    TableRow,
+    Attributes,
+    startswith,
+)
+
+
+def parse_inv_espm(string_table: List[StringTable]) -> Dict[str, Any]:  # Dict[str, str, List[Dict[str, str]]:
+    version, devices = string_table
+    section = {}
+    section['devices'] = []
+    section['version'] = version[0][0]
+
+    for deviceid, devicename, deviceactivated, devicedetected, devicetype, deviceversion in devices:
+
+        section['devices'].append({
+            'id': deviceid,
+            'name': devicename,
+            'type': devicetype,
+            'version': deviceversion,
+            'status_columns': {
+                'activated': deviceactivated,
+                'detected': devicedetected,
+            },
+        })
+    return section
+
+
+def inventory_hw_modules(params, section: Dict[str, Any]) -> InventoryResult:
+    path = ['hardware', 'system']
+
+    yield Attributes(
+        path=path,
+        inventory_attributes={'version': section['version']}
+    )
+
+    path = ['hardware', 'devices']
+
+    for device in section['devices']:
+
+        key_columns = {'id': device['id']}
+
+        for key in key_columns.keys():
+            device.pop(key)
+
+        status_columns = device['status_columns']
+        device.pop('status_columns')
+        yield TableRow(
+            path=path,
+            key_columns=key_columns,
+            inventory_columns=device,
+            status_columns=status_columns,
+        )
+
+
+register.snmp_section(
+    name='inv_espm',
+    parse_function=parse_inv_espm,
+    fetch=[
+        SNMPTree(
+            base='.1.3.6.1.4.1.24734.13.1',  # eps8XM-private::System
+            oids=[
+                '1',  # version
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.24734.13.2.1.1',  # eps8XM-private::Devices
+            oids=[
+                '1',  # DeviceId
+                '2',  # DeviceName
+                '3',  # DeviceActivated
+                '4',  # DeviceDetected
+                '5',  # DeviceType
+                '6',  # DeviceVersion
+            ]
+        ),
+    ],
+    detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.24734.'),
+)
+
+register.inventory_plugin(
+    name='inv_espm',
+    inventory_function=inventory_hw_modules,
+    inventory_default_parameters={},
+    inventory_ruleset_name='inv_espm',
+)
diff --git a/inv_epsm.mkp b/inv_epsm.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..55258164d4c46f97496ca52f87ed2be79b0b33af
GIT binary patch
literal 2029
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
LGu62B08jt`m-_Kq

literal 0
HcmV?d00001

diff --git a/packages/inv_epsm b/packages/inv_epsm
new file mode 100644
index 0000000..47f919e
--- /dev/null
+++ b/packages/inv_epsm
@@ -0,0 +1,11 @@
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Inventory Neols ePowerSwitch ',
+ 'download_url': 'https://thl-cmk.hopto.org',
+ 'files': {'agent_based': ['inv_epsm.py']},
+ 'name': 'inv_epsm',
+ 'num_files': 1,
+ 'title': 'Neol ePowerswitch inventory',
+ 'version': '20211127.v.0.0.1',
+ 'version.min_required': '2.0.0',
+ 'version.packaged': '2021.09.20',
+ 'version.usable_until': None}
\ No newline at end of file
-- 
GitLab