diff --git a/apps/ops/serializers.py b/apps/ops/serializers.py index cc9bf9f..cd7712a 100644 --- a/apps/ops/serializers.py +++ b/apps/ops/serializers.py @@ -29,3 +29,7 @@ class TextListSerializer(serializers.Serializer): name = serializers.CharField() filepath = serializers.CharField() size = serializers.CharField(label="MB") + +class CacheUpdateSerializer(serializers.Serializer): + value = serializers.JSONField() + timeout = serializers.IntegerField() diff --git a/apps/ops/views.py b/apps/ops/views.py index 093672e..20d4aa1 100644 --- a/apps/ops/views.py +++ b/apps/ops/views.py @@ -5,7 +5,7 @@ from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from django.conf import settings import os -from apps.ops.serializers import DbbackupDeleteSerializer, MemDiskSerializer, CpuSerializer, DrfRequestLogSerializer, TlogSerializer, TextListSerializer +from apps.ops.serializers import DbbackupDeleteSerializer, MemDiskSerializer, CpuSerializer, DrfRequestLogSerializer, TlogSerializer, TextListSerializer, CacheUpdateSerializer from rest_framework.exceptions import NotFound from rest_framework.mixins import ListModelMixin from apps.ops.filters import DrfLogFilterSet, TlogFilterSet @@ -20,6 +20,7 @@ from drf_yasg.utils import swagger_auto_schema from apps.ops.service import ServerService, CeleryMonitor, RedisMonitor from server.settings import BACKUP_PATH from django.core.cache import cache +from rest_framework.serializers import Serializer # Create your views here. @@ -233,14 +234,20 @@ class DbBackupView(APIView): class CacheView(APIView): permission_classes = [IsAdminUser] - @swagger_auto_schema(operation_summary="获取value", responses={204: None}) + @swagger_auto_schema(operation_summary="获取value", responses={200: Serializer}) def get(self, request, key): - return Response({"value": cache.get(key, None)}) + try: + value = cache.get(key) + except Exception as e: + raise NotFound(str(e)) + return Response({"value": value}) - @swagger_auto_schema(operation_summary="修改value", responses={204: None}) + @swagger_auto_schema(operation_summary="修改value", responses={200: None}, request_body=CacheUpdateSerializer) def post(self, request, key): - if "value" in request.data and request.data["value"] is not None: - cache.set(key, request.data.get("value")) + sr = CacheUpdateSerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + cache.set(key, vdata['value'], timeout=vdata["timeout"]) return Response() class DrfRequestLogViewSet(ListModelMixin, CustomGenericViewSet):