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

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: Fixing unintentional change 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
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):
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 analyses, _, more = master_flake_analysis_query.fetch_page(
51 PAGE_SIZE, offset=offset)
52
53 return analyses, more
48 54
49 55
50 class ListFlakes(BaseHandler): 56 class ListFlakes(BaseHandler):
51 PERMISSION_LEVEL = Permission.ANYONE 57 PERMISSION_LEVEL = Permission.ANYONE
52 58
53 def _GetStartAndEndDates(self, triage): 59 def _GetStartAndEndDates(self, triage):
54 start_date = None 60 start_date = None
55 end_date = None 61 end_date = None
56 62
57 if triage: 63 if triage:
(...skipping 14 matching lines...) Expand all
72 status_code = int( 78 status_code = int(
73 self.request.get('result_status', result_status.UNSPECIFIED)) 79 self.request.get('result_status', result_status.UNSPECIFIED))
74 master_name = self.request.get('master_name').strip() 80 master_name = self.request.get('master_name').strip()
75 builder_name = self.request.get('builder_name').strip() 81 builder_name = self.request.get('builder_name').strip()
76 build_number = self.request.get('build_number').strip() 82 build_number = self.request.get('build_number').strip()
77 if build_number: 83 if build_number:
78 build_number = int(build_number) 84 build_number = int(build_number)
79 step_name = self.request.get('step_name').strip() 85 step_name = self.request.get('step_name').strip()
80 test_name = self.request.get('test_name').strip() 86 test_name = self.request.get('test_name').strip()
81 triage = self.request.get('triage') == '1' 87 triage = self.request.get('triage') == '1'
88 offset = int(self.request.get('offset', '0').strip())
82 89
83 # Only allow querying by start/end dates for admins during triage to avoid 90 # Only allow querying by start/end dates for admins during triage to avoid
84 # overcomplicating the UI for other users. 91 # overcomplicating the UI for other users.
85 start_date, end_date = self._GetStartAndEndDates(triage) 92 start_date, end_date = self._GetStartAndEndDates(triage)
86 93
87 master_flake_analyses = FilterMasterFlakeAnalysis( 94 master_flake_analyses, more = FilterMasterFlakeAnalysis(
88 MasterFlakeAnalysis.query(), master_name, builder_name, build_number, 95 MasterFlakeAnalysis.query(), master_name, builder_name, build_number,
89 step_name, test_name, start_date, end_date, status_code) 96 step_name, test_name, start_date, end_date, status_code, offset)
90 97
91 data = { 98 data = {
92 'master_flake_analyses': [], 99 'master_flake_analyses': [],
93 'result_status_filter': status_code, 100 'result_status_filter': status_code,
94 'master_name_filter': master_name, 101 'master_name_filter': master_name,
95 'builder_name_filter': builder_name, 102 'builder_name_filter': builder_name,
96 'build_number_filter': build_number, 103 'build_number_filter': build_number,
97 'step_name_filter': step_name, 104 'step_name_filter': step_name,
98 'test_name_filter': test_name 105 'test_name_filter': test_name,
106 'page_size': PAGE_SIZE,
107 'offset': offset,
108 'more': more,
99 } 109 }
100 110
101 if triage: # pragma: no cover 111 if triage: # pragma: no cover
102 data['triage'] = triage 112 data['triage'] = triage
103 data['start_date'] = start_date 113 data['start_date'] = start_date
104 data['end_date'] = end_date 114 data['end_date'] = end_date
105 115
106 for master_flake_analysis in master_flake_analyses: 116 for master_flake_analysis in master_flake_analyses:
107 data['master_flake_analyses'].append({ 117 data['master_flake_analyses'].append({
108 'master_name': master_flake_analysis.master_name, 118 'master_name': master_flake_analysis.master_name,
(...skipping 11 matching lines...) Expand all
120 130
121 # TODO (stgao): use index instead of in-memory sort. 131 # TODO (stgao): use index instead of in-memory sort.
122 # Index doesn't work for now, possibly due to legacy data. 132 # Index doesn't work for now, possibly due to legacy data.
123 data['master_flake_analyses'].sort( 133 data['master_flake_analyses'].sort(
124 key=lambda e: e['request_time'], reverse=True) 134 key=lambda e: e['request_time'], reverse=True)
125 135
126 return { 136 return {
127 'template': 'flake/dashboard.html', 137 'template': 'flake/dashboard.html',
128 'data': data 138 'data': data
129 } 139 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698