Skip to main content

SpanCollector

Struct SpanCollector 

Source
pub struct SpanCollector { /* private fields */ }
Expand description

Thread-local span collector with zero-atomic submit path.

Completed spans are buffered in a thread-local Vec and periodically flushed to a shared outbox. The exporter calls drain_into to harvest all pending spans.

Created explicitly and held as Arc<SpanCollector>.

Implementations§

Source§

impl SpanCollector

Source

pub fn new(_num_shards: usize, _capacity_per_shard: usize) -> Self

Create a new collector.

The _num_shards and _capacity_per_shard parameters are accepted for API compatibility but are no longer used — each thread gets its own buffer automatically, and buffers are unbounded.

Source

pub fn start_span( self: &Arc<Self>, name: impl Into<Cow<'static, str>>, kind: SpanKind, ) -> Span

Create a new root span with a fresh trace ID.

The span is associated with this collector and will be submitted here when it drops. Under high load, adaptive sampling may return a no-op span that skips all recording and submission.

Source

pub fn start_span_from_traceparent( self: &Arc<Self>, traceparent: Option<&str>, name: impl Into<Cow<'static, str>>, kind: SpanKind, ) -> Span

Create a root span from an incoming W3C traceparent header.

If the header is valid, the span inherits the remote trace ID and sets parent_span_id to the remote span ID. If the header is None or invalid, behaves like start_span (new trace ID).

Adaptive sampling applies: under load, may return a no-op span.

Source

pub fn flush_local(&self)

Flush the current thread’s local buffer to the shared outbox.

Call this before drain_into when running on the same thread that submitted spans (e.g., in tests or single-threaded exporters). In production, thread-local buffers are flushed automatically when they reach [FLUSH_THRESHOLD] or on thread exit.

Source

pub fn drain_into(&self, buf: &mut Vec<CompletedSpan>)

Drain all pending spans into the provided buffer.

This is the primary method for exporters. It collects spans from all registered thread outboxes. Spans still in thread-local buffers below the flush threshold are NOT included unless flush_local is called first (or the thread exits).

The caller can reuse the buffer across export cycles to avoid repeated allocation.

Source

pub fn dropped_count(&self) -> u64

Number of spans that were dropped.

Always returns 0. Retained for API compatibility; use sampled_out_count for adaptive sampling stats.

Source

pub fn recorded_count(&self) -> u64

Total spans that passed adaptive sampling and were recorded.

Source

pub fn sampled_out_count(&self) -> u64

Total spans that were dropped by adaptive sampling.

Source

pub fn len(&self) -> usize

Current number of spans waiting across all outboxes.

Does not include spans still in thread-local buffers that haven’t been flushed yet.

Source

pub fn is_empty(&self) -> bool

Returns true if all outboxes are empty.

Does not account for spans in thread-local buffers below the flush threshold.

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<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, 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