Skip to content

Commit

Permalink
refactor(log): introduce GlobalTelemetryGuard
Browse files Browse the repository at this point in the history
  • Loading branch information
rami3l committed Mar 1, 2025
1 parent 1f5c82d commit 956677a
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 12 deletions.
20 changes: 8 additions & 12 deletions src/bin/rustup-init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,14 @@ async fn main() -> Result<ExitCode> {
pre_rustup_main_init();

let process = Process::os();
#[cfg(feature = "otel")]
opentelemetry::global::set_text_map_propagator(
opentelemetry_sdk::propagation::TraceContextPropagator::new(),
);
let (subscriber, console_filter) = rustup::cli::log::tracing_subscriber(&process);
tracing::subscriber::set_global_default(subscriber)?;
let result = run_rustup(&process, console_filter).await;
// We're tracing, so block until all spans are exported.
#[cfg(feature = "otel")]
opentelemetry::global::set_tracer_provider(
opentelemetry::trace::noop::NoopTracerProvider::new(),
);
let result = {
#[cfg(feature = "otel")]
let _telemetry_guard = rustup::cli::log::set_global_telemetry();

let (subscriber, console_filter) = rustup::cli::log::tracing_subscriber(&process);
tracing::subscriber::set_global_default(subscriber)?;
run_rustup(&process, console_filter).await
};

match result {
Err(e) => {
Expand Down
24 changes: 24 additions & 0 deletions src/cli/log.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,3 +175,27 @@ fn telemetry_default_tracer() -> Tracer {
global::set_tracer_provider(provider.clone());
provider.tracer("tracing-otel-subscriber")
}

#[cfg(feature = "otel")]
#[must_use]
pub struct GlobalTelemetryGuard {
_private: (),
}

#[cfg(feature = "otel")]
pub fn set_global_telemetry() -> GlobalTelemetryGuard {
opentelemetry::global::set_text_map_propagator(
opentelemetry_sdk::propagation::TraceContextPropagator::new(),
);
GlobalTelemetryGuard { _private: () }
}

#[cfg(feature = "otel")]
impl Drop for GlobalTelemetryGuard {
fn drop(&mut self) {
// We're tracing, so block until all spans are exported.
opentelemetry::global::set_tracer_provider(
opentelemetry::trace::noop::NoopTracerProvider::new(),
);
}
}

0 comments on commit 956677a

Please sign in to comment.