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

Side by Side Diff: appengine/findit/handlers/crash/fracas_dashboard.py

Issue 2043973002: [Findit] Fracas crash triage dashboard (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 4 years, 6 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 import base64
5 from datetime import datetime
6 from datetime import time
7 from datetime import timedelta
8 import json
9
10 from google.appengine.ext import ndb
11
12 from common import time_util
13 from common.base_handler import BaseHandler
14 from common.base_handler import Permission
15 from model.crash.fracas_crash_analysis import FracasCrashAnalysis
16 from model import triage_status
17
18
19 _EQUAL_FILTER_TO_CONVERTER = {
20 'found_suspects': lambda x: bool(int(x)),
21 'has_regression_range': lambda x: bool(int(x)),
22 'suspected_cls_triage_status': lambda x: x,
23 'regression_range_triage_status': lambda x: x,
24 }
25
26 _DEFAULT_DISPLAY_COUNT = 500
27
28
29 class FracasDashBoard(BaseHandler):
30 PERMISSION_LEVEL = Permission.ANYONE
31
32 def HandleGet(self):
33 """Shows a list of Findit try job results and statuses in an HTML page."""
stgao 2016/06/08 17:53:45 This is not updated. This one is for crash, not fo
Sharu Jiang 2016/06/09 06:13:28 Oops, changed it.
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: # pragma: no branch
46 # If a start date is specified, get everything since then.
47 filters = [
48 FracasCrashAnalysis.requested_time >= start_date,
49 FracasCrashAnalysis.requested_time < end_date
50 ]
51 else: # pragma: no cover
52 # If no start date specified, then get everything up until end_date.
53 start_date = None
54 filters = [
55 FracasCrashAnalysis.requested_time < end_date
56 ]
57
58 for equal_filter, converter in _EQUAL_FILTER_TO_CONVERTER.iteritems():
59 if self.request.get(equal_filter, None) is None:
60 continue
61
62 value = converter(self.request.get(equal_filter))
63 if value == triage_status.TRIAGED:
64 filters.append(ndb.OR(
65 getattr(FracasCrashAnalysis, equal_filter) ==
66 triage_status.TRIAGED,
67 getattr(FracasCrashAnalysis, equal_filter) ==
68 triage_status.TRIAGED_CORRECT,
69 getattr(FracasCrashAnalysis, equal_filter) ==
70 triage_status.TRIAGED_INCORRECT))
71 else:
72 filters.append(
73 getattr(FracasCrashAnalysis, equal_filter) ==
74 converter(self.request.get(equal_filter)))
75
76 if self.request.get('count'):
77 count = int(self.request.get('count'))
78 else:
79 count = _DEFAULT_DISPLAY_COUNT
80
81 # TODO(katesonia): Add pagination here.
82 fracas_crash_list = FracasCrashAnalysis.query(ndb.AND(*filters)).order(
83 FracasCrashAnalysis.requested_time).fetch(count)
84 fracas_crashes = []
85
86 for crash in fracas_crash_list:
87 display_data = {
88 'signature': crash.signature,
89 'version': crash.crashed_version,
90 'channel': crash.channel,
91 'platform': crash.platform,
92 'regression_range': ('' if not crash.has_regression_range else
93 crash.result['regression_range']),
94 'suspected_cls':crash.result['suspected_cls'],
95 'suspected_project': crash.result['suspected_project'],
96 'suspected_components': crash.result['suspected_components'],
97 'stack_trace': crash.stack_trace,
98 'historical_metadata': json.dumps(crash.historical_metadata),
99 'crash_identifiers': base64.b64encode(
stgao 2016/06/08 17:53:45 Why we need this? For identifying the crash? If t
Sharu Jiang 2016/06/09 06:13:28 Done.
100 json.dumps(crash.crash_identifiers))
101 }
102 fracas_crashes.append(display_data)
103
104 data = {
105 'start_date': time_util.FormatDatetime(start_date),
106 'end_date': time_util.FormatDatetime(end_date),
107 'found_suspects': self.request.get('found_suspects', '-1'),
108 'has_regression_range': self.request.get('has_regression_range', '-1'),
109 'suspected_cls_triage_status': self.request.get(
110 'suspected_cls_triage_status', '-1'),
111 'regression_range_triage_status': self.request.get(
112 'regression_range_triage_status', '-1'),
113 'fracas_crashes': fracas_crashes
114 }
115
116 return {
117 'template': 'crash/fracas_dashboard.html',
118 'data': data
119 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698