perf: update account serializer remote unused code

pull/14911/head
ibuler 2025-02-20 11:16:21 +08:00 committed by feng626
parent f29ba1319c
commit 04bf099dbe
6 changed files with 40 additions and 70 deletions

View File

@ -17,22 +17,22 @@ from orgs.mixins.api import OrgBulkModelViewSet
from .base import AutomationExecutionViewSet
__all__ = [
"GatherAccountsAutomationViewSet",
"GatherAccountsExecutionViewSet",
"DiscoverAccountsAutomationViewSet",
"DiscoverAccountsExecutionViewSet",
"GatheredAccountViewSet",
]
from ...risk_handlers import RiskHandler
class GatherAccountsAutomationViewSet(OrgBulkModelViewSet):
class DiscoverAccountsAutomationViewSet(OrgBulkModelViewSet):
model = GatherAccountsAutomation
filterset_fields = ("name",)
search_fields = filterset_fields
serializer_class = serializers.GatherAccountAutomationSerializer
serializer_class = serializers.DiscoverAccountAutomationSerializer
class GatherAccountsExecutionViewSet(AutomationExecutionViewSet):
class DiscoverAccountsExecutionViewSet(AutomationExecutionViewSet):
rbac_perms = (
("list", "accounts.view_gatheraccountsexecution"),
("retrieve", "accounts.view_gatheraccountsexecution"),
@ -76,9 +76,9 @@ class GatheredAccountViewSet(OrgBulkModelViewSet):
filterset_class = GatheredAccountFilterSet
ordering = ("status",)
serializer_classes = {
"default": serializers.GatheredAccountSerializer,
"status": serializers.GatheredAccountActionSerializer,
"details": serializers.GatheredAccountDetailsSerializer
"default": serializers.DiscoverAccountSerializer,
"status": serializers.DiscoverAccountActionSerializer,
"details": serializers.DiscoverAccountDetailsSerializer
}
rbac_perms = {
"status": "assets.change_gatheredaccount",

View File

@ -2,40 +2,19 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from assets.const import AutomationTypes
from assets.models import Asset, Node, BaseAutomation
from assets.models import BaseAutomation
from assets.serializers.automations import AutomationExecutionSerializer as AssetAutomationExecutionSerializer
from common.serializers.fields import ObjectRelatedField
from assets.serializers.automations import BaseAutomationSerializer as AssetBaseAutomationSerializer
from common.utils import get_logger
from ops.mixin import PeriodTaskSerializerMixin
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
logger = get_logger(__file__)
__all__ = [
'BaseAutomationSerializer', 'AutomationExecutionSerializer',
'UpdateAssetSerializer', 'UpdateNodeSerializer', 'AutomationAssetsSerializer',
]
class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSerializer):
assets = ObjectRelatedField(many=True, required=False, queryset=Asset.objects, label=_('Assets'))
nodes = ObjectRelatedField(many=True, required=False, queryset=Node.objects, label=_('Nodes'))
is_periodic = serializers.BooleanField(default=False, required=False, label=_("Periodic perform"))
class Meta:
read_only_fields = [
'date_created', 'date_updated', 'created_by',
'periodic_display', 'executed_amount', 'type'
]
fields = read_only_fields + [
'id', 'name', 'is_periodic', 'interval', 'crontab', 'comment',
'accounts', 'nodes', 'assets', 'is_active',
]
extra_kwargs = {
'name': {'required': True},
'executed_amount': {'label': _('Executions')},
}
class BaseAutomationSerializer(AssetBaseAutomationSerializer):
def validate_name(self, name):
if self.instance and self.instance.name == name:
return name
@ -66,22 +45,3 @@ class AutomationExecutionSerializer(AssetAutomationExecutionSerializer):
'type_display': type_display,
}
return snapshot
class UpdateAssetSerializer(serializers.ModelSerializer):
class Meta:
model = BaseAutomation
fields = ['id', 'assets']
class UpdateNodeSerializer(serializers.ModelSerializer):
class Meta:
model = BaseAutomation
fields = ['id', 'nodes']
class AutomationAssetsSerializer(serializers.ModelSerializer):
class Meta:
model = Asset
only_fields = ['id', 'name', 'address']
fields = tuple(only_fields)

View File

