updated analytics

accumulate pageviews, uniquevisitors and uniqueIps locally and update db
every 10 mins instead of on every page view
v1.18.x
barisusakli 10 years ago
parent da4014eb71
commit 011c42bde3

@ -0,0 +1,63 @@
'use strict';
var cronJob = require('cron').CronJob,
db = require('./database');
(function(Analytics) {
var pageViews = 0;
var uniqueIPCount = 0;
var uniquevisitors = 0;
new cronJob('*/10 * * * *', function() {
Analytics.writeData();
}, null, true);
Analytics.pageView = function(ip) {
++pageViews;
if (ip) {
db.sortedSetScore('ip:recent', ip, function(err, score) {
if (err) {
return;
}
if (!score) {
++uniqueIPCount;
}
var today = new Date();
today.setHours(today.getHours(), 0, 0, 0);
if (!score || score < today.getTime()) {
++uniquevisitors;
db.sortedSetAdd('ip:recent', Date.now(), ip);
}
});
}
};
Analytics.writeData = function() {
var today;
if (pageViews > 0 || uniquevisitors > 0) {
today = new Date();
today.setHours(today.getHours(), 0, 0, 0);
}
if (pageViews > 0) {
db.sortedSetIncrBy('analytics:pageviews', pageViews, today.getTime());
pageViews = 0;
}
if (uniquevisitors > 0) {
db.sortedSetIncrBy('analytics:uniquevisitors', uniquevisitors, today.getTime());
uniquevisitors = 0;
}
if (uniqueIPCount > 0) {
db.incrObjectFieldBy('global', 'uniqueIPCount', uniqueIPCount);
uniqueIPCount = 0;
}
};
}(exports));

@ -20,6 +20,7 @@ var app,
topics = require('./../topics'),
messaging = require('../messaging'),
ensureLoggedIn = require('connect-ensure-login'),
analytics = require('../analytics'),
controllers = {
api: require('./../controllers/api'),
@ -38,35 +39,14 @@ middleware.applyCSRF = csrf();
middleware.ensureLoggedIn = ensureLoggedIn.ensureLoggedIn(nconf.get('relative_path') + '/login');
middleware.updateLastOnlineTime = function(req, res, next) {
middleware.pageView = function(req, res, next) {
if (req.user) {
user.updateLastOnlineTime(req.user.uid);
user.updateOnlineUsers(req.user.uid);
}
db.sortedSetScore('ip:recent', req.ip, function(err, score) {
if (err) {
return;
}
var today = new Date();
today.setHours(today.getHours(), 0, 0, 0);
if (!score) {
db.incrObjectField('global', 'uniqueIPCount');
}
if (!score || score < today.getTime()) {
db.sortedSetIncrBy('analytics:uniquevisitors', 1, today.getTime());
db.sortedSetAdd('ip:recent', Date.now(), req.ip || 'Unknown');
}
});
next();
};
middleware.incrementPageViews = function(req, res, next) {
var today = new Date();
today.setHours(today.getHours(), 0, 0, 0);
analytics.pageView(req.ip);
db.sortedSetIncrBy('analytics:pageviews', 1, today.getTime());
next();
};

@ -96,7 +96,7 @@ function groupRoutes(app, middleware, controllers) {
}
function setupPageRoute(router, name, middleware, middlewares, controller) {
middlewares = middlewares.concat([middleware.incrementPageViews, middleware.updateLastOnlineTime]);
middlewares = middlewares.concat([middleware.pageView]);
router.get(name, middleware.buildHeader, middlewares, controller);
router.get('/api' + name, middlewares, controller);

Loading…
Cancel
Save