github_mcp/http/
metrics.rs1use std::collections::HashMap;
9use std::sync::{LazyLock, Mutex};
10
11static COUNTERS: LazyLock<Mutex<HashMap<String, u64>>> =
12 LazyLock::new(|| Mutex::new(HashMap::new()));
13
14pub fn increment(name: &str) {
15 let mut counters = COUNTERS.lock().unwrap();
16 *counters.entry(name.to_string()).or_insert(0) += 1;
17}
18
19pub fn render_metrics() -> String {
20 let counters = COUNTERS.lock().unwrap();
21 let mut lines: Vec<String> = counters
22 .iter()
23 .map(|(name, value)| format!("{name} {value}"))
24 .collect();
25 lines.sort();
26 lines.push(String::new());
27 lines.join("\n")
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33
34 #[test]
35 fn increments_and_renders_a_counter() {
36 increment("test_counter_metrics_rs");
37 increment("test_counter_metrics_rs");
38 let rendered = render_metrics();
39 assert!(rendered.contains("test_counter_metrics_rs 2"));
40 }
41}