

IRC bots for Laziness, Impatience, and Continuous Deployment - arosien
http://eng.wealthfront.com/2010/12/irc-bots-for-laziness-impatience-and.html

======
thwarted
This is exactly why I wrote <https://github.com/thwarted/nodebot>, as a I ran
into problems scaling and securing things like supybot, and integrating it
with shell scripts. nodebot is announce only, and doesn't join the channels
(so your IRC server needs to be setup to allow that), and since it's not
centralized, high traffic from one node/service that ends up getting rate
throttled by the server doesn't delay messages from other nodes/services. Each
machine has an identity, but it can be configured to have a different identity
(because I'd rather that git messages come from "git" rather than from the
machine that ran the hook).

We use it at yelp for monitoring all manner of system status. There's separate
channels for scribe log processing, nagios alerts, code deployments, and load
balancer status. Our git hooks announce when developers push and merges are
happening, and who's branches are being deployed. We get announcements when
config files change. And it's all on-demand, if you're not interested in
seeing it, you don't need to join the channel, IRC is perfect for these kinds
of updates.

~~~
arosien
Nice. Last.fm has a nice post at <http://www.metabrew.com/article/how-we-use-
irc-at-lastfm>.

We also have separate channels for each message type. IRC is pub-sub, yay!
Plus you can direct-message a bot and it will DM you back, to not pollute the
channel you're currently in.

Do you have any bots that take commands? I think that's where it gets _really_
useful.

~~~
thwarted
I've considered it, but that wasn't the use case for nodebot. In order to do
some of that, you'd need to be able to run commands on the machine the bot is
running on, or have the bot keep some log of state as messages are fed into
it, both of which are somewhat non-trivial in terms of storage/query-ability
or security. We have a few modified bots (supybot is the most common, I think)
that developers have written and run themselves, but I don't think any of them
are much more than playthings.

I could definitely see having the ability to allow a bot change the topic of a
channel though, so, for example, the deployment status channel's topic shows
the most recent version deployed, or the status of the current deployment, for
those case where you're not sitting in the channel. Also, the ability to
control nagios from IRC would be interesting, but we just use shell scripts
for that right now (which is non-ideal in other ways).

------
mdaniel
My complaint with IRC (and I freely admit that it could be that I am not using
the "right" client) is that there is just this _sea_ of text on the screen.
There is very little formatting to speak of, and it reminds me of everyone
talking at once on a conference call.

 _slighty_ off-topic: I am proud to say that I was introduced to Wealthfront
via HN, and I was so impressed by their engineering blog that I went to their
website. And it sounded cool, so I joined.

And ever since then, I continue to see some awesome things from them, and so
far their investment-matchmaking service has paid off, too.

Win-win if I've ever heard one.

~~~
axod
I'm slightly biased, but this is what I aim to solve with Mibbit - make it a
little more friendly and clean looking. Hopefully I'm headed in the right
direction so far.

------
substack
At StackVM we use an IRC bot to tell us when the servers are down. In our case
the bot is just a DNode service so all the backend needs to do is connect to
the IRC service, post its message, and disconnect.

<http://github.com/substack/rowbit>

It's a pretty great fit since we already use IRC a ton to coordinate
development so we see the notifications right away.

~~~
arosien
Sweet. We use Apache ZooKeeper for service discovery and have a #zk channel.
We just did a deployment, here's the irc log: (deploying the 'PM' service,
updating instance pm12 first)

[1:05pm] dm: PM leader changed from pm12 to (none)

[1:05pm] dm: PM leader changed from (none) to pm11

[1:05pm] dm: UNANNOUNCED: ServiceDescriptor[id=pm12,kind=class
com.kaching.platform.guice.KachingServices$PM,uri=<http://10.99.110.140:8080,shards=[],status=UP>]

[1:05pm] dm: ANNOUNCED: ServiceDescriptor[id=pm12,kind=class
com.kaching.platform.guice.KachingServices$PM,uri=<http://10.99.110.140:8080,shards=[],status=INIT>]

[1:05pm] dm: UPDATED: ServiceDescriptor[id=pm12,kind=class
com.kaching.platform.guice.KachingServices$PM,uri=<http://10.99.110.140:8080,shards=[],status=UP>]

------
x0ner
Interesting to see someone who is using IRC in this fashion. I personally have
been an advocate of using XMPP in the same way. While IRC offers a good amount
of features, XMPP provides the ability to scale and dive into multiple
different realms. Just one example that comes to mind is constant updates from
your XMPP bots, channels, etc. in a single location similar to Twitter, but
for your development.

~~~
Zev
IRC is _easy_. Its a basic text protocol that requires a socket and some
minimal parsing to work with. Whenever I use XMPP, its never that simple. The
protocol is too verbose for its own good imho.

~~~
jackolas
Xmpp allows you to be a bit more secure and fine tune the usage. If your
client or library doesn't actually make this simpler, something has failed.

~~~
arosien
See <http://en.wikipedia.org/wiki/End-to-end_principle>.

