| Index: swarm_client/tools/harvest_buildbot.py
|
| ===================================================================
|
| --- swarm_client/tools/harvest_buildbot.py (revision 235167)
|
| +++ swarm_client/tools/harvest_buildbot.py (working copy)
|
| @@ -1,101 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2013 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""Harvest data on the Try Server.
|
| -
|
| -Please use sparingly. Large values for horizon will trash the Try Server memory.
|
| -"""
|
| -
|
| -import os
|
| -import optparse
|
| -import sys
|
| -
|
| -
|
| -def get_failed_builds(builder, horizon):
|
| - """Constructs the list of failed builds."""
|
| - builder.builds.cache()
|
| - return [
|
| - builder.builds[i] for i in xrange(-horizon, 0)
|
| - if not builder.builds[i].simplified_result
|
| - ]
|
| -
|
| -
|
| -def get_parent_build(build):
|
| - """Returns the parent build for a triggered build."""
|
| - parent_buildername = build.properties_as_dict['parent_buildername']
|
| - parent_builder = build.builders[parent_buildername]
|
| - return parent_builder.builds[build.properties_as_dict['parent_buildnumber']]
|
| -
|
| -
|
| -def parse(b, horizon):
|
| - print('Processing last %d entries' % horizon)
|
| - failed_builds = get_failed_builds(b.builders['swarm_triggered'], horizon)
|
| - rate = 100. * (1. - float(len(failed_builds)) / float(horizon))
|
| - print('Success: %3.1f%%' % rate)
|
| -
|
| - NO_KEY = 'Warning: Unable to find any tests with the name'
|
| - HTTP_404 = 'threw HTTP Error 404: Not Found'
|
| - for build in failed_builds:
|
| - print('%s/%d on %s' % (build.builder.name, build.number, build.slave.name))
|
| - swarm_trigger_tests = build.steps['swarm_trigger_tests']
|
| - base_unittests = build.steps['base_unittests']
|
| - fail = ''
|
| - if swarm_trigger_tests.simplified_result:
|
| - fail = 'buildbot failed to pass arguments'
|
| - elif not swarm_trigger_tests.stdio:
|
| - fail = 'old swarm_trigger_step.py version'
|
| - else:
|
| - stdio = base_unittests.stdio
|
| - if NO_KEY in stdio:
|
| - fail = 'Failed to retrieve keys.'
|
| - elif HTTP_404 in stdio:
|
| - fail = 'Failed to retrieve keys with 404.'
|
| -
|
| - if fail:
|
| - print(' Triggering failed: %s' % fail)
|
| - else:
|
| - # Print the first few lines.
|
| - lines = base_unittests.stdio.splitlines()[:15]
|
| - print('\n'.join(' ' + l for l in lines))
|
| - print(' %s %s %s %s' % (
|
| - build.properties_as_dict['use_swarm_client_revision'],
|
| - build.properties_as_dict['swarm_hashes'],
|
| - build.properties_as_dict.get('use_swarm_client_revision'),
|
| - build.properties_as_dict.get('testfilter')))
|
| -
|
| -
|
| -def main():
|
| - parser = optparse.OptionParser()
|
| - parser.add_option('-b', '--buildbot_json', help='path to buildbot_json.py')
|
| - parser.add_option(
|
| - '-u', '--url',
|
| - default='http://build.chromium.org/p/tryserver.chromium/',
|
| - help='server url, default: %default')
|
| - parser.add_option('-H', '--horizon', default=100, type='int')
|
| - options, args = parser.parse_args(None)
|
| - if args:
|
| - parser.error('Unsupported args: %s' % args)
|
| -
|
| - if options.horizon < 10 or options.horizon > 2000:
|
| - parser.error('Use reasonable --horizon value')
|
| -
|
| - if options.buildbot_json:
|
| - options.buildbot_json = os.path.abspath(options.buildbot_json)
|
| - if not os.path.isdir(options.buildbot_json):
|
| - parser.error('Pass a valid directory path to --buildbot_json')
|
| - sys.path.insert(0, options.buildbot_json)
|
| -
|
| - try:
|
| - import buildbot_json # pylint: disable=F0401
|
| - except ImportError:
|
| - parser.error('Pass a directory path to buildbot_json.py with -b')
|
| -
|
| - b = buildbot_json.Buildbot(options.url)
|
| - parse(b, options.horizon)
|
| - return 0
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main())
|
|
|