2023-01-17 12:19:08 -03:00
|
|
|
from rest_framework import status
|
|
|
|
|
from rest_framework.permissions import IsAuthenticated
|
|
|
|
|
from rest_framework.response import Response
|
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
|
|
2023-07-26 13:25:26 +01:00
|
|
|
from apps.alerts.paging import DirectPagingAlertGroupResolvedError, direct_paging
|
2023-01-17 12:19:08 -03:00
|
|
|
from apps.api.permissions import RBACPermission
|
|
|
|
|
from apps.api.serializers.paging import DirectPagingSerializer
|
|
|
|
|
from apps.auth_token.auth import PluginAuthentication
|
2023-07-26 13:25:26 +01:00
|
|
|
from common.api_helpers.exceptions import BadRequest
|
2023-01-17 12:19:08 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class DirectPagingAPIView(APIView):
|
|
|
|
|
authentication_classes = (PluginAuthentication,)
|
|
|
|
|
permission_classes = (IsAuthenticated, RBACPermission)
|
|
|
|
|
|
|
|
|
|
rbac_permissions = {
|
|
|
|
|
"post": [RBACPermission.Permissions.ALERT_GROUPS_WRITE],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def post(self, request):
|
|
|
|
|
organization = request.auth.organization
|
|
|
|
|
from_user = request.user
|
|
|
|
|
|
2023-03-22 00:57:20 +08:00
|
|
|
serializer = DirectPagingSerializer(
|
|
|
|
|
data=request.data, context={"organization": organization, "request": request}
|
|
|
|
|
)
|
2023-01-17 12:19:08 -03:00
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
|
|
|
|
|
users = [(user["instance"], user["important"]) for user in serializer.validated_data["users"]]
|
|
|
|
|
schedules = [
|
|
|
|
|
(schedule["instance"], schedule["important"]) for schedule in serializer.validated_data["schedules"]
|
|
|
|
|
]
|
2023-07-26 13:25:26 +01:00
|
|
|
try:
|
|
|
|
|
alert_group = direct_paging(
|
|
|
|
|
organization=organization,
|
|
|
|
|
team=serializer.validated_data["team"],
|
|
|
|
|
from_user=from_user,
|
|
|
|
|
title=serializer.validated_data["title"],
|
|
|
|
|
message=serializer.validated_data["message"],
|
|
|
|
|
users=users,
|
|
|
|
|
schedules=schedules,
|
|
|
|
|
escalation_chain=serializer.validated_data["escalation_chain"],
|
|
|
|
|
alert_group=serializer.validated_data["alert_group"],
|
|
|
|
|
)
|
|
|
|
|
except DirectPagingAlertGroupResolvedError:
|
|
|
|
|
raise BadRequest(detail=DirectPagingAlertGroupResolvedError.DETAIL)
|
2023-01-17 12:19:08 -03:00
|
|
|
|
2023-01-30 11:48:25 +00:00
|
|
|
return Response(data={"alert_group_id": alert_group.public_primary_key}, status=status.HTTP_200_OK)
|