pub struct BaseMetricLayer<'a> { /* private fields */ }
Expand description
The tower middleware layer for recording HTTP metrics.
Unlike GenericMetricLayer
, this struct does not know about the metrics exporter, or the recorder. It will only emit
metrics via the metrics
crate’s macros. It’s entirely up to the user to set the global metrics recorder/exporter before using this.
You may use this if GenericMetricLayer
’s requirements are too strict for your use case.
Implementations§
Source§impl<'a> BaseMetricLayer<'a>
impl<'a> BaseMetricLayer<'a>
Sourcepub fn new() -> Self
pub fn new() -> Self
Construct a new BaseMetricLayer
.
§Example
use axum::{routing::get, Router};
use axum_prometheus::{AXUM_HTTP_REQUESTS_DURATION_SECONDS, utils::SECONDS_DURATION_BUCKETS, BaseMetricLayer};
use metrics_exporter_prometheus::{Matcher, PrometheusBuilder};
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
// Initialize the recorder as you like.
let metric_handle = PrometheusBuilder::new()
.set_buckets_for_metric(
Matcher::Full(AXUM_HTTP_REQUESTS_DURATION_SECONDS.to_string()),
SECONDS_DURATION_BUCKETS,
)
.unwrap()
.install_recorder()
.unwrap();
let app = Router::<()>::new()
.route("/fast", get(|| async {}))
.route(
"/slow",
get(|| async {
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}),
)
// Expose the metrics somehow to the outer world.
.route("/metrics", get(|| async move { metric_handle.render() }))
// Only need to add this layer at the end.
.layer(BaseMetricLayer::new());
// Run the server as usual:
// let listener = tokio::net::TcpListener::bind(SocketAddr::from(([127, 0, 0, 1], 3000)))
// .await
// .unwrap();
// axum::serve(listener, app).await.unwrap()
}
Sourcepub fn with_response_body_size() -> Self
pub fn with_response_body_size() -> Self
Construct a new BaseMetricLayer
with response body size tracking enabled.
Trait Implementations§
Source§impl<'a> Clone for BaseMetricLayer<'a>
impl<'a> Clone for BaseMetricLayer<'a>
Source§fn clone(&self) -> BaseMetricLayer<'a>
fn clone(&self) -> BaseMetricLayer<'a>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<'a> Default for BaseMetricLayer<'a>
impl<'a> Default for BaseMetricLayer<'a>
Source§impl<'a, S> Layer<S> for BaseMetricLayer<'a>
impl<'a, S> Layer<S> for BaseMetricLayer<'a>
Source§type Service = LifeCycle<S, SharedClassifier<StatusInRangeAsFailures>, Traffic<'a>, Option<BodySizeRecorder>>
type Service = LifeCycle<S, SharedClassifier<StatusInRangeAsFailures>, Traffic<'a>, Option<BodySizeRecorder>>
The wrapped service
Auto Trait Implementations§
impl<'a> !Freeze for BaseMetricLayer<'a>
impl<'a> !RefUnwindSafe for BaseMetricLayer<'a>
impl<'a> Send for BaseMetricLayer<'a>
impl<'a> Sync for BaseMetricLayer<'a>
impl<'a> Unpin for BaseMetricLayer<'a>
impl<'a> UnwindSafe for BaseMetricLayer<'a>
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
Mutably borrows from an owned value. Read more