From ca6b18ab5cb94153a9dae233f975d36bf6b19b76 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Fri, 13 Feb 2026 13:40:59 -0600 Subject: [PATCH] refac: is_user_active --- backend/open_webui/models/users.py | 8 ++++++++ backend/open_webui/routers/channels.py | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 7e398c1e4..fffeb32d3 100644 --- a/backend/open_webui/models/users.py +++ b/backend/open_webui/models/users.py @@ -762,6 +762,14 @@ class UsersTable: ) return count + @staticmethod + def is_active(user: UserModel) -> bool: + """Compute active status from an already-loaded UserModel (no DB hit).""" + if user.last_active_at: + three_minutes_ago = int(time.time()) - 180 + return user.last_active_at >= three_minutes_ago + return False + def is_user_active(self, user_id: str, db: Optional[Session] = None) -> bool: with get_db_context(db) as db: user = db.query(User).filter_by(id=user_id).first() diff --git a/backend/open_webui/routers/channels.py b/backend/open_webui/routers/channels.py index 1748eaf7e..3add5023e 100644 --- a/backend/open_webui/routers/channels.py +++ b/backend/open_webui/routers/channels.py @@ -204,7 +204,7 @@ async def get_channels( UserIdNameStatusResponse( **{ **user.model_dump(), - "is_active": Users.is_user_active(user.id, db=db), + "is_active": Users.is_active(user), } ) for user in Users.get_users_by_user_ids(user_ids, db=db) @@ -424,7 +424,7 @@ async def get_channel_by_id( UserIdNameStatusResponse( **{ **user.model_dump(), - "is_active": Users.is_user_active(user.id, db=db), + "is_active": Users.is_active(user), } ) for user in Users.get_users_by_user_ids(user_ids, db=db) @@ -541,7 +541,7 @@ async def get_channel_members_by_id( return { "users": [ UserModelResponse( - **user.model_dump(), is_active=Users.is_user_active(user.id, db=db) + **user.model_dump(), is_active=Users.is_active(user) ) for user in users ], @@ -576,7 +576,7 @@ async def get_channel_members_by_id( return { "users": [ UserModelResponse( - **user.model_dump(), is_active=Users.is_user_active(user.id, db=db) + **user.model_dump(), is_active=Users.is_active(user) ) for user in users ],