Files
robot-command-center/frontend/src/types.ts

153 lines
3.2 KiB
TypeScript

export interface GpsTelemetry {
has_fix: boolean
utc_time: string
latitude: number | null
longitude: number | null
satellites: number | null
altitude_m: number | null
coordinate_system: string
source_sentence: string
raw_coordinate_format: string
source_mode: string
updated_at: string
}
export interface SessionAppStats {
connected: number
send_calls?: number
send_bytes?: number
send_errors?: number
recv_calls?: number
recv_bytes?: number
recv_timeouts?: number
recv_errors?: number
}
export interface SessionKcpStats {
connected?: number
conv?: number
rto_ms?: number
srtt_ms?: number
srttvar_ms?: number
snd_queue?: number
rcv_queue?: number
snd_buffer?: number
xmit_total?: number
}
export interface SessionTelemetry {
app: SessionAppStats
kcp: SessionKcpStats
}
export interface NativeUdpIngress {
started: boolean
bind_addr: string
packets_received: number
invalid_packets: number
last_sender: string
last_error: string
}
export interface ControlArbiterStatus {
active_source: string | null
control_lease_remaining_ms: number
packet_counts: Record<string, number>
send_rate_hz: number
source_lease_ms: number
zero_burst_packets: number
last_error: string
last_sent_at_monotonic: number
}
export interface ControlSenderStatus {
backend_ready: boolean
started: boolean
connected: boolean
peer_id: string
target_peer: string
send_count: number
send_errors: number
drain_errors: number
last_error: string
}
export interface NetworkTelemetry {
peer_status: string
latency_ms: number | null
jitter_ms: number | null
packet_loss_pct: number | null
tx_kbps: number
rx_kbps: number
transport: string
source_mode: string
updated_at: string
active_control_source: string | null
control_lease_remaining_ms: number
combined: {
connected_sessions: number
send_bytes: number
recv_bytes: number
tx_kbps: number
rx_kbps: number
}
sessions: {
video: SessionTelemetry
control: SessionTelemetry
}
ingress: {
native_udp: NativeUdpIngress
}
control: {
arbiter: ControlArbiterStatus
sender: ControlSenderStatus
}
}
export interface VideoStatus {
available: boolean
source_mode: string
frame_count: number
fps: number
frame_dir: string
source_detail?: string
timing?: {
available: boolean
latest_delta_ms: number | null
delta_samples_ms: number[]
sample_count: number
sample_window_size: number
timestamp_unit: string | null
timestamp_endianness: string | null
}
receiver?: {
backend_ready: boolean
mode: string
connected: boolean
has_recent_frame: boolean
frames_received: number
latest_sequence: number | null
last_error: string
config_path: string
server_addr?: string
relay_via?: string
peer_id?: string
buffer_bytes?: number
timing?: {
available: boolean
latest_delta_ms: number | null
delta_samples_ms: number[]
sample_count: number
sample_window_size: number
timestamp_unit: string | null
timestamp_endianness: string | null
}
}
}
export interface DashboardSnapshot {
gps: GpsTelemetry
network: NetworkTelemetry
video: VideoStatus
}