Andy McKay

Jul 28, 2011

The bots of AMO


Like the rest of Mozilla, the team that works on addons.mozilla.org (AMO) use IRC. We use IRC all day long for pretty much everything.

It seems every year someone comes out with some new innovate way of chatting to groups, to overcome perceived shortcomings elsewhere. Yet with its simple protocol and large number of clients and libraries, IRC persists.

With IRC, it's easy to write bots that communicate with users or a channel. We've got quite a few bots for AMO, so we moved them all to a new channel, #amo-bots, because it was getting quite distracting. Here's an overview of the bots used and what they do.

Firebot
Firebot (or Mozbot) interacts with Bugzilla, for us. It actually does an awful lot of different things, but we currently just get information on bug
firebot: bug 630794
firebot: Bug https://bugzilla.mozilla.org/show_bug.cgi?id=630794 nor, 
         P4, 6.1.6, amckay, RESO FIXED,  Add an API point to accept performance data
Jenkins
This bot allows us to interact with Jenkins. It will tell us when builds fail or pass and allow us to start new builds etc. It's especially nice when it works with Firebot. For example:
hudson: Project amo-master-js build #928: STILL UNSTABLE 
        in 42 sec: https://jenkins.mozilla.org/job/amo-master-js/928/
hudson: Andy McKay: add in get_localepicker (bug 674253)
firebot: Bug https://bugzilla.mozilla.org/show_bug.cgi?id=674253 nor, 
         --, 6.1.8, amckay, NEW, Add mobile strings to API for language packs
That's Jenkins telling me the build is broken (it's not actually my fault for a change) and telling us what commit it was. Because the commit includes the bug number, firebot pipes up.
Nagios
We don't actually use this in AMO, but the SUMO team do. It tells us when the basic monitoring has a problem:
nagios: support4.webapp.phx1:Zeus - Port 81 is OK: support4.webapp.phx1:81 UP(1)

There's some bots built by the team, Jeff Balogh wrote a couple using node.js:

amobot
This tells us a couple of things: 1) when someone commits something to master and 2) the difference between the staging server and head (for when something gets stuck going to the stage server).
gk0bes: Pushed https://github.com/jbalogh/zamboni/compare/85ce62c...52b16b1 by kumar303
pushbot
Connects to redis and tells us how a push to the production server is going.

I wrote one using phenny:

Graphite
This parses graphite, which is populated by statsd, so we can spot when something goes wrong on the site. You can ask it how HTTP responses of a certain status code are happening, or it will tell you when it goes over a threshold:
canook: 403 status: 3.19/sec average over the last 15 mins.
Arecibo
We are sending errors to Arecibo which puts the errors into a database where they can be stored and priortised. You can query for the last error, or also get notified with one or two messages when errors occur (instead of a big email flood).
canook: 4 error(s) on addons.mozilla.org at http://arecibo1.dmz.sjc1.mozilla.com/list/...

Then of course there's the annoying or amusing as ones: pingbot (thankfully no longer around), hugbot and the scottbot.

I'm sure there will be more to come. But in case you didn't know, IRC is awesome.