mirror of
https://github.com/henrygd/beszel.git
synced 2026-09-27 03:47:47 +02:00
Stats.WiFi is now map[string]int8 (json "wf") holding only available RSSI readings; SSID and unavailable signals stay in Info.WiFi. Averages are rounded to whole dBm. Wi-Fi is collected only on the default 60s interval; real-time requests reuse the last snapshot to avoid spawning osascript / dumping the BSS cache every second.
44 lines
1.5 KiB
Go
44 lines
1.5 KiB
Go
package transport
|
|
|
|
import (
|
|
"github.com/fxamacker/cbor/v2"
|
|
"github.com/henrygd/beszel/internal/common"
|
|
"github.com/henrygd/beszel/internal/entities/system"
|
|
"github.com/stretchr/testify/require"
|
|
"testing"
|
|
)
|
|
|
|
func TestWiFiSequentialResponseSnapshots(t *testing.T) {
|
|
signal := -50.0
|
|
var decoded system.CombinedData
|
|
for _, snapshot := range []map[string]system.WiFi{
|
|
{"wlan0": {SSID: "home", Signal: &signal}, "wlan1": {Signal: &signal}},
|
|
{"wlan0": {SSID: "home"}}, {}, nil,
|
|
{"wlan1": {SSID: "new", Signal: &signal}},
|
|
} {
|
|
signals := make(map[string]int8)
|
|
for id, reading := range snapshot {
|
|
if reading.Signal != nil {
|
|
signals[id] = int8(*reading.Signal)
|
|
}
|
|
}
|
|
payload, err := cbor.Marshal(system.CombinedData{Info: system.Info{WiFi: snapshot}, Stats: system.Stats{WiFi: signals}})
|
|
require.NoError(t, err)
|
|
require.NoError(t, UnmarshalResponse(common.AgentResponse{Data: payload}, common.GetData, &decoded))
|
|
require.Len(t, decoded.Info.WiFi, len(snapshot))
|
|
require.Len(t, decoded.Stats.WiFi, len(signals))
|
|
for id, want := range snapshot {
|
|
require.Equal(t, want, decoded.Info.WiFi[id])
|
|
}
|
|
for id, want := range signals {
|
|
require.Equal(t, want, decoded.Stats.WiFi[id])
|
|
}
|
|
}
|
|
// An older generic-response agent may omit both fields entirely.
|
|
payload, err := cbor.Marshal(map[int]any{0: map[int]any{}, 1: map[int]any{}})
|
|
require.NoError(t, err)
|
|
require.NoError(t, UnmarshalResponse(common.AgentResponse{Data: payload}, common.GetData, &decoded))
|
|
require.Empty(t, decoded.Info.WiFi)
|
|
require.Empty(t, decoded.Stats.WiFi)
|
|
}
|