lesavka/client/src/bin/lesavka_relayctl/upstream_sync_formatting.rs

190 lines
6.3 KiB
Rust

/// Keeps `print_upstream_sync` explicit because it sits on CLI orchestration, where operators need deterministic exits and artifact paths.
/// Inputs are the typed parameters; output is the return value or side effect.
fn print_upstream_sync(state: lesavka_common::lesavka::UpstreamSyncState) {
println!("planner_session_id={}", state.session_id);
println!("planner_phase={}", state.phase);
println!(
"planner_latest_camera_remote_pts_us={}",
state
.latest_camera_remote_pts_us
.map(|value| value.to_string())
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_latest_microphone_remote_pts_us={}",
state
.latest_microphone_remote_pts_us
.map(|value| value.to_string())
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_last_video_presented_pts_us={}",
state
.last_video_presented_pts_us
.map(|value| value.to_string())
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_last_audio_presented_pts_us={}",
state
.last_audio_presented_pts_us
.map(|value| value.to_string())
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_live_lag_ms={}",
state
.live_lag_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_skew_ms={}",
state
.planner_skew_ms
.map(|value| format!("{value:+.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!("planner_stale_audio_drops={}", state.stale_audio_drops);
println!("planner_stale_video_drops={}", state.stale_video_drops);
println!("planner_skew_video_drops={}", state.skew_video_drops);
println!("planner_freshness_reanchors={}", state.freshness_reanchors);
println!("planner_startup_timeouts={}", state.startup_timeouts);
println!("planner_video_freezes={}", state.video_freezes);
println!(
"planner_client_capture_skew_ms={}",
state
.client_capture_skew_ms
.map(|value| format!("{value:+.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_client_send_skew_ms={}",
state
.client_send_skew_ms
.map(|value| format!("{value:+.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_server_receive_skew_ms={}",
state
.server_receive_skew_ms
.map(|value| format!("{value:+.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_camera_client_queue_age_ms={}",
state
.camera_client_queue_age_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_microphone_client_queue_age_ms={}",
state
.microphone_client_queue_age_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_camera_server_receive_age_ms={}",
state
.camera_server_receive_age_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_microphone_server_receive_age_ms={}",
state
.microphone_server_receive_age_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_client_capture_abs_skew_p95_ms={}",
state
.client_capture_abs_skew_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_client_send_abs_skew_p95_ms={}",
state
.client_send_abs_skew_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_server_receive_abs_skew_p95_ms={}",
state
.server_receive_abs_skew_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_camera_client_queue_age_p95_ms={}",
state
.camera_client_queue_age_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_microphone_client_queue_age_p95_ms={}",
state
.microphone_client_queue_age_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_sink_handoff_skew_ms={}",
state
.sink_handoff_skew_ms
.map(|value| format!("{value:+.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_sink_handoff_abs_skew_p95_ms={}",
state
.sink_handoff_abs_skew_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_camera_sink_late_ms={}",
state
.camera_sink_late_ms
.map(|value| format!("{value:+.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_microphone_sink_late_ms={}",
state
.microphone_sink_late_ms
.map(|value| format!("{value:+.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_camera_sink_late_p95_ms={}",
state
.camera_sink_late_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_microphone_sink_late_p95_ms={}",
state
.microphone_sink_late_p95_ms
.map(|value| format!("{value:.1}"))
.unwrap_or_else(|| "pending".to_string())
);
println!(
"planner_client_timing_window_samples={}",
state.client_timing_window_samples
);
println!(
"planner_sink_handoff_window_samples={}",
state.sink_handoff_window_samples
);
println!("planner_detail={}", state.last_reason);
}