From 4872dacc586129ffe8e662e78dcab73d944ffd73 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 25 Nov 2024 19:17:53 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../automations/backup_account/handlers.py | 4 +- .../automations/backup_account/manager.py | 2 +- .../automations/change_secret/manager.py | 2 +- .../automations/gather_account/filter.py | 6 +-- .../automations/gather_account/manager.py | 46 +++++++++++-------- apps/i18n/core/en/LC_MESSAGES/django.po | 2 +- apps/i18n/core/ja/LC_MESSAGES/django.po | 2 +- apps/i18n/core/zh/LC_MESSAGES/django.po | 2 +- apps/i18n/core/zh_Hant/LC_MESSAGES/django.po | 2 +- apps/i18n/lina/en.json | 2 +- apps/ops/serializers/job.py | 2 +- .../templates/ldap/_msg_import_ldap_user.html | 2 +- 12 files changed, 42 insertions(+), 32 deletions(-) diff --git a/apps/accounts/automations/backup_account/handlers.py b/apps/accounts/automations/backup_account/handlers.py index 5ca137cd3..fc76732e8 100644 --- a/apps/accounts/automations/backup_account/handlers.py +++ b/apps/accounts/automations/backup_account/handlers.py @@ -153,7 +153,7 @@ class AccountBackupHandler: wb.close() files.append(filename) timedelta = round((time.time() - time_start), 2) - time_cost = _('Time cost') + time_cost = _('Duration') file_created = _('Backup file creation completed') print('{}: {} {}s'.format(file_created, time_cost, timedelta)) return files @@ -292,7 +292,7 @@ class AccountBackupHandler: def run(self): plan_start = _('Plan start') plan_end = _('Plan end') - time_cost = _('Time cost') + time_cost = _('Duration') error = _('An exception occurred during task execution') print('{}: {}'.format(plan_start, local_now_display())) time_start = time.time() diff --git a/apps/accounts/automations/backup_account/manager.py b/apps/accounts/automations/backup_account/manager.py index 130bef30a..700a07f75 100644 --- a/apps/accounts/automations/backup_account/manager.py +++ b/apps/accounts/automations/backup_account/manager.py @@ -32,5 +32,5 @@ class AccountBackupManager(BaseManager): print('\n\n' + '-' * 80) plan_execution_end = _('Plan execution end') print('{} {}\n'.format(plan_execution_end, local_now_display())) - time_cost = _('Time cost') + time_cost = _('Duration') print('{}: {}s'.format(time_cost, self.duration)) diff --git a/apps/accounts/automations/change_secret/manager.py b/apps/accounts/automations/change_secret/manager.py index f822f0ca5..9d624e4f9 100644 --- a/apps/accounts/automations/change_secret/manager.py +++ b/apps/accounts/automations/change_secret/manager.py @@ -224,7 +224,7 @@ class ChangeSecretManager(AccountBasePlaybookManager): print('\n\n' + '-' * 80) plan_execution_end = _('Plan execution end') print('{} {}\n'.format(plan_execution_end, local_now_filename())) - time_cost = _('Time cost') + time_cost = _('Duration') print('{}: {}s'.format(time_cost, self.duration)) print(summary) diff --git a/apps/accounts/automations/gather_account/filter.py b/apps/accounts/automations/gather_account/filter.py index 209616dee..e2aafd630 100644 --- a/apps/accounts/automations/gather_account/filter.py +++ b/apps/accounts/automations/gather_account/filter.py @@ -50,7 +50,7 @@ class GatherAccountsFilter: if not line.strip() or ' ' not in line: continue username, login = line.split(' ', 1) - user_last_login[username] = login + user_last_login[username] = login.split() user_authorized = info.pop('user_authorized', []) username_authorized = {} @@ -78,9 +78,9 @@ class GatherAccountsFilter: login = user_last_login.get(username) or '' if login and len(login) == 3: - user['address_last_login'] = login[1][:32] + user['address_last_login'] = login[0][:32] try: - login_date = timezone.datetime.fromisoformat(login[2]) + login_date = timezone.datetime.fromisoformat(login[1]) user['date_last_login'] = login_date except ValueError: pass diff --git a/apps/accounts/automations/gather_account/manager.py b/apps/accounts/automations/gather_account/manager.py index 04588920c..446f00647 100644 --- a/apps/accounts/automations/gather_account/manager.py +++ b/apps/accounts/automations/gather_account/manager.py @@ -5,7 +5,6 @@ from django.utils import timezone from accounts.const import AutomationTypes from accounts.models import GatheredAccount, Account, AccountRisk -from assets.models import Asset from common.const import ConfirmOrIgnore from common.decorators import bulk_create_decorator, bulk_update_decorator from common.utils import get_logger @@ -13,17 +12,22 @@ from common.utils.strings import get_text_diff from orgs.utils import tmp_to_org from .filter import GatherAccountsFilter from ..base.manager import AccountBasePlaybookManager -from ...notifications import GatherAccountChangeMsg logger = get_logger(__name__) - -diff_items = [ +risk_items = [ "authorized_keys", "sudoers", "groups", ] +diff_items = risk_items + [ + "address_last_login", + "date_last_login", + "date_password_change", + "date_password_expired", +] + def get_items_diff(ori_account, d): if hasattr(ori_account, "_diff"): @@ -34,14 +38,16 @@ def get_items_diff(ori_account, d): ori = getattr(ori_account, item) new = d.get(item, "") - if not ori: + if not ori and not new: continue - if isinstance(new, timezone.datetime): - new = ori.strftime("%Y-%m-%d %H:%M:%S") + if isinstance(ori, timezone.datetime): ori = ori.strftime("%Y-%m-%d %H:%M:%S") + if isinstance(new, timezone.datetime): + new = new.strftime("%Y-%m-%d %H:%M:%S") + if new != ori: - diff[item] = get_text_diff(ori, new) + diff[item] = get_text_diff(str(ori), str(new)) ori_account._diff = diff return diff @@ -70,12 +76,13 @@ class AnalyseAccountRisk: def _analyse_item_changed(self, ori_account, d): diff = get_items_diff(ori_account, d) - if not diff: return risks = [] for k, v in diff.items(): + if k not in risk_items: + continue risks.append( dict( asset=ori_account.asset, @@ -191,7 +198,7 @@ class GatherAccountsManager(AccountBasePlaybookManager): result = self._filter_success_result(asset.type, info) accounts = [] for username, info in result.items(): - self.asset_usernames_mapper[asset].add(username) + self.asset_usernames_mapper[str(asset.id)].add(username) d = {"asset": asset, "username": username, "remote_present": True, **info} accounts.append(d) @@ -217,14 +224,14 @@ class GatherAccountsManager(AccountBasePlaybookManager): "asset", "username" ) - for asset, username in accounts: - self.ori_asset_usernames[asset].add(username) + for asset_id, username in accounts: + self.ori_asset_usernames[str(asset_id)].add(username) ga_accounts = GatheredAccount.objects.filter(asset__in=assets).prefetch_related( "asset" ) for account in ga_accounts: - self.ori_gathered_usernames[account.asset].add(account.username) + self.ori_gathered_usernames[str(account.asset_id)].add(account.username) key = "{}_{}".format(account.asset_id, account.username) self.ori_gathered_accounts_mapper[key] = account @@ -235,9 +242,9 @@ class GatherAccountsManager(AccountBasePlaybookManager): 远端账号 -> 收集账号 -> 特权账号 """ - remote_users = self.asset_usernames_mapper[asset] - ori_users = self.ori_asset_usernames[asset] - ori_ga_users = self.ori_gathered_usernames[asset] + remote_users = self.asset_usernames_mapper[str(asset.id)] + ori_users = self.ori_asset_usernames[str(asset.id)] + ori_ga_users = self.ori_gathered_usernames[str(asset.id)] queryset = GatheredAccount.objects.filter(asset=asset).exclude( status=ConfirmOrIgnore.ignored @@ -305,8 +312,11 @@ class GatherAccountsManager(AccountBasePlaybookManager): # 资产上没有的,标识为为存在 ( queryset.exclude(username__in=ori_users) - .filter(present=False) - .update(present=True) + .filter(present=True) + .update(present=False) + ) + queryset.filter(username__in=ori_users).filter(present=False).update( + present=True ) @bulk_create_decorator(GatheredAccount) diff --git a/apps/i18n/core/en/LC_MESSAGES/django.po b/apps/i18n/core/en/LC_MESSAGES/django.po index 984f63907..5162f86db 100644 --- a/apps/i18n/core/en/LC_MESSAGES/django.po +++ b/apps/i18n/core/en/LC_MESSAGES/django.po @@ -38,7 +38,7 @@ msgstr "" #: accounts/automations/backup_account/handlers.py:295 #: accounts/automations/backup_account/manager.py:40 ops/serializers/job.py:76 #: settings/templates/ldap/_msg_import_ldap_user.html:7 -msgid "Time cost" +msgid "Duration" msgstr "" #: accounts/automations/backup_account/handlers.py:157 diff --git a/apps/i18n/core/ja/LC_MESSAGES/django.po b/apps/i18n/core/ja/LC_MESSAGES/django.po index b211f8bc1..3d1302afe 100644 --- a/apps/i18n/core/ja/LC_MESSAGES/django.po +++ b/apps/i18n/core/ja/LC_MESSAGES/django.po @@ -38,7 +38,7 @@ msgstr "アセットまたはアプリケーション関連のバックアップ #: accounts/automations/backup_account/handlers.py:295 #: accounts/automations/backup_account/manager.py:40 ops/serializers/job.py:76 #: settings/templates/ldap/_msg_import_ldap_user.html:7 -msgid "Time cost" +msgid "Duration" msgstr "時を過ごす" #: accounts/automations/backup_account/handlers.py:157 diff --git a/apps/i18n/core/zh/LC_MESSAGES/django.po b/apps/i18n/core/zh/LC_MESSAGES/django.po index 618087247..23d55c74b 100644 --- a/apps/i18n/core/zh/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh/LC_MESSAGES/django.po @@ -37,7 +37,7 @@ msgstr "生成资产或应用相关备份信息文件" #: accounts/automations/backup_account/handlers.py:295 #: accounts/automations/backup_account/manager.py:40 ops/serializers/job.py:76 #: settings/templates/ldap/_msg_import_ldap_user.html:7 -msgid "Time cost" +msgid "Duration" msgstr "花费时间" #: accounts/automations/backup_account/handlers.py:157 diff --git a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po index 14c62ac78..8512b1e4e 100644 --- a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po @@ -39,7 +39,7 @@ msgstr "生成與資產或應用程序相關的備份信息文件" #: accounts/automations/backup_account/handlers.py:295 #: accounts/automations/backup_account/manager.py:40 ops/serializers/job.py:76 #: settings/templates/ldap/_msg_import_ldap_user.html:7 -msgid "Time cost" +msgid "Duration" msgstr "花費時間" #: accounts/automations/backup_account/handlers.py:157 diff --git a/apps/i18n/lina/en.json b/apps/i18n/lina/en.json index dedaaa675..5b0e5e82b 100644 --- a/apps/i18n/lina/en.json +++ b/apps/i18n/lina/en.json @@ -1249,7 +1249,7 @@ "TicketFlowUpdate": "Update the approval flow", "Tickets": "Tickets", "Time": "Time", - "TimeDelta": "Time cost", + "TimeDelta": "Duration", "TimeExpression": "Time expression", "Timeout": "Timeout", "TimeoutHelpText": "When this value is -1, no timeout is specified.", diff --git a/apps/ops/serializers/job.py b/apps/ops/serializers/job.py index 431b062d0..0327be5c8 100644 --- a/apps/ops/serializers/job.py +++ b/apps/ops/serializers/job.py @@ -73,7 +73,7 @@ class JobExecutionSerializer(BulkOrgResourceModelSerializer): material = serializers.ReadOnlyField(label=_("Command")) is_success = serializers.ReadOnlyField(label=_("Is success")) is_finished = serializers.ReadOnlyField(label=_("Is finished")) - time_cost = serializers.ReadOnlyField(label=_("Time cost")) + time_cost = serializers.ReadOnlyField(label=_("Duration")) class Meta: model = JobExecution diff --git a/apps/settings/templates/ldap/_msg_import_ldap_user.html b/apps/settings/templates/ldap/_msg_import_ldap_user.html index cbcd63334..3077ee18a 100644 --- a/apps/settings/templates/ldap/_msg_import_ldap_user.html +++ b/apps/settings/templates/ldap/_msg_import_ldap_user.html @@ -4,7 +4,7 @@ {% trans "Synced Organization" %}: