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
impl SpanCollector
Sourcepub fn new(_num_shards: usize, _capacity_per_shard: usize) -> Self
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.
Sourcepub fn start_span(
self: &Arc<Self>,
name: impl Into<Cow<'static, str>>,
kind: SpanKind,
) -> Span
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.
Sourcepub fn start_span_from_traceparent(
self: &Arc<Self>,
traceparent: Option<&str>,
name: impl Into<Cow<'static, str>>,
kind: SpanKind,
) -> Span
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.
Sourcepub fn flush_local(&self)
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.
Sourcepub fn drain_into(&self, buf: &mut Vec<CompletedSpan>)
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.
Sourcepub fn dropped_count(&self) -> u64
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.
Sourcepub fn recorded_count(&self) -> u64
pub fn recorded_count(&self) -> u64
Total spans that passed adaptive sampling and were recorded.
Sourcepub fn sampled_out_count(&self) -> u64
pub fn sampled_out_count(&self) -> u64
Total spans that were dropped by adaptive sampling.
Auto Trait Implementations§
impl !Freeze for SpanCollector
impl !RefUnwindSafe for SpanCollector
impl Send for SpanCollector
impl Sync for SpanCollector
impl Unpin for SpanCollector
impl UnsafeUnpin for SpanCollector
impl !UnwindSafe for SpanCollector
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request