#![allow(dead_code)]
use crate::broker::stats::{BrokerMetrics, TaskOfferRecord, TransactionRecord};
#[derive(Debug, Clone)]
pub struct Snapshot {
pub title: String,
pub mode: SourceMode,
pub host_port: String,
pub wireguard_ip: Option<String>,
pub ledger_connected: bool,
pub connection: Connection,
pub metrics: BrokerMetrics,
pub workers: Vec<WorkerRow>,
pub transactions: Vec<TransactionRecord>,
pub task_offers: Vec<TaskOfferRecord>,
pub rps_history: Vec<f64>,
pub events: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SourceMode {
Local,
P2p,
Remote,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Connection {
Connected,
Connecting,
Error(String),
}
#[derive(Debug, Clone)]
pub struct WorkerRow {
pub status: WorkerKind,
pub name: String,
pub cpus_available: f64,
pub memory_gib: f64,
pub avg_latency_ms: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WorkerKind {
Healthy,
Busy,
Unhealthy,
Draining,
Unknown,
}
impl WorkerKind {
pub fn from_str_status(s: &str) -> WorkerKind {
match s {
"healthy" => WorkerKind::Healthy,
"busy" => WorkerKind::Busy,
"unhealthy" => WorkerKind::Unhealthy,
"draining" => WorkerKind::Draining,
_ => WorkerKind::Unknown,
}
}
pub fn icon(self) -> &'static str {
match self {
WorkerKind::Healthy => "●",
WorkerKind::Busy => "◐",
WorkerKind::Unhealthy => "○",
WorkerKind::Draining => "◌",
WorkerKind::Unknown => "?",
}
}
}