in src/admin.rs [307:367]
fn new(
connect_heatmap: Option<&Arc<AtomicHeatmap<u64, AtomicU64>>>,
request_heatmap: Option<&Arc<AtomicHeatmap<u64, AtomicU64>>>,
) -> Self {
let mut counters = HashMap::new();
let mut gauges = HashMap::new();
for metric in rustcommon_metrics::metrics().static_metrics() {
let any = match metric.as_any() {
Some(any) => any,
None => continue,
};
if let Some(counter) = any.downcast_ref::<Counter>() {
let entry = SnapshotEntry {
description: metric.description(),
value: counter.value(),
};
counters.insert(metric.name(), entry);
} else if let Some(gauge) = any.downcast_ref::<Gauge>() {
let entry = SnapshotEntry {
description: metric.description(),
value: gauge.value(),
};
gauges.insert(metric.name(), entry);
}
}
let percentiles = vec![
("p25", 25.0),
("p50", 50.0),
("p75", 75.0),
("p90", 90.0),
("p99", 99.0),
("p999", 99.9),
("p9999", 99.99),
];
let mut connect_percentiles = Vec::new();
if let Some(heatmap) = connect_heatmap {
for (label, value) in &percentiles {
connect_percentiles
.push((label.to_string(), heatmap.percentile(*value).unwrap_or(0)));
}
}
let mut request_percentiles = Vec::new();
if let Some(heatmap) = request_heatmap {
for (label, value) in &percentiles {
request_percentiles
.push((label.to_string(), heatmap.percentile(*value).unwrap_or(0)));
}
}
Self {
counters,
gauges,
timestamp: Instant::now(),
connect_percentiles,
request_percentiles,
}
}