feat(wireless+ports): RF Health panels + physical per-port clients (v0.16.1-beta)
Wireless RF Health (fleet Wireless page + per-AP Radios tab):
- Channel usage map across 2.4/5/6 GHz with co-channel overlap; operating
channel resolved live from /interface/wifi/monitor on the wifi package
(auto-channel radios report no frequency in /print).
- AP deployment density: client RSSI distribution on the -90..-30 dBm scale
with a coverage-gap warning.
- AP radio TX retries histogram (0%->35%+) with band selector, derived from
per-client CCQ (new wireless_radio_quality InfluxDB series).
- WiFi connectivity success funnel (Association/Auth/DHCP) derived from logs.
Per-port connected clients (Ports tab):
- New card lists clients physically connected to a selected port (host/MAC/
IP/VLAN/connection time, linked to client pages).
- Distinguishes physical clients from the raw MAC table: uplink/trunk ports
are auto-detected (topology neighbor, multi-VLAN MAC spread, or high MAC
count) and show an uplink explainer + "view MAC table" disclosure instead
of every reachable MAC.
- Added clients.first_seen ("connected since"); set once, preserved across polls.
This commit is contained in:
@@ -118,6 +118,28 @@ export interface SwitchPort extends Interface {
|
||||
bridgeInfo?: BridgeVlanEntry | null;
|
||||
}
|
||||
|
||||
export interface PortClient {
|
||||
mac_address: string;
|
||||
hostname: string | null;
|
||||
custom_name: string | null;
|
||||
vendor: string | null;
|
||||
ip_address: string | null;
|
||||
client_type: string;
|
||||
vlan_id: number | null;
|
||||
signal_strength: number | null;
|
||||
first_seen: string | null;
|
||||
last_seen: string | null;
|
||||
}
|
||||
|
||||
export interface PortClientsResult {
|
||||
classification: 'access' | 'uplink';
|
||||
reason: string;
|
||||
mac_count: number;
|
||||
vlan_count: number;
|
||||
neighbor: { neighbor_identity: string | null; neighbor_platform: string | null } | null;
|
||||
clients: PortClient[];
|
||||
}
|
||||
|
||||
export interface PortMonitorData {
|
||||
// Link state
|
||||
status?: string;
|
||||
@@ -342,6 +364,52 @@ export interface WirelessMetricPoint {
|
||||
noise_floor?: number;
|
||||
}
|
||||
|
||||
// ─── RF Health ──────────────────────────────────────────────────────────────
|
||||
|
||||
export interface RfChannelRow {
|
||||
device_id: number;
|
||||
device_name: string;
|
||||
name: string;
|
||||
ssid?: string;
|
||||
band?: string;
|
||||
frequency: number;
|
||||
channel_width?: string;
|
||||
registered_clients: number;
|
||||
}
|
||||
|
||||
export interface RfSignalRow {
|
||||
mac_address: string;
|
||||
signal_strength: number;
|
||||
device_id: number;
|
||||
device_name: string;
|
||||
custom_name?: string | null;
|
||||
hostname?: string | null;
|
||||
}
|
||||
|
||||
export interface RfTxQualityRow {
|
||||
device_id: string;
|
||||
device_name?: string;
|
||||
interface: string;
|
||||
band: string;
|
||||
tx_retry_pct: number;
|
||||
}
|
||||
|
||||
export interface RfConnectivityStage {
|
||||
success: number;
|
||||
failure: number;
|
||||
pct: number | null;
|
||||
}
|
||||
|
||||
export interface RfConnectivity {
|
||||
range: string;
|
||||
log_derived: boolean;
|
||||
stages: {
|
||||
association: RfConnectivityStage;
|
||||
authentication: RfConnectivityStage;
|
||||
dhcp: RfConnectivityStage;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ConfigSnapshotMeta {
|
||||
id: number;
|
||||
device_id: number;
|
||||
|
||||
Reference in New Issue
Block a user