Add selftest scheduler, queue history, and OpenWrt signal stats
This commit is contained in:
@@ -240,7 +240,7 @@ def _parse_hostapd_clients(
|
||||
*,
|
||||
name_map: dict[str, str] | None = None,
|
||||
ifname_meta: dict[str, dict[str, str]] | None = None,
|
||||
) -> list[str]:
|
||||
) -> list[tuple[str, int | None, str]]:
|
||||
if not isinstance(payload, dict):
|
||||
return []
|
||||
data = payload.get("clients")
|
||||
@@ -248,7 +248,7 @@ def _parse_hostapd_clients(
|
||||
items = data.items()
|
||||
else:
|
||||
return []
|
||||
clients: list[str] = []
|
||||
clients: list[tuple[str, int | None, str]] = []
|
||||
name_map = name_map or {}
|
||||
meta = (ifname_meta or {}).get(ifname, {})
|
||||
ssid = meta.get("ssid") or ""
|
||||
@@ -274,7 +274,8 @@ def _parse_hostapd_clients(
|
||||
client_label = host
|
||||
else:
|
||||
client_label = str(mac)
|
||||
clients.append(f"{net_label} {client_label} {sig} rx:{rx} tx:{tx}")
|
||||
line = f"{net_label} {client_label} {sig} rx:{rx} tx:{tx}"
|
||||
clients.append((line, signal if isinstance(signal, (int, float)) else None, net_label))
|
||||
return clients
|
||||
|
||||
|
||||
@@ -384,6 +385,7 @@ async def get_openwrt_status(cfg: dict[str, Any], mode: str = "full") -> str:
|
||||
if leases_fallback:
|
||||
lease_name_map.update(_extract_lease_name_map_fallback(leases_fallback))
|
||||
wifi_net_counts: dict[str, int] = {}
|
||||
wifi_signals: dict[str, list[int]] = {}
|
||||
if ifnames:
|
||||
for ifname in ifnames:
|
||||
cmd_clients = ssh_cmd + ["ubus", "call", f"hostapd.{ifname}", "get_clients"]
|
||||
@@ -397,14 +399,16 @@ async def get_openwrt_status(cfg: dict[str, Any], mode: str = "full") -> str:
|
||||
if isinstance(clients_payload, dict):
|
||||
label = _net_label_for_ifname(ifname, ifname_meta)
|
||||
wifi_net_counts[label] = wifi_net_counts.get(label, 0) + len(clients_payload)
|
||||
wifi_clients.extend(
|
||||
_parse_hostapd_clients(
|
||||
payload,
|
||||
ifname,
|
||||
name_map=lease_name_map,
|
||||
ifname_meta=ifname_meta,
|
||||
)
|
||||
parsed = _parse_hostapd_clients(
|
||||
payload,
|
||||
ifname,
|
||||
name_map=lease_name_map,
|
||||
ifname_meta=ifname_meta,
|
||||
)
|
||||
wifi_clients.extend([p[0] for p in parsed])
|
||||
for _line, sig, net_label in parsed:
|
||||
if sig is not None and net_label:
|
||||
wifi_signals.setdefault(net_label, []).append(sig)
|
||||
|
||||
if leases:
|
||||
leases_list = _extract_leases(leases)
|
||||
@@ -422,7 +426,13 @@ async def get_openwrt_status(cfg: dict[str, Any], mode: str = "full") -> str:
|
||||
if wifi_net_counts:
|
||||
wifi_section.append("📶 Wi-Fi networks:")
|
||||
for label, count in sorted(wifi_net_counts.items()):
|
||||
wifi_section.append(f" - {label}: {count}")
|
||||
sigs = wifi_signals.get(label) or []
|
||||
if sigs:
|
||||
avg_sig = sum(sigs) / len(sigs)
|
||||
min_sig = min(sigs)
|
||||
wifi_section.append(f" - {label}: {count} (avg {avg_sig:.0f}dBm, min {min_sig}dBm)")
|
||||
else:
|
||||
wifi_section.append(f" - {label}: {count}")
|
||||
wifi_section.append("")
|
||||
|
||||
wifi_section.append(f"📶 Wi-Fi clients: {len(wifi_clients)}")
|
||||
|
||||
Reference in New Issue
Block a user