mirror of
https://github.com/ansible/awx.git
synced 2026-05-10 02:47:36 -02:30
Merge pull request #3910 from AlanCoding/no_user_get
Avoid unnecessary user get expiring session memberships Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
This commit is contained in:
@@ -177,14 +177,14 @@ class UserSessionMembership(BaseModel):
|
||||
created = models.DateTimeField(default=None, editable=False)
|
||||
|
||||
@staticmethod
|
||||
def get_memberships_over_limit(user, now=None):
|
||||
def get_memberships_over_limit(user_id, now=None):
|
||||
if settings.SESSIONS_PER_USER == -1:
|
||||
return []
|
||||
if now is None:
|
||||
now = tz_now()
|
||||
query_set = UserSessionMembership.objects\
|
||||
.select_related('session')\
|
||||
.filter(user=user)\
|
||||
.filter(user_id=user_id)\
|
||||
.order_by('-created')
|
||||
non_expire_memberships = [x for x in query_set if x.session.expire_date > now]
|
||||
return non_expire_memberships[settings.SESSIONS_PER_USER:]
|
||||
|
||||
@@ -652,20 +652,19 @@ def save_user_session_membership(sender, **kwargs):
|
||||
return
|
||||
if not session:
|
||||
return
|
||||
user = session.get_decoded().get(SESSION_KEY, None)
|
||||
if not user:
|
||||
user_id = session.get_decoded().get(SESSION_KEY, None)
|
||||
if not user_id:
|
||||
return
|
||||
user = User.objects.get(pk=user)
|
||||
if UserSessionMembership.objects.filter(user=user, session=session).exists():
|
||||
if UserSessionMembership.objects.filter(user=user_id, session=session).exists():
|
||||
return
|
||||
UserSessionMembership(user=user, session=session, created=timezone.now()).save()
|
||||
expired = UserSessionMembership.get_memberships_over_limit(user)
|
||||
UserSessionMembership(user_id=user_id, session=session, created=timezone.now()).save()
|
||||
expired = UserSessionMembership.get_memberships_over_limit(user_id)
|
||||
for membership in expired:
|
||||
Session.objects.filter(session_key__in=[membership.session_id]).delete()
|
||||
membership.delete()
|
||||
if len(expired):
|
||||
consumers.emit_channel_notification(
|
||||
'control-limit_reached_{}'.format(user.pk),
|
||||
'control-limit_reached_{}'.format(user_id),
|
||||
dict(group_name='control', reason='limit_reached')
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user