| Index: appengine/findit/waterfall/identify_culprit_pipeline.py
|
| diff --git a/appengine/findit/waterfall/identify_culprit_pipeline.py b/appengine/findit/waterfall/identify_culprit_pipeline.py
|
| index ffdc5ec0b9be7916d1e13d5b692ff78061923ddb..e6b32f5db0836ad7234f72ca1121acb92b257815 100644
|
| --- a/appengine/findit/waterfall/identify_culprit_pipeline.py
|
| +++ b/appengine/findit/waterfall/identify_culprit_pipeline.py
|
| @@ -5,10 +5,12 @@
|
|
|
| from common import time_util
|
| from common.pipeline_wrapper import BasePipeline
|
| -from model import result_status
|
| +from model import analysis_approach_type
|
| from model import analysis_status
|
| +from model import result_status
|
| from model.wf_analysis import WfAnalysis
|
| from waterfall import build_failure_analysis
|
| +from waterfall import suspected_cl_util
|
|
|
|
|
| def _GetResultAnalysisStatus(analysis_result):
|
| @@ -31,23 +33,32 @@ def _GetResultAnalysisStatus(analysis_result):
|
| return result_status.NOT_FOUND_UNTRIAGED
|
|
|
|
|
| -def _GetSuspectedCLs(analysis_result):
|
| - """Returns the suspected CLs we found in analysis."""
|
| - suspected_cls = []
|
| - if not analysis_result or not analysis_result['failures']:
|
| - return suspected_cls
|
| +def _SaveSuspectedCLs(
|
| + suspected_cls, master_name, builder_name, build_number, failure_type):
|
| + """Saves suspected CLs to dataStore."""
|
| + for suspected_cl in suspected_cls:
|
| + suspected_cl_util.UpdateSuspectedCL(
|
| + suspected_cl['repo_name'], suspected_cl['revision'],
|
| + suspected_cl['commit_position'], analysis_approach_type.HEURISTIC,
|
| + master_name, builder_name, build_number, failure_type,
|
| + suspected_cl['failures'], suspected_cl['top_score'])
|
|
|
| - for failure in analysis_result['failures']:
|
| - for suspected_cl in failure['suspected_cls']:
|
| - cl_info = {
|
| - 'repo_name': suspected_cl['repo_name'],
|
| - 'revision': suspected_cl['revision'],
|
| - 'commit_position': suspected_cl['commit_position'],
|
| - 'url': suspected_cl['url']
|
| - }
|
| - if cl_info not in suspected_cls:
|
| - suspected_cls.append(cl_info)
|
| - return suspected_cls
|
| +
|
| +def _GetSuspectedCLsWithOnlyCLInfo(suspected_cls):
|
| + """Removes failures and top_score from suspected_cls.
|
| +
|
| + Makes sure suspected_cls from heuristic or try_job have the same format.
|
| + """
|
| + simplified_suspected_cls = []
|
| + for cl in suspected_cls:
|
| + simplified_cl = {
|
| + 'repo_name': cl['repo_name'],
|
| + 'revision': cl['revision'],
|
| + 'commit_position': cl['commit_position'],
|
| + 'url': cl['url']
|
| + }
|
| + simplified_suspected_cls.append(simplified_cl)
|
| + return simplified_suspected_cls
|
|
|
|
|
| class IdentifyCulpritPipeline(BasePipeline):
|
| @@ -63,22 +74,26 @@ class IdentifyCulpritPipeline(BasePipeline):
|
| signals (dict): Output of pipeline ExtractSignalPipeline.
|
|
|
| Returns:
|
| - The same dict as the returned value of function
|
| - build_failure_analysis.AnalyzeBuildFailure.
|
| + analysis_result returned by build_failure_analysis.AnalyzeBuildFailure.
|
| """
|
| master_name = failure_info['master_name']
|
| builder_name = failure_info['builder_name']
|
| build_number = failure_info['build_number']
|
|
|
| - analysis_result = build_failure_analysis.AnalyzeBuildFailure(
|
| + analysis_result, suspected_cls = build_failure_analysis.AnalyzeBuildFailure(
|
| failure_info, change_logs, deps_info, signals)
|
| analysis = WfAnalysis.Get(master_name, builder_name, build_number)
|
| analysis.build_completed = build_completed
|
| analysis.result = analysis_result
|
| analysis.status = analysis_status.COMPLETED
|
| analysis.result_status = _GetResultAnalysisStatus(analysis_result)
|
| - analysis.suspected_cls = _GetSuspectedCLs(analysis_result)
|
| + analysis.suspected_cls = _GetSuspectedCLsWithOnlyCLInfo(suspected_cls)
|
| analysis.end_time = time_util.GetUTCNow()
|
| analysis.put()
|
|
|
| + # Save suspected_cls to data_store.
|
| + _SaveSuspectedCLs(
|
| + suspected_cls, failure_info['master_name'],
|
| + failure_info['builder_name'], failure_info['build_number'],
|
| + failure_info['failure_type'])
|
| return analysis_result
|
|
|