2013-10-02 12:04:01 +00:00
|
|
|
var express = require('express'),
|
2013-10-20 22:04:58 +00:00
|
|
|
app = express(),
|
|
|
|
server = require('http').createServer(app),
|
|
|
|
io = require('socket.io').listen(server);
|
2013-10-14 19:26:54 +00:00
|
|
|
var flash = require('connect-flash');
|
2013-10-21 23:40:57 +00:00
|
|
|
var moment = require('moment');
|
2013-10-02 12:04:01 +00:00
|
|
|
var SnmpMac = require("./snmp-mac");
|
|
|
|
var IpPoll = require("./ip-poll");
|
2014-07-23 00:16:15 +00:00
|
|
|
var Flukso = require("./flukso");
|
2013-10-20 22:04:58 +00:00
|
|
|
var routes = require("./routes");
|
2014-07-05 23:42:11 +00:00
|
|
|
var path = require('path');
|
2013-10-02 12:04:01 +00:00
|
|
|
|
|
|
|
var spaceanswer = {
|
2013-10-21 23:40:57 +00:00
|
|
|
api: "0.13",
|
|
|
|
space: "Chaostreff Dortmund",
|
2014-07-05 23:11:45 +00:00
|
|
|
logo: "http://www.chaostreff-dortmund.de/logo/logo_ctdo.svg",
|
2014-07-23 00:16:15 +00:00
|
|
|
icon: {
|
|
|
|
open: "http://status.ctdo.de/img/green.png",
|
|
|
|
closed: "http://status.ctdo.de/img/red.png"
|
2014-07-05 23:11:45 +00:00
|
|
|
},
|
2013-10-21 23:40:57 +00:00
|
|
|
url: "http://www.chaostreff-dortmund.de/",
|
|
|
|
location: {
|
|
|
|
address: "Braunschweiger Str 22, 44145 Dortmund, Germany",
|
|
|
|
lon: 7.4649449,
|
|
|
|
lat: 51.527611
|
2013-10-02 12:04:01 +00:00
|
|
|
},
|
2013-10-21 23:40:57 +00:00
|
|
|
contact: {
|
2014-07-23 00:16:15 +00:00
|
|
|
phone: "+49 231 8 404 777",
|
2013-10-21 23:40:57 +00:00
|
|
|
irc: "irc://irc.hackint.eu/#ctdo",
|
|
|
|
ml: "ccc@chaostreff-dortmund.de",
|
|
|
|
twitter: "@ctdo",
|
|
|
|
issue_mail: "server-admin@chaostreff-dortmund.de"
|
2013-10-02 12:04:01 +00:00
|
|
|
},
|
2014-07-05 23:11:45 +00:00
|
|
|
issue_report_channels: [ "issue_mail" ],
|
2013-10-21 23:40:57 +00:00
|
|
|
state: {
|
|
|
|
open: null,
|
2014-07-23 00:16:15 +00:00
|
|
|
lastchange: 0,
|
|
|
|
icon: {
|
|
|
|
open: "http://status.ctdo.de/img/green.png",
|
|
|
|
closed: "http://status.ctdo.de/img/red.png"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
sensors: {
|
|
|
|
power_consumption: [ {
|
|
|
|
unit: "W",
|
|
|
|
name: "mains power",
|
|
|
|
description: "overall power consumption from our space",
|
|
|
|
location: "basement",
|
|
|
|
value: 0 } ]
|
2013-10-02 12:04:01 +00:00
|
|
|
}
|
|
|
|
};
|
2014-07-23 00:16:15 +00:00
|
|
|
var simpleanswer = { state: "unknown", count: 0, names: [], lastchange: 0, power: 0 };
|
|
|
|
var usercountanswer = { at: 0, current_value: 0, datapoints: [
|
|
|
|
{ at: 0, value: 0 }
|
|
|
|
]};
|
2013-10-02 12:04:01 +00:00
|
|
|
|
2013-10-14 19:26:54 +00:00
|
|
|
var snmpMac = new SnmpMac("juni.ctdo.de", "ctdo23");
|
|
|
|
var ippoll = new IpPoll("switch2.raum.ctdo.de", "195.160.169.20-62 195.160.169.70-126");
|
2014-07-23 00:16:15 +00:00
|
|
|
var flukso = new Flukso("flukso.raum.ctdo.de", "/sensor/cf00e0b22230f4a8870af58f2b8719dd");
|
2013-10-14 19:26:54 +00:00
|
|
|
|
|
|
|
snmpMac.on('done', function (res) {
|
|
|
|
simpleanswer.names = res;
|
2014-07-05 23:24:49 +00:00
|
|
|
simpleanswer.lastchange = new Date().getTime();
|
2013-10-14 19:26:54 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
ippoll.on('doneCount', function (num) {
|
|
|
|
simpleanswer.count = num;
|
2014-07-05 23:24:49 +00:00
|
|
|
simpleanswer.lastchange = new Date().getTime();
|
2013-10-22 23:49:08 +00:00
|
|
|
ippoll.pollState();
|
2013-10-14 19:26:54 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
ippoll.on('doneState', function (state) {
|
|
|
|
spaceanswer.state.open = state;
|
2014-07-05 23:24:49 +00:00
|
|
|
spaceanswer.state.lastchange = new Date().getTime();
|
2013-10-21 11:39:52 +00:00
|
|
|
simpleanswer.state = state;
|
2013-10-14 19:26:54 +00:00
|
|
|
simpleanswer.lastchange = spaceanswer.state.lastchange;
|
2013-10-21 23:40:57 +00:00
|
|
|
io.sockets.emit('sdata', { data: simpleanswer });
|
2013-10-20 22:04:58 +00:00
|
|
|
});
|
|
|
|
|
2014-07-23 00:16:15 +00:00
|
|
|
flukso.on('done', function (num) {
|
|
|
|
simpleanswer.power = num;
|
|
|
|
spaceanswer.sensors.power_consumption[0].value = num;
|
|
|
|
io.sockets.emit('sdata', { data: simpleanswer });
|
|
|
|
});
|
|
|
|
|
2013-10-20 22:04:58 +00:00
|
|
|
io.configure(function () {
|
|
|
|
io.set('log level', 0);
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2013-10-14 19:26:54 +00:00
|
|
|
function work() {
|
|
|
|
snmpMac.poll();
|
|
|
|
ippoll.pollCount();
|
2013-10-02 12:04:01 +00:00
|
|
|
}
|
2013-10-14 19:26:54 +00:00
|
|
|
|
2014-07-23 00:16:15 +00:00
|
|
|
setInterval(work, 60000);
|
2013-10-20 23:15:35 +00:00
|
|
|
work();
|
2013-10-14 19:26:54 +00:00
|
|
|
|
2014-07-23 00:16:15 +00:00
|
|
|
setInterval(flukso.pollPower, 5000);
|
|
|
|
flukso.pollPower();
|
|
|
|
|
2013-10-20 22:04:58 +00:00
|
|
|
app.set('snmpMac', snmpMac); //TODO: wie kann man das schoener machen? (Modul in die Routes reintun)
|
2013-10-14 19:26:54 +00:00
|
|
|
app.set('views', __dirname + '/views');
|
|
|
|
app.set('view engine', 'jade');
|
2013-10-20 22:04:58 +00:00
|
|
|
app.disable('x-powered-by');
|
|
|
|
app.configure('development', function () {
|
|
|
|
app.use(express.errorHandler());
|
|
|
|
app.locals.pretty = true;
|
|
|
|
});
|
|
|
|
|
2013-10-14 19:26:54 +00:00
|
|
|
app.use(express.static(__dirname + '/public'));
|
|
|
|
app.use(express.bodyParser());
|
|
|
|
app.use(express.cookieParser('chaostreff'));
|
|
|
|
app.use(express.session({ cookie: { maxAge: 60000 }}));
|
|
|
|
app.use(flash());
|
2013-10-20 22:04:58 +00:00
|
|
|
|
2013-10-14 19:26:54 +00:00
|
|
|
|
|
|
|
app.get('/api/spaceapi/v13', function (req, res) {
|
2014-07-23 00:16:15 +00:00
|
|
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
res.setHeader("Cache-Control", "no-cache");
|
2013-10-14 19:26:54 +00:00
|
|
|
res.send(spaceanswer);
|
|
|
|
});
|
|
|
|
app.get('/api/simple/v2', function (req, res) {
|
2014-07-23 00:16:15 +00:00
|
|
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
res.setHeader("Cache-Control", "no-cache");
|
2013-10-14 19:26:54 +00:00
|
|
|
res.send(simpleanswer);
|
|
|
|
});
|
2013-10-21 23:40:57 +00:00
|
|
|
app.get('/api/usercount', function (req, res) {
|
2014-07-23 00:16:15 +00:00
|
|
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
res.setHeader("Cache-Control", "no-cache");
|
|
|
|
|
2013-10-21 23:40:57 +00:00
|
|
|
//TODO: respect query params "start", "end", "interval" (s) and "limit" (like Xively)
|
|
|
|
// maybe skip "interval" if code gets too complex :)
|
|
|
|
|
2014-07-23 00:16:15 +00:00
|
|
|
ippoll.getHistory("-inf", "+inf", function (data) {
|
2013-10-22 12:01:50 +00:00
|
|
|
usercountanswer.datapoints.length = 0;
|
|
|
|
usercountanswer.at = simpleanswer.lastchange;
|
|
|
|
usercountanswer.current_value = simpleanswer.count;
|
|
|
|
usercountanswer.datapoints = data;
|
|
|
|
res.send(usercountanswer);
|
|
|
|
});
|
2013-10-21 23:40:57 +00:00
|
|
|
|
|
|
|
});
|
2014-07-05 23:24:49 +00:00
|
|
|
app.get('/api/simple/image', function (req, res) {
|
2014-07-23 00:16:15 +00:00
|
|
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
res.setHeader("Cache-Control", "no-cache");
|
|
|
|
|
|
|
|
if (spaceanswer.state.open == true) {
|
|
|
|
res.sendfile(path.resolve(__dirname, 'public/img/green.png'));
|
|
|
|
} else if (spaceanswer.state.open == false) {
|
|
|
|
res.sendfile(path.resolve(__dirname, 'public/img/red.png'));
|
|
|
|
} else {
|
|
|
|
res.sendfile(path.resolve(__dirname, 'public/img/yellow.png'));
|
|
|
|
}
|
2014-07-05 23:24:49 +00:00
|
|
|
});
|
2013-10-14 19:26:54 +00:00
|
|
|
|
2013-10-20 22:04:58 +00:00
|
|
|
app.get('/db', routes.db);
|
|
|
|
app.post('/form', routes.form);
|
|
|
|
app.get('/', routes.index);
|
2013-10-14 19:26:54 +00:00
|
|
|
|
|
|
|
|
2014-07-23 00:16:15 +00:00
|
|
|
server.listen(3000, '0.0.0.0');
|
2013-10-14 19:26:54 +00:00
|
|
|
|
|
|
|
|
2013-10-02 12:04:01 +00:00
|
|
|
|
|
|
|
|