Skip to content

Commit c500add

Browse files
authored
feat(grouping): Add grouping optimization tags to metrics in save_error_events (#67163)
This adds tags tracking whether a project is in a grouping config transition and whether the org is using the optimized transition logic to the `metric_tags` used in `EventManager.save_error_events`. In support of that, it also: - Renames `_is_in_transition` to remove the leading underscore, since it's no longer internal to `ingest.py`. - Adds an `in_grouping_transition` property to `job` (the event container which gets passed around during ingest), so we have access to that information anywhere in `event_manager`.
1 parent 54c196a commit c500add

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

src/sentry/event_manager.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
find_existing_grouphash,
6060
find_existing_grouphash_new,
6161
get_hash_values,
62+
is_in_transition,
6263
maybe_run_background_grouping,
6364
maybe_run_secondary_grouping,
6465
project_uses_optimized_grouping,
@@ -467,9 +468,12 @@ def save(
467468
else:
468469
project = job["event"].project
469470
job["optimized_grouping"] = project_uses_optimized_grouping(project)
471+
job["in_grouping_transition"] = is_in_transition(project)
470472
metric_tags = {
471473
"platform": job["event"].platform or "unknown",
472474
"sdk": normalized_sdk_tag_from_event(job["event"]),
475+
"using_transition_optimization": job["optimized_grouping"],
476+
"in_transition": job["in_grouping_transition"],
473477
}
474478
# This metric allows differentiating from all calls to the `event_manager.save` metric
475479
# and adds support for differentiating based on platforms

src/sentry/grouping/ingest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ def _calculate_background_grouping(
186186
return _calculate_event_grouping(project, event, config)
187187

188188

189-
def _is_in_transition(project: Project) -> bool:
189+
def is_in_transition(project: Project) -> bool:
190190
secondary_grouping_config = project.get_option("sentry:secondary_grouping_config")
191191
secondary_grouping_expiry = project.get_option("sentry:secondary_grouping_expiry")
192192

@@ -204,7 +204,7 @@ def maybe_run_secondary_grouping(
204204
secondary_grouping_config = NULL_GROUPING_CONFIG
205205
secondary_hashes = NULL_HASHES
206206

207-
if _is_in_transition(project):
207+
if is_in_transition(project):
208208
with metrics.timer("event_manager.secondary_grouping", tags=metric_tags):
209209
secondary_grouping_config = SecondaryGroupingConfigLoader().get_config_dict(project)
210210
secondary_hashes = _calculate_secondary_hash(project, job, secondary_grouping_config)
@@ -496,7 +496,7 @@ def record_calculation_metric_with_result(
496496
# Track the total number of grouping calculations done overall, so we can divide by the
497497
# count to get an average number of calculations per event
498498
tags = {
499-
"in_transition": str(_is_in_transition(project)),
499+
"in_transition": str(is_in_transition(project)),
500500
"using_transition_optimization": str(
501501
features.has(
502502
"organizations:grouping-suppress-unnecessary-secondary-hash",

tests/sentry/event_manager/test_event_manager_grouping.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def test_adds_correct_tags_to_avg_calculations_per_event_metrics(
201201
)
202202

203203
@mock.patch("sentry.event_manager.metrics.incr")
204-
@mock.patch("sentry.grouping.ingest._is_in_transition", return_value=True)
204+
@mock.patch("sentry.grouping.ingest.is_in_transition", return_value=True)
205205
def test_records_hash_comparison(self, _, mock_metrics_incr: MagicMock):
206206
project = self.project
207207
project.update_option("sentry:grouping_config", NEWSTYLE_CONFIG)

0 commit comments

Comments
 (0)