Struct trillium_opentelemetry::Metrics
source · pub struct Metrics { /* private fields */ }
Expand description
Trillium handler that instruments http.server.request.duration, http.server.request.body.size, and http.server.response.body.size as per semantic conventions for http.
Implementations§
source§impl Metrics
impl Metrics
sourcepub fn new(meter: impl Into<Metrics>) -> Self
pub fn new(meter: impl Into<Metrics>) -> Self
Constructs a new Metrics
handler from a &'static str
, [&Meter
][Meter] or [Meter
]
sourcepub fn with_route<F>(self, route: F) -> Self
pub fn with_route<F>(self, route: F) -> Self
provides a route specification to the metrics collector.
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_server_address_and_port<F>(self, server_address_and_port: F) -> Self
pub fn with_server_address_and_port<F>(self, server_address_and_port: F) -> Self
Provides a callback for server.address
and server.port
attributes to the metrics
collector.
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.
Trait Implementations§
source§impl Handler for Metrics
impl Handler for Metrics
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 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,
§fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_info: &'life1 mut Info,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_info: &'life1 mut Info,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
§fn has_upgrade(&self, _upgrade: &Upgrade<BoxedTransport>) -> bool
fn has_upgrade(&self, _upgrade: &Upgrade<BoxedTransport>) -> 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
]§fn upgrade<'life0, 'async_trait>(
&'life0 self,
_upgrade: Upgrade<BoxedTransport>,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn upgrade<'life0, 'async_trait>(
&'life0 self,
_upgrade: Upgrade<BoxedTransport>,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: '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.Auto Trait Implementations§
impl Freeze for Metrics
impl !RefUnwindSafe for Metrics
impl Send for Metrics
impl Sync for Metrics
impl Unpin for Metrics
impl !UnwindSafe for Metrics
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)