node package manager


monitor one-off things on your servers


Monitor one-off tasks on your servers using Redis.

npm install -g kwikemon

$ kwikemond &
$ curl -s localhost/nginx_status | grep Active | kwikemon write nginx-connections
$ curl localhost:1111/nignx-connections
Active connections: 316
$ kwikemon set foo bar
$ curl localhost:1111/
foo: bar
nginx-connections: Active connections: 316

Here's how it works:

  • call kwikemon set thing status to set the text for the monitor named "thing"
  • fire up the server, kwikemond, that serves up these monitors in a big list or individually


  • continuously pipe data to kwikemon write <name of thing you are watching> on stdin
  • every time a full line of text is received on stdin it becomes the new status for

To see everything kwikemon can do run kwikemon help.

$ kwikemon help

This is very much a work in progress.

You can use kwikemon as a library.

var kwikemon = require('kiwkemon');

kwikemon.set('foo', 'bar', function(err) {
  kwikemon.get('foo', function(err, text) {
    console.log('foo = ' + text);

kwikemon.getAll(function(err, monitors) {
  Object.keys(monitors).forEach(function (name) {
    console.log(name + ' = ' + monitors[name]);

Monitors expire 1 day after the last time they were set by default. You can pass in any ttl you want though.

// never expire
kwikemon.set('foo', 'bar', { ttl: 0 });

All kwikemon does is shove things into Redis in a standard way and read them out later.

A monitor named nginx stores its data in the hash kwikemon:monitor:nginx. Hash fields are:

  • text
  • expire
  • created
  • modified
  • updates

The list of all monitors is a set stored at kwikemon:monitors.

exists = redis.exists("kwikemon:monitor:nginx")
if exists:
    redis.hmset("kwikemon:monitor:nginx", {
        text: "Active connections: 583"
        modified: 1370668341943
    redis.hincrby("kwikemon:monitor:nginx", "updates", 1)
    redis.hmset("kwikemon:monitor:nginx", {
        text: "Active connections: 316"
        updates: 1
        created: 1370668301943
        modified: 1370668301943
redis.sadd("kwikemon:monitors", "nginx")
# optional
redis.expire("kwikemon:monitor:nginx", <ttl>)
redis.srem("kwikemon:monitors", "nginx")

Clean out expired monitors. Call this before anything that relies on counting or iterating through all monitors.

for name in redis.smembers("kwikemon:monitors"):
    if not redis.exists("kwikemon:monitor:$name"):

Sweep before running a count.


Sweep before listing.


Sweep before geting all.

monitors = {}
for name in list():
    if redis.exists("kwikemon:monitor:$name"):
        monitors[name] = get(name)
return monitors

Copyright 2013 Sami Samhuri

MIT license