mirror of
https://github.com/samsonjs/kwikemon.git
synced 2026-03-25 09:05:51 +00:00
76 lines
1.6 KiB
JavaScript
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();
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|