Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1982)

Unified Diff: appengine/findit/handlers/build_failure.py

Issue 2361583002: [Findit] UI change and triage change for cl level trige. (Closed)
Patch Set: rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/findit/handlers/build_failure.py
diff --git a/appengine/findit/handlers/build_failure.py b/appengine/findit/handlers/build_failure.py
index 0903748af7a67a736523c22b3905f7553ed1b09f..b50133f7c5911736f7c24f4707cc9a85d468ed09 100644
--- a/appengine/findit/handlers/build_failure.py
+++ b/appengine/findit/handlers/build_failure.py
@@ -15,9 +15,11 @@ from handlers import handlers_util
from handlers import result_status
from handlers.result_status import NO_TRY_JOB_REASON_MAP
from model import analysis_status
+from model.result_status import RESULT_STATUS_TO_DESCRIPTION
+from model.suspected_cl_status import CL_STATUS_TO_DESCRIPTION
from model.wf_analysis import WfAnalysis
+from model.wf_suspected_cl import WfSuspectedCL
from model.wf_try_job import WfTryJob
-from model.result_status import RESULT_STATUS_TO_DESCRIPTION
from waterfall import build_failure_analysis_pipelines
from waterfall import buildbot
from waterfall import waterfall_config
@@ -33,6 +35,19 @@ def _FormatDatetime(dt):
return dt.strftime('%Y-%m-%d %H:%M:%S UTC')
+def _GetCLDict(analysis, cl_info):
+ if not cl_info:
+ return None
+
+ cl_keys = cl_info.split('/')
+ repo_name = cl_keys[0]
+ revision = cl_keys[1]
+ for cl in analysis.suspected_cls:
+ if cl['repo_name'] == repo_name and cl['revision'] == revision:
+ return cl
+ return None
+
+
def _GetTriageHistory(analysis):
if (not users.is_current_user_admin() or
not analysis.completed or
@@ -41,12 +56,15 @@ def _GetTriageHistory(analysis):
triage_history = []
for triage_record in analysis.triage_history:
+
triage_history.append({
'triage_time': _FormatDatetime(
datetime.utcfromtimestamp(triage_record['triage_timestamp'])),
'user_name': triage_record['user_name'],
- 'result_status': RESULT_STATUS_TO_DESCRIPTION.get(
- triage_record['result_status']),
+ 'triaged_cl': _GetCLDict(analysis, triage_record.get('triaged_cl')),
+ 'result_status': (
+ RESULT_STATUS_TO_DESCRIPTION.get(triage_record.get('result_status'))
+ or CL_STATUS_TO_DESCRIPTION.get(triage_record.get('cl_status'))),
'version': triage_record.get('version'),
})
@@ -302,6 +320,30 @@ def _PopulateHeuristicDataForCompileFailure(analysis, data):
data['suspected_cls_by_heuristic'] = compile_failure['suspected_cls']
+def _GetAllSuspectedCLsAndCheckStatus(
+ master_name, builder_name, build_number, analysis):
+ build_key = '%s/%s/%d' % (master_name, builder_name, build_number)
+ suspected_cls = analysis.suspected_cls
+ if not suspected_cls:
+ return []
+
+ for cl in suspected_cls:
+ cl['status'] = None
+ cl_object = WfSuspectedCL.Get(cl['repo_name'], cl['revision'])
+ # TODO(chanli): Write a script to convert legacy data before enable
+ # this change.
+ if not cl_object:
+ continue
+
+ build = cl_object.builds.get(build_key)
+ import json
+ print json.dumps(build, indent =2)
+ if build:
+ cl['status'] = build['status']
+
+ return suspected_cls
+
+
class BuildFailure(BaseHandler):
PERMISSION_LEVEL = Permission.ANYONE
@@ -340,19 +382,16 @@ class BuildFailure(BaseHandler):
analysis.triage_reference_analysis_build_number
}
- def _PrepareDataForCompileFailure(self, analysis):
- data = self._PrepareCommonDataForFailure(analysis)
+ def _PrepareDataForCompileFailure(self, analysis, data):
# Check result from heuristic analysis.
_PopulateHeuristicDataForCompileFailure(analysis, data)
# Check result from try job.
data['try_job'] = _PrepareTryJobDataForCompileFailure(analysis)
- return data
-
- def _PrepareDataForTestFailures(self, analysis, build_info,
+ def _PrepareDataForTestFailures(self, analysis, build_info, data,
show_debug_info=False):
- data = self._PrepareCommonDataForFailure(analysis)
+
data['status_message_map'] = result_status.STATUS_MESSAGE_MAP
organized_results = _GetOrganizedAnalysisResultBySuspectedCL(
@@ -402,17 +441,24 @@ class BuildFailure(BaseHandler):
force_try_job=force_try_job,
queue_name=constants.WATERFALL_ANALYSIS_QUEUE)
+ data = self._PrepareCommonDataForFailure(analysis)
+ data['suspected_cls'] = _GetAllSuspectedCLsAndCheckStatus(
+ master_name, builder_name, build_number, analysis)
+
if analysis.failure_type == failure_type.COMPILE:
+ self._PrepareDataForCompileFailure(analysis, data)
return {
- 'template': 'waterfall/compile_failure.html',
- 'data': self._PrepareDataForCompileFailure(analysis),
+ 'template': 'waterfall/compile_failure.html',
+ 'data': data
}
else:
+ self._PrepareDataForTestFailures(
+ analysis, build_info, data, self._ShowDebugInfo())
return {
- 'template': 'waterfall/test_failure.html',
- 'data': self._PrepareDataForTestFailures(analysis, build_info,
- self._ShowDebugInfo()),
+ 'template': 'waterfall/test_failure.html',
+ 'data': data
}
+
def HandlePost(self): # pragma: no cover
- return self.HandleGet()
+ return self.HandleGet()
« no previous file with comments | « no previous file | appengine/findit/handlers/test/build_failure_test.py » ('j') | appengine/findit/handlers/triage_suspected_cl.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698