| Version 2 (modified by maruel, 13 months ago) (diff) |
|---|
buildbot_json.py tricks
Location
The file is located at https://github.com/buildbot/buildbot/blob/master/master/contrib/buildbot_json.py.
Connect to a buildbot master
Using buildbot's buildbot as an example:
./buildbot_json.py interactive build.chromium.org/p/chromium
Using chromium's buildbot as an example:
./buildbot_json.py interactive build.chromium.org/p/chromium
Print all the builders name
print ' '.join(b.builders.keys)
Generate a list of only a few builders
builders = [bu for bu in b.builders if 'XP' in bu.name]
Iterate over builds cached on the buildbot master memory (usually max a few hundreds)
for build in builder.builds: print build
Iterate over all builds, will thrash the server's memory!
for build in builder.builds.iterall(): print build
Print the build steps
builder.builds[-1].steps.keys
List failed tests for builds on some builders (note: replace builders by b.builders for all builders)
for builder in builders:
print builder.name
for build in builder.builds:
if build.simplified_result is not False:
continue
print '%5d: %s' % (build.number, build.steps.failed)
List of failed test case for each failed test
def print_build(build):
failed = ['%s: %s' % (step, [x[0] for x in build.steps[step].data['logs'][1:]]) for step in build.steps.failed]
print '%-17s: %5d: %s' % (build.builder.name, build.number, failed)
for builder in builders:
for build in builder.builds:
if build.simplified_result is not False:
continue
print_build(build)
Get yesterday and twodaysago
import time yesterday = time.time() - 24*60*60 twodaysago = yesterday - 24*60*60 print time.ctime(yesterday) # Tue Mar 27 09:58:54 2012 print time.ctime(twodaysago) # Mon Mar 26 09:58:54 2012
All builds between 2 dates
def get_builds_between(builds, start, end):
out = []
for build in reversed(builds):
if start < build.start_time <= end:
out.insert(0, build)
if start >= build.start_time:
return out
builder = b.builders['XP Tests(1)']
builds = get_builds_between(builder.builds, twodaysago, yesterday)
len(builds)
# 86
print 'Range: %s - %s' % (time.ctime(builds[0].start_time), time.ctime(builds[-1].start_time))
# Range: Mon Mar 26 10:21:39 2012 - Tue Mar 27 08:23:05 2012
First and last build
min(b.number for b in builds) max(b.number for b inbuilds) time.ctime(builds[0].start_time) time.ctime(builds[-1].start_time) time.ctime(builds[0].end_time) time.ctime(builds[-1].end_time) # Average duration in seconds sum(b.duration for b in builds if b.duration) / len(builds)
Histogram of test case failures for each builder
def gen_histogram_steps(builds):
values = sum((build.steps.failed for build in builds), [])
return dict((key, values.count(key)) for key in set(values))
for builder in builders:
print builder.name
print '
'.join(' %-23s: %3d' % (k, v) for k, v in gen_histogram_steps(builder.builds).iteritems())
Histogram of tests runs failed between Date1 and Date2
builds = get_builds_between(builder.builds, twodaysago, yesterday)
print '
'.join(' %-23s: %3d' % (k, v) for k, v in gen_histogram_steps(builds).iteritems())
Histogram of test case failures across builders
def gen_histogram_full(builders):
out = {}
for builder in builders:
for build in builder.builds:
for failed in build.steps.failed:
out.setdefault(failed, 0)
out[failed] += 1
return out
print '
'.join('%-23s: %3d' % (k, v) for k, v in gen_histogram_full(builders).iteritems())
Histogram for a single step
def gen_histogram_step(builds, step):
values = [build.steps[step].result for build in builds]
return dict((key, values.count(key)) for key in set(values))
print '
'.join('%5s: %3d' % (k, v) for k, v in gen_histogram_step(builder.builds, 'browser_tests').iteritems())
# See buildbot_json.py's SUCCESS, WARNINGS, FAILURE, SKIPPED, EXCEPTION, RETRY
# for the values. None means the build isn't completed.
Commit queue job (for the chromium try server only)
builds = [build for build in builder.builds if build.blame[0] == 'commit-bot@chromium.org']
Commit queue failures (for the try server only)
def only_cq_failed(builder, step):
cq_builds = [build for build in builder.builds if build.blame and build.blame[0] == 'commit-bot@chromium.org']
cq_failed = [build.steps.failed for build in cq_builds if build.steps.failed]
if cq_builds and cq_failed:
print builder.name
print ' Failures: %d out of %d' % (len(cq_failed), len(cq_builds))
print ' Only %s failed: %d' % (step, len([1 for x in cq_failed if x == [step]]))
for builder in builders:
only_cq_failed(builder, 'browser_tests')
![[Buildbot Logo]](/chrome/site/header-text-transparent.png)