From dddff03336595ddf29a0f7a8445d50aa2511ef92 Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Tue, 20 Dec 2022 14:53:25 +0800 Subject: [PATCH 1/4] perf: asset tree --- apps/perms/utils/user_perm_tree.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/perms/utils/user_perm_tree.py b/apps/perms/utils/user_perm_tree.py index e40f20514..7937f2c6f 100644 --- a/apps/perms/utils/user_perm_tree.py +++ b/apps/perms/utils/user_perm_tree.py @@ -96,7 +96,8 @@ class UserPermTreeRefreshUtil(_UserPermTreeCacheMixin): logger.info(f'Need to refresh orgs: {to_refresh_orgs}') return to_refresh_orgs - def _mark_user_orgs_refresh_finished(self, org_ids): + def _mark_user_orgs_refresh_finished(self, orgs): + org_ids = [str(org.id) for org in orgs] self.client.sadd(self.cache_key_user, *org_ids) From 362cfb733cb17fc6dd0ea4500d1de2f527a76162 Mon Sep 17 00:00:00 2001 From: Bai Date: Tue, 20 Dec 2022 16:13:44 +0800 Subject: [PATCH 2/4] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=20su-from-accoun?= =?UTF-8?q?ts=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/account/account.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/assets/api/account/account.py b/apps/assets/api/account/account.py index aa22201b1..ebcfb1f09 100644 --- a/apps/assets/api/account/account.py +++ b/apps/assets/api/account/account.py @@ -6,7 +6,7 @@ from rest_framework.generics import CreateAPIView, ListAPIView from orgs.mixins.api import OrgBulkModelViewSet from common.mixins import RecordViewLogMixin -from assets.models import Account +from assets.models import Account, Asset from assets.filters import AccountFilterSet from assets.tasks import verify_accounts_connectivity from assets import serializers @@ -30,10 +30,18 @@ class AccountViewSet(OrgBulkModelViewSet): 'su_from_accounts': 'assets.view_account', } - @action(methods=['get'], detail=True, url_path='su-from-accounts') + @action(methods=['get'], detail=False, url_path='su-from-accounts') def su_from_accounts(self, request, *args, **kwargs): - account = get_object_or_404(Account, pk=self.kwargs['pk']) - accounts = account.get_su_from_accounts() + account_id = request.query_params.get('account') + asset_id = request.query_params.get('asset') + if account_id: + account = get_object_or_404(Account, pk=account_id) + accounts = account.get_su_from_accounts() + elif asset_id: + asset = get_object_or_404(Asset, pk=asset_id) + accounts = asset.accounts.all() + else: + accounts = [] serializer = serializers.AccountSerializer(accounts, many=True) return Response(data=serializer.data) From 54f720e99231bf714d95a456f68ee02f8863c171 Mon Sep 17 00:00:00 2001 From: Aaron3S Date: Fri, 16 Dec 2022 18:39:59 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | 4 ++-- apps/locale/zh/LC_MESSAGES/django.po | 8 ++++---- apps/ops/models/job.py | 4 ++-- apps/ops/serializers/job.py | 7 ++----- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 1318974aa..724ba67ff 100644 --- a/apps/locale/zh/LC_MESSAGES/django.mo +++ b/apps/locale/zh/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f0b10566b4d35accd3a8766b14d6903243d93c5d7c55b208d930a189e590f2f -size 106125 +oid sha256:eaeedc4823f9b7e236b36a169b5587ef5988d3c3e529d6cbede6bae5e2b57ab8 +size 106349 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index fa1799a13..256794ea4 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -3067,19 +3067,19 @@ msgstr "跳过" #: ops/models/job.py:39 msgid "Chdir" -msgstr "" +msgstr "运行目录" #: ops/models/job.py:40 msgid "Timeout (Seconds)" -msgstr "" +msgstr "超市时间(秒)" #: ops/models/job.py:45 msgid "Runas" -msgstr "" +msgstr "运行用户" #: ops/models/job.py:47 msgid "Runas policy" -msgstr "" +msgstr "用户策略" #: ops/models/job.py:48 msgid "Use Parameter Define" diff --git a/apps/ops/models/job.py b/apps/ops/models/job.py index d9a4bdc58..d8a70d55e 100644 --- a/apps/ops/models/job.py +++ b/apps/ops/models/job.py @@ -104,7 +104,7 @@ class JobExecution(JMSOrgBaseModel): return { "ok": len(self.summary['ok']), "failed": len(self.summary['failures']) + len(self.summary['dark']), - "excludes": len(self.summary['excludes']), + "excludes": len(self.summary.get('excludes', {})), "total": self.job.assets.count() } @@ -121,7 +121,7 @@ class JobExecution(JMSOrgBaseModel): "status": "ok", "tasks": [], } - if self.summary["excludes"].get(asset.name, None): + if self.summary.get("excludes", None) and self.summary["excludes"].get(asset.name, None): asset_detail.update({"status": "excludes"}) result["detail"].append(asset_detail) break diff --git a/apps/ops/serializers/job.py b/apps/ops/serializers/job.py index e56fca583..81f77b915 100644 --- a/apps/ops/serializers/job.py +++ b/apps/ops/serializers/job.py @@ -37,10 +37,7 @@ class JobExecutionSerializer(BulkOrgResourceModelSerializer): read_only_fields = ["id", "task_id", "timedelta", "count", "time_cost", 'is_finished', 'date_start', 'date_finished', 'date_created', - 'is_success', 'task_id', 'short_id', 'job_type', 'creator'] + 'is_success', 'task_id', 'short_id', 'job_type'] fields = read_only_fields + [ - "job", "parameters" + "job", "parameters", "creator" ] - - - From d8cccfd40ff021ef96c602454905357a5030194e Mon Sep 17 00:00:00 2001 From: Aaron3S Date: Tue, 20 Dec 2022 16:36:22 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96job=20execution?= =?UTF-8?q?=20=E8=AF=A6=E6=83=85=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ops/models/job.py | 18 ++++++++---------- apps/ops/serializers/job.py | 6 +++--- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/apps/ops/models/job.py b/apps/ops/models/job.py index d8a70d55e..4f003895e 100644 --- a/apps/ops/models/job.py +++ b/apps/ops/models/job.py @@ -99,14 +99,11 @@ class JobExecution(JMSOrgBaseModel): date_finished = models.DateTimeField(null=True, verbose_name=_("Date finished")) @property - def count(self): - if self.is_finished and not self.summary.get('error', None): - return { - "ok": len(self.summary['ok']), - "failed": len(self.summary['failures']) + len(self.summary['dark']), - "excludes": len(self.summary.get('excludes', {})), - "total": self.job.assets.count() - } + def material(self): + if self.job.type == 'adhoc': + return "{}:{}".format(self.job.module, self.job.args) + if self.job.type == 'playbook': + return "{}:{}:{}".format(self.org.name, self.job.creator.name, self.job.playbook.name) @property def assent_result_detail(self): @@ -160,9 +157,10 @@ class JobExecution(JMSOrgBaseModel): def get_runner(self): inv = self.job.inventory inv.write_to_file(self.inventory_path) + self.summary = self.result = {"excludes": {}} if len(inv.exclude_hosts) > 0: - self.summary['excludes'] = inv.exclude_hosts - self.result['excludes'] = inv.exclude_hosts + self.summary.update({"excludes": inv.exclude_hosts}) + self.result.update({"excludes": inv.exclude_hosts}) self.save() if isinstance(self.parameters, str): diff --git a/apps/ops/serializers/job.py b/apps/ops/serializers/job.py index 81f77b915..005b88cdc 100644 --- a/apps/ops/serializers/job.py +++ b/apps/ops/serializers/job.py @@ -30,14 +30,14 @@ class JobSerializer(BulkOrgResourceModelSerializer, PeriodTaskSerializerMixin): class JobExecutionSerializer(BulkOrgResourceModelSerializer): creator = ReadableHiddenField(default=serializers.CurrentUserDefault()) job_type = serializers.ReadOnlyField(label=_("Job type")) - count = serializers.ReadOnlyField(label=_("Count")) + material = serializers.ReadOnlyField(label=_("Material")) class Meta: model = JobExecution - read_only_fields = ["id", "task_id", "timedelta", "count", "time_cost", 'is_finished', 'date_start', + read_only_fields = ["id", "task_id", "timedelta", "time_cost", 'is_finished', 'date_start', 'date_finished', 'date_created', - 'is_success', 'task_id', 'short_id', 'job_type'] + 'is_success', 'task_id', 'short_id', 'job_type', 'summary', 'material'] fields = read_only_fields + [ "job", "parameters", "creator" ]