Struct trillium_opentelemetry::Instrument
source · pub struct Instrument(/* private fields */);
Expand description
a handler to send both traces and metrics in accordances with semantic conventions for http.
Implementations§
source§impl Instrument
impl Instrument
sourcepub fn new(
meter: impl Into<Metrics>,
tracer: impl ObjectSafeTracer + Send + Sync + 'static,
) -> Self
pub fn new( meter: impl Into<Metrics>, tracer: impl ObjectSafeTracer + Send + Sync + 'static, ) -> Self
construct a new Instrument
with the provided meter and tracer
sourcepub fn with_route<F>(self, route: F) -> Self
pub fn with_route<F>(self, route: F) -> Self
provides a route specification
in order to avoid forcing anyone to use a particular router, this is provided as a configuration hook.
for use with trillium-router
,
use trillium_router::RouterConnExt;
trillium_opentelemetry::Metrics::new(&opentelemetry::global::meter("example"))
.with_route(|conn| conn.route().map(|r| r.to_string().into()));
sourcepub fn with_error_type<F>(self, error_type: F) -> Self
pub fn with_error_type<F>(self, error_type: F) -> Self
Provides an optional low-cardinality error type specification to the metrics collector.
The implementation of this is application specific, but will often look like checking the
[Conn::state
] for an error enum and mapping that to a low-cardinality &'static str
.
sourcepub fn with_metrics_server_address_and_port<F>(
self,
server_address_and_port: F,
) -> Self
pub fn with_metrics_server_address_and_port<F>( self, server_address_and_port: F, ) -> Self
Provides a callback for server.address
and server.port
attributes to be used in metrics
attributes. This has no effect on tracing span attributes, where server.address
and
server.port
are always enabled.
These should be set based on request headers according to the OpenTelemetry HTTP semantic conventions.
It is not recommended to enable this when the server is exposed to clients outside of your control, as request headers could arbitrarily increase the cardinality of these attributes.
sourcepub fn with_headers(
self,
headers: impl IntoIterator<Item = impl Into<HeaderName<'static>>>,
) -> Self
pub fn with_headers( self, headers: impl IntoIterator<Item = impl Into<HeaderName<'static>>>, ) -> Self
Specify a list of request headers to include in the trace spans
sourcepub fn with_local_address_and_port(self) -> Self
pub fn with_local_address_and_port(self) -> Self
Enable population of the local socket address and port in the trace spans.
This populates the network.local.address
and network.local.port
attributes.
Trait Implementations§
source§impl Debug for Instrument
impl Debug for Instrument
source§impl Handler for Instrument
impl Handler for Instrument
source§fn run<'life0, 'async_trait>(
&'life0 self,
conn: Conn,
) -> Pin<Box<dyn Future<Output = Conn> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn run<'life0, 'async_trait>(
&'life0 self,
conn: Conn,
) -> Pin<Box<dyn Future<Output = Conn> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
source§fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
info: &'life1 mut Info,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
info: &'life1 mut Info,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
source§fn before_send<'life0, 'async_trait>(
&'life0 self,
conn: Conn,
) -> Pin<Box<dyn Future<Output = Conn> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn before_send<'life0, 'async_trait>(
&'life0 self,
conn: Conn,
) -> Pin<Box<dyn Future<Output = Conn> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
source§fn name(&self) -> Cow<'static, str>
fn name(&self) -> Cow<'static, str>
source§fn has_upgrade(&self, upgrade: &Upgrade) -> bool
fn has_upgrade(&self, upgrade: &Upgrade) -> bool
Handler::upgrade
]. The first
handler that responds true to this will receive ownership of the
[trillium::Upgrade
][crate::Upgrade] in a subsequent call to [Handler::upgrade
]source§fn upgrade<'life0, 'async_trait>(
&'life0 self,
upgrade: Upgrade,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn upgrade<'life0, 'async_trait>(
&'life0 self,
upgrade: Upgrade,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Handler::has_upgrade
] and will only be called once for this
upgrade. There is no return value, and this function takes
exclusive ownership of the underlying transport once this is
called. You can downcast the transport to whatever the source
transport type is and perform any non-http protocol communication
that has been negotiated. You probably don’t want this unless
you’re implementing something like websockets. Please note that
for many transports such as TcpStreams, dropping the transport
(and therefore the Upgrade) will hang up / disconnect.