2025-03-18 08:46:50 +08:00

87 lines
3.7 KiB
Python

from rest_framework.views import APIView
from utils.jsonResponse import SuccessResponse,ErrorResponse,DetailResponse
from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from rest_framework_simplejwt.authentication import JWTAuthentication
from utils.serializers import CustomModelSerializer
from utils.viewset import CustomModelViewSet
from utils.server.system import system
from apps.lymonitor.models import MonitorManage
from django_redis import get_redis_connection
import psutil
# Create your views here.
class MonitorManageSerializer(CustomModelSerializer):
"""
服务器监控 简单序列化器
"""
class Meta:
model = MonitorManage
# fields = "__all__"
exclude = ['dept_belong_id', 'modifier', 'creator']
read_only_fields = ["id"]
class MonitorManageViewSet(CustomModelViewSet):
"""
前端用户服务器监控
get:
前端用户服务器监控
"""
queryset = MonitorManage.objects.all().order_by("create_datetime")
serializer_class = MonitorManageSerializer
def getsysteminfo(self, request):
data = system().GetSystemAllInfo()
return DetailResponse(data=data)
def get_redis_info(self,request):
redis_conn = get_redis_connection("default")
if not redis_conn:
return ErrorResponse(msg="无法获取redis信息")
redis_info = redis_conn.info()
mem_total = psutil.virtual_memory().total
data = {
'redis_version':redis_info['redis_version'],
'os':redis_info['os'],
'redis_mode':get_redis_mode(redis_info['redis_mode']),
'role':redis_info['role'],
'tcp_port':redis_info['tcp_port'],
'uptime_in_days':redis_info['uptime_in_days'],
'config_file':redis_info['config_file'],
'connected_clients':redis_info['connected_clients'],
'used_memory':redis_info['used_memory'],
'used_memory_human':redis_info['used_memory_human'],
'used_memory_rss':redis_info['used_memory_rss'],
'used_memory_peak_human':redis_info['used_memory_peak_human'],
'mem_fragmentation_ratio':redis_info['mem_fragmentation_ratio'],
'aof_enabled':"" if redis_info['aof_enabled'] == 0 else "",
'used_cpu_sys':redis_info['used_cpu_sys'],
'used_cpu_user':redis_info['used_cpu_user'],
'used_cpu_sys_children':redis_info['used_cpu_sys_children'],
'used_cpu_user_children':redis_info['used_cpu_user_children'],
'latest_fork_usec':redis_info['latest_fork_usec'],
'total_connections_received':redis_info['total_connections_received'],
'total_commands_processed':redis_info['total_commands_processed'],
'instantaneous_ops_per_sec':redis_info['instantaneous_ops_per_sec'],
'total_net_input_bytes':redis_info['total_net_input_bytes'],
'total_net_output_bytes':redis_info['total_net_output_bytes'],
'instantaneous_input_kbps':redis_info['instantaneous_input_kbps'],
'instantaneous_output_kbps':redis_info['instantaneous_output_kbps'],
'keyspace_hits':redis_info['keyspace_hits'],
'keyspace_misses':redis_info['keyspace_misses'],
'keyspace_misses':redis_info['keyspace_misses'],
'total_memory':mem_total,
'db0':redis_info.get('db0')
}
return DetailResponse(data=data)
def get_redis_mode(mode):
if mode == 'standalone':
return '单机'
elif mode == 'cluster':
return '集群'
elif mode == 'sentinel':
return '哨兵'
return '单机'