Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
IRC bots for Laziness, Impatience, and Continuous Deployment (wealthfront.com)
29 points by arosien on Dec 10, 2010 | hide | past | favorite | 14 comments


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.


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.


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


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.


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.


I'm a fan of irssi myself, I've found that the defaults are pretty sane and the few things I've wanted to customize could be.


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.


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]


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.


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.


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.



Of course! All problems in computer science can be solved by another level of indirection!

More seriously, are you saying that SSL/TLS and SASL are both insecure?


You are so enterprisey! :)

We'll bridge protocols if we need to cross that, um, bridge.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: