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

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 analysis_status
stgao 2016/06/13 21:25:50 Not used?
Sharu Jiang 2016/06/21 00:28:13 Done.
17 from model import triage_status
18
19
20 _EQUAL_FILTER_TO_CONVERTER = {
21 'found_suspects': lambda x: bool(int(x)),
22 'has_regression_range': lambda x: bool(int(x)),
23 'suspected_cls_triage_status': lambda x: x,
24 'regression_range_triage_status': lambda x: x,
25 }
26
27 _DEFAULT_DISPLAY_COUNT = 500
28
29
30 class FracasDashBoard(BaseHandler):
31 PERMISSION_LEVEL = Permission.ANYONE
32
33 def HandleGet(self):
34 """Shows Fracas crash analysis results and statuses in an HTML page."""
35 midnight_today = datetime.combine(datetime.utcnow(), time.min)
36 midnight_yesterday = midnight_today - timedelta(days=1)
37 midnight_tomorrow = midnight_today + timedelta(days=1)
38
39 start = self.request.get('start_date')
40 end = self.request.get('end_date')
41 start_date = (datetime.strptime(start, '%Y-%m-%d') if start else
42 midnight_yesterday)
43 end_date = (datetime.strptime(end, '%Y-%m-%d') if end else
44 midnight_tomorrow)
45
46 if start or not end: # pragma: no branch
47 # If a start date is specified, get everything since then.
48 query = FracasCrashAnalysis.query(
49 FracasCrashAnalysis.requested_time >= start_date,
50 FracasCrashAnalysis.requested_time < end_date
51 )
52 else: # pragma: no cover
53 # If no start date specified, then get everything up until end_date.
54 start_date = None
55 query = FracasCrashAnalysis.query(
56 FracasCrashAnalysis.requested_time < end_date
57 )
58
59 for equal_filter, converter in _EQUAL_FILTER_TO_CONVERTER.iteritems():
60 if self.request.get(equal_filter, None) is None:
61 continue
62
63 query = query.filter(
64 getattr(FracasCrashAnalysis, equal_filter) ==
65 converter(self.request.get(equal_filter)))
66
67 if self.request.get('count'):
68 count = int(self.request.get('count'))
69 else:
70 count = _DEFAULT_DISPLAY_COUNT
71
72 # TODO(katesonia): Add pagination here.
73 fracas_crash_list = query.order(
74 -FracasCrashAnalysis.requested_time).fetch(count)
75 fracas_crashes = []
76
77 for crash in fracas_crash_list:
78 display_data = {
79 'signature': crash.signature,
80 'version': crash.crashed_version,
81 'channel': crash.channel,
82 'platform': crash.platform,
83 'regression_range': ('' if not crash.has_regression_range else
84 crash.result['regression_range']),
85 'suspected_cls':crash.result.get('suspected_cls', []),
86 'suspected_project': crash.result.get('suspected_project', ''),
87 'suspected_components': crash.result.get(
88 'suspected_components', []),
89 'stack_trace': crash.stack_trace,
90 'historical_metadata': json.dumps(crash.historical_metadata),
91 'key': crash.key.urlsafe()
92 }
93 fracas_crashes.append(display_data)
94
95 data = {
96 'start_date': time_util.FormatDatetime(start_date),
97 'end_date': time_util.FormatDatetime(end_date),
98 'found_suspects': self.request.get('found_suspects', '-1'),
99 'has_regression_range': self.request.get('has_regression_range', '-1'),
100 'suspected_cls_triage_status': self.request.get(
101 'suspected_cls_triage_status', '-1'),
102 'regression_range_triage_status': self.request.get(
103 'regression_range_triage_status', '-1'),
104 'fracas_crashes': fracas_crashes
105 }
106
107 return {
108 'template': 'crash/fracas_dashboard.html',
109 'data': data
110 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698