From 3bd7153877084a3618aa189b98438a3f6ef3327b Mon Sep 17 00:00:00 2001 From: Matt Duncan Date: Thu, 17 Oct 2024 11:45:26 -0700 Subject: [PATCH 1/3] chore(issues): Add additional metrics for ownership matching --- src/sentry/models/projectownership.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/sentry/models/projectownership.py b/src/sentry/models/projectownership.py index 456d51ae6c77c5..e7b0d57c89835e 100644 --- a/src/sentry/models/projectownership.py +++ b/src/sentry/models/projectownership.py @@ -371,8 +371,24 @@ def _matching_ownership_rules( ) -> list[Rule]: rules = [] if ownership.schema is not None: + # "projectownership" or "projectcodeowners" + ownership_type = type(ownership).__name__.lower() + munged_data = Matcher.munge_if_needed(data) - for rule in load_schema(ownership.schema): + metrics.gauge( + key="projectownership.matching_ownership_rules.frames", + value=len(munged_data[0]), + tags={"ownership_type": ownership_type}, + ) + + rules = load_schema(ownership.schema) + metrics.gauge( + key="projectownership.matching_ownership_rules.rules", + value=len(rules), + tags={"ownership_type": ownership_type}, + ) + + for rule in rules: if rule.test(data, munged_data): rules.append(rule) From 014582044bb88d3bcdf8472dddb5cd11ddbbf5ff Mon Sep 17 00:00:00 2001 From: Matt Duncan Date: Fri, 18 Oct 2024 10:01:52 -0700 Subject: [PATCH 2/3] chore(issues): Fix infinite loop and simplify _matching_ownership_rules --- src/sentry/models/projectownership.py | 39 +++++++++++++-------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/sentry/models/projectownership.py b/src/sentry/models/projectownership.py index e7b0d57c89835e..152e9de068184f 100644 --- a/src/sentry/models/projectownership.py +++ b/src/sentry/models/projectownership.py @@ -369,30 +369,27 @@ def _matching_ownership_rules( ownership: ProjectOwnership | ProjectCodeOwners, data: Mapping[str, Any], ) -> list[Rule]: - rules = [] - if ownership.schema is not None: - # "projectownership" or "projectcodeowners" - ownership_type = type(ownership).__name__.lower() - - munged_data = Matcher.munge_if_needed(data) - metrics.gauge( - key="projectownership.matching_ownership_rules.frames", - value=len(munged_data[0]), - tags={"ownership_type": ownership_type}, - ) + if ownership.schema is None: + return [] - rules = load_schema(ownership.schema) - metrics.gauge( - key="projectownership.matching_ownership_rules.rules", - value=len(rules), - tags={"ownership_type": ownership_type}, - ) + # "projectownership" or "projectcodeowners" + ownership_type = type(ownership).__name__.lower() + + munged_data = Matcher.munge_if_needed(data) + metrics.gauge( + key="projectownership.matching_ownership_rules.frames", + value=len(munged_data[0]), + tags={"ownership_type": ownership_type}, + ) - for rule in rules: - if rule.test(data, munged_data): - rules.append(rule) + rules = load_schema(ownership.schema) + metrics.gauge( + key="projectownership.matching_ownership_rules.rules", + value=len(rules), + tags={"ownership_type": ownership_type}, + ) - return rules + return [rule for rule in rules if rule.test(data, munged_data)] def process_resource_change(instance, change, **kwargs): From 8347416cdd871c5f6bd1787d7da9347385e1abcd Mon Sep 17 00:00:00 2001 From: Matt Duncan Date: Fri, 18 Oct 2024 12:05:15 -0700 Subject: [PATCH 3/3] fix(issues): gauge -> distribution --- src/sentry/models/projectownership.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sentry/models/projectownership.py b/src/sentry/models/projectownership.py index 152e9de068184f..7a410cbc4f8fdd 100644 --- a/src/sentry/models/projectownership.py +++ b/src/sentry/models/projectownership.py @@ -376,14 +376,14 @@ def _matching_ownership_rules( ownership_type = type(ownership).__name__.lower() munged_data = Matcher.munge_if_needed(data) - metrics.gauge( + metrics.distribution( key="projectownership.matching_ownership_rules.frames", value=len(munged_data[0]), tags={"ownership_type": ownership_type}, ) rules = load_schema(ownership.schema) - metrics.gauge( + metrics.distribution( key="projectownership.matching_ownership_rules.rules", value=len(rules), tags={"ownership_type": ownership_type},