From 4d99f9d3d9aeb378783b88ceb464568fcb3efaae Mon Sep 17 00:00:00 2001 From: Adrian Pop Date: Tue, 30 May 2023 00:24:32 +0800 Subject: [PATCH] Fix #146: Add with_prefix_and_labels constructor to Registry Signed-off-by: Adrian Pop --- src/registry.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/registry.rs b/src/registry.rs index fabec4b0..b5c4bd0c 100644 --- a/src/registry.rs +++ b/src/registry.rs @@ -75,6 +75,18 @@ impl Registry { } } + /// Creates a new default [`Registry`] with the given prefix and labels. + pub fn with_prefix_and_labels( + prefix: impl Into, + labels: impl Iterator, Cow<'static, str>)>, + ) -> Self { + Self { + prefix: Some(Prefix(prefix.into())), + labels: labels.into_iter().collect(), + ..Default::default() + } + } + /// Register a metric with the [`Registry`]. /// /// Note: In the Open Metrics text exposition format some metric types have @@ -518,6 +530,40 @@ mod tests { use super::*; use crate::metrics::counter::Counter; + #[test] + fn constructors() { + let prefix = "test_prefix"; + let counter_name = "test_counter"; + + let mut registry = Registry::with_prefix(prefix); + let counter: Counter = Counter::default(); + registry.register(counter_name, "some help", counter); + + assert_eq!( + Some((prefix.to_string() + "_" + counter_name, vec![])), + registry + .iter_metrics() + .map(|(desc, _)| (desc.name.clone(), desc.labels.clone())) + .next() + ); + + let labels = vec![ + (Cow::Borrowed("global_label_1"), Cow::Borrowed("value_1")), + (Cow::Borrowed("global_label_1"), Cow::Borrowed("value_2")), + ]; + let mut registry = Registry::with_prefix_and_labels(prefix, labels.clone().into_iter()); + let counter: Counter = Counter::default(); + registry.register(counter_name, "some help", counter); + + assert_eq!( + Some((prefix.to_string() + "_" + counter_name, labels)), + registry + .iter_metrics() + .map(|(desc, _)| (desc.name.clone(), desc.labels.clone())) + .next() + ); + } + #[test] fn register_and_iterate() { let mut registry = Registry::default();