104 lines
3.3 KiB
Python
104 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
@Remark: 操作日志管理
|
|
"""
|
|
import os
|
|
from mysystem.models import OperationLog
|
|
from utils.serializers import CustomModelSerializer
|
|
from utils.viewset import CustomModelViewSet
|
|
from utils.jsonResponse import SuccessResponse, ErrorResponse,DetailResponse
|
|
from utils.filters import OperationLogTimeFilter
|
|
from utils.server.system import system
|
|
from application.settings import BASE_DIR
|
|
from utils.common import get_parameter_dic,ast_convert
|
|
from rest_framework import serializers
|
|
|
|
|
|
class OperationLogSerializer(CustomModelSerializer):
|
|
"""
|
|
操作日志-序列化器
|
|
"""
|
|
creator_name = serializers.SerializerMethodField()
|
|
request_body = serializers.SerializerMethodField()
|
|
json_result = serializers.SerializerMethodField()
|
|
|
|
def get_creator_name(self,obj):
|
|
try:
|
|
if obj.creator_id:
|
|
return obj.creator.name
|
|
return ""
|
|
except:
|
|
return ""
|
|
|
|
def get_request_body(self,obj):
|
|
return ast_convert(obj.request_body)
|
|
|
|
def get_json_result(self,obj):
|
|
return ast_convert(obj.json_result)
|
|
|
|
class Meta:
|
|
model = OperationLog
|
|
fields = "__all__"
|
|
read_only_fields = ["id"]
|
|
|
|
|
|
class OperationLogCreateUpdateSerializer(CustomModelSerializer):
|
|
"""
|
|
操作日志 创建/更新时的列化器
|
|
"""
|
|
|
|
class Meta:
|
|
model = OperationLog
|
|
fields = '__all__'
|
|
|
|
|
|
class OperationLogViewSet(CustomModelViewSet):
|
|
"""
|
|
操作日志接口
|
|
list:查询
|
|
create:新增
|
|
update:修改
|
|
retrieve:单例
|
|
destroy:删除
|
|
"""
|
|
queryset = OperationLog.objects.all().order_by('-create_datetime')
|
|
serializer_class = OperationLogSerializer
|
|
# filterset_fields = '__all__'
|
|
filterset_class = OperationLogTimeFilter
|
|
search_fields = ('request_modular','request_path','request_ip','request_os','request_body')
|
|
|
|
def getOwnerLogs(self, request, *args, **kwargs):
|
|
user = request.user
|
|
queryset = self.filter_queryset(self.get_queryset())
|
|
queryset = queryset.filter(creator=user)
|
|
page = self.paginate_queryset(queryset)
|
|
if page is not None:
|
|
serializer = self.get_serializer(page, many=True, request=request)
|
|
return self.get_paginated_response(serializer.data)
|
|
serializer = self.get_serializer(queryset, many=True, request=request)
|
|
return SuccessResponse(data=serializer.data, msg="获取成功")
|
|
|
|
def deletealllogs(self,request):
|
|
user = request.user
|
|
if user.is_superuser:
|
|
OperationLog.objects.all().delete()
|
|
return SuccessResponse(msg="清空成功")
|
|
return ErrorResponse(msg="您没有权限执行此操作,需要超级管理员权限")
|
|
|
|
def system_logs(self,request):
|
|
"""
|
|
取系统日志
|
|
"""
|
|
type = int(get_parameter_dic(request).get('type',0))
|
|
if type not in [1,2]:
|
|
return ErrorResponse(msg="type error")
|
|
log_path = os.path.join(BASE_DIR,'logs','error.log')
|
|
if type == 1:
|
|
log_path = os.path.join(BASE_DIR,'logs','error.log')
|
|
elif type == 2:
|
|
log_path = os.path.join(BASE_DIR,'logs','server.log')
|
|
num = 1000
|
|
data = system.GetFileLastNumsLines(log_path,num)
|
|
return DetailResponse(data=data,msg="success")
|