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

Side by Side Diff: appengine/findit/handlers/flake/list_flakes.py

Issue 2546433003: [Findit] Query master flake analyses 100 at a time and add previous/next buttons to check flake dash (Closed)
Patch Set: Addressing comments Created 4 years 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 | appengine/findit/handlers/flake/test/list_flakes_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 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 from datetime import datetime 5 from datetime import datetime
6 from datetime import time 6 from datetime import time
7 from datetime import timedelta 7 from datetime import timedelta
8 8
9 from common.base_handler import BaseHandler 9 from common.base_handler import BaseHandler
10 from common.base_handler import Permission 10 from common.base_handler import Permission
11 11
12 from lib import time_util 12 from lib import time_util
13 from model import result_status 13 from model import result_status
14 from model.flake.master_flake_analysis import MasterFlakeAnalysis 14 from model.flake.master_flake_analysis import MasterFlakeAnalysis
15 15
16 16
17 PAGE_SIZE = 100
18
19
17 def FilterMasterFlakeAnalysis( 20 def FilterMasterFlakeAnalysis(
18 master_flake_analysis_query, master_name=None, builder_name=None, 21 master_flake_analysis_query, master_name=None, builder_name=None,
19 build_number=None, step_name=None, test_name=None, start_date=None, 22 build_number=None, step_name=None, test_name=None, start_date=None,
20 end_date=None, status_code=result_status.UNSPECIFIED): 23 end_date=None, status_code=result_status.UNSPECIFIED, offset=0):
stgao 2016/12/01 18:26:06 We'd better use cursor instead of offset for perfo
21 if master_name: 24 if master_name:
22 master_flake_analysis_query = master_flake_analysis_query.filter( 25 master_flake_analysis_query = master_flake_analysis_query.filter(
23 MasterFlakeAnalysis.master_name == master_name) 26 MasterFlakeAnalysis.master_name == master_name)
24 if builder_name: 27 if builder_name:
25 master_flake_analysis_query = master_flake_analysis_query.filter( 28 master_flake_analysis_query = master_flake_analysis_query.filter(
26 MasterFlakeAnalysis.builder_name == builder_name) 29 MasterFlakeAnalysis.builder_name == builder_name)
27 if build_number: 30 if build_number:
28 master_flake_analysis_query = master_flake_analysis_query.filter( 31 master_flake_analysis_query = master_flake_analysis_query.filter(
29 MasterFlakeAnalysis.build_number == build_number) 32 MasterFlakeAnalysis.build_number == build_number)
30 if step_name: 33 if step_name:
31 master_flake_analysis_query = master_flake_analysis_query.filter( 34 master_flake_analysis_query = master_flake_analysis_query.filter(
32 MasterFlakeAnalysis.step_name == step_name) 35 MasterFlakeAnalysis.step_name == step_name)
33 if test_name: 36 if test_name:
34 master_flake_analysis_query = master_flake_analysis_query.filter( 37 master_flake_analysis_query = master_flake_analysis_query.filter(
35 MasterFlakeAnalysis.test_name == test_name) 38 MasterFlakeAnalysis.test_name == test_name)
36 if start_date: 39 if start_date:
37 master_flake_analysis_query = master_flake_analysis_query.filter( 40 master_flake_analysis_query = master_flake_analysis_query.filter(
38 MasterFlakeAnalysis.request_time >= start_date) 41 MasterFlakeAnalysis.request_time >= start_date)
39 if end_date: 42 if end_date:
40 master_flake_analysis_query = master_flake_analysis_query.filter( 43 master_flake_analysis_query = master_flake_analysis_query.filter(
41 MasterFlakeAnalysis.request_time < end_date) 44 MasterFlakeAnalysis.request_time < end_date)
42 if status_code != result_status.UNSPECIFIED: 45 if status_code != result_status.UNSPECIFIED:
43 master_flake_analysis_query = master_flake_analysis_query.filter( 46 master_flake_analysis_query = master_flake_analysis_query.filter(
44 MasterFlakeAnalysis.result_status == status_code) 47 MasterFlakeAnalysis.result_status == status_code)
45 48
46 master_flake_analysis_query.order(-MasterFlakeAnalysis.request_time) 49 master_flake_analysis_query.order(-MasterFlakeAnalysis.request_time)
47 return master_flake_analysis_query.fetch() 50
51 # TODO(lijeffrey): use cursor instead of offset.
52 analyses, _, more = master_flake_analysis_query.fetch_page(
53 PAGE_SIZE, offset=offset)
54
55 return analyses, more
48 56
49 57
50 class ListFlakes(BaseHandler): 58 class ListFlakes(BaseHandler):
51 PERMISSION_LEVEL = Permission.ANYONE 59 PERMISSION_LEVEL = Permission.ANYONE
52 60
53 def _GetStartAndEndDates(self, triage): 61 def _GetStartAndEndDates(self, triage):
54 start_date = None 62 start_date = None
55 end_date = None 63 end_date = None
56 64
57 if triage: 65 if triage:
(...skipping 14 matching lines...) Expand all
72 status_code = int( 80 status_code = int(
73 self.request.get('result_status', result_status.UNSPECIFIED)) 81 self.request.get('result_status', result_status.UNSPECIFIED))
74 master_name = self.request.get('master_name').strip() 82 master_name = self.request.get('master_name').strip()
75 builder_name = self.request.get('builder_name').strip() 83 builder_name = self.request.get('builder_name').strip()
76 build_number = self.request.get('build_number').strip() 84 build_number = self.request.get('build_number').strip()
77 if build_number: 85 if build_number:
78 build_number = int(build_number) 86 build_number = int(build_number)
79 step_name = self.request.get('step_name').strip() 87 step_name = self.request.get('step_name').strip()
80 test_name = self.request.get('test_name').strip() 88 test_name = self.request.get('test_name').strip()
81 triage = self.request.get('triage') == '1' 89 triage = self.request.get('triage') == '1'
90 offset = int(self.request.get('offset', '0').strip())
82 91
83 # Only allow querying by start/end dates for admins during triage to avoid 92 # Only allow querying by start/end dates for admins during triage to avoid
84 # overcomplicating the UI for other users. 93 # overcomplicating the UI for other users.
85 start_date, end_date = self._GetStartAndEndDates(triage) 94 start_date, end_date = self._GetStartAndEndDates(triage)
86 95
87 master_flake_analyses = FilterMasterFlakeAnalysis( 96 master_flake_analyses, more = FilterMasterFlakeAnalysis(
88 MasterFlakeAnalysis.query(), master_name, builder_name, build_number, 97 MasterFlakeAnalysis.query(), master_name, builder_name, build_number,
89 step_name, test_name, start_date, end_date, status_code) 98 step_name, test_name, start_date, end_date, status_code, offset)
90 99
91 data = { 100 data = {
92 'master_flake_analyses': [], 101 'master_flake_analyses': [],
93 'result_status_filter': status_code, 102 'result_status_filter': status_code,
94 'master_name_filter': master_name, 103 'master_name_filter': master_name,
95 'builder_name_filter': builder_name, 104 'builder_name_filter': builder_name,
96 'build_number_filter': build_number, 105 'build_number_filter': build_number,
97 'step_name_filter': step_name, 106 'step_name_filter': step_name,
98 'test_name_filter': test_name 107 'test_name_filter': test_name,
108 'page_size': PAGE_SIZE,
109 'offset': offset,
110 'more': more,
99 } 111 }
100 112
101 if triage: # pragma: no cover 113 if triage: # pragma: no cover
102 data['triage'] = triage 114 data['triage'] = triage
103 data['start_date'] = start_date 115 data['start_date'] = start_date
104 data['end_date'] = end_date 116 data['end_date'] = end_date
105 117
106 for master_flake_analysis in master_flake_analyses: 118 for master_flake_analysis in master_flake_analyses:
107 data['master_flake_analyses'].append({ 119 data['master_flake_analyses'].append({
108 'master_name': master_flake_analysis.master_name, 120 'master_name': master_flake_analysis.master_name,
(...skipping 11 matching lines...) Expand all
120 132
121 # TODO (stgao): use index instead of in-memory sort. 133 # TODO (stgao): use index instead of in-memory sort.
122 # Index doesn't work for now, possibly due to legacy data. 134 # Index doesn't work for now, possibly due to legacy data.
123 data['master_flake_analyses'].sort( 135 data['master_flake_analyses'].sort(
124 key=lambda e: e['request_time'], reverse=True) 136 key=lambda e: e['request_time'], reverse=True)
125 137
126 return { 138 return {
127 'template': 'flake/dashboard.html', 139 'template': 'flake/dashboard.html',
128 'data': data 140 'data': data
129 } 141 }
OLDNEW
« no previous file with comments | « no previous file | appengine/findit/handlers/flake/test/list_flakes_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698