From f804d45bed821685bb9ecf86656163fd0516ae82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Wed, 21 Apr 2021 00:24:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD(=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=9B=91=E6=8E=A7API):=20=E6=9C=8D=E5=8A=A1=E7=9B=91=E6=8E=A7A?= =?UTF-8?q?PI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/vadmin/monitor/serializers.py | 13 ++- dvadmin-backend/apps/vadmin/monitor/urls.py | 3 +- dvadmin-backend/apps/vadmin/monitor/views.py | 98 +++++++++++++++---- 3 files changed, 91 insertions(+), 23 deletions(-) diff --git a/dvadmin-backend/apps/vadmin/monitor/serializers.py b/dvadmin-backend/apps/vadmin/monitor/serializers.py index 3a7e0bd..69d789e 100644 --- a/dvadmin-backend/apps/vadmin/monitor/serializers.py +++ b/dvadmin-backend/apps/vadmin/monitor/serializers.py @@ -13,7 +13,18 @@ class ServerSerializer(CustomModelSerializer): class Meta: model = Server - fields = '__all__' + fields = ("id", "ip", "name", "os", "remark") + + +class UpdateServerSerializer(CustomModelSerializer): + """ + 服务器信息 简单序列化器 + """ + + class Meta: + model = Server + fields = ("name", "remark") + # ================================================= # # ************** 服务器监控信息 序列化器 ************** # diff --git a/dvadmin-backend/apps/vadmin/monitor/urls.py b/dvadmin-backend/apps/vadmin/monitor/urls.py index c5ef2fa..49feeef 100644 --- a/dvadmin-backend/apps/vadmin/monitor/urls.py +++ b/dvadmin-backend/apps/vadmin/monitor/urls.py @@ -8,7 +8,8 @@ router.register(r'server', ServerModelViewSet) router.register(r'monitor', MonitorModelViewSet) urlpatterns = [ - re_path('monitor/info/', MonitorModelViewSet.as_view({'get': 'get_monitor_info'})), + re_path('monitor/info/(?P.*)/', MonitorModelViewSet.as_view({'get': 'get_monitor_info'})), + re_path('monitor/rate/(?P.*)/', MonitorModelViewSet.as_view({'get': 'get_rate_info'})), re_path('monitor/enabled/', MonitorModelViewSet.as_view({'get': 'enabled_monitor_info'})), re_path('monitor/clean/', MonitorModelViewSet.as_view({'get': 'clean_all'})), ] diff --git a/dvadmin-backend/apps/vadmin/monitor/views.py b/dvadmin-backend/apps/vadmin/monitor/views.py index 9325852..67e2861 100644 --- a/dvadmin-backend/apps/vadmin/monitor/views.py +++ b/dvadmin-backend/apps/vadmin/monitor/views.py @@ -2,9 +2,9 @@ from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSch from rest_framework.request import Request from .filters import ServerFilter, MonitorFilter -from .models import Server, Monitor -from .serializers import ServerSerializer, MonitorSerializer -from ..op_drf.response import SuccessResponse +from .models import Server, Monitor, SysFiles +from .serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer +from ..op_drf.response import SuccessResponse, ErrorResponse from ..op_drf.viewsets import CustomModelViewSet from ..permission.permissions import CommonPermission from ..system.models import ConfigSettings @@ -16,6 +16,7 @@ class ServerModelViewSet(CustomModelViewSet): """ queryset = Server.objects.all() serializer_class = ServerSerializer + update_serializer_class = UpdateServerSerializer # extra_filter_backends = [DataLevelPermissionsFilter] filter_class = ServerFilter update_extra_permission_classes = (CommonPermission,) @@ -37,7 +38,80 @@ class MonitorModelViewSet(CustomModelViewSet): create_extra_permission_classes = (CommonPermission,) ordering = '-create_datetime' # 默认排序 + def get_rate_info(self, request: Request, *args, **kwargs): + """ + 获取使用率 监控信息 + :param request: + :param args: + :param kwargs: + :return: + """ + pk = kwargs.get("pk") + queryset = self.filter_queryset(self.get_queryset()) + queryset = queryset.filter(server__id=pk).order_by("-create_datetime") + # 间隔取值 + queryset_count = queryset.count() + Interval_num = 1 if queryset_count < 200 else int(queryset_count / 100) + queryset = queryset.values('cpu_sys', 'mem_num', 'mem_sys')[::Interval_num][:100] + data = { + "cpu": [], + "memory": [], + } + for ele in queryset: + data["cpu"].append(float(ele.get('cpu_sys', 0))) + data["memory"].append(float(ele.get('mem_num', 0)) and round(float(ele.get('mem_sys', 0)) / + float(ele.get('mem_num', 0)), 4)) + return SuccessResponse(data=data) + def get_monitor_info(self, request: Request, *args, **kwargs): + """ + 最新的服务器状态信息 + :param request: + :param args: + :param kwargs: + :return: + """ + pk = kwargs.get("pk") + instance = Monitor.objects.filter(server__id=pk).order_by("-create_datetime").first() + if not instance: + return ErrorResponse(msg="未找到服务器信息id") + serializer = self.get_serializer(instance) + data = serializer.data + return SuccessResponse(data={ + "cpu": { + "total": int(data.get('cpu_num'), 0), + "used": "", # cpu核心 可不传,如指cpu当前主频,该值可以传 + "rate": float(data.get('cpu_sys', 0)), + "unit": "核心", # 默认单位 核心 + }, + "memory": { + "total": int(int(data.get('mem_num', 0)) / 1024), + "used": int(int(data.get('mem_sys', 0)) / 1024), + "rate": int(data.get('mem_num', 0)) and round(int(data.get('mem_sys', 0)) / + int(data.get('mem_num', 0)), 4), + "unit": "MB", # 默认单位 MB + }, + "disk": [{ + "dir_name": ele.get('dir_name'), + "total": int(int(ele.get('total', 0)) / 1024 / 1024 / 1024), + "used": int(int(ele.get('disk_sys', 0)) / 1024 / 1024 / 1024), + "rate": int(ele.get('total', 0)) and round(int(ele.get('disk_sys', 0)) / int(ele.get('total', 0)), + 4), + "unit": "GB", # 默认单位 GB + } for ele in SysFiles.objects.filter(monitor=instance).values('dir_name', 'total', 'disk_sys')] + }) + + def enabled_monitor_info(self, request: Request, *args, **kwargs): + """ + 更新和获取监控信息 + :param request: + :param args: + :param kwargs: + :return: + """ + enabled = request.query_params.get('enabled', None) + save_days = request.query_params.get('save_days', None) + interval = request.query_params.get('interval', None) # 定时获取系统监控信息 periodictask_obj = PeriodicTask.objects.filter(task='apps.vadmin.monitor.tasks.get_monitor_info').first() if not periodictask_obj: @@ -73,33 +147,15 @@ class MonitorModelViewSet(CustomModelViewSet): config_obj.remark = "定时清理多余-系统监控信息,默认30天" config_obj.save() - # 获取保留天数 - return SuccessResponse(data={ - "enabled": periodictask_obj.enabled, - "interval": periodictask_obj.interval.every, - "save_days": config_obj.configValue if config_obj else "30", - }) - - def enabled_monitor_info(self, request: Request, *args, **kwargs): - enabled = request.query_params.get('enabled', None) - save_days = request.query_params.get('save_days', None) - interval = request.query_params.get('interval', None) - - periodictask_obj = PeriodicTask.objects.filter(task='apps.vadmin.monitor.tasks.get_monitor_info').first() if enabled: # 更新监控状态 periodictask_obj.enabled = True if enabled == "1" else False periodictask_obj.save() # 更新 定时清理多余 系统监控信息 状态 - clean_task_obj = PeriodicTask.objects.filter( - task='apps.vadmin.monitor.tasks.clean_surplus_monitor_info').first() clean_task_obj.enabled = True if enabled == "1" else False clean_task_obj.save() # 更新保留天数 - config_obj = ConfigSettings.objects.filter(configKey='sys.monitor.info.save_days').first() - print(33, save_days) - print(22, config_obj) if save_days and config_obj: config_obj.configValue = save_days config_obj.save()