@ -11,14 +11,14 @@ from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from .base import BaseAutomationSerializer
__all__ = [
'GatheredAccountSerializer',
'GatheredAccountActionSerializer',
'GatherAccountAutomationSerializer',
'GatheredAccountDetailsSerializer'
'DiscoverAccountSerializer',
'DiscoverAccountActionSerializer',
'DiscoverAccountAutomationSerializer',
'DiscoverAccountDetailsSerializer'
]
class GatherAccountAutomationSerializer(BaseAutomationSerializer):
class DiscoverAccountAutomationSerializer(BaseAutomationSerializer):
class Meta:
model = GatherAccountsAutomation
read_only_fields = BaseAutomationSerializer.Meta.read_only_fields
@ -43,7 +43,7 @@ class AccountAssetSerializer(_AccountAssetSerializer):
fields = [f for f in _AccountAssetSerializer.Meta.fields if f != 'auto_config']
class GatheredAccountSerializer(BulkOrgResourceModelSerializer):
class DiscoverAccountSerializer(BulkOrgResourceModelSerializer):
asset = AccountAssetSerializer(label=_('Asset'))
class Meta(BaseAccountSerializer.Meta):
@ -63,12 +63,12 @@ class GatheredAccountSerializer(BulkOrgResourceModelSerializer):
return queryset
class GatheredAccountActionSerializer(GatheredAccountSerializer):
class Meta(GatheredAccountSerializer.Meta):
read_only_fields = list(set(GatheredAccountSerializer.Meta.read_only_fields) - {'status'})
class DiscoverAccountActionSerializer(DiscoverAccountSerializer):
class Meta(DiscoverAccountSerializer.Meta):
read_only_fields = list(set(DiscoverAccountSerializer.Meta.read_only_fields) - {'status'})
class GatheredAccountDetailsSerializer(serializers.Serializer):
class DiscoverAccountDetailsSerializer(serializers.Serializer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
request = self.context.get('request')
@ -78,6 +78,7 @@ class GatheredAccountDetailsSerializer(serializers.Serializer):
params = request.query_params
if params.get('format') == 'openapi':
return
pk = request.parser_context['kwargs'].get('pk')
obj = get_object_or_404(GatheredAccount, pk=pk)
details = obj.detail

View File

@ -19,8 +19,8 @@ router.register(r'account-backup-plan-executions', api.BackupAccountExecutionVie
router.register(r'change-secret-automations', api.ChangeSecretAutomationViewSet, 'change-secret-automation')
router.register(r'change-secret-executions', api.ChangSecretExecutionViewSet, 'change-secret-execution')
router.register(r'change-secret-records', api.ChangeSecretRecordViewSet, 'change-secret-record')
router.register(r'gather-account-automations', api.GatherAccountsAutomationViewSet, 'gather-account-automation')
router.register(r'gather-account-executions', api.GatherAccountsExecutionViewSet, 'gather-account-execution')
router.register(r'gather-account-automations', api.DiscoverAccountsAutomationViewSet, 'gather-account-automation')
router.register(r'gather-account-executions', api.DiscoverAccountsExecutionViewSet, 'gather-account-execution')
router.register(r'push-account-automations', api.PushAccountAutomationViewSet, 'push-account-automation')
router.register(r'push-account-executions', api.PushAccountExecutionViewSet, 'push-account-execution')
router.register(r'push-account-records', api.PushAccountRecordViewSet, 'push-account-record')
@ -30,7 +30,6 @@ router.register(r'account-check-engines', api.CheckAccountEngineViewSet, 'accoun
router.register(r'account-risks', api.AccountRiskViewSet, 'account-risks')
router.register(r'integration-applications', api.IntegrationApplicationViewSet, 'integration-apps')
urlpatterns = [
path('accounts/bulk/', api.AssetAccountBulkCreateApi.as_view(), name='account-bulk-create'),
path('accounts/tasks/', api.AccountsTaskCreateAPI.as_view(), name='account-task-create'),

View File

@ -159,6 +159,10 @@ class AutomationExecution(OrgModelMixin):
)
verbose_name = _("Automation task execution")
@property
def short_id(self):
return str(self.id)[:8]
@property
def is_finished(self):
return bool(self.date_finished)

View File

@ -22,15 +22,20 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe
class Meta:
read_only_fields = [
'date_created', 'date_updated', 'created_by', 'periodic_display'
'date_created', 'date_updated', 'created_by',
'periodic_display', 'executed_amount', 'type'
]
fields = [
'id', 'name', 'is_periodic', 'interval', 'crontab', 'comment',
'type', 'accounts', 'nodes', 'assets', 'is_active'
] + read_only_fields
mini_fields = [
'id', 'name', 'type', 'is_periodic', 'interval',
'crontab', 'comment', 'is_active'
]
fields = mini_fields + [
'accounts', 'nodes', 'assets',
] + read_only_fields
extra_kwargs = {
'name': {'required': True},
'type': {'read_only': True},
'executed_amount': {'label': _('Executions')},
}
@ -38,6 +43,7 @@ class AutomationExecutionSerializer(serializers.ModelSerializer):
snapshot = serializers.SerializerMethodField(label=_('Automation snapshot'))
trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode"))
status = LabeledChoiceField(choices=Status.choices, read_only=True, label=_('Status'))
short_id = serializers.CharField(read_only=True, label=_('Short ID'))
class Meta:
model = AutomationExecution
@ -45,7 +51,7 @@ class AutomationExecutionSerializer(serializers.ModelSerializer):
'trigger', 'date_start', 'date_finished',
'snapshot', 'status', 'duration'
]
fields = ['id', 'automation'] + read_only_fields
fields = ['id', 'short_id', 'automation'] + read_only_fields
@staticmethod
def get_snapshot(obj):