diff --git a/apps/accounts/automations/base/manager.py b/apps/accounts/automations/base/manager.py index b52dd4c2a..bc33f588e 100644 --- a/apps/accounts/automations/base/manager.py +++ b/apps/accounts/automations/base/manager.py @@ -138,10 +138,12 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): account.secret = getattr(recorder, 'new_secret', account.secret) account.date_updated = timezone.now() + account.date_change_secret = timezone.now() + account.change_secret_status = ChangeSecretRecordStatusChoice.success with safe_db_connection(): recorder.save(update_fields=['status', 'date_finished']) - account.save(update_fields=['secret', 'date_updated']) + account.save(update_fields=['secret', 'date_updated', 'date_change_secret', 'change_secret_status']) self.summary['ok_accounts'] += 1 self.result['ok_accounts'].append( diff --git a/apps/accounts/filters.py b/apps/accounts/filters.py index 32968ca71..b305196df 100644 --- a/apps/accounts/filters.py +++ b/apps/accounts/filters.py @@ -7,6 +7,7 @@ from django_filters import rest_framework as drf_filters from assets.models import Node from common.drf.filters import BaseFilterSet from common.utils.timezone import local_zero_hour, local_now +from .const.automation import ChangeSecretRecordStatusChoice from .models import Account, GatheredAccount, ChangeSecretRecord, PushSecretRecord, IntegrationApplication @@ -104,11 +105,11 @@ class AccountFilterSet(BaseFilterSet): if name == "latest_secret_change_failed": queryset = queryset.filter(date_change_secret__gt=date).exclude( - change_secret_status="ok" + change_secret_status=ChangeSecretRecordStatusChoice.success ) if kwargs: - queryset = queryset.filter(date_last_login__gte=date) + queryset = queryset.filter(**kwargs) return queryset @staticmethod diff --git a/apps/accounts/models/account.py b/apps/accounts/models/account.py index 1f363b678..5e90aee98 100644 --- a/apps/accounts/models/account.py +++ b/apps/accounts/models/account.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils import timezone from django.utils.translation import gettext_lazy as _ from simple_history.models import HistoricalRecords @@ -167,6 +168,10 @@ class Account(AbsConnectivity, LabeledMixin, BaseAccount): return escape(value) + def update_last_login_date(self): + self.date_last_login = timezone.now() + self.save(update_fields=['date_last_login']) + def replace_history_model_with_mixin(): """ diff --git a/apps/terminal/models/session/session.py b/apps/terminal/models/session/session.py index 85a8e8273..b037e83bc 100644 --- a/apps/terminal/models/session/session.py +++ b/apps/terminal/models/session/session.py @@ -11,6 +11,7 @@ from django.db import models from django.utils import timezone from django.utils.translation import gettext_lazy as _ +from accounts.models import Account from assets.models import Asset from common.const.signals import OP_LOG_SKIP_SIGNAL from common.utils import get_object_or_none, lazyproperty @@ -125,6 +126,10 @@ class Session(OrgModelMixin): def user_obj(self): return User.objects.get(id=self.user_id) + @property + def account_obj(self): + return get_object_or_none(Account, pk=self.account_id) + def can_replay(self): return self.has_replay diff --git a/apps/terminal/signal_handlers/session.py b/apps/terminal/signal_handlers/session.py index 4c79de9ed..6a75c42e8 100644 --- a/apps/terminal/signal_handlers/session.py +++ b/apps/terminal/signal_handlers/session.py @@ -5,9 +5,11 @@ from terminal.models import Session @receiver(pre_save, sender=Session) -def on_session_pre_save(sender, instance,**kwargs): +def on_session_pre_save(sender, instance, **kwargs): if instance.need_update_cmd_amount: instance.cmd_amount = instance.compute_command_amount() + if instance.account_obj: + instance.account_obj.update_last_login_date() @receiver(post_save, sender=Session) @@ -16,4 +18,3 @@ def on_session_finished(sender, instance: Session, created, **kwargs): return # 清理一次可能因 task 未执行的缓存数据 Session.unlock_session(instance.id) -