use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CoordinationMetrics {
pub manager_intervention_rate: f64,
pub manager_activations: u64,
pub delegation_efficiency: f64,
pub message_task_ratio: f64,
pub total_idle_ticks: u64,
pub total_acted_ticks: u64,
pub idle_ratio: f64,
}
impl CoordinationMetrics {
pub fn calculate(
manager_activations: u64,
total_ticks: u64,
total_idle: u64,
total_acted: u64,
) -> Self {
let manager_intervention_rate = if total_ticks > 0 {
manager_activations as f64 / total_ticks as f64
} else {
0.0
};
let total_worker_ticks = total_idle + total_acted;
let idle_ratio = if total_worker_ticks > 0 {
total_idle as f64 / total_worker_ticks as f64
} else {
0.0
};
Self {
manager_intervention_rate,
manager_activations,
delegation_efficiency: 0.0, message_task_ratio: 0.0, total_idle_ticks: total_idle,
total_acted_ticks: total_acted,
idle_ratio,
}
}
}