From a891692b71307794897821f784b6a43fa423ac35 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Mar 2024 17:37:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20base=20=E6=8F=90=E4=BE=9B=E7=9B=91?= =?UTF-8?q?=E6=B5=8Bcelery=E7=9A=84=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/celery.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/celery.py b/server/celery.py index 747a08bb..4081020e 100755 --- a/server/celery.py +++ b/server/celery.py @@ -1,6 +1,7 @@ import os from . import conf from celery import Celery +from celery.app.control import Control, Inspect # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings') @@ -16,6 +17,9 @@ app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks() +celery_control: Control = Control(app=app) +celery_inspect: Inspect = celery_control.inspect() + @app.task(bind=True) def debug_task(self): From 718f594a4b4845b45778fe011d46dc110d64eca4 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Mar 2024 17:39:23 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=96=B0=E8=83=BD=E6=BA=90=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0008_vehicleaccess_is_new_energy.py | 18 ++++++++++++++++++ apps/enp/models.py | 1 + apps/enp/views.py | 1 + 3 files changed, 20 insertions(+) create mode 100644 apps/enp/migrations/0008_vehicleaccess_is_new_energy.py diff --git a/apps/enp/migrations/0008_vehicleaccess_is_new_energy.py b/apps/enp/migrations/0008_vehicleaccess_is_new_energy.py new file mode 100644 index 00000000..bee2465a --- /dev/null +++ b/apps/enp/migrations/0008_vehicleaccess_is_new_energy.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2024-03-12 08:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('enp', '0007_auto_20240228_1618'), + ] + + operations = [ + migrations.AddField( + model_name='vehicleaccess', + name='is_new_energy', + field=models.BooleanField(default=False, verbose_name='是否新能源'), + ), + ] diff --git a/apps/enp/models.py b/apps/enp/models.py index 043a80e1..5df1a20e 100644 --- a/apps/enp/models.py +++ b/apps/enp/models.py @@ -124,6 +124,7 @@ class VehicleAccess(BaseModel): access_time = models.DateTimeField('出入时间', null=True, blank=True) emission_standard = models.CharField( '排放标准', max_length=10, null=True, blank=True) + is_new_energy = models.BooleanField('是否新能源', default=False) door_name = models.CharField('门禁名称', max_length=10, null=True, blank=True) diff --git a/apps/enp/views.py b/apps/enp/views.py index e6f30af0..08df06c2 100644 --- a/apps/enp/views.py +++ b/apps/enp/views.py @@ -104,6 +104,7 @@ class VehicleAccessViewSet(ListModelMixin, CustomGenericViewSet): "vehicle_number": ['icontains'], "emission_standard": ['exact', 'in'], "type": ['exact', 'in'], + "is_new_energy": ["exact"], "access_time": ['gte', 'lte', 'year', 'month', 'day', 'quarter', 'week'] } From 0af253fb0b324a05430654afc40283289d352d15 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Mar 2024 17:39:45 +0800 Subject: [PATCH 3/4] =?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] From 966edbacd49c7db9311765b15fedea5aa1a169d4 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Mar 2024 17:41:16 +0800 Subject: [PATCH 4/4] =?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=AF2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/monitor/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/monitor/views.py b/apps/monitor/views.py index 1d96716c..996c23de 100755 --- a/apps/monitor/views.py +++ b/apps/monitor/views.py @@ -41,9 +41,9 @@ class CeleryInfoView(APIView): def get(self, request, *args, **kwargs): """ - 获取服务器当前状态 + 获取celery状态信息 - cpu/内存/硬盘 + 获取celery状态信息 """ return Response(CeleryMonitor.get_stats())