40 lines
1.3 KiB
Rust
40 lines
1.3 KiB
Rust
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-")));
|
|
}
|