Skip to main content

heldar_kernel/routes/
metrics.rs

1use axum::extract::State;
2use axum::http::header;
3use axum::response::{IntoResponse, Response};
4use axum::routing::get;
5use axum::Router;
6
7use crate::error::AppResult;
8use crate::services::metrics;
9use crate::state::AppState;
10
11pub fn router() -> Router<AppState> {
12    Router::new().route("/metrics", get(metrics_handler))
13}
14
15/// Prometheus exposition endpoint.
16async fn metrics_handler(State(st): State<AppState>) -> AppResult<Response> {
17    let body = metrics::render(&st.pool, &st.cfg).await?;
18    Ok((
19        [(
20            header::CONTENT_TYPE,
21            "text/plain; version=0.0.4; charset=utf-8",
22        )],
23        body,
24    )
25        .into_response())
26}