BuildbotNetUsageData feature introduction

Pierre Tardy tardyp at
Wed Sep 7 09:34:26 UTC 2016

Hello all,

It has always been very difficult for us to understand how buildbot is
used, and how much people are upgrading to newer version

There is of course but beyond
that there are tons of small shops using buildbot quietly in a variety of

Having a good idea of how much it is used will also help people to embrace
buildbot nine even more, knowing how much other people already use it
without problems.

This is why we will introduce the buildbotNetUsageData feature in buildbot
The idea of this feature is to send usage data to our
In the tradition of buildbot, this feature is very configurable, so that
you can disable it or filter the data sent as you want.
We wanted to heads-up the mailing list before this lands

 Following is a copy of the documentation for your reference:

Since buildbot 0.9.0, buildbot has a simple feature which sends usage
analysis info to This is very important for buildbot
developers to understand how the community is using the tools. This allows
to better prioritize issues, and understand what plugins are actually being
used. This will also be a tool to decide whether to keep support for very
old tools. For example buildbot contains support for the venerable CVS, but
we have no information whether it actually works beyond the unit tests. We
rely on the community to test and report issues with the old features.

With BuildbotNetUsageData, we can know exactly what combination of plugins
are working together, how much people are customizing plugins, what
versions of the main dependencies people run.

We take your privacy very seriously.

BuildbotNetUsageData will never send information specific to your Code or
Intellectual Property. No repository url, shell command values, host names,
ip address or custom class names. If it does, then this is a bug, please

We still need to track unique number for installation. This is done via
doing a sha1 hash of master's hostname, installation path and fqdn. Using a
secure hash means there is no way of knowing hostname, path and fqdn given
the hash, but still there is a different hash for each master.

You can see exactly what is sent in the master's twisted.log. Usage data is
sent everytime the master is started.

BuildbotNetUsageData can be configured with 4 values:


   c['buildbotNetUsageData'] = None disables the feature

   c['buildbotNetUsageData'] = 'basic' sends the basic information to
   buildbot including:

   - versions of buildbot, python and twisted
      - platform information (CPU, OS, distribution, python flavor (i.e
      CPython vs PyPy))
      - mq and database type (mysql or sqlite?)
      - www plugins usage
      - Plugins usages: This counts the number of time each class of
      buildbot is used in your configuration. This counts workers, builders,
      steps, schedulers, change sources. If the plugin is subclassed, then it
      will be prefixed with a >

   example of basic report (for the metabuildbot):

   {'versions': {
       'Python': '2.7.6',
       'Twisted': '15.5.0',
       'Buildbot': '0.9.0rc2-176-g5fa9dbf'},'platform': {
       'machine': 'x86_64',
       'python_implementation': 'CPython',
       'version': '#140-Ubuntu SMP Mon Jul',
       'distro:': ('Ubuntu', '14.04', 'trusty')
       },'db': 'sqlite','mq': 'simple','plugins': {
       'buildbot.schedulers.forcesched.ForceScheduler': 2,
       'buildbot.schedulers.triggerable.Triggerable': 1,
       'buildbot.config.BuilderConfig': 4,
       'buildbot.schedulers.basic.AnyBranchScheduler': 2,
       'buildbot.steps.source.git.Git': 4,
       '>>buildbot.steps.trigger.Trigger': 2,
       '>>>buildbot.worker.base.Worker': 4,
       'buildbot.reporters.irc.IRC': 1,
2},'www_plugins': ['buildbot_travis', 'waterfall_view']}


   c['buildbotNetUsageData'] = 'full' sends the basic information plus
   additional information:

   - configuration of each builders: how the steps are arranged together.
      for ex:

       'builders': [


   c['buildbotNetUsageData'] = myCustomFunction. You can also specify
   exactly what to send using a callback.

   The custom function will take the generated data from full report in the
   form of a dictionary, and return a customized report as a jsonable
   dictionary. You can use this to filter any information you dont want to
   disclose. You can use a custom http_proxy environment variable in order to
   not send any data while developing your callback.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the announce mailing list