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