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 '单机'