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

Side by Side Diff: appengine/findit/handlers/try_job_dashboard.py

Issue 1949763002: [Findit] Adding try job dashboard (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fixing bug where fields are missing from data Created 4 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
(Empty)
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
3 # found in the LICENSE file.
4 from datetime import datetime
5 from datetime import time
6 from datetime import timedelta
7
8 from common.base_handler import BaseHandler
9 from common.base_handler import Permission
10 from model.wf_try_job_data import WfTryJobData
11
12
13 # TODO(lijeffrey): Refactor formatting functions into a separate module that
14 # can be shared across Findit.
15 def _RemoveMicrosecondsFromDelta(delta):
16 """Returns a timedelta object without microseconds based on delta."""
17 return delta - timedelta(microseconds=delta.microseconds)
18
19
20 def _RemoveMicrosecondsFromDatetime(date):
21 """Returns a datetime object without microseconds based on date."""
22 if not date:
23 return None
24
25 return datetime(
26 date.year, date.month, date.day, date.hour, date.minute, date.second)
27
28
29 class TryJobDashboard(BaseHandler):
30 PERMISSION_LEVEL = Permission.ANYONE
31
32 def HandleGet(self): # pragma: no cover
33 """Shows a list of Findit try job results and statuses in an HTML page."""
34 midnight_today = datetime.combine(datetime.utcnow(), time.min)
35 midnight_yesterday = midnight_today - timedelta(days=1)
36 midnight_tomorrow = midnight_today + timedelta(days=1)
37
38 start = self.request.get('start_date')
39 end = self.request.get('end_date')
40 start_date = (datetime.strptime(start, '%Y-%m-%d') if start else
41 midnight_yesterday)
42 end_date = (datetime.strptime(end, '%Y-%m-%d') if end else
43 midnight_tomorrow)
44
45 if start or not end:
46 # If a start date is specified, get everything since then.
47 wf_analysis_query = WfTryJobData.query(
stgao 2016/05/04 00:00:53 naming nit: wf_analysis_query.
lijeffrey 2016/05/04 20:20:17 Oops, done.
48 WfTryJobData.request_time >= start_date,
49 WfTryJobData.request_time < end_date)
50 else:
51 # If no start date specified, then get everything up until end_date.
52 start_date = None
53 wf_analysis_query = WfTryJobData.query(
54 WfTryJobData.request_time < end_date)
55
56 try_job_data_list = wf_analysis_query.fetch()
57 try_jobs_in_progress = []
58 try_jobs_with_error = []
59 successfully_completed_try_jobs = []
60
61 for try_job_data in try_job_data_list:
62 try_job_display_data = {
63 'master_name': try_job_data.master_name,
64 'builder_name': try_job_data.builder_name,
65 'build_number': try_job_data.build_number,
66 'try_job_type': try_job_data.try_job_type,
67 'start_time': _RemoveMicrosecondsFromDatetime(
68 try_job_data.start_time),
69 'request_time': _RemoveMicrosecondsFromDatetime(
70 try_job_data.request_time),
71 'try_job_url': try_job_data.try_job_url
72 }
73
74 if not try_job_data.end_time and not try_job_data.error:
75 try_job_display_data['elapsed_time'] = (
76 _RemoveMicrosecondsFromDelta(
77 datetime.utcnow() - try_job_data.request_time)
78 if try_job_data.request_time else None)
79
80 try_job_display_data['status'] = (
81 'running' if try_job_data.start_time else 'pending')
82 try_jobs_in_progress.append(try_job_display_data)
83 elif try_job_data.error:
84 try_job_display_data['error'] = try_job_data.error['message']
85 # It's possible end_time is not available if the error was timeout.
86 try_job_display_data['end_time'] = try_job_data.end_time
stgao 2016/05/04 00:00:53 time format.
lijeffrey 2016/05/04 20:20:17 Done.
87 try_jobs_with_error.append(try_job_display_data)
88 else:
89 try_job_display_data['culprit_found'] = bool(try_job_data.culprits)
90 try_job_display_data['end_time'] = (
91 _RemoveMicrosecondsFromDatetime(try_job_data.end_time))
92 successfully_completed_try_jobs.append(try_job_display_data)
93
94 data = {
95 'start_date': start_date,
96 'end_date': end_date,
97 'try_jobs_in_progress': try_jobs_in_progress,
98 'try_jobs_with_error': try_jobs_with_error,
99 'successfully_completed_try_jobs': successfully_completed_try_jobs
100 }
101
102 return {
103 'template': 'try_job_dashboard.html',
104 'data': data
105 }
106
107 def HandlePost(self): # pragma: no cover
stgao 2016/05/04 00:00:53 We could remove this one.
lijeffrey 2016/05/04 20:20:17 Done.
108 return self.HandleGet()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698