87 lines
3.7 KiB
Python
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 '单机' |