analytics tests, reduce bcrypt rouds for tests

v1.18.x
barisusakli 9 years ago
parent e3616ab0f9
commit 9796f54580

@ -6,29 +6,30 @@ var winston = require('winston');
var db = require('./database'); var db = require('./database');
(function (Analytics) { var Analytics = module.exports;
var counters = {};
var pageViews = 0; var counters = {};
var uniqueIPCount = 0;
var uniquevisitors = 0;
var isCategory = /^(?:\/api)?\/category\/(\d+)/; var pageViews = 0;
var uniqueIPCount = 0;
var uniquevisitors = 0;
new cronJob('*/10 * * * *', function () { var isCategory = /^(?:\/api)?\/category\/(\d+)/;
new cronJob('*/10 * * * *', function () {
Analytics.writeData(); Analytics.writeData();
}, null, true); }, null, true);
Analytics.increment = function (keys) { Analytics.increment = function (keys) {
keys = Array.isArray(keys) ? keys : [keys]; keys = Array.isArray(keys) ? keys : [keys];
keys.forEach(function (key) { keys.forEach(function (key) {
counters[key] = counters[key] || 0; counters[key] = counters[key] || 0;
++counters[key]; ++counters[key];
}); });
}; };
Analytics.pageView = function (payload) { Analytics.pageView = function (payload) {
++pageViews; ++pageViews;
if (payload.ip) { if (payload.ip) {
@ -56,9 +57,10 @@ var db = require('./database');
Analytics.increment(['pageviews:byCid:' + cid]); Analytics.increment(['pageviews:byCid:' + cid]);
} }
} }
}; };
Analytics.writeData = function () { Analytics.writeData = function (callback) {
callback = callback || function () {};
var today = new Date(); var today = new Date();
var month = new Date(); var month = new Date();
var dbQueue = []; var dbQueue = [];
@ -96,10 +98,11 @@ var db = require('./database');
if (err) { if (err) {
winston.error('[analytics] Encountered error while writing analytics to data store: ' + err.message); winston.error('[analytics] Encountered error while writing analytics to data store: ' + err.message);
} }
callback(err);
}); });
}; };
Analytics.getHourlyStatsForSet = function (set, hour, numHours, callback) { Analytics.getHourlyStatsForSet = function (set, hour, numHours, callback) {
var terms = {}, var terms = {},
hoursArr = []; hoursArr = [];
@ -129,9 +132,9 @@ var db = require('./database');
callback(null, termsArr); callback(null, termsArr);
}); });
}; };
Analytics.getDailyStatsForSet = function (set, day, numDays, callback) { Analytics.getDailyStatsForSet = function (set, day, numDays, callback) {
var daysArr = []; var daysArr = [];
day = new Date(day); day = new Date(day);
@ -154,13 +157,13 @@ var db = require('./database');
}, function (err) { }, function (err) {
callback(err, daysArr); callback(err, daysArr);
}); });
}; };
Analytics.getUnwrittenPageviews = function () { Analytics.getUnwrittenPageviews = function () {
return pageViews; return pageViews;
}; };
Analytics.getMonthlyPageViews = function (callback) { Analytics.getMonthlyPageViews = function (callback) {
var thisMonth = new Date(); var thisMonth = new Date();
var lastMonth = new Date(); var lastMonth = new Date();
thisMonth.setMonth(thisMonth.getMonth(), 1); thisMonth.setMonth(thisMonth.getMonth(), 1);
@ -176,22 +179,21 @@ var db = require('./database');
} }
callback(null, {thisMonth: scores[0] || 0, lastMonth: scores[1] || 0}); callback(null, {thisMonth: scores[0] || 0, lastMonth: scores[1] || 0});
}); });
}; };
Analytics.getCategoryAnalytics = function (cid, callback) { Analytics.getCategoryAnalytics = function (cid, callback) {
async.parallel({ async.parallel({
'pageviews:hourly': async.apply(Analytics.getHourlyStatsForSet, 'analytics:pageviews:byCid:' + cid, Date.now(), 24), 'pageviews:hourly': async.apply(Analytics.getHourlyStatsForSet, 'analytics:pageviews:byCid:' + cid, Date.now(), 24),
'pageviews:daily': async.apply(Analytics.getDailyStatsForSet, 'analytics:pageviews:byCid:' + cid, Date.now(), 30), 'pageviews:daily': async.apply(Analytics.getDailyStatsForSet, 'analytics:pageviews:byCid:' + cid, Date.now(), 30),
'topics:daily': async.apply(Analytics.getDailyStatsForSet, 'analytics:topics:byCid:' + cid, Date.now(), 7), 'topics:daily': async.apply(Analytics.getDailyStatsForSet, 'analytics:topics:byCid:' + cid, Date.now(), 7),
'posts:daily': async.apply(Analytics.getDailyStatsForSet, 'analytics:posts:byCid:' + cid, Date.now(), 7), 'posts:daily': async.apply(Analytics.getDailyStatsForSet, 'analytics:posts:byCid:' + cid, Date.now(), 7),
}, callback); }, callback);
}; };
Analytics.getErrorAnalytics = function (callback) { Analytics.getErrorAnalytics = function (callback) {
async.parallel({ async.parallel({
'not-found': async.apply(Analytics.getDailyStatsForSet, 'analytics:errors:404', Date.now(), 7), 'not-found': async.apply(Analytics.getDailyStatsForSet, 'analytics:errors:404', Date.now(), 7),
'toobusy': async.apply(Analytics.getDailyStatsForSet, 'analytics:errors:503', Date.now(), 7) 'toobusy': async.apply(Analytics.getDailyStatsForSet, 'analytics:errors:503', Date.now(), 7)
}, callback); }, callback);
}; };
}(exports));

