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'] } 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..996c23de 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): + """ + 获取celery状态信息 + + 获取celery状态信息 + """ + return Response(CeleryMonitor.get_stats()) + + class ServerInfoView(APIView): permission_classes = [IsAuthenticated] 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):