Skip to content
Monitor one-off tasks on your servers
JavaScript Ruby CSS
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin
.gitignore
Makefile
Readme.md
kwikemon.js
line_emitter.js
package.json
server.js
test.js

Readme.md

kwik-e-mon

Monitor one-off tasks on your servers using Redis.

Installation

npm install -g kwikemon

Usage

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

Here's how it works:

  • call kwikemon 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

Alternatively:

  • continuously pipe data to kwikemon <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 it without arguments.

# or with -h or --help
$ kwikemon

This is very much a work in progress.

API

You can use kwikemon as a library.

var kwikemon = require('kiwkemon');

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

kwikemon.fetchAll(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 });

Protocol

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
  • created
  • modified
  • updates

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

List

This is when you should clean out expired entries.

names = redis.smembers("kwikemon:monitors")
monitors = {}
for name in names:
    if redis.exists("kwikemon:monitor:$name"):
        monitors[name] = redis.hget("kwikemon:monitor:$name", "text")
return monitors

Read

redis.hgetall("kwikemon:monitor:nginx")

Update

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)
else:
    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>)

Delete

redis.del("kwikemon:monitor:nginx")
redis.srem("kwikemon:monitors", "nginx")

License

Copyright 2013 Sami Samhuri sami@samhuri.net

MIT license

Something went wrong with that request. Please try again.