| 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 gae_libs.model.versioned_model import VersionedModel | 9 from gae_libs.model.versioned_model import VersionedModel |
| 10 from model import result_status | 10 from model import result_status |
| 11 from model import triage_status | 11 from model import triage_status |
| 12 from model.base_analysis import BaseAnalysis | 12 from model.base_analysis import BaseAnalysis |
| 13 from model.base_build_model import BaseBuildModel | 13 from model.base_build_model import BaseBuildModel |
| 14 from model.base_triaged_model import TriagedModel | 14 from model.base_triaged_model import TriagedModel |
| 15 from model.flake.flake_culprit import FlakeCulprit |
| 15 from model.flake.flake_swarming_task import FlakeSwarmingTaskData | 16 from model.flake.flake_swarming_task import FlakeSwarmingTaskData |
| 16 | 17 |
| 17 | 18 |
| 18 class DataPoint(ndb.Model): | 19 class DataPoint(ndb.Model): |
| 19 build_number = ndb.IntegerProperty(indexed=False) | 20 build_number = ndb.IntegerProperty(indexed=False) |
| 20 pass_rate = ndb.FloatProperty(indexed=False) | 21 pass_rate = ndb.FloatProperty(indexed=False) |
| 21 task_id = ndb.StringProperty(indexed=False) | 22 task_id = ndb.StringProperty(indexed=False) |
| 22 commit_position = ndb.IntegerProperty(indexed=False) | 23 commit_position = ndb.IntegerProperty(indexed=False) |
| 23 git_hash = ndb.StringProperty(indexed=False) | 24 git_hash = ndb.StringProperty(indexed=False) |
| 24 previous_build_commit_position = ndb.IntegerProperty(indexed=False) | 25 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, | 89 def UpdateTriageResult(self, triage_result, suspect_info, user_name, |
| 89 version_number=None): | 90 version_number=None): |
| 90 super(MasterFlakeAnalysis, self).UpdateTriageResult( | 91 super(MasterFlakeAnalysis, self).UpdateTriageResult( |
| 91 triage_result, suspect_info, user_name, version_number=version_number) | 92 triage_result, suspect_info, user_name, version_number=version_number) |
| 92 | 93 |
| 93 if triage_result == triage_status.TRIAGED_CORRECT: | 94 if triage_result == triage_status.TRIAGED_CORRECT: |
| 94 self.result_status = result_status.FOUND_CORRECT | 95 self.result_status = result_status.FOUND_CORRECT |
| 95 else: | 96 else: |
| 96 self.result_status = result_status.FOUND_INCORRECT | 97 self.result_status = result_status.FOUND_INCORRECT |
| 97 | 98 |
| 99 def GetDataPointOfSuspectedBuild(self): |
| 100 """Gets the corresponding data point to the suspected flake build.""" |
| 101 if self.suspected_flake_build_number is not None: |
| 102 for data_point in self.data_points: |
| 103 if data_point.build_number == self.suspected_flake_build_number: |
| 104 return data_point |
| 105 |
| 106 return None |
| 107 |
| 98 def Reset(self): | 108 def Reset(self): |
| 99 super(MasterFlakeAnalysis, self).Reset() | 109 super(MasterFlakeAnalysis, self).Reset() |
| 100 self.original_master_name = None | 110 self.original_master_name = None |
| 101 self.original_builder_name = None | 111 self.original_builder_name = None |
| 102 self.original_build_number = None | 112 self.original_build_number = None |
| 103 self.original_step_name = None | 113 self.original_step_name = None |
| 104 self.original_test_name = None | 114 self.original_test_name = None |
| 105 self.bug_id = None | 115 self.bug_id = None |
| 106 self.swarming_rerun_results = [] | 116 self.swarming_rerun_results = [] |
| 107 self.error = None | 117 self.error = None |
| 108 self.correct_regression_range = None | 118 self.correct_regression_range = None |
| 109 self.correct_culprit = None | 119 self.correct_culprit = None |
| 110 self.algorithm_parameters = None | 120 self.algorithm_parameters = None |
| 111 self.suspected_flake_build_number = None | 121 self.suspected_flake_build_number = None |
| 122 self.culprit = None |
| 123 self.try_job_status = None |
| 112 self.data_points = [] | 124 self.data_points = [] |
| 113 self.result_status = None | 125 self.result_status = None |
| 114 | 126 |
| 115 # The original build/step/test in which a flake actually occurred. | 127 # 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. | 128 # 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. | 129 # A gtest suite.PRE_PRE_test has to be normalized to suite.test. |
| 118 original_master_name = ndb.StringProperty(indexed=True) | 130 original_master_name = ndb.StringProperty(indexed=True) |
| 119 original_builder_name = ndb.StringProperty(indexed=True) | 131 original_builder_name = ndb.StringProperty(indexed=True) |
| 120 original_build_number = ndb.IntegerProperty(indexed=True) | 132 original_build_number = ndb.IntegerProperty(indexed=True) |
| 121 original_step_name = ndb.StringProperty(indexed=True) | 133 original_step_name = ndb.StringProperty(indexed=True) |
| (...skipping 29 matching lines...) Expand all Loading... |
| 151 # 'max_build_numbers_to_look_back': 500, | 163 # 'max_build_numbers_to_look_back': 500, |
| 152 # 'max_flake_in_a_row': 4, | 164 # 'max_flake_in_a_row': 4, |
| 153 # 'max_stable_in_a_row': 4, | 165 # 'max_stable_in_a_row': 4, |
| 154 # 'upper_flake_threshold': 0.98 | 166 # 'upper_flake_threshold': 0.98 |
| 155 # } | 167 # } |
| 156 algorithm_parameters = ndb.JsonProperty(indexed=False) | 168 algorithm_parameters = ndb.JsonProperty(indexed=False) |
| 157 | 169 |
| 158 # The suspected build number to have introduced the flakiness. | 170 # The suspected build number to have introduced the flakiness. |
| 159 suspected_flake_build_number = ndb.IntegerProperty() | 171 suspected_flake_build_number = ndb.IntegerProperty() |
| 160 | 172 |
| 173 # The culprit CL associated with the try job results, if any. |
| 174 culprit = ndb.LocalStructuredProperty(FlakeCulprit) |
| 175 |
| 176 # The status of try jobs, if any. None if try jobs have not been triggered. |
| 177 # Status should be PENDING or STARTED when the first try job is triggered, |
| 178 # and COMPLETED when the last one finishes. If any try job ends in error, |
| 179 # status will be ERROR. |
| 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 |