@ -45,6 +45,8 @@ describe('Controllers', function () {
}); });
}); });
it('should load default home route', function (done) { it('should load default home route', function (done) {
request(nconf.get('url'), function (err, res, body) { request(nconf.get('url'), function (err, res, body) {
assert.ifError(err); assert.ifError(err);
@ -615,6 +617,10 @@ describe('Controllers', function () {
after(function (done) { after(function (done) {
var analytics = require('../src/analytics');
analytics.writeData(function (err) {
assert.ifError(err);
db.emptydb(done); db.emptydb(done);
}); });
});
}); });

@ -129,6 +129,7 @@
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-persona/templates')); nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-persona/templates'));
nconf.set('theme_templates_path', meta.config['theme:templates'] ? path.join(nconf.get('themes_path'), meta.config['theme:id'], meta.config['theme:templates']) : nconf.get('base_templates_path')); nconf.set('theme_templates_path', meta.config['theme:templates'] ? path.join(nconf.get('themes_path'), meta.config['theme:id'], meta.config['theme:templates']) : nconf.get('base_templates_path'));
nconf.set('theme_config', path.join(nconf.get('themes_path'), 'nodebb-theme-persona', 'theme.json')); nconf.set('theme_config', path.join(nconf.get('themes_path'), 'nodebb-theme-persona', 'theme.json'));
nconf.set('bcrypt_rounds', 6);
require('../../build').buildTargets(['js', 'clientCSS', 'acpCSS', 'tpl'], next); require('../../build').buildTargets(['js', 'clientCSS', 'acpCSS', 'tpl'], next);
}, },

@ -322,6 +322,24 @@ describe('socket.io', function () {
}); });
}); });
it('should get daily analytics', function (done) {
io.emit('admin.analytics.get', {graph: 'traffic', units: 'days'}, function (err, data) {
assert.ifError(err);
assert(data);
assert(data.monthlyPageViews);
done();
});
});
it('should get hourly analytics', function (done) {
io.emit('admin.analytics.get', {graph: 'traffic', units: 'hours'}, function (err, data) {
assert.ifError(err);
assert(data);
assert(data.monthlyPageViews);
done();
});
});
after(function (done) { after(function (done) {
db.emptydb(done); db.emptydb(done);
}); });

Loading…
Cancel
Save