use function_timer::time;
use metrics::Label;
use metrics_util::debugging::DebugValue;
use metrics_util::MetricKind;
static METRIC_NAME: &str = "my_metric";
const OTHER_METRIC_NAME: &str = "other_metric";
struct Test {}
impl Test {
#[time(METRIC_NAME)]
fn test1(&self) {
println!("test");
}
#[time(OTHER_METRIC_NAME)]
fn test2(&self) {
println!("test2");
}
}
#[test]
fn test_ident_static() {
let recorder = metrics_util::debugging::DebuggingRecorder::new();
metrics::with_local_recorder(&recorder, || {
let t = Test {};
t.test1();
});
let metrics = recorder.snapshotter().snapshot().into_vec();
for (key, _, _, debug_value) in metrics {
let (kind, key) = key.into_parts();
let (name, labels) = key.into_parts();
assert_eq!(kind, MetricKind::Histogram);
assert_eq!(name.as_str(), "my_metric");
assert_eq!(labels, vec![Label::new("function", "test1")]);
assert!(matches!(debug_value, DebugValue::Histogram(_)));
}
}
#[test]
fn test_ident_const() {
let recorder = metrics_util::debugging::DebuggingRecorder::new();
metrics::with_local_recorder(&recorder, || {
let t = Test {};
t.test2();
});
let metrics = recorder.snapshotter().snapshot().into_vec();
for (key, _, _, debug_value) in metrics {
let (kind, key) = key.into_parts();
let (name, labels) = key.into_parts();
assert_eq!(kind, MetricKind::Histogram);
assert_eq!(name.as_str(), "other_metric");
assert_eq!(labels, vec![Label::new("function", "test2")]);
assert!(matches!(debug_value, DebugValue::Histogram(_)));
}
}