feat: freeze typed metrics registry and bounded exemplars
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
use std::{collections::BTreeSet, time::Duration};
|
||||
|
||||
use crank_metrics::{
|
||||
HttpMethod, HttpRoute, HttpStatusClass, McpMethod, McpOutcome, McpResponseMode,
|
||||
record_http_request, record_mcp_request,
|
||||
};
|
||||
use metrics_util::debugging::DebuggingRecorder;
|
||||
|
||||
#[test]
|
||||
fn one_million_hostile_values_collapse_to_the_same_closed_series() {
|
||||
let recorder = DebuggingRecorder::new();
|
||||
let snapshotter = recorder.snapshotter();
|
||||
metrics::with_local_recorder(&recorder, || {
|
||||
for index in 0..1_000_000_u32 {
|
||||
let canary = format!("workspace-{index}-request-trace-url-secret");
|
||||
record_http_request(
|
||||
HttpRoute::from_matched_path(&canary),
|
||||
HttpMethod::classify(&canary),
|
||||
HttpStatusClass::from_status(999),
|
||||
Duration::ZERO,
|
||||
);
|
||||
record_mcp_request(
|
||||
McpMethod::Invalid,
|
||||
McpResponseMode::Unknown,
|
||||
McpOutcome::Other,
|
||||
Duration::ZERO,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
let series = snapshotter
|
||||
.snapshot()
|
||||
.into_vec()
|
||||
.into_iter()
|
||||
.map(|(key, _, _, _)| format!("{:?}", key.key()))
|
||||
.collect::<BTreeSet<_>>();
|
||||
assert_eq!(series.len(), 4);
|
||||
assert!(series.iter().all(|value| !value.contains("workspace-")));
|
||||
}
|
||||
Reference in New Issue
Block a user