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 import logging | |
| 6 | 7 |
| 7 from google.appengine.ext import ndb | 8 from google.appengine.ext import ndb |
| 8 | 9 |
| 10 from gae_libs.gitiles.cached_gitiles_repository import CachedGitilesRepository | |
| 9 from gae_libs.model.versioned_model import VersionedModel | 11 from gae_libs.model.versioned_model import VersionedModel |
| 10 from model import result_status | 12 from model import result_status |
| 11 from model import triage_status | 13 from model import triage_status |
| 12 from model.base_analysis import BaseAnalysis | 14 from model.base_analysis import BaseAnalysis |
| 13 from model.base_build_model import BaseBuildModel | 15 from model.base_build_model import BaseBuildModel |
| 14 from model.base_triaged_model import TriagedModel | 16 from model.base_triaged_model import TriagedModel |
| 17 from model.flake.flake_culprit import FlakeCulprit | |
| 15 from model.flake.flake_swarming_task import FlakeSwarmingTaskData | 18 from model.flake.flake_swarming_task import FlakeSwarmingTaskData |
| 16 | 19 |
| 17 | 20 |
| 18 class DataPoint(ndb.Model): | 21 class DataPoint(ndb.Model): |
| 19 build_number = ndb.IntegerProperty(indexed=False) | 22 build_number = ndb.IntegerProperty(indexed=False) |
| 20 pass_rate = ndb.FloatProperty(indexed=False) | 23 pass_rate = ndb.FloatProperty(indexed=False) |
| 21 task_id = ndb.StringProperty(indexed=False) | 24 task_id = ndb.StringProperty(indexed=False) |
| 22 commit_position = ndb.IntegerProperty(indexed=False) | 25 commit_position = ndb.IntegerProperty(indexed=False) |
| 23 git_hash = ndb.StringProperty(indexed=False) | 26 git_hash = ndb.StringProperty(indexed=False) |
| 24 previous_build_commit_position = ndb.IntegerProperty(indexed=False) | 27 previous_build_commit_position = ndb.IntegerProperty(indexed=False) |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 def UpdateTriageResult(self, triage_result, suspect_info, user_name, | 91 def UpdateTriageResult(self, triage_result, suspect_info, user_name, |
| 89 version_number=None): | 92 version_number=None): |
| 90 super(MasterFlakeAnalysis, self).UpdateTriageResult( | 93 super(MasterFlakeAnalysis, self).UpdateTriageResult( |
| 91 triage_result, suspect_info, user_name, version_number=version_number) | 94 triage_result, suspect_info, user_name, version_number=version_number) |
| 92 | 95 |
| 93 if triage_result == triage_status.TRIAGED_CORRECT: | 96 if triage_result == triage_status.TRIAGED_CORRECT: |
| 94 self.result_status = result_status.FOUND_CORRECT | 97 self.result_status = result_status.FOUND_CORRECT |
| 95 else: | 98 else: |
| 96 self.result_status = result_status.FOUND_INCORRECT | 99 self.result_status = result_status.FOUND_INCORRECT |
| 97 | 100 |
| 101 def GetSuspectedFlakeDataPoint(self): | |
|
chanli
2017/01/07 02:56:28
This function needs to be updated after our discus
lijeffrey
2017/01/09 20:53:31
Yes, per discussion we will have 1 group of data p
| |
| 102 """Gets the corresponding data point to the suspected flake build.""" | |
| 103 if self.suspected_flake_build_number is not None: | |
| 104 for data_point in self.data_points: | |
| 105 if data_point.build_number == self.suspected_flake_build_number: | |
| 106 return data_point | |
| 107 | |
| 108 return None | |
| 109 | |
| 98 def Reset(self): | 110 def Reset(self): |
| 99 super(MasterFlakeAnalysis, self).Reset() | 111 super(MasterFlakeAnalysis, self).Reset() |
| 100 self.original_master_name = None | 112 self.original_master_name = None |
| 101 self.original_builder_name = None | 113 self.original_builder_name = None |
| 102 self.original_build_number = None | 114 self.original_build_number = None |
| 103 self.original_step_name = None | 115 self.original_step_name = None |
| 104 self.original_test_name = None | 116 self.original_test_name = None |
| 105 self.bug_id = None | 117 self.bug_id = None |
| 106 self.swarming_rerun_results = [] | 118 self.swarming_rerun_results = [] |
| 107 self.error = None | 119 self.error = None |
| 108 self.correct_regression_range = None | 120 self.correct_regression_range = None |
| 109 self.correct_culprit = None | 121 self.correct_culprit = None |
| 110 self.algorithm_parameters = None | 122 self.algorithm_parameters = None |
| 111 self.suspected_flake_build_number = None | 123 self.suspected_flake_build_number = None |
| 124 self.culprit = None | |
| 125 self.try_job_status = None | |
| 112 self.data_points = [] | 126 self.data_points = [] |
| 113 self.result_status = None | 127 self.result_status = None |
| 114 | 128 |
| 115 # The original build/step/test in which a flake actually occurred. | 129 # The original build/step/test in which a flake actually occurred. |
| 116 # A CQ trybot step has to be mapped to a Waterfall buildbot step. | 130 # A CQ trybot step has to be mapped to a Waterfall buildbot step. |
| 117 # A gtest suite.PRE_PRE_test has to be normalized to suite.test. | 131 # A gtest suite.PRE_PRE_test has to be normalized to suite.test. |
| 118 original_master_name = ndb.StringProperty(indexed=True) | 132 original_master_name = ndb.StringProperty(indexed=True) |
| 119 original_builder_name = ndb.StringProperty(indexed=True) | 133 original_builder_name = ndb.StringProperty(indexed=True) |
| 120 original_build_number = ndb.IntegerProperty(indexed=True) | 134 original_build_number = ndb.IntegerProperty(indexed=True) |
| 121 original_step_name = ndb.StringProperty(indexed=True) | 135 original_step_name = ndb.StringProperty(indexed=True) |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 151 # 'max_build_numbers_to_look_back': 500, | 165 # 'max_build_numbers_to_look_back': 500, |
| 152 # 'max_flake_in_a_row': 4, | 166 # 'max_flake_in_a_row': 4, |
| 153 # 'max_stable_in_a_row': 4, | 167 # 'max_stable_in_a_row': 4, |
| 154 # 'upper_flake_threshold': 0.98 | 168 # 'upper_flake_threshold': 0.98 |
| 155 # } | 169 # } |
| 156 algorithm_parameters = ndb.JsonProperty(indexed=False) | 170 algorithm_parameters = ndb.JsonProperty(indexed=False) |
| 157 | 171 |
| 158 # The suspected build number to have introduced the flakiness. | 172 # The suspected build number to have introduced the flakiness. |
| 159 suspected_flake_build_number = ndb.IntegerProperty() | 173 suspected_flake_build_number = ndb.IntegerProperty() |
| 160 | 174 |
| 175 # The culprit CL associated with the try job results, if any. | |
| 176 culprit = ndb.LocalStructuredProperty(FlakeCulprit) | |
| 177 | |
| 178 # The status of the try job, if any. None if no suspected flake build number | |
|
chanli
2017/01/07 02:56:28
Flake revision instead of flake build number?
lijeffrey
2017/01/09 20:53:31
Renamed "None if try jobs have not been triggered"
| |
| 179 # yet. | |
| 180 try_job_status = ndb.IntegerProperty(indexed=False) | |
| 181 | |
| 161 # The data points used to plot the flakiness graph build over build. | 182 # The data points used to plot the flakiness graph build over build. |
| 162 data_points = ndb.LocalStructuredProperty( | 183 data_points = ndb.LocalStructuredProperty( |
| 163 DataPoint, repeated=True, compressed=True) | 184 DataPoint, repeated=True, compressed=True) |
| 164 | 185 |
| 165 # Whether the analysis was triggered by a manual request through check flake, | 186 # Whether the analysis was triggered by a manual request through check flake, |
| 166 # Findit's automatic analysis upon detection, or Findit API. | 187 # Findit's automatic analysis upon detection, or Findit API. |
| 167 triggering_source = ndb.IntegerProperty(default=None, indexed=True) | 188 triggering_source = ndb.IntegerProperty(default=None, indexed=True) |
| 168 | 189 |
| 169 # Who triggered the analysis. Used for differentiating between manual and | 190 # Who triggered the analysis. Used for differentiating between manual and |
| 170 # automatic runs, and determining the most active users to gather feedback. | 191 # automatic runs, and determining the most active users to gather feedback. |
| 171 triggering_user_email = ndb.StringProperty(default=None, indexed=False) | 192 triggering_user_email = ndb.StringProperty(default=None, indexed=False) |
| 172 | 193 |
| 173 # Overall conclusion of analysis result for the flake. Found untriaged, Found | 194 # Overall conclusion of analysis result for the flake. Found untriaged, Found |
| 174 # Correct, etc. used to filter what is displayed on the check flake dashboard. | 195 # Correct, etc. used to filter what is displayed on the check flake dashboard. |
| 175 result_status = ndb.IntegerProperty(indexed=True) | 196 result_status = ndb.IntegerProperty(indexed=True) |
| OLD | NEW |