#![cfg(prometheus_exporter)] use autometrics::{autometrics, objectives::*, prometheus_exporter}; #[test] fn success_rate() { prometheus_exporter::try_init().ok(); const OBJECTIVE: Objective = Objective::new("test").success_rate(ObjectivePercentile::P99); #[autometrics(objective = OBJECTIVE)] fn success_rate_fn() -> &'static str { "Hello world!" } success_rate_fn(); success_rate_fn(); let metrics = prometheus_exporter::encode_to_string().unwrap(); assert!(metrics .lines() .any(|line| line.starts_with("function_calls_total{") && line.contains(r#"function="success_rate_fn""#) && line.contains(r#"objective_name="test""#) && line.contains(r#"objective_percentile="99""#) && line.ends_with("} 2"))); } #[cfg(prometheus_exporter)] #[test] fn latency() { prometheus_exporter::try_init().ok(); const OBJECTIVE: Objective = Objective::new("test").latency(ObjectiveLatency::Ms100, ObjectivePercentile::P99_9); #[autometrics(objective = OBJECTIVE)] fn latency_fn() -> &'static str { "Hello world!" } latency_fn(); latency_fn(); let metrics = prometheus_exporter::encode_to_string().unwrap(); assert!(metrics.lines().any(|line| { line.starts_with("function_calls_duration_seconds_bucket{") && line.contains(r#"function="latency_fn""#) && line.contains(r#"objective_latency_threshold="0.1""#) && line.contains(r#"objective_name="test""#) && line.contains(r#"objective_percentile="99.9""#) && line.ends_with("} 2") })); } #[cfg(prometheus_exporter)] #[test] fn combined_objective() { prometheus_exporter::try_init().ok(); const OBJECTIVE: Objective = Objective::new("test") .success_rate(ObjectivePercentile::P99) .latency(ObjectiveLatency::Ms100, ObjectivePercentile::P99_9); #[autometrics(objective = OBJECTIVE)] fn combined_objective_fn() -> &'static str { "Hello world!" } combined_objective_fn(); combined_objective_fn(); let metrics = prometheus_exporter::encode_to_string().unwrap(); assert!(metrics.lines().any(|line| { line.starts_with("function_calls_total{") && line.contains(r#"function="combined_objective_fn""#) && line.contains(r#"objective_name="test""#) && line.contains(r#"objective_percentile="99""#) && line.ends_with("} 2") })); assert!(metrics.lines().any(|line| { line.starts_with("function_calls_duration_seconds_bucket{") && line.contains(r#"function="combined_objective_fn""#) && line.contains(r#"objective_latency_threshold="0.1""#) && line.contains(r#"objective_name="test""#) && line.contains(r#"objective_percentile="99.9""#) && line.ends_with("} 2") })); }