From a0b34e8c49cd367c6066d6aeb34373048e1b2cf8 Mon Sep 17 00:00:00 2001 From: Dmitry Rodionov Date: Tue, 16 May 2023 15:15:29 +0300 Subject: [PATCH] add create tenant metric to storage operations (#4231) Add a metric to track time spent in create tenant requests Originated from https://github.com/neondatabase/neon/pull/4204 --- pageserver/src/http/routes.rs | 7 +++++++ pageserver/src/metrics.rs | 1 + test_runner/regress/test_tenants.py | 10 ++++++++++ 3 files changed, 18 insertions(+) diff --git a/pageserver/src/http/routes.rs b/pageserver/src/http/routes.rs index 91f4fda5eb..361c7850d6 100644 --- a/pageserver/src/http/routes.rs +++ b/pageserver/src/http/routes.rs @@ -19,6 +19,7 @@ use super::models::{ }; use crate::context::{DownloadBehavior, RequestContext}; use crate::disk_usage_eviction_task; +use crate::metrics::STORAGE_TIME_GLOBAL; use crate::pgdatadir_mapping::LsnForTimestamp; use crate::task_mgr::TaskKind; use crate::tenant::config::TenantConfOpt; @@ -708,6 +709,11 @@ pub fn html_response(status: StatusCode, data: String) -> Result, async fn tenant_create_handler(mut request: Request) -> Result, ApiError> { check_permission(&request, None)?; + let _timer = STORAGE_TIME_GLOBAL + .get_metric_with_label_values(&["create tenant"]) + .expect("bug") + .start_timer(); + let ctx = RequestContext::new(TaskKind::MgmtRequest, DownloadBehavior::Warn); let request_data: TenantCreateRequest = json_request(&mut request).await?; @@ -743,6 +749,7 @@ async fn tenant_create_handler(mut request: Request) -> Result = Lazy::new(|| { diff --git a/test_runner/regress/test_tenants.py b/test_runner/regress/test_tenants.py index 8026d7f5c6..5642449ce6 100644 --- a/test_runner/regress/test_tenants.py +++ b/test_runner/regress/test_tenants.py @@ -217,6 +217,16 @@ def test_metrics_normal_work(neon_env_builder: NeonEnvBuilder): labels = ",".join([f'{key}="{value}"' for key, value in sample.labels.items()]) log.info(f"{sample.name}{{{labels}}} {sample.value}") + # Test that we gather tenant create metric + storage_operation_metrics = [ + "pageserver_storage_operations_seconds_global_bucket", + "pageserver_storage_operations_seconds_global_sum", + "pageserver_storage_operations_seconds_global_count", + ] + for metric in storage_operation_metrics: + value = ps_metrics.query_all(metric, filter={"operation": "create tenant"}) + assert value + @pytest.mark.parametrize( "remote_storage_kind",