robotrt-cli 0.1.0-beta.1

RobotRT modular robotics runtime and middleware components.
use core_api::ServiceRequestId;
use core_types::{HealthStatus, MetricsProvider, MetricsSnapshot};
use introspection_core::{HealthStatusItem, StatusSnapshot, read_status_snapshot};
use obs_core::{MetricsAggregator, export_otel_json_value, export_prometheus_text};

use crate::constants::DEFAULT_STATUS_REPORT_PATH;
use crate::demo::capture_demo_status_report;
use crate::helpers::{has_flag, option_value, parse_report_path, parse_u64_option};
use crate::status_api::{
    STATUS_SERVICE_NAME, StatusServiceResponse, build_snapshot_request, make_udp_service_client,
    next_request_id, validate_response,
};

mod command;
mod data_source;
mod metrics;

const OBS_EXPORT_API_VERSION: &str = "robotrt.obs.export.v1";

#[derive(Clone)]
struct SnapshotSource {
    label: String,
    json: serde_json::Value,
}

struct SnapshotProvider {
    status: HealthStatus,
    metrics: Vec<MetricsSnapshot>,
}

impl SnapshotProvider {
    fn new(status: HealthStatus, metrics: Vec<MetricsSnapshot>) -> Self {
        Self { status, metrics }
    }
}

impl MetricsProvider for SnapshotProvider {
    fn collect(&self) -> Vec<MetricsSnapshot> {
        self.metrics.clone()
    }

    fn health(&self) -> HealthStatus {
        self.status.clone()
    }
}

pub fn obs_export(args: &[String]) -> Result<(), String> {
    command::obs_export(args)
}