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

Side by Side Diff: dashboard/dashboard/graph_revisions.py

Issue 1549583002: In /graph_json, check internal_only on Test entity and skip test for all Row entities. (Closed) Base URL: https://github.com/catapult-project/catapult@master
Patch Set: Fixed assertions Created 4 years, 12 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 | « dashboard/dashboard/graph_json_test.py ('k') | dashboard/dashboard/graph_revisions_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 """Handler to serve a simple time series for all points in a series. 5 """Handler to serve a simple time series for all points in a series.
6 6
7 This is used to show the revision slider for a chart; it includes data 7 This is used to show the revision slider for a chart; it includes data
8 for all past points, including those that are not recent. Each entry 8 for all past points, including those that are not recent. Each entry
9 in the returned list is a 3-item list: [revision, value, timestamp]. 9 in the returned list is a 3-item list: [revision, value, timestamp].
10 The revisions and values are used to plot a mini-chart, and the timestamps 10 The revisions and values are used to plot a mini-chart, and the timestamps
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 71
72 def _UpdateCache(test_key): 72 def _UpdateCache(test_key):
73 """Queries Rows for a test then updates the cache. 73 """Queries Rows for a test then updates the cache.
74 74
75 Args: 75 Args:
76 test_key: ndb.Key for a Test entity. 76 test_key: ndb.Key for a Test entity.
77 77
78 Returns: 78 Returns:
79 The list of triplets that was just fetched and set in the cache. 79 The list of triplets that was just fetched and set in the cache.
80 """ 80 """
81 if not test_key.get(): 81 test = test_key.get()
82 # The caching can actually proceed even if the Test entity doesn't exist, 82 if not test:
83 # but a non-existent Test entity definitely indicates something is wrong. 83 return []
84 logging.warn('Test not found: %s', utils.TestPath(test_key)) 84 assert(utils.IsInternalUser() or not test.internal_only)
85 datastore_hooks.SetSinglePrivilegedRequest()
85 86
86 # A projection query queries just for the values of particular properties; 87 # A projection query queries just for the values of particular properties;
87 # this is faster than querying for whole entities. 88 # this is faster than querying for whole entities.
88 query = graph_data.Row.query(projection=['revision', 'value', 'timestamp']) 89 query = graph_data.Row.query(projection=['revision', 'value', 'timestamp'])
89 query = query.filter(graph_data.Row.parent_test == test_key) 90 query = query.filter(graph_data.Row.parent_test == test_key)
90 91
91 # Using a large batch_size speeds up queries with > 1000 Rows. 92 # Using a large batch_size speeds up queries with > 1000 Rows.
92 rows = map(_MakeTriplet, query.iter(batch_size=1000)) 93 rows = map(_MakeTriplet, query.iter(batch_size=1000))
94 # Note: Unit tests do not call datastore_hooks with the above query, but
95 # it is called in production and with more recent SDK.
96 datastore_hooks.CancelSinglePrivilegedRequest()
93 SetCache(utils.TestPath(test_key), rows) 97 SetCache(utils.TestPath(test_key), rows)
94 return rows 98 return rows
95 99
96 100
97 def _MakeTriplet(row): 101 def _MakeTriplet(row):
98 """Makes a 3-item list of revision, value and timestamp for a Row.""" 102 """Makes a 3-item list of revision, value and timestamp for a Row."""
99 timestamp = utils.TimestampMilliseconds(row.timestamp) 103 timestamp = utils.TimestampMilliseconds(row.timestamp)
100 return [row.revision, row.value, timestamp] 104 return [row.revision, row.value, timestamp]
101 105
102 106
(...skipping 21 matching lines...) Expand all
124 revisions = [r[0] for r in graph_rows] 128 revisions = [r[0] for r in graph_rows]
125 index = bisect.bisect_left(revisions, row.revision) 129 index = bisect.bisect_left(revisions, row.revision)
126 if index < len(revisions) - 1: 130 if index < len(revisions) - 1:
127 if revisions[index + 1] == row.revision: 131 if revisions[index + 1] == row.revision:
128 return # Already in cache. 132 return # Already in cache.
129 graph_rows.insert(index, _MakeTriplet(row)) 133 graph_rows.insert(index, _MakeTriplet(row))
130 134
131 for test_key in test_key_to_rows: 135 for test_key in test_key_to_rows:
132 graph_rows = test_key_to_rows[test_key] 136 graph_rows = test_key_to_rows[test_key]
133 SetCache(utils.TestPath(test_key), graph_rows) 137 SetCache(utils.TestPath(test_key), graph_rows)
OLDNEW
« no previous file with comments | « dashboard/dashboard/graph_json_test.py ('k') | dashboard/dashboard/graph_revisions_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698