Skip to content

Commit 9926d3f

Browse files
cathtengandrewshie-sentry
authored andcommitted
chore(aci): update filters for environments on workflows (#87418)
1 parent 18f8cc5 commit 9926d3f

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

src/sentry/workflow_engine/processors/workflow.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from sentry import buffer, features
99
from sentry.db.models.manager.base_query_set import BaseQuerySet
1010
from sentry.eventstore.models import GroupEvent
11+
from sentry.models.environment import Environment
1112
from sentry.utils import json, metrics
1213
from sentry.workflow_engine.models import (
1314
Action,
@@ -156,6 +157,13 @@ def process_workflows(job: WorkflowJob) -> set[Workflow]:
156157
logger.exception("Detector not found for event", extra={"event_id": job["event"].event_id})
157158
return set()
158159

160+
try:
161+
environment = job["event"].get_environment()
162+
except Environment.DoesNotExist:
163+
metrics.incr("workflow_engine.process_workflows.error")
164+
logger.exception("Missing environment for event", extra={"event_id": job["event"].event_id})
165+
return set()
166+
159167
# TODO: remove fetching org, only used for FF check
160168
organization = detector.project.organization
161169

tests/sentry/workflow_engine/processors/test_workflow.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from sentry import buffer
77
from sentry.eventstream.base import GroupState
88
from sentry.grouping.grouptype import ErrorGroupType
9+
from sentry.models.environment import Environment
910
from sentry.models.rule import Rule
1011
from sentry.testutils.factories import Factories
1112
from sentry.testutils.helpers import with_feature
@@ -118,6 +119,19 @@ def test_error_event__logger(self, mock_logger):
118119
)
119120

120121
def test_same_environment_only(self):
122+
env = self.create_environment(project=self.project)
123+
other_env = self.create_environment(project=self.project)
124+
125+
self.group, self.event, self.group_event = self.create_group_event(environment=env.name)
126+
self.job = WorkflowJob(
127+
{
128+
"event": self.group_event,
129+
"group_state": GroupState(
130+
id=1, is_new=False, is_regression=True, is_new_group_environment=False
131+
),
132+
}
133+
)
134+
121135
# only processes workflows with the same env or no env specified
122136
self.error_workflow.update(environment=None)
123137

@@ -133,13 +147,21 @@ def test_same_environment_only(self):
133147
dcg = self.create_data_condition_group()
134148
matching_env_workflow = self.create_workflow(
135149
when_condition_group=dcg,
136-
environment=self.group_event.get_environment(),
150+
environment=env,
137151
)
138152
self.create_detector_workflow(
139153
detector=self.error_detector,
140154
workflow=matching_env_workflow,
141155
)
142156

157+
mismatched_env_workflow = self.create_workflow(
158+
when_condition_group=dcg, environment=other_env
159+
)
160+
self.create_detector_workflow(
161+
detector=self.error_detector,
162+
workflow=mismatched_env_workflow,
163+
)
164+
143165
triggered_workflows = process_workflows(self.job)
144166
assert triggered_workflows == {self.error_workflow, matching_env_workflow}
145167

@@ -183,6 +205,20 @@ def test_no_detector(self, mock_logger, mock_metrics):
183205
extra={"event_id": self.event.event_id},
184206
)
185207

208+
@patch("sentry.workflow_engine.processors.workflow.metrics")
209+
@patch("sentry.workflow_engine.processors.workflow.logger")
210+
def test_no_environment(self, mock_logger, mock_metrics):
211+
Environment.objects.all().delete()
212+
triggered_workflows = process_workflows(self.job)
213+
214+
assert not triggered_workflows
215+
216+
mock_metrics.incr.assert_called_once_with("workflow_engine.process_workflows.error")
217+
mock_logger.exception.assert_called_once_with(
218+
"Missing environment for event",
219+
extra={"event_id": self.event.event_id},
220+
)
221+
186222
@patch("sentry.utils.metrics.incr")
187223
@patch("sentry.workflow_engine.processors.workflow.logger")
188224
def test_no_metrics_triggered(self, mock_logger, mock_incr):
@@ -244,6 +280,13 @@ def test_workflow_trigger(self):
244280
triggered_workflows = evaluate_workflow_triggers({self.workflow}, self.job)
245281
assert triggered_workflows == {self.workflow}
246282

283+
def test_workflow_trigger__no_conditions(self):
284+
assert self.workflow.when_condition_group
285+
self.workflow.when_condition_group.conditions.all().delete()
286+
287+
triggered_workflows = evaluate_workflow_triggers({self.workflow}, self.job)
288+
assert triggered_workflows == {self.workflow}
289+
247290
def test_no_workflow_trigger(self):
248291
triggered_workflows = evaluate_workflow_triggers(set(), self.job)
249292
assert not triggered_workflows

tests/sentry/workflow_engine/test_base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ def create_group_event(
187187
project: Project | None = None,
188188
event: Event | None = None,
189189
occurrence: IssueOccurrence | None = None,
190+
environment: str | None = None,
190191
fingerprint="test_fingerprint",
191192
group_type_id: int | None = None,
192193
) -> tuple[Group, Event, GroupEvent]:
@@ -195,6 +196,7 @@ def create_group_event(
195196
project.id,
196197
datetime.now(),
197198
fingerprint,
199+
environment,
198200
)
199201

200202
if group_type_id:

0 commit comments

Comments
 (0)