def HandleGet(self): """Shows crash analysis results in an HTML page.""" start_date, end_date = dashboard_util.GetStartAndEndDates( self.request.get('start_date'), self.request.get('end_date')) query = self.Filter(self.crash_analysis_cls.query(), start_date, end_date) page_size = self.request.get('n') or _PAGE_SIZE # TODO(katesonia): Add pagination here. crash_list = query.order( -self.crash_analysis_cls.requested_time).fetch(int(page_size)) crashes = [] for crash in crash_list: display_data = { 'signature': crash.signature, 'version': crash.crashed_version, 'channel': crash.channel, 'platform': crash.platform, 'regression_range': ('' if not crash.has_regression_range else crash.result['regression_range']), 'suspected_cls': (crash.result.get('suspected_cls', []) if crash.result else []), 'suspected_project': (crash.result.get('suspected_project', '') if crash.result else ''), 'suspected_components': (crash.result.get( 'suspected_components', []) if crash.result else []), 'key': crash.key.urlsafe() } crashes.append(display_data) data = { 'start_date': time_util.FormatDatetime(start_date), 'end_date': time_util.FormatDatetime(end_date), 'found_suspects': self.request.get('found_suspects', '-1'), 'has_regression_range': self.request.get('has_regression_range', '-1'), 'suspected_cls_triage_status': self.request.get('suspected_cls_triage_status', '-1'), 'regression_range_triage_status': self.request.get('regression_range_triage_status', '-1'), 'client': self.client, 'crashes': crashes, 'signature': self.request.get('signature') } return {'template': 'dashboard.html', 'data': data}
def testGetStartAndEndDates(self, mock_fn): """Tests getting start_date and end_date.""" mock_now = datetime.datetime(2016, 10, 21, 1, 0, 0, 0) mock_midnight_yesterday = datetime.datetime(2016, 10, 20, 0, 0, 0, 0) mock_midnight_tomorrow = datetime.datetime(2016, 10, 22, 0, 0, 0, 0) mock_fn.return_value = mock_now start_date, end_date = dashboard_util.GetStartAndEndDates() self.assertEqual(start_date, mock_midnight_yesterday) self.assertEqual(end_date, mock_midnight_tomorrow)
def HandleGet(self): """Shows crash analysis results in an HTML page.""" start_date, end_date = dashboard_util.GetStartAndEndDates( self.request.get('start_date'), self.request.get('end_date')) query = self.Filter(start_date, end_date) try: page_size = int(self.request.get('n')) except (ValueError, TypeError): page_size = _PAGE_SIZE crash_analyses, top_cusor, bottom_cursor = dashboard_util.GetPagedResults( query, [(self.crash_analysis_cls.requested_time, dashboard_util.DESC)], cursor=self.request.get('cursor'), direction=self.request.get('direction', 'next'), page_size=page_size) # TODO(katesonia): An optimization is to index analysis.status. crash_analyses = [analysis for analysis in crash_analyses if analysis.completed] data = { 'start_date': time_util.FormatDatetime(start_date), 'end_date': time_util.FormatDatetime(end_date), 'found_suspects': self.request.get('found_suspects', '-1'), 'has_regression_range': self.request.get('has_regression_range', '-1'), 'suspected_cls_triage_status': self.request.get( 'suspected_cls_triage_status', '-1'), 'regression_range_triage_status': self.request.get( 'regression_range_triage_status', '-1'), 'client': self.client, 'crashes': self.CrashDataToDisplay(crash_analyses), 'signature': self.request.get('signature'), 'top_cursor': top_cusor, 'bottom_cursor': bottom_cursor, } return { 'template': self.template, 'data': data }
def _GetStartAndEndDates(self, triage): if not triage: return None, None return dashboard_util.GetStartAndEndDates( self.request.get('start_date'), self.request.get('end_date'))