use introspection_core::read_runtime_load_report;
use crate::constants::DEFAULT_RUNTIME_REPORT_PATH;
use crate::helpers::{has_flag, parse_report_path};
pub fn runtime_load(args: &[String]) -> Result<(), String> {
let report_path = parse_report_path(args, DEFAULT_RUNTIME_REPORT_PATH)?;
let json = has_flag(args, "--json");
let report = read_runtime_load_report(&report_path).map_err(|err| {
format!(
"read runtime load report from {} failed: {err}. Hint: run `cargo run -p local-loop` first.",
report_path.display()
)
})?;
if json {
let payload = serde_json::to_string_pretty(&report)
.map_err(|err| format!("serialize runtime report to json failed: {err}"))?;
println!("{payload}");
} else {
println!("RobotRT Runtime Load");
println!("source: {}", report_path.display());
println!(
"queue_depth={:?} retransmit_drivers={:?} backpressure={:?}",
report.queue_depth, report.retransmit_drivers, report.backpressure
);
println!(
"health: status={} reason={}",
report.health.status,
report.health.reason.as_deref().unwrap_or("-")
);
println!("metrics={}", report.metrics.len());
}
Ok(())
}