robotrt-cli 0.1.0-beta.1

RobotRT modular robotics runtime and middleware components.
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(())
}