in src/core/admin/src/lib.rs [496:527]
fn json_stats(&self) -> String {
let head = "{".to_owned();
let mut data = Vec::new();
for metric in &rustcommon_metrics::metrics() {
let any = match metric.as_any() {
Some(any) => any,
None => {
continue;
}
};
if let Some(counter) = any.downcast_ref::<Counter>() {
data.push(format!("\"{}\": {}", metric.name(), counter.value()));
} else if let Some(gauge) = any.downcast_ref::<Gauge>() {
data.push(format!("\"{}\": {}", metric.name(), gauge.value()));
} else if let Some(heatmap) = any.downcast_ref::<Heatmap>() {
for (label, value) in PERCENTILES {
let percentile = heatmap.percentile(*value).map(|b| b.high()).unwrap_or(0);
data.push(format!("\"{}_{}\": {}", metric.name(), label, percentile));
}
}
}
data.sort();
let body = data.join(",");
let mut content = head;
content += &body;
content += "}";
content
}