def testRecord_Estimate_Recorded(self): now = datetime.datetime.now() j1 = self._Job( { 'configuration': 'linux', 'benchmark': 'foo', 'story': 'bar' }, now - datetime.timedelta(minutes=5), now - datetime.timedelta(minutes=4)) e1 = timing_record.GetSimilarHistoricalTimings(j1) timing_record.RecordJobTiming(j1) t1 = timing_record.TimingRecord.get_by_id(j1.job_id) self.assertIsNone(e1) self.assertIsNone(t1.estimate) j2 = self._RecordTiming( { 'configuration': 'linux', 'benchmark': 'foo', 'story': 'bar' }, now - datetime.timedelta(minutes=3), now - datetime.timedelta(minutes=2)) e2 = timing_record.GetSimilarHistoricalTimings(j2) timing_record.RecordJobTiming(j2) t2 = timing_record.TimingRecord.get_by_id(j2.job_id) self.assertEqual( int(e2[0][0].total_seconds()), int((t2.estimate - j2.started_time).total_seconds()))
def testGetSimilarHistoricalTimings_Same(self): now = datetime.datetime.now() self._RecordTiming( { 'configuration': 'linux', 'benchmark': 'foo', 'story': 'bar1' }, now - datetime.timedelta(minutes=1), now) median = math_utils.Median([i for i in range(0, 10)]) std_dev = math_utils.StandardDeviation([i for i in range(0, 10)]) p90 = math_utils.Percentile([i for i in range(0, 10)], 0.9) for i in range(0, 10): j = self._RecordTiming( { 'configuration': 'linux', 'benchmark': 'foo', 'story': 'bar2' }, now - datetime.timedelta(seconds=i), now) timings, tags = timing_record.GetSimilarHistoricalTimings(j) self.assertEqual(['try', 'linux', 'foo', 'bar2'], tags) self.assertClose(median, timings[0].total_seconds()) self.assertClose(std_dev, timings[1].total_seconds()) self.assertClose(p90, timings[2].total_seconds())
def testGetSimilarHistoricalTimings_NoConfiguration_MatchesAnyTry(self): now = datetime.datetime.now() self._RecordTiming( { 'configuration': 'mac', 'benchmark': 'foo1', 'story': 'bar1' }, now - datetime.timedelta(seconds=14), now) self._RecordTiming( { 'configuration': 'windows', 'benchmark': 'foo1', 'story': 'bar1' }, now - datetime.timedelta(seconds=12), now) self._RecordTiming( { 'configuration': 'linux', 'benchmark': 'foo2', 'story': 'bar2' }, now - datetime.timedelta(seconds=10), now) j = job.Job.New((), ()) j.arguments = { 'configuration': 'coco', 'benchmark': 'foo1', 'story': 'bar1' } timings, tags = timing_record.GetSimilarHistoricalTimings(j) self.assertEqual(['try'], tags) self.assertEqual(12, timings[0].total_seconds())
def testGetSimilarHistoricalTimings_NoStory_MatchesBenchmark(self): now = datetime.datetime.now() self._RecordTiming( { 'configuration': 'linux', 'benchmark': 'foo1', 'story': 'bar1' }, now - datetime.timedelta(hours=1), now) self._RecordTiming( { 'configuration': 'linux', 'benchmark': 'foo2', 'story': 'bar1' }, now - datetime.timedelta(seconds=12), now) self._RecordTiming( { 'configuration': 'linux', 'benchmark': 'foo2', 'story': 'bar2' }, now - datetime.timedelta(seconds=10), now) j = job.Job.New((), ()) j.arguments = { 'configuration': 'linux', 'benchmark': 'foo2', 'story': 'bar3' } timings, tags = timing_record.GetSimilarHistoricalTimings(j) self.assertEqual(['try', 'linux', 'foo2'], tags) self.assertEqual(11, timings[0].total_seconds())
def testRecord_Performance_Success(self): j = self._RecordTiming( {'configuration': 'linux', 'benchmark': 'foo', 'story': 'bar'}, datetime.datetime.now() - datetime.timedelta(minutes=1), datetime.datetime.now(), comparison_mode=job_state.PERFORMANCE) _, tags = timing_record.GetSimilarHistoricalTimings(j) self.assertEqual(['performance', 'linux', 'foo', 'bar'], tags)
def _GetRunTimeEstimate(self): result = timing_record.GetSimilarHistoricalTimings(self) if not result: return {} timings = [t.total_seconds() for t in result.timings] return { 'estimate': {'timings': timings, 'tags': result.tags}, 'queue_stats': scheduler.QueueStats(self.configuration) }
def testRecord_Try_Success(self): j = self._RecordTiming( {'configuration': 'linux', 'benchmark': 'foo', 'story': 'bar'}, datetime.datetime.now() - datetime.timedelta(minutes=1), datetime.datetime.now()) q = timing_record.TimingRecord.query() results = q.fetch() self.assertEqual(1, len(results)) _, tags = timing_record.GetSimilarHistoricalTimings(j) self.assertEqual(['try', 'linux', 'foo', 'bar'], tags)