perf: gather account (#9456)

Co-authored-by: feng <1304903146@qq.com>
pull/9457/head
fit2bot 2023-02-07 19:45:12 +08:00 committed by GitHub
parent 22953c0306
commit 38921cc5f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 12 deletions

View File

@ -3,14 +3,14 @@ from rest_framework.decorators import action
from rest_framework.generics import CreateAPIView, ListAPIView from rest_framework.generics import CreateAPIView, ListAPIView
from rest_framework.response import Response from rest_framework.response import Response
from accounts import serializers
from accounts.filters import AccountFilterSet
from accounts.models import Account
from accounts.tasks import verify_accounts_connectivity
from assets.models import Asset from assets.models import Asset
from accounts import serializers
from accounts.models import Account
from accounts.filters import AccountFilterSet
from accounts.tasks import verify_accounts_connectivity
from authentication.const import ConfirmType from authentication.const import ConfirmType
from common.views.mixins import RecordViewLogMixin
from common.permissions import UserConfirmation from common.permissions import UserConfirmation
from common.views.mixins import RecordViewLogMixin
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
__all__ = [ __all__ = [

View File

@ -1,5 +1,12 @@
from rest_framework import status
from rest_framework.decorators import action
from rest_framework.response import Response
from django.utils.translation import ugettext_lazy as _
from accounts import serializers from accounts import serializers
from accounts.const import Source
from accounts.models import GatheredAccount from accounts.models import GatheredAccount
from accounts.filters import GatheredAccountFilterSet
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
__all__ = [ __all__ = [
@ -9,8 +16,27 @@ __all__ = [
class GatheredAccountViewSet(OrgBulkModelViewSet): class GatheredAccountViewSet(OrgBulkModelViewSet):
model = GatheredAccount model = GatheredAccount
search_fields = ('username', 'asset__address') search_fields = ('username',)
filterset_fields = ('username',) filterset_class = GatheredAccountFilterSet
serializer_classes = { serializer_classes = {
'default': serializers.AccountSerializer, 'default': serializers.GatheredAccountSerializer,
} }
rbac_perms = {
'sync_account': 'assets.add_gatheredaccount',
}
@action(methods=['post'], detail=True, url_path='sync')
def sync_account(self, request, *args, **kwargs):
gathered_account = super().get_object()
asset = gathered_account.asset
username = gathered_account.username
accounts = asset.accounts.filter(username=username)
if accounts.exists():
accounts.update(source=Source.COLLECTED)
else:
asset.accounts.model.objects.create(
asset=asset, username=username,
name=f'{username}-{_("Collected")}',
source=Source.COLLECTED
)
return Response(status=status.HTTP_201_CREATED)

View File

@ -6,7 +6,7 @@ from django_filters import rest_framework as drf_filters
from assets.models import Node from assets.models import Node
from common.drf.filters import BaseFilterSet from common.drf.filters import BaseFilterSet
from .models import Account from .models import Account, GatheredAccount
class AccountFilterSet(BaseFilterSet): class AccountFilterSet(BaseFilterSet):
@ -47,3 +47,15 @@ class AccountFilterSet(BaseFilterSet):
class Meta: class Meta:
model = Account model = Account
fields = ['id', 'asset_id'] fields = ['id', 'asset_id']
class GatheredAccountFilterSet(BaseFilterSet):
node_id = drf_filters.CharFilter(method='filter_nodes')
@staticmethod
def filter_nodes(queryset, name, value):
return AccountFilterSet.filter_nodes(queryset, name, value)
class Meta:
model = GatheredAccount
fields = ['id', 'asset_id', 'username']

View File

@ -2,3 +2,4 @@ from .account import *
from .backup import * from .backup import *
from .base import * from .base import *
from .template import * from .template import *
from .gathered_account import *

View File

@ -6,14 +6,14 @@ from .account import AccountAssetSerializer
from .base import BaseAccountSerializer from .base import BaseAccountSerializer
class AccountSerializer(BulkOrgResourceModelSerializer): class GatheredAccountSerializer(BulkOrgResourceModelSerializer):
asset = AccountAssetSerializer(label=_('Asset')) asset = AccountAssetSerializer(label=_('Asset'))
class Meta(BaseAccountSerializer.Meta): class Meta(BaseAccountSerializer.Meta):
model = GatheredAccount model = GatheredAccount
fields = [ fields = [
'present', 'asset', 'username', 'id', 'present', 'asset', 'username',
'address_last_login', 'date_last_login' 'date_updated', 'address_last_login', 'date_last_login'
] ]
@classmethod @classmethod