@@ -498,30 +498,40 @@ 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
+ log_config , parsed_rulegroup_to_event_data , project_id , groups_to_fire
504
+ )
505
+ if log_config .num_events_issue_debugging or log_config .workflow_engine_process_workflows :
506
+ serialized_groups = {
507
+ group .id : group_event .event_id for group , group_event in group_to_groupevent .items ()
508
+ }
509
+ logger .info (
510
+ "delayed_processing.group_to_groupevent" ,
511
+ extra = {
512
+ "group_to_groupevent" : serialized_groups ,
513
+ "project_id" : project_id ,
514
+ },
515
+ )
516
+ group_id_to_group = {group .id : group for group in group_to_groupevent .keys ()}
501
517
for rule , group_ids in rules_to_fire .items ():
502
518
with tracker .track (f"rule_{ rule .id } " ):
503
519
frequency = rule .data .get ("frequency" ) or Rule .DEFAULT_FREQUENCY
504
520
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
- if (
509
- log_config .num_events_issue_debugging
510
- or log_config .workflow_engine_process_workflows
511
- ):
512
- serialized_groups = {
513
- group .id : group_event .event_id
514
- for group , group_event in group_to_groupevent .items ()
515
- }
516
- logger .info (
517
- "delayed_processing.group_to_groupevent" ,
518
- extra = {
519
- "group_to_groupevent" : serialized_groups ,
520
- "project_id" : project_id ,
521
- "rule_id" : rule .id ,
522
- },
523
- )
524
- for group , groupevent in group_to_groupevent .items ():
521
+ for group_id in group_ids :
522
+ group = group_id_to_group .get (group_id )
523
+ if not group :
524
+ # we need to fire the rule for this group, but we don't have the group
525
+ logger .error (
526
+ "delayed_processing.missing_group_to_fire" ,
527
+ extra = {
528
+ "rule_id" : rule .id ,
529
+ "group_id" : group_id ,
530
+ "project_id" : project_id ,
531
+ },
532
+ )
533
+ continue
534
+
525
535
rule_statuses = bulk_get_rule_status (alert_rules , group , project )
526
536
status = rule_statuses [rule .id ]
527
537
if status .last_active and status .last_active > freq_offset :
0 commit comments