Skip to content

Commit de5400b

Browse files
committed
For per-user statistics endpoint, break-down the counts by platform
1 parent e6d3e92 commit de5400b

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

api/simqueue/data_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,5 +456,5 @@ class Histogram(BaseModel):
456456

457457
class UserStatistics(BaseModel):
458458
user: str
459-
jobs: int
460-
sessions: int
459+
jobs: Dict[str, int]
460+
sessions: Dict[str, int]

api/simqueue/resources/statistics.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -307,34 +307,47 @@ async def resource_usage(
307307
"""
308308
Statistics at the level of individual users (only accessible by platform administrators)
309309
"""
310+
# check permissions
310311
user = await asyncio.create_task(oauth.User.from_token(token.credentials))
311312
if not user.is_admin:
312313
raise HTTPException(
313314
status_code=status_codes.HTTP_403_FORBIDDEN,
314315
detail="Only admins can access per-user statistics",
315316
)
317+
# get data from the DB
316318
jobs = await db.query_jobs(
317319
status=["finished", "error"],
318320
date_range_start=start,
319321
date_range_end=end,
320322
size=100000,
321-
fields=["user_id"],
323+
fields=["user_id", "hardware_platform"],
322324
)
323325
sessions = await db.query_sessions(
324326
status=["finished", "error"],
325327
date_range_start=start,
326328
date_range_end=end,
327329
size=100000,
328-
fields=["user_id"],
330+
fields=["user_id", "hardware_platform"],
329331
)
330-
jobs_per_user = Counter(job["user_id"] for job in jobs)
331-
sessions_per_user = Counter(ses["user_id"] for ses in sessions)
332-
all_users = set(jobs_per_user).union(sessions_per_user)
333-
return [
334-
UserStatistics(
335-
user=user_name,
336-
jobs=jobs_per_user.get(user_name, 0),
337-
sessions=sessions_per_user.get(user_name, 0),
332+
# count jobs/sessions by user and by platform
333+
jobs_per_user = {}
334+
sessions_per_user = {}
335+
all_users = set()
336+
for platform in STANDARD_QUEUES:
337+
jobs_per_user[platform] = Counter(
338+
job["user_id"] for job in jobs if job["hardware_platform"] == platform
338339
)
339-
for user_name in all_users
340-
]
340+
sessions_per_user[platform] = Counter(
341+
ses["user_id"] for ses in sessions if ses["hardware_platform"] == platform
342+
)
343+
all_users = all_users.union(jobs_per_user[platform]).union(sessions_per_user[platform])
344+
# restructure the data for returning
345+
stats = []
346+
for user_name in all_users:
347+
user_jobs = {}
348+
user_sessions = {}
349+
for platform in STANDARD_QUEUES:
350+
user_jobs[platform] = jobs_per_user[platform].get(user_name, 0)
351+
user_sessions[platform] = sessions_per_user[platform].get(user_name, 0)
352+
stats.append(UserStatistics(user=user_name, jobs=user_jobs, sessions=user_sessions))
353+
return stats

0 commit comments

Comments
 (0)