Skip to content

Commit 3980650

Browse files
committed
Convert AJAX to Sockets and increase precision for total bandwidth
1 parent 9e023ba commit 3980650

10 files changed

Lines changed: 131 additions & 28 deletions

File tree

app.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var stats = require('./routes/stats');
1717
var app = express();
1818
var server = http.createServer(app);
1919
settings = require('./settings');
20+
require('./sockets.js');
2021

2122
// view engine setup
2223
app.set('views', path.join(__dirname, '.viewsMin'));

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"random-seed": "^0.3.0",
3030
"serve-favicon": "~2.3.0",
3131
"sha.js": "^2.4.5",
32+
"socket.io": "^1.4.8",
3233
"yamljs": "^0.2.7"
3334
},
3435
"devDependencies": {

public/js/charts.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
var bandwidth = data.map(function(date) {
1313
return Math.round(date.bandwidth/1024/1024*100)/100;
1414
});
15-
console.log(dates, values, bandwidth);
1615
Highcharts.setOptions({
1716
lang: {
1817
thousandsSep: ","
@@ -71,4 +70,4 @@
7170
})
7271
}
7372
});
74-
})();
73+
})();

public/js/socket.io.min.js

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/js/stats_counter.js

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
(function() {
2-
if (window.location.href.indexOf('stats') !== -1) {
3-
function getStatsData(cb){
4-
var result = pegasus('getStats');
5-
result.then(function(data) {
6-
if(!data['error']){
7-
cb(data);
8-
}
9-
});
2+
domready(function() {
3+
socket = io(document.getElementsByTagName('server')[0].innerHTML);
4+
socket.on('statsResults', function(data) {
5+
document.getElementById('stat_total_users').innerHTML = data.all.total;
6+
document.getElementById('stat_total_bandwidth').innerHTML = data.all.bandwidth;
7+
document.getElementById('stat_today').innerHTML = data.today.total;
8+
document.getElementById('stat_thirty_avg').innerHTML = data[30].total;
9+
document.getElementById('stat_today_bandwidth').innerHTML = data.today.bandwidth;
10+
document.getElementById('stat_loadavg').innerHTML = data.load;
11+
});
12+
if (window.location.href.indexOf('stats') !== -1) {
13+
setInterval(function() {
14+
socket.emit('stats')
15+
}, 250);
1016
}
11-
12-
setInterval(function(){
13-
getStatsData(function(data) {
14-
document.getElementById('stat_total_users').innerHTML = data.all.total;
15-
document.getElementById('stat_total_bandwidth').innerHTML = data.all.bandwidth;
16-
document.getElementById('stat_today').innerHTML = data.today.total;
17-
document.getElementById('stat_thirty_avg').innerHTML = data[30].total;
18-
document.getElementById('stat_today_bandwidth').innerHTML = data.today.bandwidth;
19-
document.getElementById('stat_loadavg').innerHTML = data.load;
20-
});
21-
}, 1000);
22-
}
23-
})();
17+
});
18+
})();

routes/index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
var fs = require('fs');
2-
var express = require('express');
3-
var router = express.Router();
1+
var fs = require('fs');
2+
var express = require('express');
3+
var router = express.Router();
4+
var settings = require('../settings');
45

