From d8cca1e3baf9033188f00ae6cce1d50b9144957b Mon Sep 17 00:00:00 2001 From: Mark Saroufim Date: Fri, 13 Feb 2026 17:10:25 -0800 Subject: [PATCH] Add admin-only submission count per GPU type to rankings Show how many distinct submissions each user has made per leaderboard per GPU type. Visible only to admins in the rankings table. --- .../pages/leaderboard/components/RankingLists.tsx | 12 ++++++++++-- kernelboard/api/leaderboard.py | 14 +++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/leaderboard/components/RankingLists.tsx b/frontend/src/pages/leaderboard/components/RankingLists.tsx index 0a286d6..5138f5c 100644 --- a/frontend/src/pages/leaderboard/components/RankingLists.tsx +++ b/frontend/src/pages/leaderboard/components/RankingLists.tsx @@ -24,6 +24,7 @@ interface RankingItem { score: number; user_name: string; submission_id: number; + submission_count: number; } interface RankingsListProps { @@ -181,13 +182,13 @@ export default function RankingsList({ {formatMicroseconds(item.score)} - + {item.prev_score > 0 && `+${formatMicroseconds(item.prev_score)}`} - + + {isAdmin && ( + + + Subs: {item.submission_count} + + + )} {isAdmin && ( diff --git a/kernelboard/api/leaderboard.py b/kernelboard/api/leaderboard.py index 9aa34e1..ecec172 100644 --- a/kernelboard/api/leaderboard.py +++ b/kernelboard/api/leaderboard.py @@ -138,6 +138,15 @@ def _get_query(): WHERE leaderboard_id = %(leaderboard_id)s ), + -- Total submission count per user per GPU type for this leaderboard. + submission_counts AS ( + SELECT s.user_id, r.runner, COUNT(DISTINCT s.id) AS submission_count + FROM leaderboard.submission s + JOIN leaderboard.runs r ON r.submission_id = s.id + WHERE s.leaderboard_id = %(leaderboard_id)s + GROUP BY s.user_id, r.runner + ), + -- All the runs on this leaderboard. For each user and GPU type, the -- user's runs on that GPU type are ranked by score. ranked_runs AS ( @@ -147,10 +156,12 @@ def _get_query(): s.submission_time AS submission_time, s.file_name AS file_name, r.submission_id AS submission_id, + COALESCE(sc.submission_count, 0) AS submission_count, RANK() OVER (PARTITION BY r.runner, u.id ORDER BY r.score ASC) AS rank FROM leaderboard.runs r JOIN leaderboard.submission s ON r.submission_id = s.id LEFT JOIN leaderboard.user_info u ON s.user_id = u.id + LEFT JOIN submission_counts sc ON s.user_id = sc.user_id AND r.runner = sc.runner WHERE NOT r.secret AND r.score IS NOT NULL AND r.passed AND s.leaderboard_id = %(leaderboard_id)s ), @@ -164,7 +175,8 @@ def _get_query(): 'user_name', r.user_name, 'score', r.score, 'file_name', r.file_name, - 'submission_id', r.submission_id + 'submission_id', r.submission_id, + 'submission_count', r.submission_count ) ORDER BY r.score ASC )