diff options
author | Alex Auvolat <lx@deuxfleurs.fr> | 2025-01-31 17:51:50 +0100 |
---|---|---|
committer | Alex Auvolat <lx@deuxfleurs.fr> | 2025-02-03 18:54:51 +0100 |
commit | 6a1079c4129157ae6c6e2a94b10d9c2b8f91c5b6 (patch) | |
tree | 8eb49504a176eca8c140fe7c569d98e72e38eee3 /src/api/admin/api_server.rs | |
parent | b1629dd355806f40669d5d00db4e8e8f86a3fae2 (diff) | |
download | garage-6a1079c4129157ae6c6e2a94b10d9c2b8f91c5b6.tar.gz garage-6a1079c4129157ae6c6e2a94b10d9c2b8f91c5b6.zip |
admin api: impl RequestHandler for MetricsRequest
Diffstat (limited to 'src/api/admin/api_server.rs')
-rw-r--r-- | src/api/admin/api_server.rs | 36 |
1 files changed, 3 insertions, 33 deletions
diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index e865d199..ecc538e4 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -5,7 +5,7 @@ use argon2::password_hash::PasswordHash; use async_trait::async_trait; use http::header::{HeaderValue, ACCESS_CONTROL_ALLOW_ORIGIN, AUTHORIZATION}; -use hyper::{body::Incoming as IncomingBody, Request, Response, StatusCode}; +use hyper::{body::Incoming as IncomingBody, Request, Response}; use serde::{Deserialize, Serialize}; use tokio::sync::watch; @@ -13,8 +13,6 @@ use opentelemetry::trace::SpanRef; #[cfg(feature = "metrics")] use opentelemetry_prometheus::PrometheusExporter; -#[cfg(feature = "metrics")] -use prometheus::{Encoder, TextEncoder}; use garage_model::garage::Garage; use garage_rpc::{Endpoint as RpcEndpoint, *}; @@ -100,7 +98,7 @@ pub type ResBody = BoxBody<Error>; pub struct AdminApiServer { garage: Arc<Garage>, #[cfg(feature = "metrics")] - exporter: PrometheusExporter, + pub(crate) exporter: PrometheusExporter, metrics_token: Option<String>, admin_token: Option<String>, pub(crate) background: Arc<BackgroundRunner>, @@ -148,34 +146,6 @@ impl AdminApiServer { .run_server(bind_addr, Some(0o220), must_exit) .await } - - fn handle_metrics(&self) -> Result<Response<ResBody>, Error> { - #[cfg(feature = "metrics")] - { - use opentelemetry::trace::Tracer; - - let mut buffer = vec![]; - let encoder = TextEncoder::new(); - - let tracer = opentelemetry::global::tracer("garage"); - let metric_families = tracer.in_span("admin/gather_metrics", |_| { - self.exporter.registry().gather() - }); - - encoder - .encode(&metric_families, &mut buffer) - .ok_or_internal_error("Could not serialize metrics")?; - - Ok(Response::builder() - .status(StatusCode::OK) - .header(http::header::CONTENT_TYPE, encoder.format_type()) - .body(bytes_body(buffer.into()))?) - } - #[cfg(not(feature = "metrics"))] - Err(Error::bad_request( - "Garage was built without the metrics feature".to_string(), - )) - } } #[async_trait] @@ -246,7 +216,7 @@ impl AdminApiServer { AdminApiRequest::Options(req) => req.handle(&self.garage, &self).await, AdminApiRequest::CheckDomain(req) => req.handle(&self.garage, &self).await, AdminApiRequest::Health(req) => req.handle(&self.garage, &self).await, - AdminApiRequest::Metrics(_req) => self.handle_metrics(), + AdminApiRequest::Metrics(req) => req.handle(&self.garage, &self).await, req => { let res = req.handle(&self.garage, &self).await?; let mut res = json_ok_response(&res)?; |