From 0af253fb0b324a05430654afc40283289d352d15 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Mar 2024 17:39:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0celery=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/monitor/services.py | 10 ++++++++++ apps/monitor/urls.py | 3 ++- apps/monitor/views.py | 15 ++++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/apps/monitor/services.py b/apps/monitor/services.py index a5128b54..05c73b91 100644 --- a/apps/monitor/services.py +++ b/apps/monitor/services.py @@ -1,9 +1,11 @@ import psutil +import redis from apps.monitor.models import AuditLog from apps.system.models import User from datetime import datetime from apps.utils.tools import compare_values from apps.utils.models import get_model_info +from server.celery import celery_control, celery_inspect def delete_auditlog(model, instance_id): @@ -98,3 +100,11 @@ class ServerService: @classmethod def get_full(cls): return {'cpu': cls.get_cpu_dict(), 'memory': cls.get_memory_dict(), 'disk': cls.get_disk_dict()} + + +class CeleryMonitor: + @classmethod + def get_stats(cls): + return { + 'stat': celery_inspect.stats(), + } diff --git a/apps/monitor/urls.py b/apps/monitor/urls.py index 66c88138..da36f498 100755 --- a/apps/monitor/urls.py +++ b/apps/monitor/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from .views import DrfRequestLogViewSet, ServerInfoView, LogView, LogDetailView, index, room, video, DbBackupView, AuditlogViewSet +from .views import DrfRequestLogViewSet, ServerInfoView, LogView, LogDetailView, index, room, video, DbBackupView, AuditlogViewSet, CeleryInfoView API_BASE_URL = 'api/monitor/' HTML_BASE_URL = 'monitor/' @@ -13,6 +13,7 @@ urlpatterns = [ path(API_BASE_URL + 'log//', LogDetailView.as_view()), path(API_BASE_URL + 'dbbackup/', DbBackupView.as_view()), path(API_BASE_URL + 'server/', ServerInfoView.as_view()), + path(API_BASE_URL + 'celery/', CeleryInfoView.as_view()), path(API_BASE_URL + 'request_log/', DrfRequestLogViewSet.as_view({'get': 'list'}), name='requestlog_view'), path(API_BASE_URL + 'auditlog/', diff --git a/apps/monitor/views.py b/apps/monitor/views.py index 42535b6e..1d96716c 100755 --- a/apps/monitor/views.py +++ b/apps/monitor/views.py @@ -16,8 +16,9 @@ from apps.monitor.filters import DrfLogFilterSet from apps.monitor.models import DrfRequestLog, AuditLog from apps.monitor.errors import LOG_NOT_FONED -from apps.monitor.services import ServerService +from apps.monitor.services import ServerService, CeleryMonitor from apps.utils.viewsets import CustomGenericViewSet + # Create your views here. @@ -35,6 +36,18 @@ def video(request): return render(request, 'monitor/video.html') +class CeleryInfoView(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, *args, **kwargs): + """ + 获取服务器当前状态 + + cpu/内存/硬盘 + """ + return Response(CeleryMonitor.get_stats()) + + class ServerInfoView(APIView): permission_classes = [IsAuthenticated]