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 |
| 12 | |
| 13 class FlakeSwarmingTaskData(ndb.Model): | |
| 14 task_id = ndb.StringProperty(indexed=True) | |
|
stgao
2016/10/01 01:36:59
No index for all of these.
lijeffrey
2016/10/01 02:51:45
Done.
| |
| 15 status = ndb.IntegerProperty(indexed=False) | |
| 16 error = ndb.JsonProperty(indexed=False) | |
| 17 created_time = ndb.DateTimeProperty(indexed=True) | |
| 18 started_time = ndb.DateTimeProperty(indexed=False) | |
| 19 completed_time = ndb.DateTimeProperty(indexed=False) | |
| 20 cache_hit = ndb.IntegerProperty(indexed=False) | |
| 21 number_of_iterations = ndb.IntegerProperty(indexed=False) | |
| 22 number_of_passes = ndb.IntegerProperty(indexed=False) | |
| 23 | |
| 13 | 24 |
| 14 class FlakeSwarmingTask(BaseSwarmingTask, BaseBuildModel): | 25 class FlakeSwarmingTask(BaseSwarmingTask, BaseBuildModel): |
| 15 """Represents a swarming task for a step w/candidate flaky tests. | 26 """Represents a swarming task for a step w/candidate flaky tests. |
| 16 """ | 27 """ |
| 17 | 28 |
| 18 @staticmethod | 29 @staticmethod |
| 19 def _CreateSwarmingTaskId( | 30 def _CreateSwarmingTaskId(master_name, builder_name, build_number, |
| 20 master_name, builder_name, build_number, | 31 step_name, test_name): # pragma: no cover |
| 21 step_name, test_name): # pragma: no cover | |
| 22 encoded_test_name = base64.urlsafe_b64encode(test_name) | 32 encoded_test_name = base64.urlsafe_b64encode(test_name) |
| 23 return '%s/%s/%s/%s/%s' % (master_name, builder_name, | 33 return '%s/%s/%s/%s/%s' % (master_name, builder_name, |
| 24 build_number, step_name, encoded_test_name) | 34 build_number, step_name, encoded_test_name) |
| 25 | 35 |
| 26 @staticmethod | 36 @staticmethod |
| 27 def _CreateKey( | 37 def _CreateKey(master_name, builder_name, build_number, |
| 28 master_name, builder_name, build_number, | 38 step_name, test_name): # pragma: no cover |
| 29 step_name, test_name): # pragma: no cover | |
| 30 return ndb.Key('FlakeSwarmingTask', | 39 return ndb.Key('FlakeSwarmingTask', |
| 31 FlakeSwarmingTask._CreateSwarmingTaskId( | 40 FlakeSwarmingTask._CreateSwarmingTaskId( |
| 32 master_name, builder_name, build_number, | 41 master_name, builder_name, build_number, |
| 33 step_name, test_name)) | 42 step_name, test_name)) |
| 34 | 43 |
| 35 @staticmethod | 44 @staticmethod |
| 36 def Create( | 45 def Create(master_name, builder_name, build_number, |
| 37 master_name, builder_name, build_number, | 46 step_name, test_name): # pragma: no cover |
| 38 step_name, test_name): # pragma: no cover | |
| 39 return FlakeSwarmingTask(key=FlakeSwarmingTask._CreateKey( | 47 return FlakeSwarmingTask(key=FlakeSwarmingTask._CreateKey( |
| 40 master_name, builder_name, build_number, step_name, test_name)) | 48 master_name, builder_name, build_number, step_name, test_name)) |
| 41 | 49 |
| 42 @ndb.ComputedProperty | 50 @ndb.ComputedProperty |
| 43 def step_name(self): | 51 def step_name(self): |
| 44 return self.key.pairs()[0][1].split('/')[3] | 52 return self.key.pairs()[0][1].split('/')[3] |
| 45 | 53 |
| 46 @ndb.ComputedProperty | 54 @ndb.ComputedProperty |
| 47 def test_name(self): | 55 def test_name(self): |
| 48 return base64.urlsafe_b64decode(self.key.pairs()[0][1].split('/')[4]) | 56 return base64.urlsafe_b64decode(self.key.pairs()[0][1].split('/')[4]) |
| 49 | 57 |
| 50 | |
| 51 @staticmethod | 58 @staticmethod |
| 52 def Get( | 59 def Get(master_name, builder_name, build_number, |
| 53 master_name, builder_name, build_number, | 60 step_name, test_name): # pragma: no cover |
| 54 step_name, test_name): # pragma: no cover | |
| 55 return FlakeSwarmingTask._CreateKey( | 61 return FlakeSwarmingTask._CreateKey( |
| 56 master_name, builder_name, build_number, step_name, test_name).get() | 62 master_name, builder_name, build_number, step_name, test_name).get() |
| 57 | 63 |
| 64 def GetFlakeSwarmingTaskData(self): | |
| 65 flake_swarming_task_data = FlakeSwarmingTaskData() | |
| 66 flake_swarming_task_data.task_id = self.task_id | |
| 67 flake_swarming_task_data.created_time = self.created_time | |
| 68 flake_swarming_task_data.started_time = self.started_time | |
| 69 flake_swarming_task_data.completed_time = self.completed_time | |
| 70 flake_swarming_task_data.error = self.error | |
| 71 flake_swarming_task_data.number_of_iterations = self.tries | |
| 72 flake_swarming_task_data.number_of_passes = self.successes | |
| 73 flake_swarming_task_data.status = self.status | |
| 74 # TODO(lijeffrey): Determine cache_hit. | |
| 75 return flake_swarming_task_data | |
| 76 | |
| 58 # Number of runs the test passed. | 77 # Number of runs the test passed. |
| 59 successes = ndb.IntegerProperty(default=0, indexed=False) | 78 successes = ndb.IntegerProperty(default=0, indexed=False) |
| 60 # How many times the test was rerun. | 79 # How many times the test was rerun. |
| 61 tries = ndb.IntegerProperty(default=0, indexed=False) | 80 tries = ndb.IntegerProperty(default=0, indexed=False) |
| OLD | NEW |