-
Notifications
You must be signed in to change notification settings - Fork 14
add lb option to show-stats #283
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -530,32 +530,36 @@ def get_leaderboard_submissions( | |||||||||||||||||||||||||||||||||||||||||||||||||||||
for submission in self.cursor.fetchall() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
def generate_stats(self, last_day: bool): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
def generate_stats(self, last_day: bool, leaderboard_name: Optional[str] = None): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update the docstring for
Suggested change
Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
return self._generate_stats(last_day) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
return self._generate_stats(last_day, leaderboard_name) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
except Exception as e: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
logging.exception("error generating stats", exc_info=e) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
raise | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _generate_runner_stats(self, last_day: bool = False): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _generate_runner_stats(self, last_day: bool = False, leaderboard_name: Optional[str] = None): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [nitpick] The leaderboard filter logic is duplicated across multiple methods; consider extracting a helper to build and append the WHERE/AND clauses. Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
select_expr = "WHERE NOW() - s.submission_time <= interval '24 hours'" if last_day else "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if leaderboard_name: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
select_expr += f"AND s.leaderboard_id = (SELECT id FROM leaderboard.leaderboard WHERE name = '{leaderboard_name}')" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if not last_day: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
select_expr = select_expr.replace("AND", "WHERE") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
# per-runner stats | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.cursor.execute( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
f""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
runner, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*) FILTER (WHERE passed), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(score), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*) FILTER (WHERE secret), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
MAX(runs.start_time - s.submission_time), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
AVG(runs.start_time - s.submission_time), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SUM(runs.end_time - runs.start_time) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
FROM leaderboard.runs JOIN leaderboard.submission s ON submission_id = s.id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{select_expr} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
GROUP BY runner; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
f""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+543
to
+548
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Interpolating
Suggested change
Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
runner, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*) FILTER (WHERE passed), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(score), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*) FILTER (WHERE secret), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
MAX(runs.start_time - s.submission_time), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
AVG(runs.start_time - s.submission_time), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SUM(runs.end_time - runs.start_time) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
FROM leaderboard.runs JOIN leaderboard.submission s ON submission_id = s.id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{select_expr} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
GROUP BY runner; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
result = {} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
for row in self.cursor.fetchall(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -569,50 +573,71 @@ def _generate_runner_stats(self, last_day: bool = False): | |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
return result | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _generate_submission_stats(self, last_day: bool = False): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
select_expr = "WHERE NOW() - submission_time <= interval '24 hours'" if last_day else "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _generate_submission_stats(self, last_day: bool = False, leaderboard_name: Optional[str] = None): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
select_expr = "WHERE NOW() - s.submission_time <= interval '24 hours'" if last_day else "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
leaderboard_filter = "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if leaderboard_name: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
leaderboard_filter = f"WHERE leaderboard_id = (SELECT id FROM leaderboard.leaderboard WHERE name = '{leaderboard_name}')" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if last_day: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
leaderboard_filter = leaderboard_filter.replace("WHERE", "AND", 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
select_expr += leaderboard_filter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.cursor.execute( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
f""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*) FILTER (WHERE NOT done), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(DISTINCT user_id) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
FROM leaderboard.submission | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{select_expr} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
f""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(*) FILTER (WHERE NOT done), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
COUNT(DISTINCT user_id) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
FROM leaderboard.submission s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{select_expr} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
""", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
num_sub, num_sub_wait, num_users = self.cursor.fetchone() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
"num_submissions": num_sub, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
"sub_waiting": num_sub_wait, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
"num_users": num_users, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _generate_stats(self, last_day: bool = False): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
result = self._generate_submission_stats(last_day) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
result.update(self._generate_runner_stats(last_day)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _generate_stats(self, last_day: bool = False, leaderboard_name: Optional[str] = None): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
result = self._generate_submission_stats(last_day, leaderboard_name) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
result.update(self._generate_runner_stats(last_day, leaderboard_name)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
# code-level stats | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if not last_day: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.cursor.execute( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
leaderboard_filter = "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if leaderboard_name: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
leaderboard_filter = f""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
WHERE id IN ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT code_id FROM leaderboard.submission s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
JOIN leaderboard.leaderboard l ON s.leaderboard_id = l.id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
WHERE l.name = '{leaderboard_name}' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT COUNT(*) FROM leaderboard.code_files; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.cursor.execute( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
f""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT COUNT(*) FROM leaderboard.code_files | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{leaderboard_filter}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
result["num_unique_codes"] = self.cursor.fetchone()[0] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
# calculate heavy hitters | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
leaderboard_filter = "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if leaderboard_name: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
leaderboard_filter = f"AND l.name = '{leaderboard_name}'" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.cursor.execute( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
f""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
WITH run_durations AS ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
s.user_id AS user_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
r.end_time - r.start_time AS duration | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
FROM leaderboard.runs r | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
JOIN leaderboard.submission s ON r.submission_id = s.id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
JOIN leaderboard.leaderboard l ON s.leaderboard_id = l.id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
WHERE NOW() - s.submission_time <= interval '24 hours' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{leaderboard_filter} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
user_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[nitpick] Consider renaming
last_day_only
tolast_day
(or vice versa) to match the database method’s parameter name and improve consistency.Copilot uses AI. Check for mistakes.