feat: 完善变更服务器时间的接口
This commit is contained in:
parent
0f0b055101
commit
1a1f64f9fe
|
@ -35,4 +35,9 @@ class SpeakerSerializer(serializers.Serializer):
|
|||
|
||||
|
||||
class AreaManSerializer(serializers.Serializer):
|
||||
area = serializers.CharField()
|
||||
area = serializers.CharField()
|
||||
|
||||
|
||||
class ServerTimeSerializer(serializers.Serializer):
|
||||
server_time = serializers.DateTimeField()
|
||||
timezone = serializers.CharField(read_only=True)
|
|
@ -1,6 +1,6 @@
|
|||
from django.urls import path, include
|
||||
from apps.develop.views import (BackupDatabase, BackupMedia, ReloadClientGit,
|
||||
ReloadServerGit, ReloadServerOnly, TestViewSet, CorrectViewSet, testScanHtml, ChangeServerDate)
|
||||
ReloadServerGit, ReloadServerOnly, TestViewSet, CorrectViewSet, testScanHtml, ServerTime)
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
API_BASE_URL = 'api/develop/'
|
||||
|
@ -15,7 +15,7 @@ urlpatterns = [
|
|||
path(API_BASE_URL + 'reload_server_only/', ReloadServerOnly.as_view()),
|
||||
path(API_BASE_URL + 'backup_database/', BackupDatabase.as_view()),
|
||||
path(API_BASE_URL + 'backup_media/', BackupMedia.as_view()),
|
||||
path(API_BASE_URL + 'change_server_date/', ChangeServerDate.as_view()),
|
||||
path(API_BASE_URL + 'server_time/', ServerTime.as_view()),
|
||||
path(API_BASE_URL, include(router.urls)),
|
||||
path(HTML_BASE_URL + "testscan/", testScanHtml)
|
||||
]
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.exceptions import ParseError
|
||||
from rest_framework.permissions import IsAdminUser
|
||||
from rest_framework.permissions import IsAdminUser, AllowAny
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.serializers import Serializer
|
||||
from rest_framework.decorators import action
|
||||
from apps.am.models import Area
|
||||
from apps.am.tasks import cache_areas_info
|
||||
from apps.develop.serializers import AreaManSerializer, CleanDataSerializer, GenerateVoiceSerializer, SendSmsSerializer, SpeakerSerializer, \
|
||||
TestTaskSerializer, TestAlgoSerializer
|
||||
TestTaskSerializer, TestAlgoSerializer, ServerTimeSerializer
|
||||
from apps.develop.tasks import backup_database, backup_media, reload_web_git, reload_server_git, reload_server_only
|
||||
from rest_framework.exceptions import APIException
|
||||
from apps.ecm.service import check_not_in_place, create_remind, handle_xx_event, loc_change, notify_event, rail_in, snap_and_analyse
|
||||
|
@ -33,25 +33,42 @@ from django.db import transaction
|
|||
from django.core.cache import cache
|
||||
from apps.utils.decorators import auto_log
|
||||
from django.http import HttpResponse
|
||||
from server.settings import SD_PWD
|
||||
from server.settings import SD_PWD, TIME_ZONE
|
||||
import subprocess
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
from datetime import datetime
|
||||
# Create your views here.
|
||||
|
||||
class ChangeServerDate(APIView):
|
||||
permission_classes = [IsAdminUser]
|
||||
class ServerTime(APIView):
|
||||
|
||||
@swagger_auto_schema(request_body=Serializer)
|
||||
def get_permissions(self):
|
||||
if self.request.method == 'GET':
|
||||
return [AllowAny()]
|
||||
return [IsAdminUser()]
|
||||
|
||||
@swagger_auto_schema(responses={200: ServerTimeSerializer})
|
||||
def get(self, request):
|
||||
"""
|
||||
获取服务器时间
|
||||
|
||||
获取服务器时间
|
||||
"""
|
||||
return Response({"server_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "timezone": TIME_ZONE})
|
||||
|
||||
@swagger_auto_schema(request_body=ServerTimeSerializer)
|
||||
def post(self, request):
|
||||
"""
|
||||
修改服务器时间
|
||||
|
||||
修改服务器时间
|
||||
"""
|
||||
command = 'echo "{}" | sudo -s date "{}"'.format(
|
||||
SD_PWD, request.data["date"]
|
||||
command = f'date -s "{request.data["new_server_time"]}"'
|
||||
completed = subprocess.run(
|
||||
["sudo", "sh", "-c", command], # 避免 shell=True 的安全风险
|
||||
input=SD_PWD, # 密码从安全配置读取
|
||||
capture_output=True,
|
||||
text=True
|
||||
)
|
||||
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||
if completed.returncode != 0:
|
||||
raise ParseError(completed.stderr)
|
||||
return Response()
|
||||
|
|
Loading…
Reference in New Issue