@@ -266,28 +266,34 @@ impl AwsSdkOtelMeterProvider {
266
266
meter_provider : otel_meter_provider,
267
267
}
268
268
}
269
- }
270
269
271
- impl MeterProvider for AwsSdkOtelMeterProvider {
272
- fn get_meter ( & self , scope : & ' static str , _attributes : Option < & Attributes > ) -> Box < dyn Meter > {
273
- Box :: new ( MeterWrap ( self . meter_provider . meter ( scope) ) )
274
- }
275
-
276
- fn flush ( & self ) -> Result < ( ) , ObservabilityError > {
270
+ /// Flush the metric pipeline.
271
+ pub fn flush ( & self ) -> Result < ( ) , ObservabilityError > {
277
272
match self . meter_provider . force_flush ( ) {
278
273
Ok ( _) => Ok ( ( ) ) ,
279
274
Err ( err) => Err ( ObservabilityError :: new ( ErrorKind :: MetricsFlush , err) ) ,
280
275
}
281
276
}
282
277
283
- fn shutdown ( & self ) -> Result < ( ) , ObservabilityError > {
278
+ /// Gracefully shutdown the metric pipeline.
279
+ pub fn shutdown ( & self ) -> Result < ( ) , ObservabilityError > {
284
280
match self . meter_provider . force_flush ( ) {
285
281
Ok ( _) => Ok ( ( ) ) ,
286
282
Err ( err) => Err ( ObservabilityError :: new ( ErrorKind :: MetricsShutdown , err) ) ,
287
283
}
288
284
}
289
285
}
290
286
287
+ impl MeterProvider for AwsSdkOtelMeterProvider {
288
+ fn get_meter ( & self , scope : & ' static str , _attributes : Option < & Attributes > ) -> Box < dyn Meter > {
289
+ Box :: new ( MeterWrap ( self . meter_provider . meter ( scope) ) )
290
+ }
291
+
292
+ fn as_any ( & self ) -> & dyn std:: any:: Any {
293
+ self
294
+ }
295
+ }
296
+
291
297
#[ cfg( test) ]
292
298
mod tests {
293
299
@@ -313,9 +319,7 @@ mod tests {
313
319
314
320
// Create the SDK metrics types from the OTel objects
315
321
let sdk_mp = AwsSdkOtelMeterProvider :: new ( otel_mp) ;
316
- let sdk_tp = TelemetryProvider :: builder ( )
317
- . meter_provider ( Box :: new ( sdk_mp) )
318
- . build ( ) ;
322
+ let sdk_tp = TelemetryProvider :: builder ( ) . meter_provider ( sdk_mp) . build ( ) ;
319
323
320
324
// Get the dyn versions of the SDK metrics objects
321
325
let dyn_sdk_mp = sdk_tp. meter_provider ( ) ;
@@ -332,7 +336,12 @@ mod tests {
332
336
histogram. record ( 1.234 , None , None ) ;
333
337
334
338
// Gracefully shutdown the metrics provider so all metrics are flushed through the pipeline
335
- dyn_sdk_mp. shutdown ( ) . unwrap ( ) ;
339
+ dyn_sdk_mp
340
+ . as_any ( )
341
+ . downcast_ref :: < AwsSdkOtelMeterProvider > ( )
342
+ . unwrap ( )
343
+ . shutdown ( )
344
+ . unwrap ( ) ;
336
345
337
346
// Extract the metrics from the exporter and assert that they are what we expect
338
347
let finished_metrics = exporter. get_finished_metrics ( ) . unwrap ( ) ;
@@ -373,9 +382,7 @@ mod tests {
373
382
374
383
// Create the SDK metrics types from the OTel objects
375
384
let sdk_mp = AwsSdkOtelMeterProvider :: new ( otel_mp) ;
376
- let sdk_tp = TelemetryProvider :: builder ( )
377
- . meter_provider ( Box :: new ( sdk_mp) )
378
- . build ( ) ;
385
+ let sdk_tp = TelemetryProvider :: builder ( ) . meter_provider ( sdk_mp) . build ( ) ;
379
386
380
387
// Get the dyn versions of the SDK metrics objects
381
388
let dyn_sdk_mp = sdk_tp. meter_provider ( ) ;
@@ -388,7 +395,7 @@ mod tests {
388
395
Box :: new ( |measurement : & dyn AsyncMeasurement < Value = f64 > | {
389
396
let mut attrs = Attributes :: new ( ) ;
390
397
attrs. set (
391
- "TestGaugeAttr" . into ( ) ,
398
+ "TestGaugeAttr" ,
392
399
AttributeValue :: String ( "TestGaugeAttr" . into ( ) ) ,
393
400
) ;
394
401
measurement. record ( 6.789 , Some ( & attrs) , None ) ;
@@ -403,7 +410,7 @@ mod tests {
403
410
Box :: new ( |measurement : & dyn AsyncMeasurement < Value = i64 > | {
404
411
let mut attrs = Attributes :: new ( ) ;
405
412
attrs. set (
406
- "TestAsyncUpDownCounterAttr" . into ( ) ,
413
+ "TestAsyncUpDownCounterAttr" ,
407
414
AttributeValue :: String ( "TestAsyncUpDownCounterAttr" . into ( ) ) ,
408
415
) ;
409
416
measurement. record ( 12 , Some ( & attrs) , None ) ;
@@ -418,7 +425,7 @@ mod tests {
418
425
Box :: new ( |measurement : & dyn AsyncMeasurement < Value = u64 > | {
419
426
let mut attrs = Attributes :: new ( ) ;
420
427
attrs. set (
421
- "TestAsyncMonoCounterAttr" . into ( ) ,
428
+ "TestAsyncMonoCounterAttr" ,
422
429
AttributeValue :: String ( "TestAsyncMonoCounterAttr" . into ( ) ) ,
423
430
) ;
424
431
measurement. record ( 123 , Some ( & attrs) , None ) ;
@@ -429,8 +436,12 @@ mod tests {
429
436
async_mono_counter. record ( 4 , None , None ) ;
430
437
431
438
// Gracefully shutdown the metrics provider so all metrics are flushed through the pipeline
432
- dyn_sdk_mp. flush ( ) . unwrap ( ) ;
433
- dyn_sdk_mp. shutdown ( ) . unwrap ( ) ;
439
+ dyn_sdk_mp
440
+ . as_any ( )
441
+ . downcast_ref :: < AwsSdkOtelMeterProvider > ( )
442
+ . unwrap ( )
443
+ . shutdown ( )
444
+ . unwrap ( ) ;
434
445
435
446
// Extract the metrics from the exporter
436
447
let finished_metrics = exporter. get_finished_metrics ( ) . unwrap ( ) ;
0 commit comments