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