95 lines
3.4 KiB
Python
95 lines
3.4 KiB
Python
from django.shortcuts import render
|
||
import psutil
|
||
from rest_framework import response
|
||
from rest_framework.response import Response
|
||
from rest_framework.views import APIView
|
||
from rest_framework.permissions import IsAuthenticated
|
||
from rest_framework.viewsets import ViewSet
|
||
from django.conf import settings
|
||
import os
|
||
from rest_framework import serializers, status
|
||
from drf_yasg import openapi
|
||
from drf_yasg.utils import swagger_auto_schema
|
||
# Create your views here.
|
||
|
||
class ServerInfoView(APIView):
|
||
"""
|
||
获取服务器状态信息
|
||
"""
|
||
permission_classes = [IsAuthenticated]
|
||
def get(self, request, *args, **kwargs):
|
||
ret={'cpu':{}, 'memory':{}, 'disk':{}}
|
||
ret['cpu']['count'] = psutil.cpu_count()
|
||
ret['cpu']['lcount'] = psutil.cpu_count(logical=False)
|
||
ret['cpu']['percent'] = psutil.cpu_percent(interval=1)
|
||
memory = psutil.virtual_memory()
|
||
ret['memory']['total'] = round(memory.total/1024/1024/1024,2)
|
||
ret['memory']['used'] = round(memory.used/1024/1024/1024,2)
|
||
ret['memory']['percent'] = memory.percent
|
||
disk = psutil.disk_usage('/')
|
||
ret['disk']['total'] = round(disk.total/1024/1024/1024,2)
|
||
ret['disk']['used'] = round(disk.used/1024/1024/1024,2)
|
||
ret['disk']['percent'] = disk.percent
|
||
return Response(ret)
|
||
|
||
def get_file_list(file_path):
|
||
dir_list = os.listdir(file_path)
|
||
if not dir_list:
|
||
return
|
||
else:
|
||
# 注意,这里使用lambda表达式,将文件按照最后修改时间顺序升序排列
|
||
# os.path.getmtime() 函数是获取文件最后修改时间
|
||
# os.path.getctime() 函数是获取文件最后创建时间
|
||
dir_list = sorted(dir_list,key=lambda x: os.path.getmtime(os.path.join(file_path, x)), reverse=True)
|
||
# print(dir_list)
|
||
return dir_list
|
||
|
||
class LogView(APIView):
|
||
|
||
@swagger_auto_schema(manual_parameters=[
|
||
openapi.Parameter('name', openapi.IN_QUERY, description='日志文件名', type=openapi.TYPE_STRING)
|
||
])
|
||
def get(self, request, *args, **kwargs):
|
||
"""
|
||
查看最近的日志列表
|
||
:query name
|
||
"""
|
||
logs =[]
|
||
name = request.GET.get('name', None)
|
||
# for root, dirs, files in os.walk(settings.LOG_PATH):
|
||
# files.reverse()
|
||
for file in get_file_list(settings.LOG_PATH):
|
||
if len(logs)>50:break
|
||
filepath = os.path.join(settings.LOG_PATH, file)
|
||
if name:
|
||
if name in filepath:
|
||
fsize = os.path.getsize(filepath)
|
||
if fsize:
|
||
logs.append({
|
||
"name":file,
|
||
"filepath":filepath,
|
||
"size":round(fsize/1000,1)
|
||
})
|
||
else:
|
||
fsize = os.path.getsize(filepath)
|
||
if fsize:
|
||
logs.append({
|
||
"name":file,
|
||
"filepath":filepath,
|
||
"size":round(fsize/1000,1)
|
||
})
|
||
return Response(logs)
|
||
|
||
|
||
class LogDetailView(APIView):
|
||
|
||
def get(self, request, name):
|
||
"""
|
||
查看日志详情
|
||
"""
|
||
try:
|
||
with open(os.path.join(settings.LOG_PATH, name)) as f:
|
||
data = f.read()
|
||
return Response(data)
|
||
except:
|
||
return Response('未找到', status=status.HTTP_404_NOT_FOUND) |