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

Unified Diff: scripts/slave/recipe_modules/auto_bisect/resources/check_buildbot.py

Issue 1339613005: Refactoring scripts that wait for buildbot jobs to complete. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@hax
Patch Set: removing blank line Created 5 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: scripts/slave/recipe_modules/auto_bisect/resources/check_buildbot.py
diff --git a/scripts/slave/recipe_modules/auto_bisect/resources/check_buildbot.py b/scripts/slave/recipe_modules/auto_bisect/resources/check_buildbot.py
index 72fe3b2f66330a111196fc1a75bf1a0e475a544c..0ace7ae9b6d25ac320497c2ee66938ac3d7ee79b 100755
--- a/scripts/slave/recipe_modules/auto_bisect/resources/check_buildbot.py
+++ b/scripts/slave/recipe_modules/auto_bisect/resources/check_buildbot.py
@@ -25,14 +25,35 @@ def _get_build_name(job):
return property_tuple[1]
-def main(argv):
- if len(argv) < 4:
- print 'Usage: %s <master> <builder> <job_name1> [<job_name2> [...]]'
- print ' e.g. %s tryserver.chromium.perf linux_perf_bisector a012bc66ef98bb'
- sys.exit(1)
+def main(config):
+ """"Checks jobs on a buildbot builder.
- master, builder = argv[1:3]
- job_names = argv[3:]
+ Args:
+ config (dict): a configuration in the following format.
+
+ {
+ "master": "tryserver.chromium.perf",
+ "builder": "linux_perf_bisect",
+ "job_names": [ "abc1234", "deadbeef000", "f00ba12"]
+ }
+
+ Returns:
+ A dictionary containing a list of failed and/or a list of completed jobs and
+ a mapping between failed jobs and their urls when available
+ e.g.
+ {
+ "failed": ["deadbeef000"],
+ "completed": ["abc1234"],
+ "failed_job_urls": {"deadbeef000":"https://build....org/p/tryserver..."}
+ }
+ """
+ master = config['master']
+ builder = config['builder']
+ job_names = config['job_names']
+ results = {}
+ completed_jobs = []
+ failed_jobs = []
+ job_urls = {}
if 'TESTING_MASTER_HOST' in os.environ:
url = ('http://%(host)s:8041/json/builders/%(builder)s/'
@@ -42,27 +63,38 @@ def main(argv):
}
else:
url = BASE_URL % {'master': master, 'builder': builder}
- print 'Verifying buildbot jobs status at: ', url
+ sys.stderr.write('Using the following url to check builds:' + url)
+ sys.stderr.flush()
builds_info = json.load(urllib2.urlopen(url))
for build_num in builds_info.keys():
build_name = _get_build_name(builds_info[build_num])
if build_name in job_names:
- if builds_info[build_num]['results'] in [2, 4]:
- locator = 'bb:%s:%s:%s' % (master, builder, build_name)
- print 'Failed build url: %(url)s\nBuild failed: %(locator)s' % {
- 'locator': locator,
- 'url': LINK_URL % {
- 'master': master,
- 'builder': builder,
- 'build_num': build_num,
- }
- }
- return 1
- print 'The specified jobs are not failed.'
- return 0
+ if builds_info[build_num]['results'] in [2,3,4]:
+ failed_jobs.append(build_name)
+ job_urls[build_name] = LINK_URL % {
+ 'master': master,
+ 'builder': builder,
+ 'build_num': str(build_num),
+ }
+ elif builds_info[build_num]['results'] in [0, 1]:
+ job_urls[build_name] = LINK_URL % {
+ 'master': master,
+ 'builder': builder,
+ 'build_num': str(build_num),
+ }
+ completed_jobs.append(build_name)
+ if completed_jobs:
+ results['completed'] = completed_jobs
+ if failed_jobs:
+ results['failed'] = failed_jobs
+ if job_urls:
+ results['job_urls'] = job_urls
+ return results
if __name__ == '__main__':
- sys.exit(main(sys.argv))
+ config = json.loads(sys.stdin.read())
+ print main(config)
+ sys.exit(0)

Powered by Google App Engine
This is Rietveld 408576698