@@ -9,7 +9,7 @@ use std::{
9
9
10
10
use opentelemetry:: {
11
11
metrics:: { Meter , MeterProvider } ,
12
- otel_debug, otel_error, InstrumentationScope ,
12
+ otel_debug, otel_error, otel_info , InstrumentationScope ,
13
13
} ;
14
14
15
15
use crate :: metrics:: { MetricError , MetricResult } ;
@@ -109,6 +109,10 @@ impl SdkMeterProvider {
109
109
/// There is no guaranteed that all telemetry be flushed or all resources have
110
110
/// been released on error.
111
111
pub fn shutdown ( & self ) -> MetricResult < ( ) > {
112
+ otel_info ! (
113
+ name: "MeterProvider.Shutdown" ,
114
+ message = "User initiated shutdown of MeterProvider."
115
+ ) ;
112
116
self . inner . shutdown ( )
113
117
}
114
118
}
@@ -139,15 +143,25 @@ impl Drop for SdkMeterProviderInner {
139
143
// shutdown(), then we don't need to call shutdown again.
140
144
if self . is_shutdown . load ( Ordering :: Relaxed ) {
141
145
otel_debug ! (
142
- name: "MeterProvider.AlreadyShutdown" ,
143
- message = "Meter provider was already shut down; drop will not attempt shutdown again."
146
+ name: "MeterProvider.Drop. AlreadyShutdown" ,
147
+ message = "MeterProvider was already shut down; drop will not attempt shutdown again."
144
148
) ;
145
- } else if let Err ( err) = self . shutdown ( ) {
146
- otel_error ! (
147
- name: "MeterProvider.ShutdownFailed" ,
148
- message = "Shutdown attempt failed during drop of MeterProvider." ,
149
- reason = format!( "{}" , err)
149
+ } else {
150
+ otel_info ! (
151
+ name: "MeterProvider.Drop" ,
152
+ message = "Last reference of MeterProvider dropped, initiating shutdown."
150
153
) ;
154
+ if let Err ( err) = self . shutdown ( ) {
155
+ otel_error ! (
156
+ name: "MeterProvider.Drop.ShutdownFailed" ,
157
+ message = "Shutdown attempt failed during drop of MeterProvider." ,
158
+ reason = format!( "{}" , err)
159
+ ) ;
160
+ } else {
161
+ otel_info ! (
162
+ name: "MeterProvider.Drop.ShutdownCompleted" ,
163
+ ) ;
164
+ }
151
165
}
152
166
}
153
167
}
@@ -231,7 +245,7 @@ impl MeterProviderBuilder {
231
245
/// Construct a new [MeterProvider] with this configuration.
232
246
233
247
pub fn build ( self ) -> SdkMeterProvider {
234
- SdkMeterProvider {
248
+ let meter_provider = SdkMeterProvider {
235
249
inner : Arc :: new ( SdkMeterProviderInner {
236
250
pipes : Arc :: new ( Pipelines :: new (
237
251
self . resource . unwrap_or_default ( ) ,
@@ -241,7 +255,12 @@ impl MeterProviderBuilder {
241
255
meters : Default :: default ( ) ,
242
256
is_shutdown : AtomicBool :: new ( false ) ,
243
257
} ) ,
244
- }
258
+ } ;
259
+
260
+ otel_info ! (
261
+ name: "MeterProvider.Built" ,
262
+ ) ;
263
+ meter_provider
245
264
}
246
265
}
247
266
0 commit comments