Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 } | |
| OLD | NEW |