///|
/// Aggregate telemetry health payloads for one station cycle.
pub struct TelemetryBatchSummary {
payload_count : Int
healthy_count : Int
degraded_count : Int
critical_count : Int
mean_score : Double
}
///|
/// Summarize a telemetry batch.
pub fn telemetry_batch_summary(
payloads : Array[TelemetryHealth],
) -> TelemetryBatchSummary {
let mut healthy = 0
let mut degraded = 0
let mut critical = 0
let mut score = 0.0
for payload in payloads {
score += payload.quality_score
match payload.state {
"healthy" => healthy += 1
"critical" => critical += 1
_ => degraded += 1
}
}
{
payload_count: payloads.length(),
healthy_count: healthy,
degraded_count: degraded,
critical_count: critical,
mean_score: if payloads.is_empty() {
0.0
} else {
score / payloads.length().to_double()
},
}
}
///|
/// Format telemetry batch health.
pub fn telemetry_batch_text(summary : TelemetryBatchSummary) -> String {
"payloads=" +
summary.payload_count.to_string() +
" healthy=" +
summary.healthy_count.to_string() +
" degraded=" +
summary.degraded_count.to_string() +
" critical=" +
summary.critical_count.to_string() +
" mean_score=" +
summary.mean_score.to_string()
}