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

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

Powered by Google App Engine
This is Rietveld 408576698