Rework schedule escalation chains/policies count as a subquery
This commit is contained in:
parent
5d20c60895
commit
e4a7a5a23d
2 changed files with 10 additions and 6 deletions
|
|
@ -76,7 +76,8 @@ class ScheduleBaseSerializer(EagerLoadingMixin, serializers.ModelSerializer):
|
|||
def get_number_of_escalation_chains(self, obj):
|
||||
# num_escalation_chains param added in queryset via annotate. Check ScheduleView.get_queryset
|
||||
# return 0 for just created schedules
|
||||
return getattr(obj, "num_escalation_chains", 0)
|
||||
num = getattr(obj, "num_escalation_chains", 0)
|
||||
return num if num is not None else 0
|
||||
|
||||
def validate(self, attrs):
|
||||
if "slack_channel_id" in attrs:
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ from rest_framework.permissions import IsAuthenticated
|
|||
from rest_framework.views import Response
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
|
||||
from apps.alerts.models import EscalationChain
|
||||
from apps.alerts.models import EscalationChain, EscalationPolicy
|
||||
from apps.api.permissions import MODIFY_ACTIONS, READ_ACTIONS, ActionPermission, AnyRole, IsAdmin, IsAdminOrEditor
|
||||
from apps.api.serializers.schedule_base import ScheduleFastSerializer
|
||||
from apps.api.serializers.schedule_polymorphic import (
|
||||
|
|
@ -108,13 +108,16 @@ class ScheduleView(
|
|||
slack_team_identity=organization.slack_team_identity,
|
||||
slack_id=OuterRef("channel"),
|
||||
)
|
||||
escalation_policies = (
|
||||
EscalationPolicy.objects.values("notify_schedule")
|
||||
.order_by("notify_schedule")
|
||||
.annotate(num_escalation_chains=Count("notify_schedule"))
|
||||
.filter(notify_schedule=OuterRef("id"))
|
||||
)
|
||||
queryset = queryset.annotate(
|
||||
slack_channel_name=Subquery(slack_channels.values("name")[:1]),
|
||||
slack_channel_pk=Subquery(slack_channels.values("public_primary_key")[:1]),
|
||||
num_escalation_chains=Count(
|
||||
"escalation_policies__escalation_chain",
|
||||
distinct=True,
|
||||
),
|
||||
num_escalation_chains=Subquery(escalation_policies.values("num_escalation_chains")[:1]),
|
||||
)
|
||||
return queryset
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue