From 9608cfcb407c48cb6b52988d4edcaf36a7e18649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Levilain?= Date: Tue, 28 Nov 2023 20:29:30 +0100 Subject: [PATCH] fix(shulker-kube-utils): use axum in metrics --- packages/shulker-kube-utils/src/metrics.rs | 45 +++++++++++----------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/packages/shulker-kube-utils/src/metrics.rs b/packages/shulker-kube-utils/src/metrics.rs index de25e994..5127f64c 100644 --- a/packages/shulker-kube-utils/src/metrics.rs +++ b/packages/shulker-kube-utils/src/metrics.rs @@ -1,44 +1,43 @@ -use actix_web::{get, HttpRequest, HttpResponse, Responder}; -use actix_web::{middleware, App, HttpServer}; +use axum::body::Body; +use axum::http::StatusCode; +use axum::response::Response; +use axum::{routing::get, Router}; use tracing::*; pub fn create_http_server(addr: String) -> Result, anyhow::Error> { let task = tokio::spawn(async move { - HttpServer::new(move || { - App::new() - .wrap(middleware::Logger::default().exclude("/healthz")) - .service(healthz) - .service(metrics) - }) - .bind(addr) - .unwrap() - .shutdown_timeout(5) - .run() - .await - .unwrap() + let router = Router::new() + .route("/healthz", get(healthz)) + .route("/metrics", get(metrics)); + + let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); + + axum::serve(listener, router).await.unwrap() }); Ok(task) } -#[get("/healthz")] -async fn healthz(_: HttpRequest) -> impl Responder { - HttpResponse::Ok().body("ok") +async fn healthz() -> (StatusCode, &'static str) { + (StatusCode::OK, "ok") } -#[get("/metrics")] -async fn metrics(_: HttpRequest) -> impl Responder { +async fn metrics() -> Response { let encoder = prometheus::TextEncoder::new(); let metric_families = prometheus::gather(); let metric_str = encoder.encode_to_string(&metric_families); match metric_str { - Ok(metric_str) => HttpResponse::Ok() - .content_type("application/json") - .body(metric_str), + Ok(metric_str) => Response::builder() + .status(StatusCode::OK) + .body(Body::from(metric_str)) + .unwrap(), Err(e) => { error!("failed to encode prometheus metrics: {}", e); - HttpResponse::InternalServerError().finish() + Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(Body::from("failed to encode prometheus metrics")) + .unwrap() } } }