File tree 2 files changed +32
-12
lines changed
2 files changed +32
-12
lines changed Original file line number Diff line number Diff line change @@ -41,18 +41,14 @@ async fn main() -> Result<ExitCode> {
41
41
pre_rustup_main_init ( ) ;
42
42
43
43
let process = Process :: os ( ) ;
44
- #[ cfg( feature = "otel" ) ]
45
- opentelemetry:: global:: set_text_map_propagator (
46
- opentelemetry_sdk:: propagation:: TraceContextPropagator :: new ( ) ,
47
- ) ;
48
- let ( subscriber, console_filter) = rustup:: cli:: log:: tracing_subscriber ( & process) ;
49
- tracing:: subscriber:: set_global_default ( subscriber) ?;
50
- let result = run_rustup ( & process, console_filter) . await ;
51
- // We're tracing, so block until all spans are exported.
52
- #[ cfg( feature = "otel" ) ]
53
- opentelemetry:: global:: set_tracer_provider (
54
- opentelemetry:: trace:: noop:: NoopTracerProvider :: new ( ) ,
55
- ) ;
44
+ let result = {
45
+ #[ cfg( feature = "otel" ) ]
46
+ let _telemetry_guard = rustup:: cli:: log:: set_global_telemetry ( ) ;
47
+
48
+ let ( subscriber, console_filter) = rustup:: cli:: log:: tracing_subscriber ( & process) ;
49
+ tracing:: subscriber:: set_global_default ( subscriber) ?;
50
+ run_rustup ( & process, console_filter) . await
51
+ } ;
56
52
57
53
match result {
58
54
Err ( e) => {
Original file line number Diff line number Diff line change @@ -175,3 +175,27 @@ fn telemetry_default_tracer() -> Tracer {
175
175
global:: set_tracer_provider ( provider. clone ( ) ) ;
176
176
provider. tracer ( "tracing-otel-subscriber" )
177
177
}
178
+
179
+ #[ cfg( feature = "otel" ) ]
180
+ #[ must_use]
181
+ pub struct GlobalTelemetryGuard {
182
+ _private : ( ) ,
183
+ }
184
+
185
+ #[ cfg( feature = "otel" ) ]
186
+ pub fn set_global_telemetry ( ) -> GlobalTelemetryGuard {
187
+ opentelemetry:: global:: set_text_map_propagator (
188
+ opentelemetry_sdk:: propagation:: TraceContextPropagator :: new ( ) ,
189
+ ) ;
190
+ GlobalTelemetryGuard { _private : ( ) }
191
+ }
192
+
193
+ #[ cfg( feature = "otel" ) ]
194
+ impl Drop for GlobalTelemetryGuard {
195
+ fn drop ( & mut self ) {
196
+ // We're tracing, so block until all spans are exported.
197
+ opentelemetry:: global:: set_tracer_provider (
198
+ opentelemetry:: trace:: noop:: NoopTracerProvider :: new ( ) ,
199
+ ) ;
200
+ }
201
+ }
You can’t perform that action at this time.
0 commit comments