@@ -75,6 +75,28 @@ impl Registry {
75
75
}
76
76
}
77
77
78
+ /// Creates a new default [`Registry`] with the given labels.
79
+ pub fn with_labels (
80
+ labels : impl Iterator < Item = ( Cow < ' static , str > , Cow < ' static , str > ) > ,
81
+ ) -> Self {
82
+ Self {
83
+ labels : labels. into_iter ( ) . collect ( ) ,
84
+ ..Default :: default ( )
85
+ }
86
+ }
87
+
88
+ /// Creates a new default [`Registry`] with the given prefix and labels.
89
+ pub fn with_prefix_and_labels (
90
+ prefix : impl Into < String > ,
91
+ labels : impl Iterator < Item = ( Cow < ' static , str > , Cow < ' static , str > ) > ,
92
+ ) -> Self {
93
+ Self {
94
+ prefix : Some ( Prefix ( prefix. into ( ) ) ) ,
95
+ labels : labels. into_iter ( ) . collect ( ) ,
96
+ ..Default :: default ( )
97
+ }
98
+ }
99
+
78
100
/// Register a metric with the [`Registry`].
79
101
///
80
102
/// Note: In the Open Metrics text exposition format some metric types have
@@ -527,6 +549,53 @@ mod tests {
527
549
use super :: * ;
528
550
use crate :: metrics:: counter:: Counter ;
529
551
552
+ #[ test]
553
+ fn constructors ( ) {
554
+ let counter_name = "test_counter" ;
555
+ let prefix = "test_prefix" ;
556
+ let labels = vec ! [
557
+ ( Cow :: Borrowed ( "global_label_1" ) , Cow :: Borrowed ( "value_1" ) ) ,
558
+ ( Cow :: Borrowed ( "global_label_1" ) , Cow :: Borrowed ( "value_2" ) ) ,
559
+ ] ;
560
+ // test with_prefix constructor
561
+ let mut registry = Registry :: with_prefix ( prefix) ;
562
+ let counter: Counter = Counter :: default ( ) ;
563
+ registry. register ( counter_name, "some help" , counter) ;
564
+
565
+ assert_eq ! (
566
+ Some ( ( prefix. to_string( ) + "_" + counter_name, vec![ ] ) ) ,
567
+ registry
568
+ . iter_metrics( )
569
+ . map( |( desc, _) | ( desc. name. clone( ) , desc. labels. clone( ) ) )
570
+ . next( )
571
+ ) ;
572
+
573
+ // test with_labels constructor
574
+ let mut registry = Registry :: with_labels ( labels. clone ( ) . into_iter ( ) ) ;
575
+ let counter: Counter = Counter :: default ( ) ;
576
+ registry. register ( counter_name, "some help" , counter) ;
577
+ assert_eq ! (
578
+ Some ( ( counter_name. to_string( ) , labels. clone( ) ) ) ,
579
+ registry
580
+ . iter_metrics( )
581
+ . map( |( desc, _) | ( desc. name. clone( ) , desc. labels. clone( ) ) )
582
+ . next( )
583
+ ) ;
584
+
585
+ // test with_prefix_and_labels constructor
586
+ let mut registry = Registry :: with_prefix_and_labels ( prefix, labels. clone ( ) . into_iter ( ) ) ;
587
+ let counter: Counter = Counter :: default ( ) ;
588
+ registry. register ( counter_name, "some help" , counter) ;
589
+
590
+ assert_eq ! (
591
+ Some ( ( prefix. to_string( ) + "_" + counter_name, labels) ) ,
592
+ registry
593
+ . iter_metrics( )
594
+ . map( |( desc, _) | ( desc. name. clone( ) , desc. labels. clone( ) ) )
595
+ . next( )
596
+ ) ;
597
+ }
598
+
530
599
#[ test]
531
600
fn register_and_iterate ( ) {
532
601
let mut registry = Registry :: default ( ) ;
0 commit comments