From 5af8b06f422d29063749e6c65f7ab1fc70c68b3b Mon Sep 17 00:00:00 2001 From: Robert Sander Date: Fri, 16 Feb 2024 09:47:31 +0100 Subject: [PATCH 1/3] removes uptime metric special agent returns <<>> section --- .../base/plugins/agent_based/unifi_controller.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/lib/check_mk/base/plugins/agent_based/unifi_controller.py b/lib/check_mk/base/plugins/agent_based/unifi_controller.py index b148809..ff6b99a 100644 --- a/lib/check_mk/base/plugins/agent_based/unifi_controller.py +++ b/lib/check_mk/base/plugins/agent_based/unifi_controller.py @@ -270,7 +270,6 @@ register.inventory_plugin( def discovery_unifi_device(section): yield Service(item="Device Status") yield Service(item="Unifi Device") - yield Service(item="Uptime") yield Service(item="Active-User") if section.type != "uap": # kein satisfaction bei ap .. radio/ssid haben schon yield Service(item="Satisfaction") @@ -316,14 +315,6 @@ def check_unifi_device(item,section): ) yield Metric("user_sta",_active_user) yield Metric("guest_sta",_safe_int(section.guest_num_sta)) - if item == "Uptime": - _uptime = int(section.uptime) if section.uptime else -1 - if _uptime > 0: - yield Result( - state=State.OK, - summary=render.timespan(_uptime) - ) - yield Metric("uptime",_uptime) if item == "Satisfaction": yield Result( state=State.OK, From f96bd89f55beafb311d01c3b70131d1e0ce4d354 Mon Sep 17 00:00:00 2001 From: Robert Sander Date: Fri, 16 Feb 2024 09:56:47 +0100 Subject: [PATCH 2/3] renames files in repo --- .../special/agent_unifi_controller | 4 +- .../checkman => checkman}/unifi_controller | 0 .../checkman => checkman}/unifi_device | 0 .../unifi_device_shortlist | 0 .../unifi_network_ports_if | 0 .../unifi_network_radios | 0 .../checkman => checkman}/unifi_network_ssids | 0 .../checkman => checkman}/unifi_sites | 0 .../checkman => checkman}/unifi_ssid_list | 0 .../checks => checks}/agent_unifi_controller | 0 share/check_mk/inventory/unifi_controller | 76 ------------------ unifi_controller-0.88.1.mkp | Bin 0 -> 16946 bytes .../plugins/metrics/unifi_metrics.py | 0 .../plugins/perfometer/unifi_performeter.py | 0 .../wato/datasource_unifi_controller.py | 0 15 files changed, 2 insertions(+), 78 deletions(-) rename {share/check_mk/agents => agents}/special/agent_unifi_controller (99%) mode change 100644 => 100755 rename {share/check_mk/checkman => checkman}/unifi_controller (100%) rename {share/check_mk/checkman => checkman}/unifi_device (100%) rename {share/check_mk/checkman => checkman}/unifi_device_shortlist (100%) rename {share/check_mk/checkman => checkman}/unifi_network_ports_if (100%) rename {share/check_mk/checkman => checkman}/unifi_network_radios (100%) rename {share/check_mk/checkman => checkman}/unifi_network_ssids (100%) rename {share/check_mk/checkman => checkman}/unifi_sites (100%) rename {share/check_mk/checkman => checkman}/unifi_ssid_list (100%) rename {share/check_mk/checks => checks}/agent_unifi_controller (100%) delete mode 100644 share/check_mk/inventory/unifi_controller create mode 100644 unifi_controller-0.88.1.mkp rename {share/check_mk/web => web}/plugins/metrics/unifi_metrics.py (100%) rename {share/check_mk/web => web}/plugins/perfometer/unifi_performeter.py (100%) rename {share/check_mk/web => web}/plugins/wato/datasource_unifi_controller.py (100%) diff --git a/share/check_mk/agents/special/agent_unifi_controller b/agents/special/agent_unifi_controller old mode 100644 new mode 100755 similarity index 99% rename from share/check_mk/agents/special/agent_unifi_controller rename to agents/special/agent_unifi_controller index 16c31c6..5f909a9 --- a/share/check_mk/agents/special/agent_unifi_controller +++ b/agents/special/agent_unifi_controller @@ -23,7 +23,7 @@ ## SOFTWARE. ### -__VERSION__ = 2.2.0 +__VERSION__ = "2.2.0" import sys import socket @@ -645,7 +645,7 @@ if __name__ == '__main__': if _api.is_unifios: labels = {"cmk/os_family": "UnifiOS"} - print("<<>>" + print("<<>>") print(json.dumps(labels)) ##pprint(_api.get_data("/stat/rogueap?within=4")) diff --git a/share/check_mk/checkman/unifi_controller b/checkman/unifi_controller similarity index 100% rename from share/check_mk/checkman/unifi_controller rename to checkman/unifi_controller diff --git a/share/check_mk/checkman/unifi_device b/checkman/unifi_device similarity index 100% rename from share/check_mk/checkman/unifi_device rename to checkman/unifi_device diff --git a/share/check_mk/checkman/unifi_device_shortlist b/checkman/unifi_device_shortlist similarity index 100% rename from share/check_mk/checkman/unifi_device_shortlist rename to checkman/unifi_device_shortlist diff --git a/share/check_mk/checkman/unifi_network_ports_if b/checkman/unifi_network_ports_if similarity index 100% rename from share/check_mk/checkman/unifi_network_ports_if rename to checkman/unifi_network_ports_if diff --git a/share/check_mk/checkman/unifi_network_radios b/checkman/unifi_network_radios similarity index 100% rename from share/check_mk/checkman/unifi_network_radios rename to checkman/unifi_network_radios diff --git a/share/check_mk/checkman/unifi_network_ssids b/checkman/unifi_network_ssids similarity index 100% rename from share/check_mk/checkman/unifi_network_ssids rename to checkman/unifi_network_ssids diff --git a/share/check_mk/checkman/unifi_sites b/checkman/unifi_sites similarity index 100% rename from share/check_mk/checkman/unifi_sites rename to checkman/unifi_sites diff --git a/share/check_mk/checkman/unifi_ssid_list b/checkman/unifi_ssid_list similarity index 100% rename from share/check_mk/checkman/unifi_ssid_list rename to checkman/unifi_ssid_list diff --git a/share/check_mk/checks/agent_unifi_controller b/checks/agent_unifi_controller similarity index 100% rename from share/check_mk/checks/agent_unifi_controller rename to checks/agent_unifi_controller diff --git a/share/check_mk/inventory/unifi_controller b/share/check_mk/inventory/unifi_controller deleted file mode 100644 index 32b9be8..0000000 --- a/share/check_mk/inventory/unifi_controller +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python3 -# -*- encoding: utf-8; py-indent-offset: 4 -*- - -from pprint import pprint -from collections import defaultdict - -class dictobject(defaultdict): - def __getattr__(self,name): - return self[name] if name in self else "" - -nested_dictobject = lambda: dictobject(nested_dictobject) - -def inv_unifi_controller(info): - node = inv_tree("software.os") - node["version"] = info.get("controller_version") - -def inv_unifi_device(info): - node = inv_tree("software.configuration.snmp_info") - node["name"] = info.get("name") - node["contact"] = info.get("snmp_contact") - node["location"] = info.get("snmp_location") - node = inv_tree("software.os") - node["version"] = info.get("version") - node = inv_tree("harware.system") - node["vendor"] = "ubiquiti" - for _key in ("model","board_rev","serial","mac"): - _val = info.get(_key) - if _val: - node[_key] = _val - -def inv_unifi_port(info,params,inventory_tree): - _parsed = nested_dictobject() - for _line in info: - _parsed[_line[0]][_line[1]] = _line[2] - - _interfaces = [] - _total_ethernet_ports = 0 - _available_ethernet_ports = 0 - def _saveint(num): - try: - return int(num) - except (TypeError,ValueError): - return 0 - for _iface in _parsed.values(): - _interfaces.append({ - "index" : int(_iface.port_idx), - "description" : _iface.name, - "alias" : _iface.name, - "speed" : _saveint(_iface.speed)*1000000, - "phys_address" : "", - "oper_status" : _saveint(_iface.oper_status), - "admin_status" : _saveint(_iface.admin_status), - "port_type" : 6, - "available" : _iface.oper_status == '2' - }) - _total_ethernet_ports+=1 - _available_ethernet_ports+=1 if _iface.oper_status == '2' else 0 - - node = inventory_tree.get_list("networking.interfaces:") - node.extend(sorted(_interfaces, key=lambda i: i.get('index'))) - node = inventory_tree.get_dict("networking.") - node["available_ethernet_ports"] = _available_ethernet_ports - node["total_ethernet_ports"] = _total_ethernet_ports - node["total_interfaces"] = len(_parsed) - -inv_info["unifi_controller"] = { - "inv_function" : inv_unifi_controller -} -inv_info["unifi_device"] = { - "inv_function" : inv_unifi_device -} - -inv_info["unifi_network_ports"] = { - "inv_function" : inv_unifi_port -} - diff --git a/unifi_controller-0.88.1.mkp b/unifi_controller-0.88.1.mkp new file mode 100644 index 0000000000000000000000000000000000000000..8b4e9061e2d0ef67f2339f14c530460f3e54ed86 GIT binary patch literal 16946 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 Su)OR)d+rzFM;Uf7G5`RNH-9<+ literal 0 HcmV?d00001 diff --git a/share/check_mk/web/plugins/metrics/unifi_metrics.py b/web/plugins/metrics/unifi_metrics.py similarity index 100% rename from share/check_mk/web/plugins/metrics/unifi_metrics.py rename to web/plugins/metrics/unifi_metrics.py diff --git a/share/check_mk/web/plugins/perfometer/unifi_performeter.py b/web/plugins/perfometer/unifi_performeter.py similarity index 100% rename from share/check_mk/web/plugins/perfometer/unifi_performeter.py rename to web/plugins/perfometer/unifi_performeter.py diff --git a/share/check_mk/web/plugins/wato/datasource_unifi_controller.py b/web/plugins/wato/datasource_unifi_controller.py similarity index 100% rename from share/check_mk/web/plugins/wato/datasource_unifi_controller.py rename to web/plugins/wato/datasource_unifi_controller.py From 8718bf4183a45c73bd0d784ac7474ad6f1e579c5 Mon Sep 17 00:00:00 2001 From: Robert Sander Date: Fri, 16 Feb 2024 10:06:56 +0100 Subject: [PATCH 3/3] adds uptime section for controller --- agents/special/agent_unifi_controller | 6 +++++- unifi_controller-0.88.1.mkp | Bin 16946 -> 0 bytes unifi_controller-0.88.2.mkp | Bin 0 -> 16969 bytes 3 files changed, 5 insertions(+), 1 deletion(-) delete mode 100644 unifi_controller-0.88.1.mkp create mode 100644 unifi_controller-0.88.2.mkp diff --git a/agents/special/agent_unifi_controller b/agents/special/agent_unifi_controller index 5f909a9..8f2ec88 100755 --- a/agents/special/agent_unifi_controller +++ b/agents/special/agent_unifi_controller @@ -492,7 +492,7 @@ class unifi_controller(unifi_object): def __str__(self): _ret = ["<<>>"] for _k,_v in self.__dict__.items(): - if _k.startswith("_") or type(_v) not in (str,int,float): + if _k == "uptime" or _k.startswith("_") or type(_v) not in (str,int,float): continue _ret.append(f"{_k}|{_v}") @@ -503,6 +503,10 @@ class unifi_controller(unifi_object): _udm._piggy_back = False _ret.append(str(_udm)) + if "uptime" in self.__dict__: + _ret.append("<<>>") + _ret.append(f"{self.uptime}") + _ret.append("<<>>") _ret.append(f"{{\"unifi_device\":\"unifi-{self.type}\"}}") diff --git a/unifi_controller-0.88.1.mkp b/unifi_controller-0.88.1.mkp deleted file mode 100644 index 8b4e9061e2d0ef67f2339f14c530460f3e54ed86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16946 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 Su)OR)d+rzFM;Uf7G5`RNH-9<+ diff --git a/unifi_controller-0.88.2.mkp b/unifi_controller-0.88.2.mkp new file mode 100644 index 0000000000000000000000000000000000000000..76eab87634c2bc07496d1ea65bf66e08910c5959 GIT binary patch literal 16969 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 literal 0 HcmV?d00001