diff --git a/CHANGELOG.md b/CHANGELOG.md index 945d128f..685c8b66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,9 +34,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Supoort `Arc` for `EncodeLabelValue`. See [PR 217]. +- Added `get` method to `Family`. + See [PR 234]. + [PR 173]: https://github.com/prometheus/client_rust/pull/173 [PR 216]: https://github.com/prometheus/client_rust/pull/216 [PR 217]: https://github.com/prometheus/client_rust/pull/217 +[PR 234]: https://github.com/prometheus/client_rust/pull/234 ### Fixed diff --git a/src/metrics/family.rs b/src/metrics/family.rs index 5e2c4e53..1a76cf8f 100644 --- a/src/metrics/family.rs +++ b/src/metrics/family.rs @@ -226,9 +226,7 @@ impl> Family MappedRwLockReadGuard { - if let Ok(metric) = - RwLockReadGuard::try_map(self.metrics.read(), |metrics| metrics.get(label_set)) - { + if let Some(metric) = self.get(label_set) { return metric; } @@ -474,34 +472,34 @@ mod tests { fn test_get() { let family = Family::, Counter>::default(); - // Test getting a non-existent metric + // Test getting a non-existent metric. let non_existent = family.get(&vec![("method".to_string(), "GET".to_string())]); assert!(non_existent.is_none()); - // Create a metric + // Create a metric. family .get_or_create(&vec![("method".to_string(), "GET".to_string())]) .inc(); - // Test getting an existing metric + // Test getting an existing metric. let existing = family.get(&vec![("method".to_string(), "GET".to_string())]); assert!(existing.is_some()); assert_eq!(existing.unwrap().get(), 1); - // Test getting a different non-existent metric + // Test getting a different non-existent metric. let another_non_existent = family.get(&vec![("method".to_string(), "POST".to_string())]); assert!(another_non_existent.is_none()); - // Test modifying the metric through the returned reference + // Test modifying the metric through the returned reference. if let Some(metric) = family.get(&vec![("method".to_string(), "GET".to_string())]) { metric.inc(); } - // Verify the modification + // Verify the modification. let modified = family.get(&vec![("method".to_string(), "GET".to_string())]); assert_eq!(modified.unwrap().get(), 2); - // Test with a different label set type + // Test with a different label set type. let string_family = Family::::default(); string_family.get_or_create(&"test".to_string()).inc();