4
4
5
5
import sentry_sdk
6
6
from django .db import router , transaction
7
- from django .db .models import Q
7
+ from django .db .models import Prefetch , Q
8
8
9
9
from sentry import buffer , features
10
10
from sentry .db .models .manager .base_query_set import BaseQuerySet
17
17
DataConditionGroup ,
18
18
Detector ,
19
19
Workflow ,
20
+ WorkflowDataConditionGroup ,
20
21
)
21
22
from sentry .workflow_engine .processors .action import filter_recently_fired_workflow_actions
22
23
from sentry .workflow_engine .processors .data_condition_group import process_data_condition_group
@@ -94,7 +95,7 @@ def enqueue_workflow(
94
95
95
96
96
97
def evaluate_workflow_triggers (
97
- workflows : set [Workflow ], event_data : WorkflowEventData
98
+ workflows : BaseQuerySet [Workflow ], event_data : WorkflowEventData
98
99
) -> set [Workflow ]:
99
100
triggered_workflows : set [Workflow ] = set ()
100
101
@@ -121,9 +122,10 @@ def evaluate_workflows_action_filters(
121
122
) -> BaseQuerySet [Action ]:
122
123
filtered_action_groups : set [DataConditionGroup ] = set ()
123
124
125
+ environment_query = WorkflowDataConditionGroup .objects .select_related ("workflow__environment" )
124
126
action_conditions = (
125
127
DataConditionGroup .objects .filter (workflowdataconditiongroup__workflow__in = workflows )
126
- .prefetch_related ("workflowdataconditiongroup_set" )
128
+ .prefetch_related (Prefetch ( "workflowdataconditiongroup_set" , queryset = environment_query ) )
127
129
.distinct ()
128
130
)
129
131
@@ -219,12 +221,15 @@ def process_workflows(event_data: WorkflowEventData) -> set[Workflow]:
219
221
organization = detector .project .organization
220
222
221
223
# Get the workflows, evaluate the when_condition_group, finally evaluate the actions for workflows that are triggered
222
- workflows = set (
224
+ workflows = (
223
225
Workflow .objects .filter (
224
226
(Q (environment_id = None ) | Q (environment_id = environment .id )),
225
227
detectorworkflow__detector_id = detector .id ,
226
228
enabled = True ,
227
- ).distinct ()
229
+ )
230
+ .select_related ("when_condition_group" )
231
+ .prefetch_related ("when_condition_group__conditions" )
232
+ .distinct ()
228
233
)
229
234
230
235
if workflows :
0 commit comments