1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
//! # OpenTelemetry Span Processor Interface //! //! Span processor is an interface which allows hooks for span start and end method //! invocations. The span processors are invoked only when //! [`is_recording`] is true. //! //! Built-in span processors are responsible for batching and conversion of spans to //! exportable representation and passing batches to exporters. //! //! Span processors can be registered directly on SDK [`TracerProvider`] and they are //! invoked in the same order as they were registered. //! //! All `Tracer` instances created by a `TracerProvider` share the same span processors. //! Changes to this collection reflect in all `Tracer` instances. //! //! The following diagram shows `SpanProcessor`'s relationship to other components //! in the SDK: //! //! ```ascii //! +-----+--------------+ +-----------------------+ +-------------------+ //! | | | | | | | //! | | | | (Batch)SpanProcessor | | SpanExporter | //! | | +---> (Simple)SpanProcessor +---> (JaegerExporter) | //! | | | | | | | //! | SDK | Tracer.span()| +-----------------------+ +-------------------+ //! | | Span.end() | //! | | | +---------------------+ //! | | | | | //! | | +---> ZPagesProcessor | //! | | | | | //! +-----+--------------+ +---------------------+ //! ``` //! //! [`is_recording`]: ../span/trait.Span.html#method.is_recording //! [`TracerProvider`]: ../provider/trait.TracerProvider.html use crate::exporter::trace::SpanData; /// `SpanProcessor`s allow finished spans to be processed. pub trait SpanProcessor: Send + Sync + std::fmt::Debug { /// `on_start` method is invoked when a `Span` is started. fn on_start(&self, span: &SpanData); /// `on_end` method is invoked when a `Span` is ended. fn on_end(&self, span: SpanData); /// Shutdown is invoked when SDK shuts down. Use this call to cleanup any /// processor data. No calls to `on_start` and `on_end` method is invoked /// after `shutdown` call is made. fn shutdown(&mut self); }