added user-count history api (just demo-data)
added rickshaw graph using that user-count api
This commit is contained in:
parent
319f828c84
commit
82f8867161
|
@ -47,6 +47,12 @@ var IpPoll = function(switchaddr, hostsaddr) {
|
|||
}
|
||||
});
|
||||
};
|
||||
|
||||
this.getHistory = function(start, end, callback) {
|
||||
|
||||
|
||||
callback(data);
|
||||
};
|
||||
};
|
||||
|
||||
util.inherits(IpPoll, EventEmitter);
|
||||
|
|
|
@ -4,13 +4,14 @@
|
|||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"express": "3.*",
|
||||
"express": "3.4",
|
||||
"connect-flash": "0.1.1",
|
||||
"net-snmp": "*",
|
||||
"redis": "*",
|
||||
"underscore": "*",
|
||||
"jade": "*",
|
||||
"socket.io": "*"
|
||||
"net-snmp": "1.1.8",
|
||||
"redis": "0.8.5",
|
||||
"underscore": "1.5.2",
|
||||
"jade": "0.35",
|
||||
"socket.io": "0.9.16",
|
||||
"moment": "2.3.1"
|
||||
},
|
||||
"main": "index"
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -16,7 +16,15 @@
|
|||
background-image: url("/img/yellow.png");
|
||||
}
|
||||
|
||||
.members {
|
||||
margin-top: 8pt;
|
||||
/*padding: 0;*/
|
||||
h2 {
|
||||
font-weight: bold;
|
||||
color: #555;
|
||||
font-size: 13pt;
|
||||
margin-bottom: 0.7em;
|
||||
}
|
||||
|
||||
#graph {
|
||||
max-width: 400px;
|
||||
height: 200px;
|
||||
margin-top: 0;
|
||||
}
|
|
@ -61,4 +61,7 @@ angular.module('roomstateapp.statusfilter', []).filter('statustostring', functio
|
|||
};
|
||||
});
|
||||
|
||||
angular.module('roomstateapp', ['roomstateapp.controllers', 'roomstateapp.services', 'roomstateapp.statusfilter']);
|
||||
angular.module('roomstateapp', ['roomstateapp.controllers', 'roomstateapp.services', 'roomstateapp.statusfilter']);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
|
||||
|
||||
$(function() {
|
||||
|
||||
$.getJSON("/api/usercount", function(data, textStatus, jqXHR) {
|
||||
|
||||
var offset = new Date().getTimezoneOffset();
|
||||
var newData = [];
|
||||
|
||||
for (var i = 0; i < data.datapoints.length; i++) {
|
||||
var date = moment(data.datapoints[i].at).unix() - offset * 60;
|
||||
var value = parseFloat(data.datapoints[i].value);
|
||||
newData.push({x: date, y: value});
|
||||
}
|
||||
|
||||
var graph = new Rickshaw.Graph( {
|
||||
element: document.querySelector("#graph"),
|
||||
renderer: 'bar',
|
||||
series: [ {
|
||||
data: newData,
|
||||
name: 'Benutzer',
|
||||
color: 'steelblue'
|
||||
} ]
|
||||
} );
|
||||
|
||||
|
||||
|
||||
new Rickshaw.Graph.Axis.Time({graph: graph}).render();
|
||||
new Rickshaw.Graph.Axis.Y({graph: graph}).render();
|
||||
|
||||
|
||||
graph.render();
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -4,39 +4,36 @@ var express = require('express'),
|
|||
server = require('http').createServer(app),
|
||||
io = require('socket.io').listen(server);
|
||||
var flash = require('connect-flash');
|
||||
var moment = require('moment');
|
||||
var SnmpMac = require("./snmp-mac");
|
||||
var IpPoll = require("./ip-poll");
|
||||
var routes = require("./routes");
|
||||
|
||||
var spaceanswer = {
|
||||
"api": "0.13",
|
||||
"space": "Chaostreff Dortmund",
|
||||
"logo": "http://www.chaostreff-dortmund.de/logo.jpg",
|
||||
"url": "http://www.chaostreff-dortmund.de/",
|
||||
"location": {
|
||||
"address": "Braunschweiger Str 22, 44145 Dortmund, Germany",
|
||||
"lon": 7.4649449,
|
||||
"lat": 51.527611
|
||||
api: "0.13",
|
||||
space: "Chaostreff Dortmund",
|
||||
logo: "http://www.chaostreff-dortmund.de/logo.jpg",
|
||||
url: "http://www.chaostreff-dortmund.de/",
|
||||
location: {
|
||||
address: "Braunschweiger Str 22, 44145 Dortmund, Germany",
|
||||
lon: 7.4649449,
|
||||
lat: 51.527611
|
||||
},
|
||||
"contact": {
|
||||
"phone": "+49231 8 404 777",
|
||||
"irc": "irc://irc.hackint.eu/#ctdo",
|
||||
"ml": "ccc@chaostreff-dortmund.de",
|
||||
"twitter": "@ctdo",
|
||||
"issue_mail": "server-admin@chaostreff-dortmund.de"
|
||||
contact: {
|
||||
phone: "+49231 8 404 777",
|
||||
irc: "irc://irc.hackint.eu/#ctdo",
|
||||
ml: "ccc@chaostreff-dortmund.de",
|
||||
twitter: "@ctdo",
|
||||
issue_mail: "server-admin@chaostreff-dortmund.de"
|
||||
},
|
||||
"issue_report_channels": [ "issue_email" ],
|
||||
"state": {
|
||||
"open": null,
|
||||
"lastchange": 0
|
||||
issue_report_channels: [ "issue_email" ],
|
||||
state: {
|
||||
open: null,
|
||||
lastchange: 0
|
||||
}
|
||||
};
|
||||
|
||||
var simpleanswer = { "state": "unknown",
|
||||
"count": 0,
|
||||
"names": [],
|
||||
"lastchange": 0
|
||||
};
|
||||
var simpleanswer = { state: "unknown", count: 0, names: [], lastchange: 0 };
|
||||
var usercountanswer = { at: 0, current_value: 0, datapoints: [ { at : 0, value: 0 } ]};
|
||||
|
||||
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");
|
||||
|
@ -49,7 +46,7 @@ snmpMac.on('done', function (res) {
|
|||
ippoll.on('doneCount', function (num) {
|
||||
simpleanswer.count = num;
|
||||
simpleanswer.lastchange = new Date();
|
||||
io.sockets.emit('sdata', { "data": simpleanswer });
|
||||
io.sockets.emit('sdata', { data: simpleanswer });
|
||||
});
|
||||
|
||||
ippoll.on('doneState', function (state) {
|
||||
|
@ -58,7 +55,7 @@ ippoll.on('doneState', function (state) {
|
|||
simpleanswer.state = state;
|
||||
simpleanswer.lastchange = spaceanswer.state.lastchange;
|
||||
|
||||
io.sockets.emit('sdata', { "data": simpleanswer });
|
||||
io.sockets.emit('sdata', { data: simpleanswer });
|
||||
});
|
||||
|
||||
io.configure(function () {
|
||||
|
@ -70,6 +67,7 @@ function work() {
|
|||
snmpMac.poll();
|
||||
ippoll.pollCount();
|
||||
ippoll.pollState();
|
||||
|
||||
// simpleanswer.names.length = 0;
|
||||
// for(var i=0;i<4+Math.random() * 100;i++) {
|
||||
// simpleanswer.names.push("nickname"+i);
|
||||
|
@ -102,6 +100,20 @@ app.get('/api/spaceapi/v13', function (req, res) {
|
|||
app.get('/api/simple/v2', function (req, res) {
|
||||
res.send(simpleanswer);
|
||||
});
|
||||
app.get('/api/usercount', function (req, res) {
|
||||
//TODO: respect query params "start", "end", "interval" (s) and "limit" (like Xively)
|
||||
// maybe skip "interval" if code gets too complex :)
|
||||
|
||||
usercountanswer.datapoints.length = 0;
|
||||
usercountanswer.at = simpleanswer.lastchange;
|
||||
usercountanswer.current_value = simpleanswer.count;
|
||||
|
||||
for(var i=100; i > 0;i--) {
|
||||
usercountanswer.datapoints.push( { at: moment().subtract("minute", i), value: parseInt(Math.random()*20) } );
|
||||
}
|
||||
|
||||
res.send(usercountanswer);
|
||||
});
|
||||
|
||||
app.get('/db', routes.db);
|
||||
app.post('/form', routes.form);
|
||||
|
|
|
@ -22,7 +22,7 @@ block content
|
|||
.control-group.required.validation
|
||||
label(for='label') Label (Nickname)
|
||||
.control
|
||||
input(id='label',type='text',value='',placeholder='',name='label').ink-fv-required
|
||||
input(id='label',type='text',value='',placeholder='',name='label')
|
||||
|
||||
fieldset.column-group.gutters
|
||||
.control-group.large-50.medium-50.small-100
|
||||
|
@ -38,4 +38,8 @@ block content
|
|||
.control
|
||||
button(id='sndbtn').ink-button Mach es
|
||||
|
||||
.status #{status}
|
||||
.status #{status}
|
||||
|
||||
block scripts
|
||||
script(type="text/javascript",src="/js/vendor/ink.formvalidator.js")
|
||||
script(type="text/javascript",src="/js/vendor/ink-ui.min.js")
|
|
@ -22,12 +22,23 @@ block content
|
|||
|
||||
|
||||
.large-80.small-100
|
||||
dl
|
||||
dt Personen Anwesend:
|
||||
dd
|
||||
span(ng-repeat="name in simple.names")
|
||||
{{name}}
|
||||
h2 Anzahl Geräte:
|
||||
|
||||
span(ng-show=" ! $last ")
|
||||
| , <!-- -->
|
||||
#graph
|
||||
|
||||
|
||||
|
||||
h2 Personen Anwesend:
|
||||
|
||||
span(ng-repeat="name in simple.names")
|
||||
{{name}}
|
||||
|
||||
span(ng-show=" ! $last ")
|
||||
| , <!-- -->
|
||||
|
||||
block scripts
|
||||
script(type="text/javascript",src="/js/vendor/d3.min.js")
|
||||
script(type="text/javascript",src="/js/vendor/d3.layout.min.js")
|
||||
script(type="text/javascript",src="/js/vendor/rickshaw.min.js")
|
||||
script(type="text/javascript",src="/js/vendor/moment.min.js")
|
||||
script(type="text/javascript",src="/js/graph.js")
|
||||
|
|
|
@ -9,6 +9,7 @@ html(ng-app="roomstateapp")
|
|||
script(type="text/javascript",src="/socket.io/socket.io.js")
|
||||
|
||||
link(rel='stylesheet', href='/css/ink-min.css')
|
||||
link(rel='stylesheet', href='/css/rickshaw.min.css')
|
||||
link(rel='stylesheet', href='/css/style.css')
|
||||
body
|
||||
|
||||
|
@ -25,7 +26,7 @@ html(ng-app="roomstateapp")
|
|||
nav.ink-navigation
|
||||
ul.menu.horizontal
|
||||
li: a(href="/") Raumstatus
|
||||
li: a(href='/db') Manage MAC Addresses
|
||||
li: a(href='/db') Name Verwalten
|
||||
li: a(href="//www.chaostreff-dortmund.de/") CTDO Webseite
|
||||
li: a(href="//wiki.ctdo.de/") CTDO Wiki
|
||||
li: a(href="http://repos.ctdo.de/git/?p=raumstatus.git;a=summary") Source
|
||||
|
@ -33,11 +34,12 @@ html(ng-app="roomstateapp")
|
|||
|
||||
|
||||
|
||||
script(type="text/javascript",src="/js/vendor/jquery-1.9.1.min.js")
|
||||
script(type="text/javascript",src="/js/vendor/ink.min.js")
|
||||
script(type="text/javascript",src="/js/vendor/autoload.js")
|
||||
script(type="text/javascript",src="/js/vendor/html5shiv.js")
|
||||
script(type="text/javascript",src="/js/vendor/ink.formvalidator.js")
|
||||
script(type="text/javascript",src="/js/vendor/ink-ui.min.js")
|
||||
//script(type="text/javascript",src="/js/vendor/prettify.js")
|
||||
//script(type="text/javascript",src="/js/vendor/modernizr.js")
|
||||
script(type="text/javascript",src="/js/app.js")
|
||||
|
||||
block scripts
|
||||
|
|
Loading…
Reference in New Issue