From c0567f5a55a6d0a4472cb9e89ac2a8024f66e812 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 15 Mar 2024 16:01:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=94=E5=9B=9Eredis=E5=92=8Ccelery?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E7=9B=91=E6=8E=A7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/monitor/services.py | 24 ++++++++++++++++++++++-- apps/monitor/urls.py | 3 ++- apps/monitor/views.py | 16 ++++++++++++++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/apps/monitor/services.py b/apps/monitor/services.py index 05c73b91..71676546 100644 --- a/apps/monitor/services.py +++ b/apps/monitor/services.py @@ -6,6 +6,7 @@ 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 +from django_redis import get_redis_connection def delete_auditlog(model, instance_id): @@ -104,7 +105,26 @@ class ServerService: class CeleryMonitor: @classmethod - def get_stats(cls): + def get_info(cls): + count_active_task = 0 + count_scheduled_task = 0 + active_tasks = celery_inspect.active() + if active_tasks: + _, first_value = active_tasks.popitem() + count_active_task = len(first_value) + scheduled_tasks = celery_inspect.scheduled() + if scheduled_tasks: + _, first_value = active_tasks.popitem() + count_scheduled_task = len(first_value) + print(active_tasks) return { - 'stat': celery_inspect.stats(), + 'count_active_task': count_active_task, + 'count_scheduled_task': count_scheduled_task, } + + +class RedisMonitor: + @classmethod + def get_info(cls): + conn = get_redis_connection() + return conn.info() diff --git a/apps/monitor/urls.py b/apps/monitor/urls.py index da36f498..a956e4bd 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, CeleryInfoView +from .views import DrfRequestLogViewSet, ServerInfoView, LogView, LogDetailView, index, room, video, DbBackupView, AuditlogViewSet, CeleryInfoView, RedisInfoView API_BASE_URL = 'api/monitor/' HTML_BASE_URL = 'monitor/' @@ -14,6 +14,7 @@ urlpatterns = [ 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 + 'redis/', RedisInfoView.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 996c23de..9a440759 100755 --- a/apps/monitor/views.py +++ b/apps/monitor/views.py @@ -16,7 +16,7 @@ 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, CeleryMonitor +from apps.monitor.services import ServerService, CeleryMonitor, RedisMonitor from apps.utils.viewsets import CustomGenericViewSet # Create your views here. @@ -45,7 +45,19 @@ class CeleryInfoView(APIView): 获取celery状态信息 """ - return Response(CeleryMonitor.get_stats()) + return Response(CeleryMonitor.get_info()) + + +class RedisInfoView(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, *args, **kwargs): + """ + 获取redis状态信息 + + 获取redis状态信息 + """ + return Response(RedisMonitor.get_info()) class ServerInfoView(APIView):