prometheus-node-exporter-lua: fix bss identifier in hostapd_stations

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>
This commit is contained in:
Martin Weinelt 2021-07-24 17:42:25 +02:00
parent 1614cdde0a
commit 2849ec248d
2 changed files with 14 additions and 8 deletions

View 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>

View 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