Skip to content

Commit 956677a

Browse files
committed
refactor(log): introduce GlobalTelemetryGuard
1 parent 1f5c82d commit 956677a

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

src/bin/rustup-init.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,14 @@ async fn main() -> Result<ExitCode> {
4141
pre_rustup_main_init();
4242

4343
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+
};
5652

5753
match result {
5854
Err(e) => {

src/cli/log.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,27 @@ fn telemetry_default_tracer() -> Tracer {
175175
global::set_tracer_provider(provider.clone());
176176
provider.tracer("tracing-otel-subscriber")
177177
}
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+
}

0 commit comments

Comments
 (0)