@@ -10,7 +10,7 @@ use std::{
1010use opentelemetry:: {
1111 global,
1212 metrics:: { Meter , MeterProvider , MetricsError , Result } ,
13- KeyValue ,
13+ InstrumentationLibrary ,
1414} ;
1515
1616use crate :: { instrumentation:: Scope , Resource } ;
@@ -145,34 +145,14 @@ impl Drop for SdkMeterProviderInner {
145145 }
146146}
147147impl MeterProvider for SdkMeterProvider {
148- fn versioned_meter (
149- & self ,
150- name : & ' static str ,
151- version : Option < & ' static str > ,
152- schema_url : Option < & ' static str > ,
153- attributes : Option < Vec < KeyValue > > ,
154- ) -> Meter {
148+ fn library_meter ( & self , library : Arc < InstrumentationLibrary > ) -> Meter {
155149 if self . inner . is_shutdown . load ( Ordering :: Relaxed ) {
156150 return Meter :: new ( Arc :: new ( NoopMeter :: new ( ) ) ) ;
157151 }
158152
159- let mut builder = Scope :: builder ( name) ;
160-
161- if let Some ( v) = version {
162- builder = builder. with_version ( v) ;
163- }
164- if let Some ( s) = schema_url {
165- builder = builder. with_schema_url ( s) ;
166- }
167- if let Some ( a) = attributes {
168- builder = builder. with_attributes ( a) ;
169- }
170-
171- let scope = builder. build ( ) ;
172-
173153 if let Ok ( mut meters) = self . inner . meters . lock ( ) {
174154 let meter = meters
175- . entry ( scope )
155+ . entry ( InstrumentationLibrary :: clone ( & library ) )
176156 . or_insert_with_key ( |scope| {
177157 Arc :: new ( SdkMeter :: new ( scope. clone ( ) , self . inner . pipes . clone ( ) ) )
178158 } )
@@ -260,10 +240,11 @@ mod tests {
260240 } ;
261241 use crate :: testing:: metrics:: metric_reader:: TestMetricReader ;
262242 use crate :: Resource ;
263- use opentelemetry:: global;
264243 use opentelemetry:: metrics:: MeterProvider ;
244+ use opentelemetry:: { global, InstrumentationLibrary } ;
265245 use opentelemetry:: { Key , KeyValue , Value } ;
266246 use std:: env;
247+ use std:: sync:: Arc ;
267248
268249 #[ test]
269250 fn test_meter_provider_resource ( ) {
@@ -454,21 +435,41 @@ mod tests {
454435 let _meter1 = provider. meter ( "test" ) ;
455436 let _meter2 = provider. meter ( "test" ) ;
456437 assert_eq ! ( provider. inner. meters. lock( ) . unwrap( ) . len( ) , 1 ) ;
457- let _meter3 =
458- provider. versioned_meter ( "test" , Some ( "1.0.0" ) , Some ( "http://example.com" ) , None ) ;
459- let _meter4 =
460- provider. versioned_meter ( "test" , Some ( "1.0.0" ) , Some ( "http://example.com" ) , None ) ;
461- let _meter5 =
462- provider. versioned_meter ( "test" , Some ( "1.0.0" ) , Some ( "http://example.com" ) , None ) ;
438+
439+ let library = Arc :: new (
440+ InstrumentationLibrary :: builder ( "test" )
441+ . with_version ( "1.0.0" )
442+ . with_schema_url ( "http://example.com" )
443+ . build ( ) ,
444+ ) ;
445+
446+ let _meter3 = provider. library_meter ( library. clone ( ) ) ;
447+ let _meter4 = provider. library_meter ( library. clone ( ) ) ;
448+ let _meter5 = provider. library_meter ( library) ;
463449 assert_eq ! ( provider. inner. meters. lock( ) . unwrap( ) . len( ) , 2 ) ;
464450
465- // the below are different meters, as meter names are case sensitive
466- let _meter6 =
467- provider. versioned_meter ( "ABC" , Some ( "1.0.0" ) , Some ( "http://example.com" ) , None ) ;
468- let _meter7 =
469- provider. versioned_meter ( "Abc" , Some ( "1.0.0" ) , Some ( "http://example.com" ) , None ) ;
470- let _meter8 =
471- provider. versioned_meter ( "abc" , Some ( "1.0.0" ) , Some ( "http://example.com" ) , None ) ;
451+ // these are different meters because meter names are case sensitive
452+ let library = Arc :: new (
453+ InstrumentationLibrary :: builder ( "ABC" )
454+ . with_version ( "1.0.0" )
455+ . with_schema_url ( "http://example.com" )
456+ . build ( ) ,
457+ ) ;
458+ let _meter6 = provider. library_meter ( library) ;
459+ let library = Arc :: new (
460+ InstrumentationLibrary :: builder ( "Abc" )
461+ . with_version ( "1.0.0" )
462+ . with_schema_url ( "http://example.com" )
463+ . build ( ) ,
464+ ) ;
465+ let _meter7 = provider. library_meter ( library) ;
466+ let library = Arc :: new (
467+ InstrumentationLibrary :: builder ( "abc" )
468+ . with_version ( "1.0.0" )
469+ . with_schema_url ( "http://example.com" )
470+ . build ( ) ,
471+ ) ;
472+ let _meter8 = provider. library_meter ( library) ;
472473 assert_eq ! ( provider. inner. meters. lock( ) . unwrap( ) . len( ) , 5 ) ;
473474 }
474475}
0 commit comments