def testFilterTestName(self): master_flake_analysis_query = MasterFlakeAnalysis.query() query = _GetFlakeAnalysisFilterQuery(master_flake_analysis_query, test_name=self.test_name2) result = query.fetch() self.assertEqual(len(result), 1) self.assertTrue(result == [self.master_flake_analysis2])
def testFilterStartDate(self): master_flake_analysis_query = MasterFlakeAnalysis.query() query = _GetFlakeAnalysisFilterQuery(master_flake_analysis_query, start_date=self.request_time2) result = query.fetch() self.assertEqual(len(result), 1) self.assertTrue(result == [self.master_flake_analysis2])
def testFilterStepName(self): master_flake_analysis_query = MasterFlakeAnalysis.query() query = _GetFlakeAnalysisFilterQuery(master_flake_analysis_query, step_name=self.step_name1) result = query.fetch() self.assertEqual(len(result), 1) self.assertTrue(result == [self.master_flake_analysis1])
def testFilterResultStatus(self): master_flake_analysis_query = MasterFlakeAnalysis.query() query = _GetFlakeAnalysisFilterQuery( master_flake_analysis_query, status_code=result_status.FOUND_UNTRIAGED) result = query.fetch() self.assertEqual(len(result), 1) self.assertTrue(result == [self.master_flake_analysis1])
def testFetchPreviousPages(self): query = _GetFlakeAnalysisFilterQuery(MasterFlakeAnalysis.query()) result2, _, _ = dashboard_util.GetPagedResults( query, MasterFlakeAnalysis.request_time, cursor=self.cursor, direction='previous') self.assertEqual(len(result2), 1) self.assertEqual(self.results, result2)
def testFilterMultipleTestName(self): self.mock(list_flakes, 'PAGE_SIZE', 10) master_flake_analysis_query = MasterFlakeAnalysis.query() query = _GetFlakeAnalysisFilterQuery(master_flake_analysis_query, test_name=self.test_name1) result = query.fetch() self.assertEqual(len(result), 2) self.assertEqual( sorted(result), sorted([self.master_flake_analysis3, self.master_flake_analysis1]))
def testFilterEndDate(self): self.mock(list_flakes, 'PAGE_SIZE', 10) master_flake_analysis_query = MasterFlakeAnalysis.query() query = _GetFlakeAnalysisFilterQuery(master_flake_analysis_query, end_date=self.request_time2) result = query.fetch() self.assertEqual(len(result), 2) self.assertEqual( sorted(result), sorted([self.master_flake_analysis1, self.master_flake_analysis3]))
def _ObscureMasterFlakeAnalysis(): """Obscures the user email in MasterFlakeAnalysis.""" count = 0 time_limit = _TimeBeforeNow(days=_REQUEST_RECORD_RENTENSION_DAYS) query = MasterFlakeAnalysis.query( MasterFlakeAnalysis.triggering_user_email_obscured == False, MasterFlakeAnalysis.request_time < time_limit) more = True cursor = None while more: entities, cursor, more = query.fetch_page(_PAGE_SIZE, start_cursor=cursor) for entity in entities: entity.triggering_user_email = email_util.ObscureEmails( [entity.triggering_user_email], ['google.com'])[0] entity.triggering_user_email_obscured = True ndb.put_multi(entities) count += len(entities) return count
def _ObscureTriageRecordsInMasterFlakeAnalysis(): """Obscures the user names in MasterFlakeAnalysis triage history.""" count = 0 time_limit = _TimeBeforeNow(days=_TRIAGE_RECORD_RENTENSION_DAYS) query = MasterFlakeAnalysis.query( MasterFlakeAnalysis.triage_email_obscured == False, MasterFlakeAnalysis.triage_record_last_add < time_limit) more = True cursor = None while more: entities, cursor, more = query.fetch_page(_PAGE_SIZE, start_cursor=cursor) for entity in entities: for triage_record in entity.triage_history: triage_record.user_name = email_util.ObscureEmails( [triage_record.user_name], ['google.com'])[0] entity.triage_email_obscured = True ndb.put_multi(entities) count += len(entities) return count
def _MockCursor(self): results, prev_cursor, cursor = dashboard_util.GetPagedResults( MasterFlakeAnalysis.query(), MasterFlakeAnalysis.request_time, page_size=1) return results, prev_cursor, cursor
def HandleGet(self): status_code = int( self.request.get('result_status', result_status.UNSPECIFIED)) step_name = self.request.get('step_name').strip() test_name = self.request.get('test_name').strip() triage = self.request.get('triage') == '1' # Only allow querying by start/end dates for admins during triage to avoid # overcomplicating the UI for other users. start_date, end_date = self._GetStartAndEndDates(triage) master_flake_analysis_query = _GetFlakeAnalysisFilterQuery( MasterFlakeAnalysis.query(), step_name, test_name, start_date, end_date, status_code) # If filters by step_name and/or test_name, don't do paging. if step_name or test_name: analyses = master_flake_analysis_query.order( -MasterFlakeAnalysis.request_time).fetch() prev_cursor = '' cursor = '' else: analyses, prev_cursor, cursor = dashboard_util.GetPagedResults( master_flake_analysis_query, MasterFlakeAnalysis.request_time, self.request.get('cursor'), self.request.get('direction').strip(), page_size=PAGE_SIZE) data = { 'master_flake_analyses': [], 'result_status_filter': status_code, 'step_name_filter': step_name, 'test_name_filter': test_name, 'prev_cursor': prev_cursor, 'cursor': cursor, } if triage: # pragma: no cover data['triage'] = triage data['start_date'] = start_date data['end_date'] = end_date for master_flake_analysis in analyses: data['master_flake_analyses'].append({ 'build_analysis_status': master_flake_analysis.status_description, 'build_number': master_flake_analysis.build_number, 'builder_name': master_flake_analysis.builder_name, 'confidence_in_suspected_build': (master_flake_analysis.confidence_in_suspected_build), 'culprit': (master_flake_analysis.culprit.ToDict() if master_flake_analysis.culprit else {}), 'key': master_flake_analysis.key.urlsafe(), 'master_name': master_flake_analysis.master_name, 'request_time': time_util.FormatDatetime(master_flake_analysis.request_time), 'result_status': result_status.RESULT_STATUS_TO_DESCRIPTION.get( master_flake_analysis.result_status), 'step_name': master_flake_analysis.step_name, 'suspected_build': master_flake_analysis.suspected_flake_build_number, 'test_name': master_flake_analysis.test_name, 'try_job_status': analysis_status.STATUS_TO_DESCRIPTION.get( master_flake_analysis.try_job_status), }) return {'template': 'flake/dashboard.html', 'data': data}