@@ -4,9 +4,9 @@ use std::{borrow::Cow, sync::Arc};
44use opentelemetry:: {
55 global,
66 metrics:: {
7- noop:: NoopAsyncInstrument , Callback , Counter , Gauge , Histogram , InstrumentProvider ,
8- MetricsError , ObservableCounter , ObservableGauge , ObservableUpDownCounter , Result ,
9- UpDownCounter ,
7+ noop:: NoopAsyncInstrument , Callback , Counter , Gauge , Histogram , HistogramBuilder ,
8+ InstrumentProvider , MetricsError , ObservableCounter , ObservableGauge ,
9+ ObservableUpDownCounter , Result , UpDownCounter ,
1010 } ,
1111} ;
1212
@@ -373,28 +373,28 @@ impl InstrumentProvider for SdkMeter {
373373 Ok ( ObservableGauge :: new ( observable) )
374374 }
375375
376- fn f64_histogram (
377- & self ,
378- name : Cow < ' static , str > ,
379- description : Option < Cow < ' static , str > > ,
380- unit : Option < Cow < ' static , str > > ,
381- ) -> Result < Histogram < f64 > > {
382- validate_instrument_config ( name. as_ref ( ) , & unit, self . validation_policy ) ?;
376+ fn f64_histogram ( & self , builder : HistogramBuilder < ' _ , f64 > ) -> Result < Histogram < f64 > > {
377+ validate_instrument_config ( builder. name . as_ref ( ) , & builder. unit , self . validation_policy ) ?;
383378 let p = InstrumentResolver :: new ( self , & self . f64_resolver ) ;
384- p. lookup ( InstrumentKind :: Histogram , name, description, unit)
385- . map ( |i| Histogram :: new ( Arc :: new ( i) ) )
379+ p. lookup (
380+ InstrumentKind :: Histogram ,
381+ builder. name ,
382+ builder. description ,
383+ builder. unit ,
384+ )
385+ . map ( |i| Histogram :: new ( Arc :: new ( i) ) )
386386 }
387387
388- fn u64_histogram (
389- & self ,
390- name : Cow < ' static , str > ,
391- description : Option < Cow < ' static , str > > ,
392- unit : Option < Cow < ' static , str > > ,
393- ) -> Result < Histogram < u64 > > {
394- validate_instrument_config ( name. as_ref ( ) , & unit, self . validation_policy ) ?;
388+ fn u64_histogram ( & self , builder : HistogramBuilder < ' _ , u64 > ) -> Result < Histogram < u64 > > {
389+ validate_instrument_config ( builder. name . as_ref ( ) , & builder. unit , self . validation_policy ) ?;
395390 let p = InstrumentResolver :: new ( self , & self . u64_resolver ) ;
396- p. lookup ( InstrumentKind :: Histogram , name, description, unit)
397- . map ( |i| Histogram :: new ( Arc :: new ( i) ) )
391+ p. lookup (
392+ InstrumentKind :: Histogram ,
393+ builder. name ,
394+ builder. description ,
395+ builder. unit ,
396+ )
397+ . map ( |i| Histogram :: new ( Arc :: new ( i) ) )
398398 }
399399}
400400
@@ -524,7 +524,10 @@ where
524524mod tests {
525525 use std:: sync:: Arc ;
526526
527- use opentelemetry:: metrics:: { InstrumentProvider , MeterProvider , MetricsError } ;
527+ use opentelemetry:: {
528+ global,
529+ metrics:: { InstrumentProvider , MeterProvider , MetricsError } ,
530+ } ;
528531
529532 use super :: {
530533 InstrumentValidationPolicy , SdkMeter , INSTRUMENT_NAME_FIRST_ALPHABETIC ,
@@ -629,8 +632,14 @@ mod tests {
629632 . f64_observable_gauge ( name. into ( ) , None , None , Vec :: new ( ) )
630633 . map ( |_| ( ) ) ,
631634 ) ;
632- assert ( meter. f64_histogram ( name. into ( ) , None , None ) . map ( |_| ( ) ) ) ;
633- assert ( meter. u64_histogram ( name. into ( ) , None , None ) . map ( |_| ( ) ) ) ;
635+
636+ // Get handle to HistogramBuilder for testing
637+ let global_meter = global:: meter ( "test" ) ;
638+ let histogram_builder_f64 = global_meter. f64_histogram ( name) ;
639+ let histogram_builder_u64 = global_meter. u64_histogram ( name) ;
640+
641+ assert ( meter. f64_histogram ( histogram_builder_f64) . map ( |_| ( ) ) ) ;
642+ assert ( meter. u64_histogram ( histogram_builder_u64) . map ( |_| ( ) ) ) ;
634643 }
635644
636645 // (unit, expected error)
@@ -713,16 +722,18 @@ mod tests {
713722 . f64_observable_gauge ( "test" . into ( ) , None , unit. clone ( ) , Vec :: new ( ) )
714723 . map ( |_| ( ) ) ,
715724 ) ;
716- assert (
717- meter
718- . f64_histogram ( "test" . into ( ) , None , unit. clone ( ) )
719- . map ( |_| ( ) ) ,
720- ) ;
721- assert (
722- meter
723- . u64_histogram ( "test" . into ( ) , None , unit. clone ( ) )
724- . map ( |_| ( ) ) ,
725- ) ;
725+
726+ // Get handle to HistogramBuilder for testing
727+ let global_meter = global:: meter ( "test" ) ;
728+ let histogram_builder_f64 = global_meter
729+ . f64_histogram ( "test" )
730+ . with_unit ( unit. clone ( ) . unwrap ( ) ) ;
731+ let histogram_builder_u64 = global_meter
732+ . u64_histogram ( "test" )
733+ . with_unit ( unit. clone ( ) . unwrap ( ) ) ;
734+
735+ assert ( meter. f64_histogram ( histogram_builder_f64) . map ( |_| ( ) ) ) ;
736+ assert ( meter. u64_histogram ( histogram_builder_u64) . map ( |_| ( ) ) ) ;
726737 }
727738 }
728739}
0 commit comments