Skip to content

Commit 7e4d9bd

Browse files
neiledgarSuperQ
authored andcommitted
Update wifi stats to support multiple stations (#977) (#980)
Signed-off-by: neiledgar <[email protected]>
1 parent 9b97f44 commit 7e4d9bd

File tree

9 files changed

+122
-69
lines changed

9 files changed

+122
-69
lines changed

collector/fixtures/e2e-64k-page-output.txt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2307,31 +2307,39 @@ node_wifi_interface_frequency_hertz{device="wlan0"} 2.412e+09
23072307
node_wifi_interface_frequency_hertz{device="wlan1"} 2.412e+09
23082308
# HELP node_wifi_station_beacon_loss_total The total number of times a station has detected a beacon loss.
23092309
# TYPE node_wifi_station_beacon_loss_total counter
2310-
node_wifi_station_beacon_loss_total{device="wlan0"} 1
2310+
node_wifi_station_beacon_loss_total{device="wlan0",mac_address="01:02:03:04:05:06"} 2
2311+
node_wifi_station_beacon_loss_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 1
23112312
# HELP node_wifi_station_connected_seconds_total The total number of seconds a station has been connected to an access point.
23122313
# TYPE node_wifi_station_connected_seconds_total counter
2313-
node_wifi_station_connected_seconds_total{device="wlan0"} 30
2314+
node_wifi_station_connected_seconds_total{device="wlan0",mac_address="01:02:03:04:05:06"} 60
2315+
node_wifi_station_connected_seconds_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 30
23142316
# HELP node_wifi_station_inactive_seconds The number of seconds since any wireless activity has occurred on a station.
23152317
# TYPE node_wifi_station_inactive_seconds gauge
2316-
node_wifi_station_inactive_seconds{device="wlan0"} 0.4
2318+
node_wifi_station_inactive_seconds{device="wlan0",mac_address="01:02:03:04:05:06"} 0.8
2319+
node_wifi_station_inactive_seconds{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0.4
23172320
# HELP node_wifi_station_info Labeled WiFi interface station information as provided by the operating system.
23182321
# TYPE node_wifi_station_info gauge
23192322
node_wifi_station_info{bssid="00:11:22:33:44:55",device="wlan0",mode="client",ssid="Example"} 1
23202323
# HELP node_wifi_station_receive_bits_per_second The current WiFi receive bitrate of a station, in bits per second.
23212324
# TYPE node_wifi_station_receive_bits_per_second gauge
2322-
node_wifi_station_receive_bits_per_second{device="wlan0"} 1.28e+08
2325+
node_wifi_station_receive_bits_per_second{device="wlan0",mac_address="01:02:03:04:05:06"} 2.56e+08
2326+
node_wifi_station_receive_bits_per_second{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 1.28e+08
23232327
# HELP node_wifi_station_signal_dbm The current WiFi signal strength, in decibel-milliwatts (dBm).
23242328
# TYPE node_wifi_station_signal_dbm gauge
2325-
node_wifi_station_signal_dbm{device="wlan0"} -52
2329+
node_wifi_station_signal_dbm{device="wlan0",mac_address="01:02:03:04:05:06"} -26
2330+
node_wifi_station_signal_dbm{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} -52
23262331
# HELP node_wifi_station_transmit_bits_per_second The current WiFi transmit bitrate of a station, in bits per second.
23272332
# TYPE node_wifi_station_transmit_bits_per_second gauge
2328-
node_wifi_station_transmit_bits_per_second{device="wlan0"} 1.64e+08
2333+
node_wifi_station_transmit_bits_per_second{device="wlan0",mac_address="01:02:03:04:05:06"} 3.28e+08
2334+
node_wifi_station_transmit_bits_per_second{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 1.64e+08
23292335
# HELP node_wifi_station_transmit_failed_total The total number of times a station has failed to send a packet.
23302336
# TYPE node_wifi_station_transmit_failed_total counter
2331-
node_wifi_station_transmit_failed_total{device="wlan0"} 2
2337+
node_wifi_station_transmit_failed_total{device="wlan0",mac_address="01:02:03:04:05:06"} 4
2338+
node_wifi_station_transmit_failed_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 2
23322339
# HELP node_wifi_station_transmit_retries_total The total number of times a station has had to retry while sending a packet.
23332340
# TYPE node_wifi_station_transmit_retries_total counter
2334-
node_wifi_station_transmit_retries_total{device="wlan0"} 10
2341+
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="01:02:03:04:05:06"} 20
2342+
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 10
23352343
# HELP node_xfs_allocation_btree_compares_total Number of allocation B-tree compares for a filesystem.
23362344
# TYPE node_xfs_allocation_btree_compares_total counter
23372345
node_xfs_allocation_btree_compares_total{device="sda1"} 0

collector/fixtures/e2e-output.txt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2307,31 +2307,39 @@ node_wifi_interface_frequency_hertz{device="wlan0"} 2.412e+09
23072307
node_wifi_interface_frequency_hertz{device="wlan1"} 2.412e+09
23082308
# HELP node_wifi_station_beacon_loss_total The total number of times a station has detected a beacon loss.
23092309
# TYPE node_wifi_station_beacon_loss_total counter
2310-
node_wifi_station_beacon_loss_total{device="wlan0"} 1
2310+
node_wifi_station_beacon_loss_total{device="wlan0",mac_address="01:02:03:04:05:06"} 2
2311+
node_wifi_station_beacon_loss_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 1
23112312
# HELP node_wifi_station_connected_seconds_total The total number of seconds a station has been connected to an access point.
23122313
# TYPE node_wifi_station_connected_seconds_total counter
2313-
node_wifi_station_connected_seconds_total{device="wlan0"} 30
2314+
node_wifi_station_connected_seconds_total{device="wlan0",mac_address="01:02:03:04:05:06"} 60
2315+
node_wifi_station_connected_seconds_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 30
23142316
# HELP node_wifi_station_inactive_seconds The number of seconds since any wireless activity has occurred on a station.
23152317
# TYPE node_wifi_station_inactive_seconds gauge
2316-
node_wifi_station_inactive_seconds{device="wlan0"} 0.4
2318+
node_wifi_station_inactive_seconds{device="wlan0",mac_address="01:02:03:04:05:06"} 0.8
2319+
node_wifi_station_inactive_seconds{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0.4
23172320
# HELP node_wifi_station_info Labeled WiFi interface station information as provided by the operating system.
23182321
# TYPE node_wifi_station_info gauge
23192322
node_wifi_station_info{bssid="00:11:22:33:44:55",device="wlan0",mode="client",ssid="Example"} 1
23202323
# HELP node_wifi_station_receive_bits_per_second The current WiFi receive bitrate of a station, in bits per second.
23212324
# TYPE node_wifi_station_receive_bits_per_second gauge
2322-
node_wifi_station_receive_bits_per_second{device="wlan0"} 1.28e+08
2325+
node_wifi_station_receive_bits_per_second{device="wlan0",mac_address="01:02:03:04:05:06"} 2.56e+08
2326+
node_wifi_station_receive_bits_per_second{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 1.28e+08
23232327
# HELP node_wifi_station_signal_dbm The current WiFi signal strength, in decibel-milliwatts (dBm).
23242328
# TYPE node_wifi_station_signal_dbm gauge
2325-
node_wifi_station_signal_dbm{device="wlan0"} -52
2329+
node_wifi_station_signal_dbm{device="wlan0",mac_address="01:02:03:04:05:06"} -26
2330+
node_wifi_station_signal_dbm{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} -52
23262331
# HELP node_wifi_station_transmit_bits_per_second The current WiFi transmit bitrate of a station, in bits per second.
23272332
# TYPE node_wifi_station_transmit_bits_per_second gauge
2328-
node_wifi_station_transmit_bits_per_second{device="wlan0"} 1.64e+08
2333+
node_wifi_station_transmit_bits_per_second{device="wlan0",mac_address="01:02:03:04:05:06"} 3.28e+08
2334+
node_wifi_station_transmit_bits_per_second{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 1.64e+08
23292335
# HELP node_wifi_station_transmit_failed_total The total number of times a station has failed to send a packet.
23302336
# TYPE node_wifi_station_transmit_failed_total counter
2331-
node_wifi_station_transmit_failed_total{device="wlan0"} 2
2337+
node_wifi_station_transmit_failed_total{device="wlan0",mac_address="01:02:03:04:05:06"} 4
2338+
node_wifi_station_transmit_failed_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 2
23322339
# HELP node_wifi_station_transmit_retries_total The total number of times a station has had to retry while sending a packet.
23332340
# TYPE node_wifi_station_transmit_retries_total counter
2334-
node_wifi_station_transmit_retries_total{device="wlan0"} 10
2341+
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="01:02:03:04:05:06"} 20
2342+
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 10
23352343
# HELP node_xfs_allocation_btree_compares_total Number of allocation B-tree compares for a filesystem.
23362344
# TYPE node_xfs_allocation_btree_compares_total counter
23372345
node_xfs_allocation_btree_compares_total{device="sda1"} 0
Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
1-
{
2-
"connected": 30000000000,
3-
"inactive": 400000000,
4-
"receivebitrate": 128000000,
5-
"transmitbitrate": 164000000,
6-
"signal": -52,
7-
"transmitretries": 10,
8-
"transmitfailed": 2,
9-
"beaconloss": 1
10-
}
1+
[
2+
{
3+
"hardwareaddr": "qrvM3e7/",
4+
"connected": 30000000000,
5+
"inactive": 400000000,
6+
"receivebitrate": 128000000,
7+
"transmitbitrate": 164000000,
8+
"signal": -52,
9+
"transmitretries": 10,
10+
"transmitfailed": 2,
11+
"beaconloss": 1
12+
},
13+
{
14+
"hardwareaddr": "AQIDBAUG",
15+
"connected": 60000000000,
16+
"inactive": 800000000,
17+
"receivebitrate": 256000000,
18+
"transmitbitrate": 328000000,
19+
"signal": -26,
20+
"transmitretries": 20,
21+
"transmitfailed": 4,
22+
"beaconloss": 2
23+
}
24+
]
25+

collector/wifi_linux.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ type wifiStater interface {
5555
BSS(ifi *wifi.Interface) (*wifi.BSS, error)
5656
Close() error
5757
Interfaces() ([]*wifi.Interface, error)
58-
StationInfo(ifi *wifi.Interface) (*wifi.StationInfo, error)
58+
StationInfo(ifi *wifi.Interface) ([]*wifi.StationInfo, error)
5959
}
6060

6161
// NewWifiCollector returns a new Collector exposing Wifi statistics.
@@ -65,14 +65,14 @@ func NewWifiCollector() (Collector, error) {
6565
)
6666

6767
var (
68-
labels = []string{"device"}
68+
labels = []string{"device", "mac_address"}
6969
)
7070

7171
return &wifiCollector{
7272
interfaceFrequencyHertz: prometheus.NewDesc(
7373
prometheus.BuildFQName(namespace, subsystem, "interface_frequency_hertz"),
7474
"The current frequency a WiFi interface is operating at, in hertz.",
75-
labels,
75+
[]string{"device"},
7676
nil,
7777
),
7878

@@ -193,10 +193,12 @@ func (c *wifiCollector) Update(ch chan<- prometheus.Metric) error {
193193
ifi.Name, err)
194194
}
195195

196-
info, err := stat.StationInfo(ifi)
196+
stations, err := stat.StationInfo(ifi)
197197
switch {
198198
case err == nil:
199-
c.updateStationStats(ch, ifi.Name, info)
199+
for _, station := range stations {
200+
c.updateStationStats(ch, ifi.Name, station)
201+
}
200202
case os.IsNotExist(err):
201203
log.Debugf("station information not found for wifi device %q", ifi.Name)
202204
default:
@@ -227,55 +229,63 @@ func (c *wifiCollector) updateStationStats(ch chan<- prometheus.Metric, device s
227229
prometheus.CounterValue,
228230
info.Connected.Seconds(),
229231
device,
232+
info.HardwareAddr.String(),
230233
)
231234

232235
ch <- prometheus.MustNewConstMetric(
233236
c.stationInactiveSeconds,
234237
prometheus.GaugeValue,
235238
info.Inactive.Seconds(),
236239
device,
240+
info.HardwareAddr.String(),
237241
)
238242

239243
ch <- prometheus.MustNewConstMetric(
240244
c.stationReceiveBitsPerSecond,
241245
prometheus.GaugeValue,
242246
float64(info.ReceiveBitrate),
243247
device,
248+
info.HardwareAddr.String(),
244249
)
245250

246251
ch <- prometheus.MustNewConstMetric(
247252
c.stationTransmitBitsPerSecond,
248253
prometheus.GaugeValue,
249254
float64(info.TransmitBitrate),
250255
device,
256+
info.HardwareAddr.String(),
251257
)
252258

253259
ch <- prometheus.MustNewConstMetric(
254260
c.stationSignalDBM,
255261
prometheus.GaugeValue,
256262
float64(info.Signal),
257263
device,
264+
info.HardwareAddr.String(),
258265
)
259266

260267
ch <- prometheus.MustNewConstMetric(
261268
c.stationTransmitRetriesTotal,
262269
prometheus.CounterValue,
263270
float64(info.TransmitRetries),
264271
device,
272+
info.HardwareAddr.String(),
265273
)
266274

267275
ch <- prometheus.MustNewConstMetric(
268276
c.stationTransmitFailedTotal,
269277
prometheus.CounterValue,
270278
float64(info.TransmitFailed),
271279
device,
280+
info.HardwareAddr.String(),
272281
)
273282

274283
ch <- prometheus.MustNewConstMetric(
275284
c.stationBeaconLossTotal,
276285
prometheus.CounterValue,
277286
float64(info.BeaconLoss),
278287
device,
288+
info.HardwareAddr.String(),
279289
)
280290
}
281291

@@ -346,13 +356,13 @@ func (s *mockWifiStater) Interfaces() ([]*wifi.Interface, error) {
346356
return ifis, nil
347357
}
348358

349-
func (s *mockWifiStater) StationInfo(ifi *wifi.Interface) (*wifi.StationInfo, error) {
359+
func (s *mockWifiStater) StationInfo(ifi *wifi.Interface) ([]*wifi.StationInfo, error) {
350360
p := filepath.Join(ifi.Name, "stationinfo.json")
351361

352-
var info wifi.StationInfo
353-
if err := s.unmarshalJSONFile(p, &info); err != nil {
362+
var stations []*wifi.StationInfo
363+
if err := s.unmarshalJSONFile(p, &stations); err != nil {
354364
return nil, err
355365
}
356366

357-
return &info, nil
367+
return stations, nil
358368
}

vendor/github.com/mdlayher/wifi/client.go

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/mdlayher/wifi/client_linux.go

Lines changed: 36 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/mdlayher/wifi/client_others.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/mdlayher/wifi/wifi.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)