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",