robotrt-cli 0.1.0-beta.2

RobotRT modular robotics runtime and middleware components.
use std::path::Path;

use introspection_core::MiddlewareLoadReport;

pub fn print_human(report: &MiddlewareLoadReport, path: &Path) {
    println!("RobotRT Middleware Load");
    println!("source: {}", path.display());
    println!("captured_at_unix_nanos: {}", report.captured_at_unix_nanos);
    println!(
        "discovery: topics={} services={} missions={}",
        report.discovery.topics, report.discovery.services, report.discovery.missions
    );
    println!(
        "sessions: connecting={} connected={} reconnecting={} closed={}",
        report.sessions.connecting,
        report.sessions.connected,
        report.sessions.reconnecting,
        report.sessions.closed
    );
    println!(
        "totals: topic_count={} topic_pending={} service_count={} pending_requests={} pending_responses={}",
        report.totals.topic_count,
        report.totals.topic_pending_total,
        report.totals.service_count,
        report.totals.service_pending_requests_total,
        report.totals.service_pending_responses_total,
    );

    println!();
    println!("Topics:");
    println!(
        "{:<34} {:>8} {:>8} {:>8} {:>8} {:>8} {:>8} {:>8} {:>8}",
        "NAME", "PENDING", "DEPTH", "UTIL%", "DROP", "LAG", "RETRY", "REPLAY", "DEG"
    );
    for topic in &report.topics {
        println!(
            "{:<34} {:>8} {:>8} {:>7.1} {:>8} {:>8} {:>8} {:>8} {:>8}",
            topic.topic,
            topic.pending,
            topic.max_depth,
            topic.utilization_ratio * 100.0,
            topic.dropped_messages,
            topic.lag_messages,
            topic.retry_inflight,
            topic.replay_attempts,
            topic.degraded_subscribers
        );
    }

    println!();
    println!("Services:");
    println!("{:<34} {:>10} {:>10}", "NAME", "REQ", "RESP");
    for service in &report.services {
        println!(
            "{:<34} {:>10} {:>10}",
            service.service, service.pending_requests, service.pending_responses
        );
    }
}