oncall-engine/engine/apps/public_api/views/escalation.py
Matias Bordese a416863a28
Update alert groups public API filters support (#4832)
Related to https://github.com/grafana/oncall/issues/4747

- include labels in response
- allow filtering by labels
- allow filtering by started_at
- update docs
2024-08-15 19:58:25 +00:00

46 lines
1.9 KiB
Python

from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from apps.alerts.paging import DirectPagingAlertGroupResolvedError, DirectPagingUserTeamValidationError, direct_paging
from apps.auth_token.auth import ApiTokenAuthentication
from apps.public_api.serializers import AlertGroupSerializer, EscalationSerializer
from apps.public_api.throttlers import UserThrottle
from common.api_helpers.exceptions import BadRequest
class EscalationView(APIView):
"""
aka "Direct Paging"
"""
authentication_classes = (ApiTokenAuthentication,)
permission_classes = (IsAuthenticated,)
throttle_classes = [UserThrottle]
def post(self, request):
user = request.user
organization = user.organization
serializer = EscalationSerializer(data=request.data, context={"organization": organization, "request": request})
serializer.is_valid(raise_exception=True)
validated_data = serializer.validated_data
try:
alert_group = direct_paging(
organization=organization,
from_user=user,
message=validated_data["message"],
title=validated_data["title"],
source_url=validated_data["source_url"],
team=validated_data["team"],
users=[(user["instance"], user["important"]) for user in validated_data["users"]],
alert_group=validated_data["alert_group"],
)
except DirectPagingAlertGroupResolvedError:
raise BadRequest(detail=DirectPagingAlertGroupResolvedError.DETAIL)
except DirectPagingUserTeamValidationError:
raise BadRequest(detail=DirectPagingUserTeamValidationError.DETAIL)
return Response(AlertGroupSerializer(alert_group).data, status=status.HTTP_200_OK)