@@ -888,7 +888,7 @@ async def autodelete_expired_users(
888888
889889async def get_all_users_usages (
890890 db : AsyncSession ,
891- admin : str ,
891+ admins : Sequence [ str ] | None ,
892892 start : datetime ,
893893 end : datetime ,
894894 period : Period = Period .hour ,
@@ -901,7 +901,7 @@ async def get_all_users_usages(
901901
902902 Args:
903903 db (AsyncSession): Database session for querying.
904- admin (Admin ): The admin user for which to retrieve user usage data .
904+ admins (Sequence[str] | None ): Admin usernames to filter users by. If None/empty, include all admins .
905905 start (datetime): Start of the period.
906906 end (datetime): End of the period.
907907 period (Period): Time period to group by ('minute', 'hour', 'day', 'month').
@@ -910,15 +910,20 @@ async def get_all_users_usages(
910910 Returns:
911911 UserUsageStatsList: Aggregated usage data for each period.
912912 """
913- admin_users = {user .id for user in await get_users (db = db , admins = admin )}
913+ admins_filter = admins or None
914+
915+ users_subquery = select (User .id )
916+ if admins_filter :
917+ users_subquery = users_subquery .join (Admin ).where (Admin .username .in_ (admins_filter ))
918+ users_subquery = users_subquery .subquery ()
914919
915920 # Build the appropriate truncation expression
916921 trunc_expr = _build_trunc_expression (db , period , NodeUserUsage .created_at )
917922
918923 conditions = [
919924 NodeUserUsage .created_at >= start ,
920925 NodeUserUsage .created_at <= end ,
921- NodeUserUsage .user_id .in_ (admin_users ),
926+ NodeUserUsage .user_id .in_ (select ( users_subquery . c . id ) ),
922927 ]
923928
924929 if node_id is not None :
0 commit comments