Skip to content

Commit ac5f25e

Browse files
authored
ref(aci): decouple detector from workflowfirehistory in API (#102918)
1 parent 1c8485a commit ac5f25e

File tree

3 files changed

+56
-8
lines changed

3 files changed

+56
-8
lines changed

src/sentry/workflow_engine/endpoints/serializers/workflow_group_history_serializer.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from sentry.api.serializers.models.group import BaseGroupSerializerResponse
1111
from sentry.models.group import Group
1212
from sentry.utils.cursors import Cursor, CursorResult
13-
from sentry.workflow_engine.models import Detector, Workflow, WorkflowFireHistory
13+
from sentry.workflow_engine.models import Detector, DetectorGroup, Workflow, WorkflowFireHistory
1414

1515

1616
@dataclass(frozen=True)
@@ -118,13 +118,22 @@ def fetch_workflow_groups_paginated(
118118

119119
# subquery that retrieves row with the largest date in a group
120120
group_max_dates = filtered_history.filter(group=OuterRef("group")).order_by("-date_added")[:1]
121+
122+
# Subquery to get the detector_id from DetectorGroup.
123+
# The detector does not currently need to be connected to the workflow.
124+
detector_subquery = DetectorGroup.objects.filter(
125+
group=OuterRef("group"),
126+
).values(
127+
"detector_id"
128+
)[:1]
129+
121130
qs = (
122-
filtered_history.select_related("group", "detector")
131+
filtered_history.select_related("group")
123132
.values("group")
124133
.annotate(count=Count("group"))
125134
.annotate(event_id=Subquery(group_max_dates.values("event_id")))
126135
.annotate(last_triggered=Max("date_added"))
127-
.annotate(detector_id=Subquery(group_max_dates.values("detector_id")))
136+
.annotate(detector_id=Subquery(detector_subquery))
128137
)
129138

130139
# Count distinct groups for pagination

tests/sentry/workflow_engine/endpoints/serializers/test_workflow_group_history_serializer.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
WorkflowGroupHistory,
1212
fetch_workflow_groups_paginated,
1313
)
14-
from sentry.workflow_engine.models import Workflow, WorkflowFireHistory
14+
from sentry.workflow_engine.models import DetectorGroup, Workflow, WorkflowFireHistory
1515

1616
pytestmark = [requires_snuba]
1717

@@ -32,6 +32,10 @@ def setUp(self) -> None:
3232
project_id=self.project.id,
3333
type=MetricIssue.slug,
3434
)
35+
DetectorGroup.objects.create(
36+
detector=self.detector_1,
37+
group=self.group,
38+
)
3539
for i in range(3):
3640
self.history.append(
3741
WorkflowFireHistory(
@@ -46,6 +50,10 @@ def setUp(self) -> None:
4650
project_id=self.project.id,
4751
type=MetricIssue.slug,
4852
)
53+
DetectorGroup.objects.create(
54+
detector=self.detector_2,
55+
group=self.group_2,
56+
)
4957
self.history.append(
5058
WorkflowFireHistory(
5159
detector=self.detector_2,
@@ -59,6 +67,10 @@ def setUp(self) -> None:
5967
project_id=self.project.id,
6068
type=MetricIssue.slug,
6169
)
70+
DetectorGroup.objects.create(
71+
detector=self.detector_3,
72+
group=self.group_3,
73+
)
6274
for i in range(2):
6375
self.history.append(
6476
WorkflowFireHistory(

tests/sentry/workflow_engine/endpoints/test_organization_workflow_group_history.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
from uuid import uuid4
22

33
from sentry.api.serializers import serialize
4+
from sentry.grouping.grouptype import ErrorGroupType
5+
from sentry.incidents.grouptype import MetricIssue
46
from sentry.testutils.cases import APITestCase
57
from sentry.testutils.helpers.datetime import before_now, freeze_time
68
from sentry.testutils.skips import requires_snuba
79
from sentry.workflow_engine.endpoints.serializers.workflow_group_history_serializer import (
810
WorkflowGroupHistory,
911
WorkflowGroupHistorySerializer,
1012
)
13+
from sentry.workflow_engine.models import DetectorGroup
1114
from sentry.workflow_engine.models.workflow_fire_history import WorkflowFireHistory
1215

1316
pytestmark = [requires_snuba]
@@ -26,6 +29,14 @@ def setUp(self) -> None:
2629

2730
self.history: list[WorkflowFireHistory] = []
2831
self.workflow = self.create_workflow(organization=self.organization)
32+
self.detector = self.create_detector(
33+
project=self.project,
34+
type=ErrorGroupType.slug,
35+
)
36+
DetectorGroup.objects.create(
37+
detector=self.detector,
38+
group=self.group,
39+
)
2940
for i in range(3):
3041
self.history.append(
3142
WorkflowFireHistory(
@@ -35,6 +46,14 @@ def setUp(self) -> None:
3546
)
3647
)
3748
self.group_2 = self.create_group()
49+
self.detector_2 = self.create_detector(
50+
project=self.project,
51+
type=MetricIssue.slug,
52+
)
53+
DetectorGroup.objects.create(
54+
detector=self.detector_2,
55+
group=self.group_2,
56+
)
3857
self.history.append(
3958
WorkflowFireHistory(
4059
workflow=self.workflow,
@@ -63,14 +82,18 @@ def test_simple(self) -> None:
6382
assert resp.data == serialize(
6483
[
6584
WorkflowGroupHistory(
66-
self.group, 3, self.base_triggered_date, self.history[0].event_id, detector=None
85+
self.group,
86+
3,
87+
self.base_triggered_date,
88+
self.history[0].event_id,
89+
detector=self.detector,
6790
),
6891
WorkflowGroupHistory(
6992
self.group_2,
7093
1,
7194
self.base_triggered_date,
7295
self.history[-1].event_id,
73-
detector=None,
96+
detector=self.detector_2,
7497
),
7598
],
7699
self.user,
@@ -88,7 +111,11 @@ def test_pagination(self) -> None:
88111
assert resp.data == serialize(
89112
[
90113
WorkflowGroupHistory(
91-
self.group, 3, self.base_triggered_date, self.history[0].event_id, detector=None
114+
self.group,
115+
3,
116+
self.base_triggered_date,
117+
self.history[0].event_id,
118+
detector=self.detector,
92119
)
93120
],
94121
self.user,
@@ -111,7 +138,7 @@ def test_pagination(self) -> None:
111138
1,
112139
self.base_triggered_date,
113140
self.history[-1].event_id,
114-
detector=None,
141+
detector=self.detector_2,
115142
)
116143
],
117144
self.user,

0 commit comments

Comments
 (0)