@@ -230,7 +230,11 @@ def query(
230
230
return self .query_hook (event , start , end , environment_id )
231
231
232
232
def query_hook (
233
- self , event : GroupEvent , start : datetime , end : datetime , environment_id : int
233
+ self ,
234
+ event : GroupEvent ,
235
+ start : datetime ,
236
+ end : datetime ,
237
+ environment_id : int ,
234
238
) -> int | float :
235
239
"""
236
240
Abstract method that specifies how to query Snuba for a single group
@@ -244,10 +248,15 @@ def batch_query(
244
248
"""
245
249
Queries Snuba for a unique condition for multiple groups.
246
250
"""
247
- return self .batch_query_hook (group_ids , start , end , environment_id )
251
+ return self .batch_query_hook (group_ids , start , end , environment_id , False )
248
252
249
253
def batch_query_hook (
250
- self , group_ids : set [int ], start : datetime , end : datetime , environment_id : int
254
+ self ,
255
+ group_ids : set [int ],
256
+ start : datetime ,
257
+ end : datetime ,
258
+ environment_id : int ,
259
+ group_on_time : bool ,
251
260
) -> dict [int , int | float ]:
252
261
"""
253
262
Abstract method that specifies how to query Snuba for multiple groups
@@ -339,6 +348,7 @@ def get_snuba_query_result(
339
348
end : datetime ,
340
349
environment_id : int ,
341
350
referrer_suffix : str ,
351
+ group_on_time : bool = False ,
342
352
) -> Mapping [int , int ]:
343
353
result : Mapping [int , int ] = tsdb_function (
344
354
model = model ,
@@ -350,6 +360,7 @@ def get_snuba_query_result(
350
360
jitter_value = group_id ,
351
361
tenant_ids = {"organization_id" : organization_id },
352
362
referrer_suffix = referrer_suffix ,
363
+ group_on_time = group_on_time ,
353
364
)
354
365
return result
355
366
@@ -363,6 +374,7 @@ def get_chunked_result(
363
374
end : datetime ,
364
375
environment_id : int ,
365
376
referrer_suffix : str ,
377
+ group_on_time : bool = False ,
366
378
) -> dict [int , int ]:
367
379
batch_totals : dict [int , int ] = defaultdict (int )
368
380
group_id = group_ids [0 ]
@@ -377,6 +389,7 @@ def get_chunked_result(
377
389
end = end ,
378
390
environment_id = environment_id ,
379
391
referrer_suffix = referrer_suffix ,
392
+ group_on_time = group_on_time ,
380
393
)
381
394
batch_totals .update (result )
382
395
return batch_totals
@@ -419,7 +432,11 @@ class EventFrequencyCondition(BaseEventFrequencyCondition):
419
432
label = "The issue is seen more than {value} times in {interval}"
420
433
421
434
def query_hook (
422
- self , event : GroupEvent , start : datetime , end : datetime , environment_id : int
435
+ self ,
436
+ event : GroupEvent ,
437
+ start : datetime ,
438
+ end : datetime ,
439
+ environment_id : int ,
423
440
) -> int :
424
441
sums : Mapping [int , int ] = self .get_snuba_query_result (
425
442
tsdb_function = self .tsdb .get_sums ,
@@ -431,11 +448,17 @@ def query_hook(
431
448
end = end ,
432
449
environment_id = environment_id ,
433
450
referrer_suffix = "alert_event_frequency" ,
451
+ group_on_time = False ,
434
452
)
435
453
return sums [event .group_id ]
436
454
437
455
def batch_query_hook (
438
- self , group_ids : set [int ], start : datetime , end : datetime , environment_id : int
456
+ self ,
457
+ group_ids : set [int ],
458
+ start : datetime ,
459
+ end : datetime ,
460
+ environment_id : int ,
461
+ group_on_time : bool = False ,
439
462
) -> dict [int , int | float ]:
440
463
batch_sums : dict [int , int | float ] = defaultdict (int )
441
464
groups = Group .objects .filter (id__in = group_ids ).values (
@@ -454,6 +477,7 @@ def batch_query_hook(
454
477
end = end ,
455
478
environment_id = environment_id ,
456
479
referrer_suffix = "batch_alert_event_frequency" ,
480
+ group_on_time = group_on_time ,
457
481
)
458
482
batch_sums .update (error_sums )
459
483
@@ -468,6 +492,7 @@ def batch_query_hook(
468
492
end = end ,
469
493
environment_id = environment_id ,
470
494
referrer_suffix = "batch_alert_event_frequency" ,
495
+ group_on_time = group_on_time ,
471
496
)
472
497
batch_sums .update (generic_sums )
473
498
@@ -482,7 +507,11 @@ class EventUniqueUserFrequencyCondition(BaseEventFrequencyCondition):
482
507
label = "The issue is seen by more than {value} users in {interval}"
483
508
484
509
def query_hook (
485
- self , event : GroupEvent , start : datetime , end : datetime , environment_id : int
510
+ self ,
511
+ event : GroupEvent ,
512
+ start : datetime ,
513
+ end : datetime ,
514
+ environment_id : int ,
486
515
) -> int :
487
516
totals : Mapping [int , int ] = self .get_snuba_query_result (
488
517
tsdb_function = self .tsdb .get_distinct_counts_totals ,
@@ -494,11 +523,17 @@ def query_hook(
494
523
end = end ,
495
524
environment_id = environment_id ,
496
525
referrer_suffix = "alert_event_uniq_user_frequency" ,
526
+ group_on_time = False ,
497
527
)
498
528
return totals [event .group_id ]
499
529
500
530
def batch_query_hook (
501
- self , group_ids : set [int ], start : datetime , end : datetime , environment_id : int
531
+ self ,
532
+ group_ids : set [int ],
533
+ start : datetime ,
534
+ end : datetime ,
535
+ environment_id : int ,
536
+ group_on_time : bool = False ,
502
537
) -> dict [int , int | float ]:
503
538
batch_totals : dict [int , int | float ] = defaultdict (int )
504
539
groups = Group .objects .filter (id__in = group_ids ).values (
@@ -517,6 +552,7 @@ def batch_query_hook(
517
552
end = end ,
518
553
environment_id = environment_id ,
519
554
referrer_suffix = "batch_alert_event_uniq_user_frequency" ,
555
+ group_on_time = group_on_time ,
520
556
)
521
557
batch_totals .update (error_totals )
522
558
@@ -531,6 +567,7 @@ def batch_query_hook(
531
567
end = end ,
532
568
environment_id = environment_id ,
533
569
referrer_suffix = "batch_alert_event_uniq_user_frequency" ,
570
+ group_on_time = group_on_time ,
534
571
)
535
572
batch_totals .update (generic_totals )
536
573
@@ -545,7 +582,11 @@ class EventUniqueUserFrequencyConditionWithConditions(EventUniqueUserFrequencyCo
545
582
label = "The issue is seen by more than {value} users in {interval} with conditions"
546
583
547
584
def query_hook (
548
- self , event : GroupEvent , start : datetime , end : datetime , environment_id : int
585
+ self ,
586
+ event : GroupEvent ,
587
+ start : datetime ,
588
+ end : datetime ,
589
+ environment_id : int ,
549
590
) -> int :
550
591
assert self .rule
551
592
if not features .has (
@@ -580,11 +621,17 @@ def query_hook(
580
621
environment_id = environment_id ,
581
622
referrer_suffix = "batch_alert_event_uniq_user_frequency" ,
582
623
conditions = conditions ,
624
+ group_on_time = False ,
583
625
)
584
626
return total [event .group .id ]
585
627
586
628
def batch_query_hook (
587
- self , group_ids : set [int ], start : datetime , end : datetime , environment_id : int
629
+ self ,
630
+ group_ids : set [int ],
631
+ start : datetime ,
632
+ end : datetime ,
633
+ environment_id : int ,
634
+ group_on_time : bool = False ,
588
635
) -> dict [int , int | float ]:
589
636
logger = logging .getLogger (
590
637
"sentry.rules.event_frequency.EventUniqueUserFrequencyConditionWithConditions"
@@ -643,6 +690,7 @@ def batch_query_hook(
643
690
environment_id = environment_id ,
644
691
referrer_suffix = "batch_alert_event_uniq_user_frequency" ,
645
692
conditions = conditions ,
693
+ group_on_time = group_on_time ,
646
694
)
647
695
batch_totals .update (error_totals )
648
696
@@ -657,6 +705,7 @@ def batch_query_hook(
657
705
environment_id = environment_id ,
658
706
referrer_suffix = "batch_alert_event_uniq_user_frequency" ,
659
707
conditions = conditions ,
708
+ group_on_time = group_on_time ,
660
709
)
661
710
batch_totals .update (error_totals )
662
711
@@ -677,6 +726,7 @@ def get_snuba_query_result(
677
726
end : datetime ,
678
727
environment_id : int ,
679
728
referrer_suffix : str ,
729
+ group_on_time : bool = False ,
680
730
conditions : list [tuple [str , str , str | list [str ]]] | None = None ,
681
731
) -> Mapping [int , int ]:
682
732
result : Mapping [int , int ] = tsdb_function (
@@ -690,6 +740,7 @@ def get_snuba_query_result(
690
740
tenant_ids = {"organization_id" : organization_id },
691
741
referrer_suffix = referrer_suffix ,
692
742
conditions = conditions ,
743
+ group_on_time = group_on_time ,
693
744
)
694
745
return result
695
746
@@ -703,6 +754,7 @@ def get_chunked_result(
703
754
end : datetime ,
704
755
environment_id : int ,
705
756
referrer_suffix : str ,
757
+ group_on_time : bool = False ,
706
758
conditions : list [tuple [str , str , str | list [str ]]] | None = None ,
707
759
) -> dict [int , int ]:
708
760
batch_totals : dict [int , int ] = defaultdict (int )
@@ -719,6 +771,7 @@ def get_chunked_result(
719
771
environment_id = environment_id ,
720
772
referrer_suffix = referrer_suffix ,
721
773
conditions = conditions ,
774
+ group_on_time = group_on_time ,
722
775
)
723
776
batch_totals .update (result )
724
777
return batch_totals
@@ -864,7 +917,11 @@ def get_session_interval(self, session_count: int, interval: str) -> int | None:
864
917
return None
865
918
866
919
def query_hook (
867
- self , event : GroupEvent , start : datetime , end : datetime , environment_id : int
920
+ self ,
921
+ event : GroupEvent ,
922
+ start : datetime ,
923
+ end : datetime ,
924
+ environment_id : int ,
868
925
) -> float :
869
926
project_id = event .project_id
870
927
session_count_last_hour = self .get_session_count (project_id , environment_id , start , end )
@@ -882,6 +939,7 @@ def query_hook(
882
939
end = end ,
883
940
environment_id = environment_id ,
884
941
referrer_suffix = "alert_event_frequency_percent" ,
942
+ group_on_time = False ,
885
943
)[event .group_id ]
886
944
887
945
if issue_count > avg_sessions_in_interval :
@@ -900,7 +958,12 @@ def query_hook(
900
958
return 0
901
959
902
960
def batch_query_hook (
903
- self , group_ids : set [int ], start : datetime , end : datetime , environment_id : int
961
+ self ,
962
+ group_ids : set [int ],
963
+ start : datetime ,
964
+ end : datetime ,
965
+ environment_id : int ,
966
+ group_on_time : bool = False ,
904
967
) -> dict [int , int | float ]:
905
968
groups = Group .objects .filter (id__in = group_ids ).values (
906
969
"id" , "type" , "project_id" , "project__organization_id"
@@ -933,6 +996,7 @@ def batch_query_hook(
933
996
end = end ,
934
997
environment_id = environment_id ,
935
998
referrer_suffix = "batch_alert_event_frequency_percent" ,
999
+ group_on_time = group_on_time ,
936
1000
)
937
1001
938
1002
batch_percents : dict [int , int | float ] = {}
0 commit comments