mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-06 22:15:48 +01:00
updated analytics
accumulate pageviews, uniquevisitors and uniqueIps locally and update db every 10 mins instead of on every page view
This commit is contained in:
63
src/analytics.js
Normal file
63
src/analytics.js
Normal file
@@ -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));
|
||||
Reference in New Issue
Block a user