kwikemon/kwikemon.js
2013-06-04 10:31:48 -07:00

76 lines
1.6 KiB
JavaScript

// Copyright 2013 Sami Samhuri
module.exports = {
// read
fetchMonitor: fetchMonitor
, fetchMonitors: fetchMonitors
// write
, monitor: monitor
, createWriter: createWriter
};
var redis = require('redis').createClient()
, LineEmitter = require('./line_emitter.js')
;
function monitor(name, text, options) {
console.log(name,'=',text)
options = options || {};
if (typeof options == 'function') {
options = { cb: options };
}
var key = 'kwikemon:monitor:' + name
, timeout = options.timeout || 86400
;
console.log('set',key,text)
redis.set(key, text, function(err, status) {
console.log('set',key,text)
if (err) throw err;
if (timeout >= 0) {
redis.expire(key, timeout);
}
redis.sadd('kwikemon:monitors', name, function(err, status) {
if (options.cb) options.cb();
});
});
}
function createWriter(name) {
var le = new LineEmitter();
le.on('line', function(line) {
monitor(name, line);
});
return le;
}
function fetchMonitor(name, cb) {
redis.get('kwikemon:monitor:' + name, cb);
}
function fetchMonitors(cb) {
var monitors = {}
, i = 0
, n
, checkIfDone = function() {
i += 1;
if (i == n) cb(null, monitors);
}
;
redis.smembers('kwikemon:monitors', function(err, names) {
if (err) return cb(err);
n = names.length;
names.forEach(function(name) {
fetchMonitor(name, function(err, text) {
if (err) {
// missing? probably don't care
}
else {
monitors[name] = text;
}
checkIfDone();
});
});
});
}