From f42d2a6498649d1e11155caf65e628331a8cfa08 Mon Sep 17 00:00:00 2001 From: "Michael J. Sullivan" Date: Fri, 14 Feb 2025 15:54:20 -0800 Subject: [PATCH] Report the number of times a feature is used as a metric Currently we only report how many branches it is used in total. Also report how many branches have their schemas introspected currently. This is helpful here because we only get feature count info from introspected branches. --- edb/server/compiler/ddl.py | 4 ++-- edb/server/dbview/dbview.pyx | 19 +++++++++++++++++-- edb/server/metrics.py | 13 ++++++++++++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/edb/server/compiler/ddl.py b/edb/server/compiler/ddl.py index 8c99d2d828a..e9d0924a029 100644 --- a/edb/server/compiler/ddl.py +++ b/edb/server/compiler/ddl.py @@ -1247,7 +1247,7 @@ def produce_feature_used_metrics( features: dict[str, float] = {} def _track(key: str) -> None: - features[key] = 1 + features[key] = features.get(key, 0) + 1 # TODO(perf): Should we optimize peeking into the innards directly # so we can skip creating the proxies? @@ -1408,7 +1408,7 @@ def administer_repair_schema( user_schema=current_tx.get_user_schema_if_updated(), global_schema=current_tx.get_global_schema_if_updated(), config_ops=config_ops, - feature_used_metrics={}, + feature_used_metrics=None, ) diff --git a/edb/server/dbview/dbview.pyx b/edb/server/dbview/dbview.pyx index 49574d6dced..7ee48274392 100644 --- a/edb/server/dbview/dbview.pyx +++ b/edb/server/dbview/dbview.pyx @@ -359,12 +359,20 @@ cdef class Database: tname = self.tenant.get_instance_name() keys = self._feature_used_metrics.keys() | feature_used_metrics.keys() for key in keys: + # Update the count of how many times the feature is used metrics.feature_used.inc( feature_used_metrics.get(key, 0.0) - self._feature_used_metrics.get(key, 0.0), tname, key, ) + # Update the count of branches using the feature at all + metrics.feature_used_branches.inc( + (feature_used_metrics.get(key, 0.0) > 0) + - (self._feature_used_metrics.get(key, 0.0) > 0), + tname, + key, + ) self._feature_used_metrics = feature_used_metrics @@ -1873,9 +1881,16 @@ cdef class DatabaseIndex: cdef inline set_current_branches(self): metrics.current_branches.set( sum( - 1 + dbname != defines.EDGEDB_SYSTEM_DB for dbname in self._dbs - if dbname != defines.EDGEDB_SYSTEM_DB + ), + self._tenant.get_instance_name(), + ) + metrics.current_introspected_branches.set( + sum( + dbname != defines.EDGEDB_SYSTEM_DB + and db.user_schema_pickle is not None + for dbname, db in self._dbs.items() ), self._tenant.get_instance_name(), ) diff --git a/edb/server/metrics.py b/edb/server/metrics.py index c76b62378e3..47a1c0b1cc8 100644 --- a/edb/server/metrics.py +++ b/edb/server/metrics.py @@ -47,6 +47,12 @@ labels=('tenant',), ) +current_introspected_branches = registry.new_labeled_gauge( + 'branches_introspected_current', + 'Current number of branches whose schemas are introspected.', + labels=('tenant',), +) + total_backend_connections = registry.new_labeled_counter( 'backend_connections_total', 'Total number of backend connections established.', @@ -211,11 +217,16 @@ labels=('tenant', 'extension'), ) -feature_used = registry.new_labeled_gauge( +feature_used_branches = registry.new_labeled_gauge( 'feature_used_branch_count_current', 'How many branches a schema feature is used by.', labels=('tenant', 'feature'), ) +feature_used = registry.new_labeled_gauge( + 'feature_used_num_count_current', + 'How many branches a schema feature is used by.', + labels=('tenant', 'feature'), +) auth_successful_logins = registry.new_labeled_counter( "auth_successful_logins_total",