prometheus-node-exporter-lua: fix bss identifier in hostapd_stations 16217/head
authorMartin Weinelt <hexa@darmstadt.ccc.de>
Sat, 24 Jul 2021 15:42:25 +0000 (17:42 +0200)
committerMartin Weinelt <hexa@darmstadt.ccc.de>
Sat, 24 Jul 2021 15:44:14 +0000 (17:44 +0200)
We previously did not identify the correct BSS from the output of
`hostapd_cli -i <phy> status`, because when asked for a vif it will
always respond with information relevant to the whole phy.

The per vif settings will use an iterator and we now try to detect
the correct BSS from that output.

Signed-off-by: Martin Weinelt <hexa@darmstadt.ccc.de>
utils/prometheus-node-exporter-lua/Makefile
utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/hostapd_stations.lua

index 6d757a2ee54c2b581b6ba795a731a0aaa0920767..fb3fa682f7e59b49bcc3e1353d33d318685d0a1b 100644 (file)
@@ -4,7 +4,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=prometheus-node-exporter-lua
-PKG_VERSION:=2021.07.04
+PKG_VERSION:=2021.07.24
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
index a3e6c331a2c8b091efa6770a290e294d1dfb8d44..a176b02e8ce1faa55b898efa64ef6d8f94cbf313 100644 (file)
@@ -16,23 +16,29 @@ local function get_wifi_interface_labels()
       handle:close()
 
       local hostapd = {}
+      local bss_idx = -1
       for line in hostapd_status:gmatch("[^\r\n]+") do
         local name, value = string.match(line, "(.+)=(.+)")
-        if name == "phy" then
-          hostapd["vif"] = value
         elseif name == "freq" then
           hostapd["freq"] = value
         elseif name == "channel" then
           hostapd["channel"] = value
-        elseif name == "bssid[0]" then
-          hostapd["bssid"] = value
-        elseif name == "ssid[0]" then
-          hostapd["ssid"] = value
+        -- hostapd gives us all bss on the relevant phy, find the one we're interested in
+        elseif string.match(name, "bss%[%d%]") then
+          if value == cfg['ifname'] then
+            bss_idx = tonumber(string.match(name, "bss%[(%d)%]"))
+          end
+        elseif bss_idx >= 0 then
+          if name == "bssid[" .. bss_idx .. "]" then
+            hostapd["bssid"] = value
+          elseif name == "ssid[" .. bss_idx .. "]" then
+            hostapd["ssid"] = value
+          end
         end
       end
 
       local labels = {
-        vif = hostapd['vif'],
+        vif = cfg['ifname'],
         ssid = hostapd['ssid'],
         bssid = hostapd['bssid'],
         encryption = cfg['encryption'], -- In a mixed scenario it would be good to know if A or B was used