NodeChecker — Big Board Dashboarding

javascript modcloth node.js 
Sun Dec 11 2011



At ModCloth, our Ops team wanted to have a real time dashboard of important site information so they could know ASAP if something was wrong with the site. We utilize a number of third party customer tracking tools with excellent dashboards (Google Analytics, Omniture), but they often had a 1 hour or more lag. We also have a number of back-end monitoring tools (AirBrake/HopToad, New Relic), and while these tools are (almost) real time, they don’t have a view into customer behavior. We even have analytic tools which can visualize data from our production database or data warehouse, but these tools are more for data mining than visualization.

So, I decided to build one. Inspired by the panic status board and some other big boards I’ve seen, this project is meant to be a simple way for you to monitor anything you want. It’s a small nodeJS project built on the actionHero framework (more coming soon) that uses simple config files to allow you to create real time charts of your important data. Here’s a screen shot:

Configuring checks is as simple as making a new entry in checks.json:

1{ 2 "name": "http_google_com", 3 "type": "httpRequest", 4 "frequencyInSeconds": 10, 5 "entriesToKeep": 100, 6 "params": { 7 "hostname": "http://www.google.com", 8 "matcher": "</div>" 9 } 10}

This check would do a web request to google.com every 10 seconds, and then parse the response for the string . The chart will graph the time this operation took, and the pie graph will show how many times the check was successful (success in this case means having a complete response with the string found).

Because this is exactly the type of operation node is great at (handling routing while grabbing data from other sources), I also made it easy to add new "checks" to the application. A new proxy checker which would generate a random number on each cycle would be:

1var checker = {}; 2 3checker.name = "randomNumber"; 4checker.params = { 5 required: [], 6 optional: [], 7}; 8 9checker.check = function (api, params, next) { 10 var response = {}; 11 response.error = false; 12 response.check = false; 13 var number = Math.random() * 100; 14 response.number = number; 15 response.check = true; 16 next(response); 17}; 18 19exports.checker = checker;

Hopefully this is simple as well!

Check out the project, and have fun!

Hi, I'm Evan

I write about Technology, Software, and Startups. I use my Product Management, Software Engineering, and Leadership skills to build teams that create world-class digital products.

Get in touch