Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 31 additions & 16 deletions src/sentry/tasks/auto_ongoing_issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@
from datetime import datetime, timedelta, timezone

import sentry_sdk
from django.db.models import Max

from sentry.issues.ongoing import TRANSITION_AFTER_DAYS, bulk_transition_group_to_ongoing
from sentry.models.group import Group, GroupStatus
from sentry.models.grouphistory import GroupHistoryStatus
from sentry.models.grouphistory import GroupHistory, GroupHistoryStatus
from sentry.silo.base import SiloMode
from sentry.tasks.base import instrumented_task
from sentry.taskworker.namespaces import issues_tasks
Expand Down Expand Up @@ -163,14 +162,21 @@ def get_total_count(results):
nonlocal total_count
total_count += len(results)

base_queryset = (
Group.objects.filter(
status=GroupStatus.UNRESOLVED,
substatus=GroupSubStatus.REGRESSED,
grouphistory__status=GroupHistoryStatus.REGRESSED,
date_threshold = datetime.fromtimestamp(date_added_lte, timezone.utc)

regressed_group_ids = (
GroupHistory.objects.filter(
status=GroupHistoryStatus.REGRESSED,
date_added__lte=date_threshold,
)
.annotate(recent_regressed_history=Max("grouphistory__date_added"))
.filter(recent_regressed_history__lte=datetime.fromtimestamp(date_added_lte, timezone.utc))
.values_list("group_id", flat=True)
.distinct()
)

base_queryset = Group.objects.filter(
id__in=regressed_group_ids,
status=GroupStatus.UNRESOLVED,
substatus=GroupSubStatus.REGRESSED,
)

with sentry_sdk.start_span(name="iterate_chunked_group_ids"):
Expand Down Expand Up @@ -244,14 +250,23 @@ def get_total_count(results):
nonlocal total_count
total_count += len(results)

base_queryset = (
Group.objects.filter(
status=GroupStatus.UNRESOLVED,
substatus=GroupSubStatus.ESCALATING,
grouphistory__status=GroupHistoryStatus.ESCALATING,
date_threshold = datetime.fromtimestamp(date_added_lte, timezone.utc)

# Query GroupHistory first to avoid expensive JOIN + MAX aggregation.
# Find groups with ESCALATING history within the date range.
escalating_group_ids = (
GroupHistory.objects.filter(
status=GroupHistoryStatus.ESCALATING,
date_added__lte=date_threshold,
)
.annotate(recent_escalating_history=Max("grouphistory__date_added"))
.filter(recent_escalating_history__lte=datetime.fromtimestamp(date_added_lte, timezone.utc))
.values_list("group_id", flat=True)
.distinct()
)

base_queryset = Group.objects.filter(
id__in=escalating_group_ids,
status=GroupStatus.UNRESOLVED,
substatus=GroupSubStatus.ESCALATING,
)

with sentry_sdk.start_span(name="iterate_chunked_group_ids"):
Expand Down
Loading