Merge pull request #12342 from PolynomialDivision/feature/add_dawn_node_exporter
authorEtienne Champetier <champetier.etienne@gmail.com>
Sat, 27 Jun 2020 15:36:52 +0000 (11:36 -0400)
committerGitHub <noreply@github.com>
Sat, 27 Jun 2020 15:36:52 +0000 (11:36 -0400)
prometheus-node-exporter-lua: add dawn exporter

utils/prometheus-node-exporter-lua/Makefile
utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/dawn.lua [new file with mode: 0644]

index 598b079b769b1725eaa1d6c73bb367488cad645a..1a6b9a7b79206099e75edc78c2eaf32fa8f29f51 100644 (file)
@@ -4,8 +4,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=prometheus-node-exporter-lua
-PKG_VERSION:=2020.02.03
-PKG_RELEASE:=2
+PKG_VERSION:=2020.06.26
+PKG_RELEASE:=1
 
 PKG_MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
 PKG_LICENSE:=Apache-2.0
diff --git a/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/dawn.lua b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/dawn.lua
new file mode 100644 (file)
index 0000000..9694463
--- /dev/null
@@ -0,0 +1,52 @@
+local ubus = require "ubus"
+
+local function scrape()
+  local metric_dawn_ap_channel_utilization_ratio = metric("dawn_ap_channel_utilization_ratio","gauge")
+  local metric_dawn_ap_stations_total = metric("dawn_ap_stations_total","gauge")
+  local metric_dawn_station_signal_dbm = metric("dawn_station_signal_dbm","gauge")
+
+  local u = ubus.connect()
+  local network = u:call("dawn", "get_network", {})
+
+  for ssid, ssid_table in pairs(network) do
+    for ap, ap_table in pairs(ssid_table) do
+
+      if (ap_table['local'] == true) then
+
+        local ht_support = (ap_table['ht_support'] == true) and 1 or 0
+        local vht_support = (ap_table['vht_support'] == true) and 1 or 0
+
+        local labels = {
+          ssid = ssid,
+          bssid = ap,
+          freq = ap_table['freq'],
+          ht_support = ht_support,
+          vht_support = vht_support,
+          neighbor_report = ap_table['neighbor_report'],
+        }
+        metric_dawn_ap_channel_utilization_ratio(labels, ap_table['channel_utilization'] / 255)
+        metric_dawn_ap_stations_total(labels, ap_table['num_sta'])
+
+        for client, client_table in pairs(ap_table) do
+          if (type(client_table) == "table") then
+
+            local client_ht_support = (client_table['ht'] == true) and 1 or 0
+            local client_vht_support = (client_table['vht'] == true) and 1 or 0
+            local client_signal = client_table['signal'] or -255
+
+            local labels = {
+              ssid = ssid,
+              bssid = ap,
+              mac = client,
+              ht_support = client_ht_support,
+              vht_support = client_vht_support,
+            }
+            metric_dawn_station_signal_dbm(labels, client_signal)
+          end
+        end
+      end
+    end
+  end
+end
+
+return { scrape = scrape }
\ No newline at end of file