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 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 } | |
| OLD | NEW |