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)
}