oncall-engine/engine/apps/api/views/alert_group_table_settings.py
Rares Mardare 455f74560c
Alert group column/label selector (#3281)
# What this PR does

Adds new functionality to enable which columns should show on the alert
group page


![image](https://github.com/grafana/oncall/assets/40542072/952d4004-9cd6-478c-a104-cd5d270cfd58)

---------

Co-authored-by: Julia <ferril.darkdiver@gmail.com>
2023-11-29 12:11:31 +00:00

55 lines
2.6 KiB
Python

import typing
from rest_framework.permissions import IsAuthenticated
from rest_framework.request import Request
from rest_framework.response import Response
from apps.api.alert_group_table_columns import alert_group_table_user_settings
from apps.api.permissions import RBACPermission
from apps.api.serializers.alert_group_table_settings import (
AlertGroupTableColumnsOrganizationSerializer,
AlertGroupTableColumnsUserSerializer,
)
from apps.api.views.labels import LabelsFeatureFlagViewSet
from apps.auth_token.auth import PluginAuthentication
from apps.user_management.constants import AlertGroupTableColumn, default_columns
class AlertGroupTableColumnsViewSet(LabelsFeatureFlagViewSet):
authentication_classes = (PluginAuthentication,)
permission_classes = (IsAuthenticated, RBACPermission)
rbac_permissions = {
"get_columns": [RBACPermission.Permissions.ALERT_GROUPS_READ],
"update_user_columns": [RBACPermission.Permissions.ALERT_GROUPS_READ],
"reset_user_columns": [RBACPermission.Permissions.ALERT_GROUPS_READ],
"update_organization_columns": [RBACPermission.Permissions.OTHER_SETTINGS_WRITE],
}
def get_columns(self, request: Request) -> Response:
return Response(alert_group_table_user_settings(request.user))
def update_organization_columns(self, request: Request) -> Response:
"""add/remove columns for organization"""
serializer = AlertGroupTableColumnsOrganizationSerializer(data=request.data, context={"request": request})
serializer.is_valid(raise_exception=True)
columns: typing.List[AlertGroupTableColumn] = serializer.validated_data.get(
"visible", []
) + serializer.validated_data.get("hidden", [])
request.auth.organization.update_alert_group_table_columns(columns)
return Response(alert_group_table_user_settings(request.user))
def update_user_columns(self, request: Request) -> Response:
"""select/hide/change order for user"""
user = request.user
serializer = AlertGroupTableColumnsUserSerializer(data=request.data, context={"request": request})
serializer.is_valid(raise_exception=True)
columns: typing.List[AlertGroupTableColumn] = serializer.validated_data.get("visible", [])
user.update_alert_group_table_selected_columns(columns)
return Response(alert_group_table_user_settings(user))
def reset_user_columns(self, request: Request) -> Response:
"""set default alert group table settings for user"""
user = request.user
user.update_alert_group_table_selected_columns(default_columns())
return Response(alert_group_table_user_settings(user))