@@ -498,13 +498,15 @@ def fire_rules(
498
498
timedelta (seconds = 40 ),
499
499
extra = {"project_id" : project_id },
500
500
) as tracker :
501
+ groups_to_fire = set ().union (* rules_to_fire .values ())
502
+ group_to_groupevent = get_group_to_groupevent (
503
+ parsed_rulegroup_to_event_data , project_id , groups_to_fire
504
+ )
505
+ group_id_to_group = {group .id : group for group in group_to_groupevent .keys ()}
501
506
for rule , group_ids in rules_to_fire .items ():
502
507
with tracker .track (f"rule_{ rule .id } " ):
503
508
frequency = rule .data .get ("frequency" ) or Rule .DEFAULT_FREQUENCY
504
509
freq_offset = now - timedelta (minutes = frequency )
505
- group_to_groupevent = get_group_to_groupevent (
506
- log_config , parsed_rulegroup_to_event_data , project .id , group_ids
507
- )
508
510
if (
509
511
log_config .num_events_issue_debugging
510
512
or log_config .workflow_engine_process_workflows
@@ -521,7 +523,19 @@ def fire_rules(
521
523
"rule_id" : rule .id ,
522
524
},
523
525
)
524
- for group , groupevent in group_to_groupevent .items ():
526
+ for group_id in group_ids :
527
+ group = group_id_to_group .get (group_id )
528
+ if not group :
529
+ logger .info (
530
+ "delayed_processing.group_not_found" ,
531
+ extra = {
532
+ "rule_id" : rule .id ,
533
+ "group_id" : group_id ,
534
+ "project_id" : project_id ,
535
+ },
536
+ )
537
+ continue
538
+
525
539
rule_statuses = bulk_get_rule_status (alert_rules , group , project )
526
540
status = rule_statuses [rule .id ]
527
541
if status .last_active and status .last_active > freq_offset :
0 commit comments