Skip to main content

github_mcp/http/
metrics.rs

1// GitHub v3 REST API MCP server — generated by mcpify. Do not hand-edit.
2//
3// Minimal Prometheus-text-format counters, exposed at GET /metrics.
4// Request/duration histograms are recorded via OpenTelemetry
5// (core/otel.rs); this module only surfaces a couple of MCP-specific
6// counters that are simplest to track as plain in-process counters.
7
8use 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}