Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: infra/tools/antibody/compute_stats.py

Issue 1257113004: Return the commits that make up the counts for no_review_url, tbr_no_lgtm, and blank_tbr (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@review-url-fixes
Patch Set: Removed extraneous tests Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | infra/tools/antibody/test/compute_stats_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import json 5 import json
6 6
7 7
8 def ratio_calculator(numerator, denominator): 8 def ratio_calculator(numerator, denominator):
9 """Computes the ratio of the counts in two lists 9 """Computes the ratio of the counts in two lists
10 10
(...skipping 21 matching lines...) Expand all
32 def totaled_ratio_calculator(numerator, denominator): 32 def totaled_ratio_calculator(numerator, denominator):
33 """Computes the ratio of the counts in two lists 33 """Computes the ratio of the counts in two lists
34 34
35 Args: 35 Args:
36 numerator(int): a totaled count 36 numerator(int): a totaled count
37 denominator(int): a totaled count 37 denominator(int): a totaled count
38 38
39 Return: 39 Return:
40 ratio(float): a ratio rounded to three decimal places 40 ratio(float): a ratio rounded to three decimal places
41 """ 41 """
42 if denominator != 0: 42 if denominator != 0:
43 ratio = round(float(numerator) / denominator, 3) 43 ratio = round(float(numerator) / denominator, 3)
44 else: 44 else:
45 raise ZeroDivisionError 45 ratio = 0
46 return ratio 46 return ratio
47 47
48 48
49 # functions that return stats calculated as lists of lists by month 49 # functions that return stats calculated as lists of lists by month
50 def total_commits(cc): # pragma: no cover 50 def total_commits(cc): # pragma: no cover
51 """Counts all the git commits sorted by month and year 51 """Counts all the git commits sorted by month and year
52 52
53 Args: 53 Args:
54 cc(cursor) 54 cc(cursor)
55 55
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 """ 296 """
297 cc.execute("""SELECT COUNT(DISTINCT git_commit_hash) 297 cc.execute("""SELECT COUNT(DISTINCT git_commit_hash)
298 FROM commit_people 298 FROM commit_people
299 INNER JOIN git_commit 299 INNER JOIN git_commit
300 ON commit_people.git_commit_hash = git_commit.hash 300 ON commit_people.git_commit_hash = git_commit.hash
301 WHERE commit_people.type = 'tbr' AND %s""" % sql_time_specification) 301 WHERE commit_people.type = 'tbr' AND %s""" % sql_time_specification)
302 result = cc.fetchone() 302 result = cc.fetchone()
303 return int(result[0]) 303 return int(result[0])
304 304
305 305
306 def totaled_tbr_no_lgtm(cc, sql_time_specification): # pragma: no cover 306 def totaled_tbr_no_lgtm(cc, sql_time_specification):
307 """Counts the number of commits with a TBR that have not been lgtm'ed 307 """Counts the number of commits with a TBR that have not been lgtm'ed
308 in a given timeframe 308 in a given timeframe
309 309
310 Args: 310 Args:
311 cc(cursor) 311 cc(cursor)
312 sql_time_specification(str): a sql command to limit the dates of the 312 sql_time_specification(str): a sql command to limit the dates of the
313 returned results 313 returned results
314 314
315 Return: 315 Return:
316 result(int): a count of all commits with a TBR and no lgtm 316 count(int): a count of all commits with a TBR and no lgtm
317 results(list): a list of lists with all tbr'ed commits with no lgtm in the
318 format [rietveld_url, git_timestamp, git_subject, git_hash]
317 """ 319 """
318 cc.execute("""SELECT COUNT(*) 320 cc.execute("""SELECT git_commit.review_url, git_commit.timestamp,
321 git_commit.subject, git_commit.hash
319 FROM review 322 FROM review
320 INNER JOIN git_commit 323 INNER JOIN git_commit
321 ON review.review_url = git_commit.review_url 324 ON review.review_url = git_commit.review_url
322 INNER JOIN commit_people 325 INNER JOIN commit_people
323 ON commit_people.git_commit_hash = git_commit.hash 326 ON commit_people.git_commit_hash = git_commit.hash
324 LEFT JOIN ( 327 LEFT JOIN (
325 SELECT review_url, COUNT(*) AS c 328 SELECT review_url, COUNT(*) AS c
326 FROM review_people 329 FROM review_people
327 WHERE type = 'lgtm' 330 WHERE type = 'lgtm'
328 GROUP BY review_url) lgtm_count 331 GROUP BY review_url) lgtm_count
329 ON review.review_url = lgtm_count.review_url 332 ON review.review_url = lgtm_count.review_url
330 WHERE lgtm_count.c = 0 OR lgtm_count.c IS NULL 333 WHERE lgtm_count.c = 0 OR lgtm_count.c IS NULL
331 AND commit_people.type = 'tbr' AND %s""" % sql_time_specification) 334 AND commit_people.type = 'tbr' AND %s""" % sql_time_specification)
332 result = cc.fetchone() 335 result = cc.fetchall()
333 return int(result[0]) 336 count = len(result)
337 results = [[commit[0], commit[1].strftime("%Y-%m-%d %H:%M:%S"),
338 commit[2], commit[3]] for commit in result]
339 return count, results
334 340
335 341
336 def totaled_blank_tbr(cc, sql_time_specification): # pragma: no cover 342 def totaled_blank_tbr(cc, sql_time_specification): # pragma: no cover
337 """Counts the number of occurences of TBR= with no reviewer listed in a 343 """Counts the number of occurences of TBR= with no reviewer listed in a
338 given timeframe 344 given timeframe
339 345
340 Args: 346 Args:
341 cc(cursor) 347 cc(cursor)
342 sql_time_specification(str): a sql command to limit the dates of the 348 sql_time_specification(str): a sql command to limit the dates of the
343 returned results 349 returned results
344 350
345 Return: 351 Return:
346 result(int): a count of all blank TBRs (TBR=) 352 count(int): a count of all blank TBRs (TBR=)
353 results(list): a list of lists with all tbr'ed commits with no lgtm in the
354 format [rietveld_url, git_timestamp, git_subject, git_hash]
347 """ 355 """
348 cc.execute("""SELECT COUNT(*) 356 cc.execute("""SELECT git_commit.review_url, git_commit.timestamp,
357 git_commit.subject, git_commit.hash
349 FROM commit_people 358 FROM commit_people
350 INNER JOIN git_commit 359 INNER JOIN git_commit
351 ON commit_people.git_commit_hash = git_commit.hash 360 ON commit_people.git_commit_hash = git_commit.hash
352 WHERE commit_people.people_email_address = 'NOBODY' 361 WHERE commit_people.people_email_address = 'NOBODY'
353 AND %s""" % sql_time_specification) 362 AND %s""" % sql_time_specification)
354 result = cc.fetchone() 363 result = cc.fetchall()
355 return int(result[0]) 364 count = len(result)
365 results = [[commit[0], commit[1].strftime("%Y-%m-%d %H:%M:%S"),
366 commit[2], commit[3]] for commit in result]
367 return count, results
356 368
357 369
358 def totaled_no_review_url(cc, sql_time_specification): # pragma: no cover 370 def totaled_no_review_url(cc, sql_time_specification): # pragma: no cover
359 """Counts the number of commits with no review url in a given timeframe 371 """Counts the number of commits with no review url in a given timeframe
360 372
361 Args: 373 Args:
362 cc(cursor) 374 cc(cursor)
363 sql_time_specification(str): a sql command to limit the dates of the 375 sql_time_specification(str): a sql command to limit the dates of the
364 returned results 376 returned results
365 377
366 Return: 378 Return:
367 result(int): a count of all commits with no review_url 379 count(int): a count of all commits with no review_url
380 results(list): a list of lists with all tbr'ed commits with no lgtm in the
381 format [rietveld_url, git_timestamp, git_subject, git_hash]
368 """ 382 """
369 cc.execute("""SELECT COUNT(*) 383 cc.execute("""SELECT git_commit.review_url, git_commit.timestamp,
384 git_commit.subject, git_commit.hash
370 FROM git_commit 385 FROM git_commit
371 WHERE review_url IS NULL AND %s""" % sql_time_specification) 386 WHERE review_url IS NULL AND %s""" % sql_time_specification)
372 result = cc.fetchone() 387 result = cc.fetchall()
373 return int(result[0]) 388 count = len(result)
389 results = [[commit[0], commit[1].strftime("%Y-%m-%d %H:%M:%S"),
390 commit[2], commit[3]] for commit in result]
391 return count, results
374 392
375 393
376 # TODO(keelerh): change the SQL query to avoid using temporary tables 394 # TODO(keelerh): change the SQL query to avoid using temporary tables
377 def tbr_to_total_people_ratio(cc, 395 def tbr_to_total_people_ratio(cc,
378 sql_time_specification=''): # pragma: no cover 396 sql_time_specification=''): # pragma: no cover
379 """Calculate TBR stats by author for the Antibody leaderboard and writes 397 """Calculate TBR stats by author for the Antibody leaderboard and writes
380 them to a json file 398 them to a json file
381 399
382 Args: 400 Args:
383 cc(cursor) 401 cc(cursor)
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 501
484 def compute_stats_by_time(cc): # pragma: no cover 502 def compute_stats_by_time(cc): # pragma: no cover
485 """Computes the stats for the past 7 days, past 30 days, and all time 503 """Computes the stats for the past 7 days, past 30 days, and all time
486 504
487 Args: 505 Args:
488 cc(cursor) 506 cc(cursor)
489 507
490 Returns: 508 Returns:
491 output(list): three dictionaries containing stats for the past 7 days, 30 509 output(list): three dictionaries containing stats for the past 7 days, 30
492 days, and all time respectively, each including timeframe, 510 days, and all time respectively, each including timeframe,
493 suspicious_to_total_ratio, total_commits, tbr_no_lgtm, 511 suspicious_to_total_ratio, a count of the number of commits
494 no_review_url, blank_tbr 512 for total_commits, tbr_no_lgtm, no_review_url, and blank_tbr,
513 and a list of lists with the relevant commits for
514 tbr_no_lgtm, no_review_url, and blank_tbr
495 """ 515 """
496 stats_7_days = {'timeframe': '7_days'} 516 stats_7_days = {'timeframe': '7_days'}
497 stats_30_days = {'timeframe': '30_days'} 517 stats_30_days = {'timeframe': '30_days'}
498 stats_all_time = {'timeframe': 'all_time'} 518 stats_all_time = {'timeframe': 'all_time'}
499 for d in [stats_7_days, stats_30_days, stats_all_time]: 519 for d in [stats_7_days, stats_30_days, stats_all_time]:
500 if d == stats_7_days: 520 if d == stats_7_days:
501 sql_insert = 'DATEDIFF(NOW(), git_commit.timestamp) <= 7' 521 sql_insert = 'DATEDIFF(NOW(), git_commit.timestamp) <= 7'
502 elif d == stats_30_days: 522 elif d == stats_30_days:
503 sql_insert = 'DATEDIFF(NOW(), git_commit.timestamp) <= 30' 523 sql_insert = 'DATEDIFF(NOW(), git_commit.timestamp) <= 30'
504 elif d == stats_all_time: 524 elif d == stats_all_time:
505 sql_insert = 'DATEDIFF(git_commit.timestamp, NOW()) < 0' 525 sql_insert = 'DATEDIFF(git_commit.timestamp, NOW()) < 0'
506 tot_commits = totaled_total_commits(cc, sql_insert) 526 tot_commits = totaled_total_commits(cc, sql_insert)
507 tot_suspicious = totaled_total_suspicious(cc, sql_insert) 527 tot_suspicious = totaled_total_suspicious(cc, sql_insert)
508 d['suspicious_to_total_ratio'] = totaled_ratio_calculator(tot_suspicious, 528 d['suspicious_to_total_ratio'] = totaled_ratio_calculator(tot_suspicious,
509 tot_commits) 529 tot_commits)
510 d['total_commits'] = tot_commits 530 d['total_commits'] = tot_commits
511 d['tbr_no_lgtm'] = totaled_tbr_no_lgtm(cc, sql_insert) 531 count_tbr_no_lgtm, tbr_no_lgtm_commits = totaled_tbr_no_lgtm(cc, sql_insert)
512 d['no_review_url'] = totaled_no_review_url(cc, sql_insert) 532 d['tbr_no_lgtm'] = count_tbr_no_lgtm
513 d['blank_tbr'] = totaled_blank_tbr(cc, sql_insert) 533 d['tbr_no_lgtm_commits'] = tbr_no_lgtm_commits
534 count_no_review_url, no_review_url_commits = totaled_no_review_url(
535 cc, sql_insert)
536 d['no_review_url'] = count_no_review_url
537 d['no_review_url_commits'] = no_review_url_commits
538 count_blank_tbr, blank_tbr_commits = totaled_blank_tbr(cc, sql_insert)
539 d['blank_tbr'] = count_blank_tbr
540 d['blank_tbr_commits'] = blank_tbr_commits
514 output = [stats_7_days, stats_30_days, stats_all_time] 541 output = [stats_7_days, stats_30_days, stats_all_time]
515 return output 542 return output
516 543
517 544
518 def all_monthly_stats(cc, filename): # pragma: no cover 545 def all_monthly_stats(cc, filename): # pragma: no cover
519 """Write stats calculated over different time segments as json to file 546 """Write stats calculated over different time segments as json to file
520 547
521 Args: 548 Args:
522 cc(cursor) 549 cc(cursor)
523 filename(str): the json file to write to 550 filename(str): the json file to write to
(...skipping 25 matching lines...) Expand all
549 """Writes stats for the past month Antibody leaderboard to a json file 576 """Writes stats for the past month Antibody leaderboard to a json file
550 577
551 Args: 578 Args:
552 cc(cursor) 579 cc(cursor)
553 filename(str): the json file to write to 580 filename(str): the json file to write to
554 """ 581 """
555 sql_time_specification = 'AND DATEDIFF(NOW(), git_commit.timestamp) <= 30' 582 sql_time_specification = 'AND DATEDIFF(NOW(), git_commit.timestamp) <= 30'
556 output = tbr_to_total_people_ratio(cc, sql_time_specification) 583 output = tbr_to_total_people_ratio(cc, sql_time_specification)
557 with open(filename, 'w') as f: 584 with open(filename, 'w') as f:
558 json.dump(output, f) 585 json.dump(output, f)
OLDNEW
« no previous file with comments | « no previous file | infra/tools/antibody/test/compute_stats_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698