From 385bf47b11eec95503054b21781277f17a1e4187 Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Wed, 26 Feb 2025 15:16:16 +0800 Subject: [PATCH] perf: Add last login date update for account on session save --- apps/accounts/filters.py | 2 +- apps/accounts/models/account.py | 5 +++++ apps/terminal/models/session/session.py | 5 +++++ apps/terminal/signal_handlers/session.py | 5 +++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/accounts/filters.py b/apps/accounts/filters.py index 32968ca71..406f5b832 100644 --- a/apps/accounts/filters.py +++ b/apps/accounts/filters.py @@ -108,7 +108,7 @@ class AccountFilterSet(BaseFilterSet): ) 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) -