Browse Source

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>
lilik-openwrt-22.03
Martin Weinelt 3 years ago
parent
commit
2849ec248d
2 changed files with 14 additions and 8 deletions
  1. +1
    -1
      utils/prometheus-node-exporter-lua/Makefile
  2. +13
    -7
      utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/hostapd_stations.lua

+ 1
- 1
utils/prometheus-node-exporter-lua/Makefile View File

@ -4,7 +4,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=prometheus-node-exporter-lua PKG_NAME:=prometheus-node-exporter-lua
PKG_VERSION:=2021.07.04
PKG_VERSION:=2021.07.24
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com> PKG_MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>


+ 13
- 7
utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/hostapd_stations.lua View File

@ -16,23 +16,29 @@ local function get_wifi_interface_labels()
handle:close() handle:close()
local hostapd = {} local hostapd = {}
local bss_idx = -1
for line in hostapd_status:gmatch("[^\r\n]+") do for line in hostapd_status:gmatch("[^\r\n]+") do
local name, value = string.match(line, "(.+)=(.+)") local name, value = string.match(line, "(.+)=(.+)")
if name == "phy" then
hostapd["vif"] = value
elseif name == "freq" then elseif name == "freq" then
hostapd["freq"] = value hostapd["freq"] = value
elseif name == "channel" then elseif name == "channel" then
hostapd["channel"] = value 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
end end
local labels = { local labels = {
vif = hostapd['vif'],
vif = cfg['ifname'],
ssid = hostapd['ssid'], ssid = hostapd['ssid'],
bssid = hostapd['bssid'], bssid = hostapd['bssid'],
encryption = cfg['encryption'], -- In a mixed scenario it would be good to know if A or B was used encryption = cfg['encryption'], -- In a mixed scenario it would be good to know if A or B was used


Loading…
Cancel
Save