use crate::base::cli::McpTransport;
use crate::base::subsystem::RingId;
use serde::{Deserialize, Serialize};
use std::time::{SystemTime, UNIX_EPOCH};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HealthStatus {
pub level: HealthLevel,
pub last_seen_unix_ms: u64,
pub latency_ms: Option<u64>,
pub version: String,
pub ring: Option<RingId>,
pub subsystem_specific: serde_json::Value,
}
impl HealthStatus {
pub fn now_unix_ms() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as u64
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
pub enum HealthLevel {
Healthy,
Degraded { reason: String },
Unhealthy { reason: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubsystemDescriptor {
pub name: String,
pub tool_count: usize,
pub ring: Option<RingId>,
pub transport: McpTransport,
pub version: String,
}