Skip to main content

TelemetryHandles

Struct TelemetryHandles 

Source
pub struct TelemetryHandles {
    pub tracer_provider: SdkTracerProvider,
    pub meter_provider: Option<SdkMeterProvider>,
    pub logger_provider: Option<SdkLoggerProvider>,
    pub profiling_handle: Option<ProfilingHandle>,
    /* private fields */
}
Expand description

Handles returned by init_telemetry or TelemetryBuilder::init.

Keep alive for the duration of the process. Call shutdown before exiting to flush pending spans, metrics, and logs.

When dropped, shutdown is attempted with a bounded timeout (default: 5 s). If the timeout expires a warning is logged but the process continues normally.

§Example

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let handles = otel_bootstrap::init_telemetry("my-service")?;

    // run your application here …

    handles.shutdown()?;
    Ok(())
}

Fields§

§tracer_provider: SdkTracerProvider§meter_provider: Option<SdkMeterProvider>§logger_provider: Option<SdkLoggerProvider>§profiling_handle: Option<ProfilingHandle>

Implementations§

Source§

impl TelemetryHandles

Source

pub fn shutdown(&self) -> Result<(), Box<dyn Error>>

Flush pending data and shut down all providers.

Must be called before the tokio runtime shuts down so the batch exporter can send remaining spans over gRPC. Safe to call multiple times — subsequent calls are no-ops.

Best-effort. A provider that cannot flush — collector unreachable, export deadline exceeded — is logged at warn and shutdown continues to the next one. Failing to deliver telemetry is not a failure of the program that produced it, and a service must be able to exit cleanly when its collector is down. This mirrors what Drop has always done; the two paths previously disagreed, and shutdown() propagating was the odd one out.

The Result is retained for API compatibility and so a genuinely fallible step could be surfaced later; today every provider error is absorbed.

Historically this returned Ok for metrics purely because nothing registered instruments, so there was never anything to export. Once real instruments exist, an unreachable collector turns every shutdown into a 5-second timeout and an error — which is exactly the situation this must not turn into a failure.

§Example
let handles = otel_bootstrap::init_telemetry("my-service").unwrap();
// … application logic …
handles.shutdown().expect("telemetry shutdown failed");

Trait Implementations§

Source§

impl Drop for TelemetryHandles

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more