issue-bot/src/metrics.rs (27 lines of code) (raw):

use std::future::ready; use axum::{http::StatusCode, response::IntoResponse, routing::get, Router}; use metrics_exporter_prometheus::PrometheusHandle; use tokio::net::TcpListener; use tracing::info; use crate::shutdown_signal; fn metrics_app(recorder_handle: PrometheusHandle, health: bool) -> Router { let mut router = Router::new().route("/metrics", get(move || ready(recorder_handle.render()))); if health { router = router.route("/health", get(|| ready(StatusCode::OK.into_response()))); } router } pub async fn start_metrics_server( ip: String, port: u16, health: bool, recorder_handle: PrometheusHandle, ) -> anyhow::Result<()> { let app = metrics_app(recorder_handle, health); info!(ip, port, "starting metrics server"); let listener = TcpListener::bind(format!("{}:{}", ip, port)).await?; axum::serve(listener, app.into_make_service()) .with_graceful_shutdown(shutdown_signal()) .await?; Ok(()) }