perf: Change secret filter days

This commit is contained in:
feng
2025-03-19 18:48:36 +08:00
committed by feng626
parent f6fc9b1f5c
commit 8f78919b3e
6 changed files with 37 additions and 13 deletions

View File

@@ -15,7 +15,8 @@ from assets.utils import get_node_from_request
from common.drf.filters import BaseFilterSet
from common.utils.timezone import local_zero_hour, local_now
from .const.automation import ChangeSecretRecordStatusChoice
from .models import Account, GatheredAccount, ChangeSecretRecord, PushSecretRecord, IntegrationApplication
from .models import Account, GatheredAccount, ChangeSecretRecord, PushSecretRecord, IntegrationApplication, \
AutomationExecution
class NodeFilterBackend(filters.BaseFilterBackend):
@@ -194,24 +195,41 @@ class UUIDExecutionFilterMixin:
return queryset.filter(**{name: value})
class ChangeSecretRecordFilterSet(SecretRecordMixin, UUIDExecutionFilterMixin, BaseFilterSet):
execution_id = django_filters.CharFilter(method="filter_execution")
class DaysExecutionFilterMixin:
days = drf_filters.NumberFilter(method="filter_days")
field: str
@staticmethod
def filter_days(queryset, name, value):
def filter_days(self, queryset, name, value):
value = int(value)
dt = local_zero_hour()
if value != 1:
dt = local_now() - timezone.timedelta(days=value)
return queryset.filter(date_finished__gte=dt)
return queryset.filter(**{f'{self.field}__gte': dt})
class ChangeSecretRecordFilterSet(
SecretRecordMixin, UUIDExecutionFilterMixin,
DaysExecutionFilterMixin, BaseFilterSet
):
execution_id = django_filters.CharFilter(method="filter_execution")
days = drf_filters.NumberFilter(method="filter_days")
field = 'date_finished'
class Meta:
model = ChangeSecretRecord
fields = ["id", "status", "asset_id", "execution_id"]
class AutomationExecutionFilterSet(DaysExecutionFilterMixin, BaseFilterSet):
field = 'date_start'
class Meta:
model = AutomationExecution
fields = ["days", 'trigger', 'automation_id', 'automation__name']
class PushAccountRecordFilterSet(SecretRecordMixin, UUIDExecutionFilterMixin, BaseFilterSet):
execution_id = django_filters.CharFilter(method="filter_execution")