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

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

Issue 2879453002: [Dashboard] Get or create ancestors in add_histograms_queue (Closed)
Patch Set: actually add new add_point_queue test Created 3 years, 7 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
OLDNEW
1 # Copyright 2017 The Chromium Authors. All rights reserved. 1 # Copyright 2017 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 """URL endpoint to add new histograms to the datastore.""" 5 """URL endpoint to add new histograms to the datastore."""
6 6
7 import json 7 import json
8 8
9 from dashboard import add_histograms 9 from dashboard import add_histograms
10 # TODO(eakuefner): Move these helpers so we don't have to import add_point_queue
11 # directly.
12 from dashboard import add_point_queue
10 from dashboard.common import datastore_hooks 13 from dashboard.common import datastore_hooks
11 from dashboard.common import request_handler 14 from dashboard.common import request_handler
12 from dashboard.common import utils 15 from dashboard.common import stored_object
16 from dashboard.models import anomaly
13 from dashboard.models import histogram 17 from dashboard.models import histogram
14 18
15
16 class AddHistogramsQueueHandler(request_handler.RequestHandler): 19 class AddHistogramsQueueHandler(request_handler.RequestHandler):
17 """Request handler to process a histogram and add it to the datastore. 20 """Request handler to process a histogram and add it to the datastore.
18 21
19 This request handler is intended to be used only by requests using the 22 This request handler is intended to be used only by requests using the
20 task queue; it shouldn't be directly from outside. 23 task queue; it shouldn't be directly from outside.
21 """ 24 """
22 25
23 def get(self): 26 def get(self):
24 self.post() 27 self.post()
25 28
(...skipping 10 matching lines...) Expand all
36 39
37 Request parameters: 40 Request parameters:
38 data: JSON encoding of a histogram or shared diagnostic. 41 data: JSON encoding of a histogram or shared diagnostic.
39 revision: a revision, given as an int. 42 revision: a revision, given as an int.
40 test_path: the test path to which this diagnostic or histogram should be 43 test_path: the test path to which this diagnostic or histogram should be
41 attached. 44 attached.
42 """ 45 """
43 datastore_hooks.SetPrivilegedRequest() 46 datastore_hooks.SetPrivilegedRequest()
44 47
45 data = self.request.get('data') 48 data = self.request.get('data')
49 revision = int(self.request.get('revision'))
50 test_path = self.request.get('test_path')
51
46 data_dict = json.loads(data) 52 data_dict = json.loads(data)
47 revision = int(self.request.get('revision'))
48 test_key = utils.TestKey(self.request.get('test_path'))
49 guid = data_dict['guid'] 53 guid = data_dict['guid']
54 is_diagnostic = (
55 data_dict.get('type') in add_histograms.SPARSE_DIAGNOSTIC_TYPES)
50 56
51 if data_dict.get('type') in add_histograms.SPARSE_DIAGNOSTIC_TYPES: 57 test_path_parts = test_path.split('/')
58 master = test_path_parts[0]
59 bot = test_path_parts[1]
60 test_name = '/'.join(test_path_parts[2:])
61 bot_whitelist = stored_object.Get(add_point_queue.BOT_WHITELIST_KEY)
62 internal_only = add_point_queue.BotInternalOnly(bot, bot_whitelist)
63 extra_args = {} if is_diagnostic else GetUnitArgs(data_dict['unit'])
64 # TDOO(eakuefner): Populate benchmark_description once it appears in
65 # diagnostics.
66 test_key = add_point_queue.GetOrCreateAncestors(
67 master, bot, test_name, internal_only, **extra_args).key
68
69 if is_diagnostic:
52 entity = histogram.SparseDiagnostic( 70 entity = histogram.SparseDiagnostic(
53 id=guid, data=data, test=test_key, start_revision=revision, 71 id=guid, data=data, test=test_key, start_revision=revision,
54 end_revision=revision) 72 end_revision=revision)
55 else: 73 else:
56 entity = histogram.Histogram( 74 entity = histogram.Histogram(
57 id=guid, data=data, test=test_key, revision=revision) 75 id=guid, data=data, test=test_key, revision=revision)
58 76
59 entity.put() 77 entity.put()
78
79
80 def GetUnitArgs(unit):
81 unit_args = {
82 'units': unit
83 }
84 # TODO(eakuefner): Port unit system to Python and use that here
85 histogram_improvement_direction = unit.split('_')[-1]
86 if histogram_improvement_direction == 'biggerIsBetter':
87 unit_args['improvement_direction'] = anomaly.UP
88 elif histogram_improvement_direction == 'smallerIsBetter':
89 unit_args['improvement_direction'] = anomaly.DOWN
90 else:
91 unit_args['improvement_direction'] = anomaly.UNKNOWN
92 return unit_args
OLDNEW
« no previous file with comments | « no previous file | dashboard/dashboard/add_histograms_queue_test.py » ('j') | dashboard/dashboard/add_histograms_queue_test.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698