From cbd87017b76134842dc478512e9fcbb56ebc5b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20LOYET?= <822436+fatpat@users.noreply.github.com> Date: Fri, 22 Mar 2024 07:03:39 +0100 Subject: [PATCH] prometheus-node-exporter-lua: add mwan3 exporter --- utils/prometheus-node-exporter-lua/Makefile | 12 +++++ .../lib/lua/prometheus-collectors/mwan3.lua | 45 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/mwan3.lua diff --git a/utils/prometheus-node-exporter-lua/Makefile b/utils/prometheus-node-exporter-lua/Makefile index f787d0e8a8..79f1a0f3c7 100644 --- a/utils/prometheus-node-exporter-lua/Makefile +++ b/utils/prometheus-node-exporter-lua/Makefile @@ -246,6 +246,17 @@ define Package/prometheus-node-exporter-lua-realtek-poe/install $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/realtek-poe.lua $(1)/usr/lib/lua/prometheus-collectors/ endef +define Package/prometheus-node-exporter-lua-mwan3 + $(call Package/prometheus-node-exporter-lua/Default) + TITLE+= (mwan3 collector) + DEPENDS:=prometheus-node-exporter-lua +libubus-lua +endef + +define Package/prometheus-node-exporter-lua-mwan3/install + $(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors + $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/mwan3.lua $(1)/usr/lib/lua/prometheus-collectors/ +endef + $(eval $(call BuildPackage,prometheus-node-exporter-lua)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-bmx7)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-dawn)) @@ -264,3 +275,4 @@ $(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi_stations)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-snmp6)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-realtek-poe)) +$(eval $(call BuildPackage,prometheus-node-exporter-lua-mwan3)) diff --git a/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/mwan3.lua b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/mwan3.lua new file mode 100644 index 0000000000..fdedda0951 --- /dev/null +++ b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/mwan3.lua @@ -0,0 +1,45 @@ +local ubus = require "ubus" + +local function scrape() + local u = ubus.connect() + local s = u:call("mwan3", "status", {}) + + for interface, status in pairs(s["interfaces"]) do + local labels = { + interface = interface, + } + metric("node_mwan3_interface_up", "gauge", labels, status["up"] and 1 or 0) + metric("node_mwan3_interface_last_ping_age_seconds", "gauge", labels, status["age"]) + metric("node_mwan3_interface_online_seconds", "gauge", labels, status["online"]) + metric("node_mwan3_interface_offline_seconds", "gauge", labels, status["offline"]) + metric("node_mwan3_interface_uptime_seconds", "gauge", labels, status["uptime"]) + metric("node_mwan3_interface_score", "gauge", labels, status["score"]) + metric("node_mwan3_interface_lost", "gauge", labels, status["lost"]) + metric("node_mwan3_interface_turn", "gauge", labels, status["turn"]) + metric("node_mwan3_interface_enabled", "gauge", labels, status["enabled"] and 1 or 0) + metric("node_mwan3_interface_running", "gauge", labels, status["running"] and 1 or 0) + + labels["status"] = status["status"] + local status_int = -3 + if status["status"] == "disabled" then status_int = -2 + elseif status["status"] == "notracking" then status_int = -1 + elseif status["status"] == "offline" then status_int = 0 + elseif status["status"] == "disconnecting" then status_int = 1 + elseif status["status"] == "connecting" then status_int = 2 + elseif status["status"] == "online" then status_int = 3 + end + metric("node_mwan3_interface_status", "gauge", labels, status_int) + + for i, track_ip in pairs(status["track_ip"]) do + local labels = { + interface = interface, + ip = track_ip["ip"], + } + metric("node_mwan3_interface_tracking_status", "gauge", labels, track_ip["status"] == "up" and 1 or 0) + metric("node_mwan3_interface_tracking_latency_seconds", "gauge", labels, track_ip["latency"] / 1000) + metric("node_mwan3_interface_tracking_packetloss", "gauge", labels, track_ip["packetloss"]) + end + end +end + +return { scrape = scrape }