Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import base64 | 5 import base64 |
| 6 | 6 |
| 7 from google.appengine.ext import ndb | 7 from google.appengine.ext import ndb |
| 8 | 8 |
| 9 from common import constants | 9 from model.base_build_model import BaseBuildModel |
| 10 from model import analysis_status | |
| 11 from model.base_swarming_task import BaseSwarmingTask | 10 from model.base_swarming_task import BaseSwarmingTask |
| 12 from model.base_build_model import BaseBuildModel | 11 |
| 13 | 12 |
| 14 class FlakeSwarmingTask(BaseSwarmingTask, BaseBuildModel): | 13 class FlakeSwarmingTask(BaseSwarmingTask, BaseBuildModel): |
| 15 """Represents a swarming task for a step w/candidate flaky tests. | 14 """Represents a swarming task for a step w/candidate flaky tests. |
| 16 """ | 15 """ |
| 17 | 16 |
| 18 @staticmethod | 17 @staticmethod |
| 19 def _CreateSwarmingTaskId( | 18 def _CreateSwarmingTaskId(master_name, builder_name, build_number, |
| 20 master_name, builder_name, build_number, | 19 step_name, test_name): # pragma: no cover |
| 21 step_name, test_name): # pragma: no cover | |
| 22 encoded_test_name = base64.urlsafe_b64encode(test_name) | 20 encoded_test_name = base64.urlsafe_b64encode(test_name) |
| 23 return '%s/%s/%s/%s/%s' % (master_name, builder_name, | 21 return '%s/%s/%s/%s/%s' % (master_name, builder_name, |
| 24 build_number, step_name, encoded_test_name) | 22 build_number, step_name, encoded_test_name) |
| 25 | 23 |
| 26 @staticmethod | 24 @staticmethod |
| 27 def _CreateKey( | 25 def _CreateKey(master_name, builder_name, build_number, |
| 28 master_name, builder_name, build_number, | 26 step_name, test_name): # pragma: no cover |
| 29 step_name, test_name): # pragma: no cover | |
| 30 return ndb.Key('FlakeSwarmingTask', | 27 return ndb.Key('FlakeSwarmingTask', |
| 31 FlakeSwarmingTask._CreateSwarmingTaskId( | 28 FlakeSwarmingTask._CreateSwarmingTaskId( |
| 32 master_name, builder_name, build_number, | 29 master_name, builder_name, build_number, |
| 33 step_name, test_name)) | 30 step_name, test_name)) |
| 34 | 31 |
| 35 @staticmethod | 32 @staticmethod |
| 36 def Create( | 33 def Create(master_name, builder_name, build_number, |
| 37 master_name, builder_name, build_number, | 34 step_name, test_name): # pragma: no cover |
| 38 step_name, test_name): # pragma: no cover | |
| 39 return FlakeSwarmingTask(key=FlakeSwarmingTask._CreateKey( | 35 return FlakeSwarmingTask(key=FlakeSwarmingTask._CreateKey( |
| 40 master_name, builder_name, build_number, step_name, test_name)) | 36 master_name, builder_name, build_number, step_name, test_name)) |
| 41 | 37 |
| 42 @ndb.ComputedProperty | 38 @ndb.ComputedProperty |
| 43 def step_name(self): | 39 def step_name(self): |
| 44 return self.key.pairs()[0][1].split('/')[3] | 40 return self.key.pairs()[0][1].split('/')[3] |
| 45 | 41 |
| 46 @ndb.ComputedProperty | 42 @ndb.ComputedProperty |
| 47 def test_name(self): | 43 def test_name(self): |
| 48 return base64.urlsafe_b64decode(self.key.pairs()[0][1].split('/')[4]) | 44 return base64.urlsafe_b64decode(self.key.pairs()[0][1].split('/')[4]) |
| 49 | 45 |
| 50 | |
| 51 @staticmethod | 46 @staticmethod |
| 52 def Get( | 47 def Get(master_name, builder_name, build_number, |
| 53 master_name, builder_name, build_number, | 48 step_name, test_name): # pragma: no cover |
| 54 step_name, test_name): # pragma: no cover | |
| 55 return FlakeSwarmingTask._CreateKey( | 49 return FlakeSwarmingTask._CreateKey( |
| 56 master_name, builder_name, build_number, step_name, test_name).get() | 50 master_name, builder_name, build_number, step_name, test_name).get() |
| 57 | 51 |
| 52 def ResultsToJsonDict(self): | |
| 53 return { | |
| 54 'created_time': str(self.created_time), | |
|
stgao
2016/09/30 21:07:31
Convert to UTC timestamp instead?
stgao
2016/09/30 21:10:54
If use LocalStructuredProperty, no change for the
lijeffrey
2016/10/01 01:28:04
Done.
| |
| 55 'started_time': str(self.started_time), | |
| 56 'completed_time': str(self.completed_time), | |
| 57 'build_number': self.build_number, | |
| 58 'number_of_iterations': self.tries, | |
| 59 'number_of_passes': self.successes | |
| 60 } | |
| 61 | |
| 58 # Number of runs the test passed. | 62 # Number of runs the test passed. |
| 59 successes = ndb.IntegerProperty(default=0, indexed=False) | 63 successes = ndb.IntegerProperty(default=0, indexed=False) |
| 60 # How many times the test was rerun. | 64 # How many times the test was rerun. |
| 61 tries = ndb.IntegerProperty(default=0, indexed=False) | 65 tries = ndb.IntegerProperty(default=0, indexed=False) |
| OLD | NEW |