Files
AWatch-rus/adk-rust/crates/awatch-agent/src/metrics.rs
T

52 lines
1.8 KiB
Rust

use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct AgentMetrics {
pub queued_records: usize,
pub retry_count: u64,
pub heartbeat_sent: u64,
pub spool_size: u64,
}
impl AgentMetrics {
pub fn render_prometheus(&self) -> String {
format!(
concat!(
"# HELP awatch_agent_queued_records Local spool records waiting for delivery.\n",
"# TYPE awatch_agent_queued_records gauge\n",
"awatch_agent_queued_records {}\n",
"# HELP awatch_agent_retry_count Total retry attempts performed by the agent.\n",
"# TYPE awatch_agent_retry_count counter\n",
"awatch_agent_retry_count {}\n",
"# HELP awatch_agent_heartbeat_sent Heartbeat envelopes generated by the agent.\n",
"# TYPE awatch_agent_heartbeat_sent counter\n",
"awatch_agent_heartbeat_sent {}\n",
"# HELP awatch_agent_spool_size Local spool size in bytes.\n",
"# TYPE awatch_agent_spool_size gauge\n",
"awatch_agent_spool_size {}\n"
),
self.queued_records, self.retry_count, self.heartbeat_sent, self.spool_size
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn renders_prometheus_metrics() {
let metrics = AgentMetrics {
queued_records: 2,
retry_count: 3,
heartbeat_sent: 1,
spool_size: 512,
};
let rendered = metrics.render_prometheus();
assert!(rendered.contains("awatch_agent_queued_records 2"));
assert!(rendered.contains("awatch_agent_retry_count 3"));
assert!(rendered.contains("awatch_agent_heartbeat_sent 1"));
assert!(rendered.contains("awatch_agent_spool_size 512"));
}
}