raumstatus/node/flukso.js

66 lines
1.8 KiB
JavaScript
Raw Normal View History

var redis = require("redis");
var util = require('util');
var EventEmitter = require('events').EventEmitter;
var http = require("http");
var redisprefix = "flukso:";
var Flukso = function(hostname, pathname) {
var self = this;
var redisClient = redis.createClient();
var regexp = /([0-9]+)\]\]$/; // /\(([0-9]+) hosts* up\)/;
redisClient.on("connect", function () {
console.log("connected to redis");
self.emit('ready');
});
this.pollPower = function() {
http.request({ host: hostname, path: pathname }, function(response) {
var str = '';
response.on('data', function(chunk) {
str += chunk;
});
response.on('end', function () {
// console.log("http received: " + str);
var matches = regexp.exec(str);
if(matches != null && matches.length == 2) {
var time = Date.now();
redisClient.zremrangebyscore(redisprefix + 'power', "-inf", time - 7*24*60*1000);
var num = matches[1];
redisClient.zadd(redisprefix + 'power', time, time + "|" + num, function() {
self.emit('done', parseInt(num));
});
}
});
}).end();
};
// this.getHistory = function(start, end, callback) {
//
// redisClient.zrangebyscore(redisprefix + 'power', start, end, function(err, replies) {
// var data = [];
//
// replies.forEach(function (reply, i) {
// var line = reply.split('|');
// data.push( { at: moment(parseInt(line[0])).format(), value: line[1] });
// });
//
// callback(data);
// });
// };
};
util.inherits(Flukso, EventEmitter);
module.exports = Flukso;