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.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 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 common.views.mixins import RecordViewLogMixin
from common.permissions import UserConfirmation
from common.views.mixins import RecordViewLogMixin
from orgs.mixins.api import OrgBulkModelViewSet
__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.const import Source
from accounts.models import GatheredAccount
from accounts.filters import GatheredAccountFilterSet
from orgs.mixins.api import OrgBulkModelViewSet
__all__ = [
@ -9,8 +16,27 @@ __all__ = [
class GatheredAccountViewSet(OrgBulkModelViewSet):
model = GatheredAccount
search_fields = ('username', 'asset__address')
filterset_fields = ('username',)
search_fields = ('username',)
filterset_class = GatheredAccountFilterSet
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 common.drf.filters import BaseFilterSet
from .models import Account
from .models import Account, GatheredAccount
class AccountFilterSet(BaseFilterSet):
@ -47,3 +47,15 @@ class AccountFilterSet(BaseFilterSet):
class Meta:
model = Account
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 .base import *
from .template import *
from .gathered_account import *

View File

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