From d0755c4719f20e9b237bb49d9e0f84ac2b4b68fe Mon Sep 17 00:00:00 2001 From: Bai Date: Tue, 12 Sep 2023 15:31:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87=20id?= =?UTF-8?q?=E3=80=81name=20=E8=BF=9B=E8=A1=8C=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ops/api/celery.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/apps/ops/api/celery.py b/apps/ops/api/celery.py index 67f4d4dda..a7baaf6e4 100644 --- a/apps/ops/api/celery.py +++ b/apps/ops/api/celery.py @@ -9,10 +9,12 @@ from django.utils.translation import gettext as _ from django_celery_beat.models import PeriodicTask from rest_framework import generics, viewsets, mixins, status from rest_framework.response import Response +from django_filters import rest_framework as drf_filters from common.api import LogTailApi, CommonApiMixin from common.exceptions import JMSException from common.permissions import IsValidUser +from common.drf.filters import BaseFilterSet from ops.celery import app from ..ansible.utils import get_ansible_task_log_path from ..celery.utils import get_celery_task_log_path @@ -102,13 +104,35 @@ class CelerySummaryAPIView(generics.RetrieveAPIView): pass +class CeleryTaskFilterSet(BaseFilterSet): + id = drf_filters.CharFilter(field_name='id', lookup_expr='exact') + name = drf_filters.CharFilter(method='filter_name') + + @staticmethod + def filter_name(queryset, name, value): + _ids = [] + for task in queryset: + comment = task.meta.get('comment') + if not comment: + continue + if value not in comment: + continue + _ids.append(task.id) + queryset = queryset.filter(id__in=_ids) + return queryset + + class Meta: + model = CeleryTask + fields = ['id', 'name'] + + class CeleryTaskViewSet( CommonApiMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet ): - filterset_fields = ('id', 'name') - search_fields = filterset_fields + search_fields = ('id', 'name') + filterset_class = CeleryTaskFilterSet serializer_class = CeleryTaskSerializer def get_queryset(self):