diff --git a/misc/server/src/http_service.rs b/misc/server/src/http_service.rs index 8b5779f3..1f5ebaff 100644 --- a/misc/server/src/http_service.rs +++ b/misc/server/src/http_service.rs @@ -21,7 +21,7 @@ use hyper::http::StatusCode; use hyper::service::Service; use hyper::{Body, Method, Request, Response, Server}; -use log::{error, info}; +use log::info; use prometheus_client::encoding::text::encode; use prometheus_client::registry::Registry; use std::future::Future; @@ -30,31 +30,22 @@ use std::sync::{Arc, Mutex}; use std::task::{Context, Poll}; const METRICS_CONTENT_TYPE: &str = "application/openmetrics-text;charset=utf-8;version=1.0.0"; - pub(crate) async fn metrics_server( registry: Registry, metrics_path: String, -) -> Result<(), std::io::Error> { +) -> Result<(), hyper::Error> { // Serve on localhost. let addr = ([0, 0, 0, 0], 8888).into(); - // Use the tokio runtime to run the hyper server. - let rt = tokio::runtime::Runtime::new()?; - rt.block_on(async { - let server = - Server::bind(&addr).serve(MakeMetricService::new(registry, metrics_path.clone())); - info!( - "Metrics server on http://{}{}", - server.local_addr(), - metrics_path - ); - if let Err(e) = server.await { - error!("server error: {}", e); - } - Ok(()) - }) + let server = Server::bind(&addr).serve(MakeMetricService::new(registry, metrics_path.clone())); + info!( + "Metrics server on http://{}{}", + server.local_addr(), + metrics_path + ); + server.await?; + Ok(()) } - pub(crate) struct MetricService { reg: Arc>, metrics_path: String, diff --git a/misc/server/src/main.rs b/misc/server/src/main.rs index f6103f1a..26737085 100644 --- a/misc/server/src/main.rs +++ b/misc/server/src/main.rs @@ -1,6 +1,5 @@ use base64::Engine; use clap::Parser; -use futures::executor::block_on; use futures::future::Either; use futures::stream::StreamExt; use futures_timer::Delay; @@ -26,7 +25,6 @@ use std::io; use std::path::PathBuf; use std::str::FromStr; use std::task::Poll; -use std::thread; use std::time::Duration; use zeroize::Zeroizing; @@ -141,11 +139,10 @@ async fn main() -> Result<(), Box> { "A metric with a constant '1' value labeled by version", build_info, ); - thread::spawn(move || { - block_on(http_service::metrics_server( - metric_registry, - opt.metrics_path, - )) + tokio::spawn(async move { + if let Err(e) = http_service::metrics_server(metric_registry, opt.metrics_path).await { + log::error!("Metrics server failed: {e}"); + } }); let mut bootstrap_timer = Delay::new(BOOTSTRAP_INTERVAL);