diff --git a/apps/accounts/automations/check_account/manager.py b/apps/accounts/automations/check_account/manager.py index 34640adf8..02b60b1da 100644 --- a/apps/accounts/automations/check_account/manager.py +++ b/apps/accounts/automations/check_account/manager.py @@ -220,8 +220,6 @@ class CheckAccountManager(BaseManager): def pre_run(self): super().pre_run() self.assets = self.execution.get_all_assets() - self.execution.date_start = timezone.now() - self.execution.save(update_fields=["date_start"]) def batch_check(self, handler): print("Engine: {}".format(handler.__class__.__name__)) diff --git a/apps/assets/automations/base/manager.py b/apps/assets/automations/base/manager.py index 2e5e96de5..14dd3d9ef 100644 --- a/apps/assets/automations/base/manager.py +++ b/apps/assets/automations/base/manager.py @@ -105,10 +105,16 @@ class BaseManager: return self.execution.all_assets_group_by_platform() def pre_run(self): - self.execution.date_start = timezone.now() + date_start = timezone.now() + self.execution.date_start = date_start self.execution.status = Status.running self.execution.save(update_fields=["date_start", "status"]) + automation = self.execution.automation + if automation: + automation.last_execution_date = date_start + automation.save(update_fields=['last_execution_date']) + def update_execution(self): self.duration = int(time.time() - self.time_start) self.execution.date_finished = timezone.now() @@ -340,6 +346,7 @@ class PlaybookPrepareMixin: if not platform.automation or not platform.automation.ansible_enabled: print(_(" - Platform {} ansible disabled").format(platform.name)) self.on_assets_not_ansible_enabled(assets) + return False automation = platform.automation diff --git a/apps/assets/migrations/0013_baseautomation_last_execution_date.py b/apps/assets/migrations/0013_baseautomation_last_execution_date.py new file mode 100644 index 000000000..8e6bda6c2 --- /dev/null +++ b/apps/assets/migrations/0013_baseautomation_last_execution_date.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.13 on 2025-03-05 08:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0012_auto_20241204_1516'), + ] + + operations = [ + migrations.AddField( + model_name='baseautomation', + name='last_execution_date', + field=models.DateTimeField(blank=True, null=True, verbose_name='Last execution date'), + ), + ] diff --git a/apps/assets/models/automations/base.py b/apps/assets/models/automations/base.py index 3c235ea9d..bb89d3942 100644 --- a/apps/assets/models/automations/base.py +++ b/apps/assets/models/automations/base.py @@ -27,6 +27,9 @@ class BaseAutomation(PeriodTaskModelMixin, JMSOrgBaseModel): type = models.CharField(max_length=16, verbose_name=_("Type")) is_active = models.BooleanField(default=True, verbose_name=_("Is active")) params = models.JSONField(default=dict, verbose_name=_("Parameters")) + last_execution_date = models.DateTimeField( + null=True, blank=True, verbose_name=_('Last execution date') + ) objects = BaseAutomationManager.from_queryset(models.QuerySet)() diff --git a/apps/assets/serializers/automations/base.py b/apps/assets/serializers/automations/base.py index 44e9f65fb..ce42f39dd 100644 --- a/apps/assets/serializers/automations/base.py +++ b/apps/assets/serializers/automations/base.py @@ -23,7 +23,7 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe class Meta: read_only_fields = [ 'date_created', 'date_updated', 'created_by', - 'periodic_display', 'executed_amount', 'type' + 'periodic_display', 'executed_amount', 'type', 'last_execution_date' ] mini_fields = [ 'id', 'name', 'type', 'is_periodic', 'interval', diff --git a/apps/i18n/lina/en.json b/apps/i18n/lina/en.json index 58a249ac6..b7c08a811 100644 --- a/apps/i18n/lina/en.json +++ b/apps/i18n/lina/en.json @@ -1505,5 +1505,6 @@ "forceEnableMFAHelpText": "If force enable, user can not disable by themselves", "removeWarningMsg": "Are you sure you want to remove", "setVariable": "Set variable", - "IgnoreAlert": "Ignore alert" + "IgnoreAlert": "Ignore alert", + "DeleteGatherAccountTitle": "Delete gather account" } \ No newline at end of file diff --git a/apps/i18n/lina/zh.json b/apps/i18n/lina/zh.json index b5ca944c3..67439fc3c 100644 --- a/apps/i18n/lina/zh.json +++ b/apps/i18n/lina/zh.json @@ -580,7 +580,7 @@ "Footer": "页脚", "ForgotPasswordURL": "忘记密码链接", "FormatError": "格式错误", - "FoundAccountInAssetDeleteMsg": "删除从系统资产中发现的找好", + "FoundAccountInAssetDeleteMsg": "删除从系统资产中发现的账号", "Friday": "周五", "From": "从", "FromTicket": "来自工单", @@ -1026,7 +1026,7 @@ "RelevantCommand": "命令", "RelevantSystemUser": "系统用户", "RemoteAddr": "远端地址", - "RemoteAssetFoundAccountDeleteMsg": "删除从远端资产中发现的找好", + "RemoteAssetFoundAccountDeleteMsg": "删除从远端资产中发现的账号", "Remove": "移除", "RemoveAssetFromNode": "从节点移除资产", "RemoveSelected": "移除所选", @@ -1504,5 +1504,7 @@ "forceEnableMFAHelpText": "如果强制启用,用户无法自行禁用", "removeWarningMsg": "你确定要移除", "setVariable": "设置参数", - "IgnoreAlert": "忽略警报" + "IgnoreAlert": "忽略警报", + "DeleteGatherAccountTitle": "删除发现的账号" + } \ No newline at end of file