actionqueue_daemon/http/
metrics.rs1use axum::extract::State;
7use axum::http::{HeaderValue, StatusCode};
8use axum::response::IntoResponse;
9
10#[tracing::instrument(skip_all)]
12pub async fn handle(state: State<super::RouterState>) -> impl IntoResponse {
13 crate::metrics::runs::update(state.0.as_ref());
14 crate::metrics::attempts::update(state.0.as_ref());
15 crate::metrics::wal::update(state.0.as_ref());
16 crate::metrics::recovery::update(state.0.as_ref());
17
18 match state.metrics.encode_text() {
19 Ok(encoded) => {
20 let mut response = encoded.body.into_response();
21 if let Ok(value) = HeaderValue::from_str(&encoded.content_type) {
22 response.headers_mut().insert(axum::http::header::CONTENT_TYPE, value);
23 }
24 response
25 }
26 Err(_) => {
27 (StatusCode::INTERNAL_SERVER_ERROR, "metrics_encode_failed: failed to encode metrics\n")
28 .into_response()
29 }
30 }
31}
32
33pub fn register_routes(
35 router: axum::Router<super::RouterState>,
36 metrics_enabled: bool,
37) -> axum::Router<super::RouterState> {
38 if !metrics_enabled {
39 return router;
40 }
41
42 router.route("/metrics", axum::routing::get(handle))
43}