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

Unified Diff: dashboard/dashboard/speed_releasing.py

Issue 2684813002: Handles milestones. Needs to be broken up. (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: dashboard/dashboard/speed_releasing.py
diff --git a/dashboard/dashboard/speed_releasing.py b/dashboard/dashboard/speed_releasing.py
index f6a1fc67b8da706612a1914825a59040b57449d1..4199a1f5026e221f6c1359209e02d4370e7374ef 100644
--- a/dashboard/dashboard/speed_releasing.py
+++ b/dashboard/dashboard/speed_releasing.py
@@ -15,28 +15,20 @@ from dashboard.models import graph_data
from dashboard.models import table_config
CLANK_MILESTONES = {
- 56: 1479546161,
- 57: 1485025126,
+ 54: (1473196450, 1475824394),
+ 55: (1475841673, 1479536199),
+ 56: (1479546161, 1485025126),
+ 57: (1485025126, None),
}
-CHROUMIUM_MILESTONES = {
- 44: 330231,
- 45: 338390,
- 46: 344925,
- 47: 352221,
- 48: 359700,
- 49: 370022,
- 50: 378097,
- 51: 388729,
- 52: 403382,
- 53: 413836,
- 54: 416640,
- 55: 433391,
- 56: 433400,
- 57: 445288,
+CHROMIUM_MILESTONES = {
+ 54: (416640, 423768),
+ 55: (433391, 433400),
+ 56: (433400, 445288),
+ 57: (445288, None),
}
-CURRENT_MILESTONE = max(CHROUMIUM_MILESTONES.keys())
+CURRENT_MILESTONE = max(CHROMIUM_MILESTONES.keys())
class SpeedReleasingHandler(request_handler.RequestHandler):
@@ -74,13 +66,23 @@ class SpeedReleasingHandler(request_handler.RequestHandler):
master_bot_pairs, masters = _GetMasterBotPairs(table_entity.bots)
rev_a = self.request.get('revA')
rev_b = self.request.get('revB')
+ milestone_param = self.request.get('m')
+
+ _UpdateNewestRev(master_bot_pairs, table_entity.tests, masters)
+ if milestone_param:
+ if int(milestone_param) not in CHROMIUM_MILESTONES:
+ self.response.out.write(json.dumps({
+ 'error': 'No data for that milestone.'}))
+ return
+ rev_a, rev_b = _GetMilestone(masters, milestone_param)
if not rev_a or not rev_b:
- rev_a, rev_b = _GetDefaultRev(rev_a, rev_b, masters, master_bot_pairs,
- table_entity.tests)
+ rev_a, rev_b = _GetDefaultRev(rev_a, rev_b, masters)
+
rev_a, rev_b = _CheckRevisions(rev_a, rev_b)
display_a = _GetDisplayRev(master_bot_pairs, table_entity.tests, rev_a)
display_b = _GetDisplayRev(master_bot_pairs, table_entity.tests, rev_b)
revisions = [rev_b, rev_a] # In reverse intentionally.
+
self.response.out.write(json.dumps({
'xsrf_token': values['xsrf_token'],
'table_bots': master_bot_pairs,
@@ -92,7 +94,9 @@ class SpeedReleasingHandler(request_handler.RequestHandler):
'units': _GetTestToUnitsMap(master_bot_pairs, table_entity.tests),
'revisions': revisions,
'categories': _GetCategoryCounts(json.loads(table_entity.table_layout)),
- 'display_revisions': [display_b, display_a] # Similar to revisions.
+ 'display_revisions': [display_b, display_a], # Similar to revisions.
+ 'milestones': _GetMilestoneLabels(masters, rev_a),
+ 'current_milestone': CURRENT_MILESTONE,
}))
def _OutputHomePageJSON(self):
@@ -169,21 +173,22 @@ def _GetRow(bot, test, rev):
else:
return 0
-def _GetMilestone(masters, num_from_end=0):
- """Returns the specified milestone.
+def _GetMilestone(masters, milestone_num):
+ """Returns the specified milestone."""
+ milestone_num = int(milestone_num)
+ if 'ClankInternal' in masters:
+ return CLANK_MILESTONES[milestone_num]
+ else:
+ return CHROMIUM_MILESTONES[milestone_num]
- The last milestone is 0 from the end. The 2nd most recent milestone is 1
- from the end.
- """
- end_position = CURRENT_MILESTONE - num_from_end
+def _UpdateNewestRev(bots, tests, masters):
if 'ClankInternal' in masters:
- return CLANK_MILESTONES[end_position]
+ milestone_dict = CLANK_MILESTONES
else:
- return CHROUMIUM_MILESTONES[end_position]
+ milestone_dict = CHROMIUM_MILESTONES
-def _GetNewestRev(bot, test, masters):
- if bot and test:
- test_path = bot[0] + '/' + test[0]
+ if bots and tests:
+ test_path = bots[0] + '/' + tests[0]
test_key = utils.TestKey(test_path)
query = graph_data.Row.query()
query = query.filter(
@@ -191,20 +196,12 @@ def _GetNewestRev(bot, test, masters):
query = query.order(-graph_data.Row.revision)
row = query.fetch(limit=1)
if len(row):
- return row[0].revision
- return _GetMilestone(masters, 0) # Return most recent milestone.
-
-def _GetMilestoneRevAfter(rev, masters, bots, tests):
- """If only one Rev is given, defaults to Rev - beginning of next milestone."""
- if 'ClankInternal' in masters:
- milestone_dict = CLANK_MILESTONES
- else:
- milestone_dict = CHROUMIUM_MILESTONES
- #pylint: disable=unused-variable
- for key, value in milestone_dict.iteritems():
- if value > int(rev):
- return value
- return _GetNewestRev(bots, tests, masters)
+ milestone_dict[CURRENT_MILESTONE] = (
+ milestone_dict[CURRENT_MILESTONE][0], row[0].revision)
+ else:
+ milestone_dict[CURRENT_MILESTONE] = (
+ milestone_dict[CURRENT_MILESTONE][0],
+ milestone_dict[CURRENT_MILESTONE][0])
def _GetDisplayRev(bots, tests, rev):
"""Creates a user friendly commit position to display.
@@ -222,16 +219,54 @@ def _GetDisplayRev(bots, tests, rev):
return row.r_commit_pos + '-' + getattr(row, row.a_default_rev)[:3]
return rev
-def _GetDefaultRev(rev_a, rev_b, masters, bots, tests):
+def _GetEndOfMilestone(rev, masters):
+ """Finds the end of the milestone that 'rev' is in.
+
+ Check that 'rev' is between [beginning, end) of the tuple. In case an end
+ 'rev' is passed in, return corresponding beginning rev. But since revs can
+ double as end and beginning, favor returning corresponding end rev if 'rev'
+ is a beginning rev.
+ """
+ beginning_rev = 0
+ if 'ClankInternal' in masters:
+ milestone_dict = CLANK_MILESTONES
+ else:
+ milestone_dict = CHROMIUM_MILESTONES
+ for _, value_tuple in milestone_dict.iteritems():
+ if value_tuple[0] <= int(rev) < value_tuple[1]: # 'rev' is a beginning rev.
+ return value_tuple[1] # Favor by returning here.
+ if value_tuple[1] == int(rev): # 'rev' is an end rev.
+ beginning_rev = value_tuple[0]
+ if beginning_rev:
+ return beginning_rev
+ return milestone_dict[CURRENT_MILESTONE][1]
+
+def _GetDefaultRev(rev_a, rev_b, masters):
"""If one/both of the revisions are None, change accordingly.
If both are None, return most recent milestone, present.
If one is None, return the other, present.
"""
if not rev_a and not rev_b:
- return _GetMilestone(masters, 0), _GetNewestRev(bots, tests, masters)
- return ((rev_a or rev_b),
- _GetMilestoneRevAfter((rev_a or rev_b), masters, bots, tests))
+ return _GetMilestone(masters, CURRENT_MILESTONE)
+ return (rev_a or rev_b), _GetEndOfMilestone((rev_a or rev_b), masters)
+
+def _GetMilestoneLabels(masters, rev_a):
+ """Get matching milestone.
+
+ Return the milestone and milestone + 1 for the matching range that rev_a falls
+ in. If rev_a is an end rev, that means that rev_a == rev_b, so return 0, 0
+ because there are no milestones between two equal revisions.
+ If rev_a falls outside the given boundaries, return 0, 0.
+ """
+ if 'ClankInternal' in masters:
+ milestone_dict = CLANK_MILESTONES
+ else:
+ milestone_dict = CHROMIUM_MILESTONES
+ for key, value_tuple in milestone_dict.iteritems():
+ if value_tuple[0] <= rev_a < value_tuple[1]:
+ return [key, key + 1]
+ return 0, 0
def _CheckRevisions(rev_a, rev_b):
"""Checks to ensure the revisions are in the correct order."""
« no previous file with comments | « dashboard/dashboard/elements/speed-releasing-table-test.html ('k') | dashboard/dashboard/speed_releasing_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698