diff --git a/apps/assets/forms/domain.py b/apps/assets/forms/domain.py index 635796c97..25295782a 100644 --- a/apps/assets/forms/domain.py +++ b/apps/assets/forms/domain.py @@ -28,6 +28,15 @@ class DomainForm(forms.ModelForm): initial['assets'] = kwargs['instance'].assets.all() super().__init__(*args, **kwargs) + # 前端渲染优化, 防止过多资产 + assets_field = self.fields.get('assets') + if not self.data: + instance = kwargs.get('instance') + if instance: + assets_field.queryset = instance.assets.all() + else: + assets_field.queryset = Asset.objects.none() + def save(self, commit=True): instance = super().save(commit=commit) assets = self.cleaned_data['assets'] diff --git a/apps/assets/forms/label.py b/apps/assets/forms/label.py index ebdc9384e..8a5a54e4a 100644 --- a/apps/assets/forms/label.py +++ b/apps/assets/forms/label.py @@ -26,6 +26,15 @@ class LabelForm(forms.ModelForm): initial['assets'] = kwargs['instance'].assets.all() super().__init__(*args, **kwargs) + # 前端渲染优化, 防止过多资产 + assets_field = self.fields.get('assets') + if not self.data: + instance = kwargs.get('instance') + if instance: + assets_field.queryset = instance.assets.all() + else: + assets_field.queryset = Asset.objects.none() + def save(self, commit=True): label = super().save(commit=commit) assets = self.cleaned_data['assets'] diff --git a/apps/assets/tasks.py b/apps/assets/tasks.py index 9dd58b78e..ce5be0b6f 100644 --- a/apps/assets/tasks.py +++ b/apps/assets/tasks.py @@ -1,16 +1,16 @@ # ~*~ coding: utf-8 ~*~ import json import re +import time import os from celery import shared_task from django.utils.translation import ugettext as _ +from django.core.cache import cache from common.utils import capacity_convert, \ sum_capacity, encrypt_password, get_logger -from ops.celery.utils import register_as_period_task, after_app_shutdown_clean, \ - after_app_ready_start -from orgs.utils import set_to_root_org +from ops.celery.utils import register_as_period_task, after_app_shutdown_clean from .models import SystemUser, AdminUser, Asset from . import const @@ -211,6 +211,12 @@ def test_admin_user_connectivity_period(): """ A period task that update the ansible task period """ + key = '_JMS_TEST_ADMIN_USER_CONNECTIVITY_PERIOD' + prev_execute_time = cache.get(key) + if prev_execute_time: + logger.debug("Test admin user connectivity, less than 40 minutes, skip") + return + cache.set(key, 1, 60*40) admin_users = AdminUser.objects.all() for admin_user in admin_users: task_name = _("Test admin user connectivity period: {}").format(admin_user.name) diff --git a/apps/assets/templates/assets/domain_create_update.html b/apps/assets/templates/assets/domain_create_update.html index 0d6935226..7a31e3e88 100644 --- a/apps/assets/templates/assets/domain_create_update.html +++ b/apps/assets/templates/assets/domain_create_update.html @@ -24,7 +24,6 @@ {% block custom_foot_js %} diff --git a/apps/static/js/jumpserver.js b/apps/static/js/jumpserver.js index 82990ac5b..e46b32d13 100644 --- a/apps/static/js/jumpserver.js +++ b/apps/static/js/jumpserver.js @@ -528,6 +528,7 @@ jumpserver.initServerSideDataTable = function (options) { lengthMenu: [[10, 15, 25, 50], [10, 15, 25, 50]] }); table.selected = []; + table.selected_rows = []; table.on('select', function(e, dt, type, indexes) { var $node = table[ type ]( indexes ).nodes().to$(); $node.find('input.ipt_check').prop('checked', true); @@ -535,6 +536,7 @@ jumpserver.initServerSideDataTable = function (options) { if (type === 'row') { var rows = table.rows(indexes).data(); $.each(rows, function (id, row) { + table.selected_rows.push(row); if (row.id && $.inArray(row.id, table.selected) === -1){ table.selected.push(row.id) } diff --git a/apps/terminal/api/v1/terminal.py b/apps/terminal/api/v1/terminal.py index 7ab15d381..ac56b3ea9 100644 --- a/apps/terminal/api/v1/terminal.py +++ b/apps/terminal/api/v1/terminal.py @@ -86,7 +86,7 @@ class TerminalTokenApi(APIView): if not terminal.user or not terminal.user.access_key: return Response("No access key generate", status=401) - access_key = terminal.user.access_key.first() + access_key = terminal.user.access_key() data = OrderedDict() data['access_key'] = {'id': access_key.id, 'secret': access_key.secret} return Response(data, status=200) diff --git a/apps/users/api/user.py b/apps/users/api/user.py index f838554e1..a1119e3a7 100644 --- a/apps/users/api/user.py +++ b/apps/users/api/user.py @@ -47,7 +47,7 @@ class UserViewSet(IDInFilterMixin, BulkModelViewSet): return super().get_permissions() def allow_bulk_destroy(self, qs, filtered): - return qs.count() == filtered.count() + return qs.count() != filtered.count() class UserChangePasswordApi(generics.RetrieveUpdateAPIView):