56
var views;
67
fs.readdir('.viewsMin/pages', function(err, data) {;
@@ -29,7 +30,7 @@ router.get('/:page?', function(req, res, next) {
2930
if (page === 'index') {
3031
res.redirect(301, '/');
3132
} else if (views.indexOf(page + '.ejs') !== -1) {
32-
res.render('pages/' + page, {title: titles[page]});
33+
res.render('pages/' + page, {socket: ':' + settings.socket, title: titles[page]});
3334
} else {
3435
next();
3536
}

routes/stats.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ router.get('/', (req, res, next) => {
3030
}}
3131
],function(err, result) {
3232
if (result.length !== 0) {
33-
cb(err, {total: format(result[0].total), bandwidth: filesize(result[0].bandwidth)});
33+
cb(err, {total: format(result[0].total), bandwidth: filesize(result[0].bandwidth, {round: 4})});
3434
} else {
3535
cb(err, {total: 0, bandwidth: filesize(0)});
3636
}

settings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"port": 3000,
3+
"socket": 8080,
34
"db": "randomuser",
45
"maxResults": 5000,
56
"limit": 20000,

sockets.js

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
var fs = require('fs');
2+
var os = require('os');
3+
var express = require('express');
4+
var async = require('async');
5+
var format = require('format-number')();
6+
var filesize = require('filesize');
7+
var router = express.Router();
8+
var Request = require('./models/Request');
9+
var io = require('socket.io')(settings.socket);
10+
11+
io.on('connection', socket => {
12+
socket.on('stats', msg => {
13+
async.parallel([
14+
function(cb){
15+
Request.findOne({date: getDateTime()}, (err, obj) => {
16+
if (obj !== null) {
17+
cb(err, {total: format(obj.total), bandwidth: filesize(obj.bandwidth)});
18+
} else {
19+
cb(err, {total: 0, bandwidth: filesize(0)});
20+
}
21+
});
22+
},
23+
function(cb){
24+
Request.aggregate([
25+
{"$group": {
26+
"_id": 'total',
27+
"total": { $sum: "$total" },
28+
"bandwidth": { $sum: "$bandwidth" }
29+
}},
30+
{ "$sort": {
31+
"total": -1
32+
}}
33+
],function(err, result) {
34+
if (result.length !== 0) {
35+
cb(err, {total: format(result[0].total), bandwidth: filesize(result[0].bandwidth, {round: 4})});
36+
} else {
37+
cb(err, {total: 0, bandwidth: filesize(0)});
38+
}
39+
});
40+
},
41+
function(cb){
42+
Request.aggregate([
43+
{
44+
"$sort": { "date": -1}
45+
},
46+
{ "$limit": 30 },
47+
{"$group": {
48+
"_id": 'total',
49+
"total": { $sum: "$total" },
50+
"bandwidth": { $sum: "$bandwidth" }
51+
}}
52+
],function(err, result) {
53+
if (result.length !== 0) {
54+
cb(err, {total: format(Math.round(result[0].total/30)), bandwidth: filesize(result[0].bandwidth)});
55+
} else {
56+
cb(err, {total: 0, bandwidth: filesize(0)});
57+
}
58+
});
59+
}
60+
],
61+
// optional callback
62+
function(err, results) {
63+
socket.emit('statsResults', {
64+
today: results[0],
65+
all: results[1],
66+
30: results[2],
67+
load: Math.round(os.loadavg()[0]*100) + "%"
68+
});
69+
});
70+
});
71+
});
72+
73+
function getDateTime(daysBack) {
74+
daysBack = daysBack || 0;
75+
var date = new Date(new Date().getTime()-86400000*daysBack);
76+
77+
var year = date.getFullYear();
78+
79+
var month = date.getMonth() + 1;
80+
month = (month < 10 ? '0' : '') + month;
81+
82+
var day = date.getDate();
83+
day = (day < 10 ? '0' : '') + day;
84+
85+
return year + '-' + pad(month, 2) + '-' + pad(day, 2);
86+
87+
function pad(n, width, z) {
88+
z = z || '0';
89+
n = n + '';
90+
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
91+
}
92+
}
93+
94+
function simpleDate(date) {
95+
var a = new Date(date);
96+
return pad(a.getMonth()+1, 2) + "." + pad(a.getUTCDate(), 2);
97+
}
98+
99+
module.exports = io;

views/pages/stats.ejs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<% include ../snippets/header %>
22

33
<body class="stats">
4+
<server hidden><%=socket%></server>
45

56
<% include ../snippets/nav %>
67

@@ -50,5 +51,6 @@
5051
<% include ../snippets/footer %>
5152
<% include ../snippets/analytics %>
5253
<script src="js/highcharts.js"></script>
54+
<script src="js/socket.io.min.js"></script>
5355
</body>
5456
</html>

0 commit comments

Comments
 (0)