@@ -5,7 +5,7 @@ use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider};
5
5
use opentelemetry_sdk:: { runtime, Resource } ;
6
6
use std:: error:: Error ;
7
7
8
- fn init_meter_provider ( ) {
8
+ fn init_meter_provider ( ) -> opentelemetry_sdk :: metrics :: SdkMeterProvider {
9
9
let exporter = opentelemetry_stdout:: MetricsExporterBuilder :: default ( )
10
10
// uncomment the below lines to pretty print output.
11
11
// .with_encoder(|writer, data|
@@ -19,13 +19,14 @@ fn init_meter_provider() {
19
19
"metrics-basic-example" ,
20
20
) ] ) )
21
21
. build ( ) ;
22
- global:: set_meter_provider ( provider) ;
22
+ global:: set_meter_provider ( provider. clone ( ) ) ;
23
+ provider
23
24
}
24
25
25
26
#[ tokio:: main]
26
27
async fn main ( ) -> Result < ( ) , Box < dyn Error + Send + Sync + ' static > > {
27
28
// Initialize the MeterProvider with the stdout Exporter.
28
- init_meter_provider ( ) ;
29
+ let meter_provider = init_meter_provider ( ) ;
29
30
30
31
// Create a meter from the above MeterProvider.
31
32
let meter = global:: meter ( "mylibraryname" ) ;
@@ -137,6 +138,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
137
138
// Metrics are exported by default every 30 seconds when using stdout exporter,
138
139
// however shutting down the MeterProvider here instantly flushes
139
140
// the metrics, instead of waiting for the 30 sec interval.
140
- global:: shutdown_meter_provider ( ) ;
141
+ // global::shutdown_meter_provider();
142
+ meter_provider. shutdown ( ) ?;
141
143
Ok ( ( ) )
142
144
}
0 commit comments