| 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)
|
|
|