Files
NodeBB/src/meta/errors.js

68 lines
1.5 KiB
JavaScript
Raw Normal View History

2016-05-24 22:01:46 -04:00
'use strict';
2017-02-28 15:16:49 +03:00
var async = require('async');
var winston = require('winston');
2016-10-04 20:10:59 +03:00
var validator = require('validator');
var cronJob = require('cron').CronJob;
2016-05-24 22:01:46 -04:00
2016-10-04 20:10:59 +03:00
var db = require('../database');
var analytics = require('../analytics');
2016-05-24 22:01:46 -04:00
2017-05-29 12:14:55 -06:00
var Errors = module.exports;
2016-05-24 22:01:46 -04:00
2017-05-29 12:14:55 -06:00
var counters = {};
2017-05-29 12:14:55 -06:00
new cronJob('0 * * * * *', function () {
Errors.writeData();
}, null, true);
2017-05-29 12:14:55 -06:00
Errors.writeData = function () {
var dbQueue = [];
if (Object.keys(counters).length > 0) {
for (var key in counters) {
if (counters.hasOwnProperty(key)) {
dbQueue.push(async.apply(db.sortedSetIncrBy, 'errors:404', counters[key], key));
}
}
2017-05-29 12:14:55 -06:00
counters = {};
async.series(dbQueue, function (err) {
if (err) {
winston.error(err);
}
});
}
};
2017-05-29 12:14:55 -06:00
Errors.log404 = function (route, callback) {
callback = callback || function () {};
if (!route) {
return setImmediate(callback);
}
2017-11-05 09:54:55 -05:00
route = route.slice(0, 512);
2017-05-29 12:14:55 -06:00
route = route.replace(/\/$/, ''); // remove trailing slashes
analytics.increment('errors:404');
counters[route] = counters[route] || 0;
counters[route] += 1;
setImmediate(callback);
};
2016-05-24 22:01:46 -04:00
2017-05-29 12:14:55 -06:00
Errors.get = function (escape, callback) {
async.waterfall([
function (next) {
db.getSortedSetRevRangeWithScores('errors:404', 0, 199, next);
},
function (data, next) {
data = data.map(function (nfObject) {
nfObject.value = escape ? validator.escape(String(nfObject.value || '')) : nfObject.value;
return nfObject;
});
2017-02-28 15:16:49 +03:00
2017-05-29 12:14:55 -06:00
next(null, data);
},
], callback);
};
2016-05-24 22:01:46 -04:00
2017-05-29 12:14:55 -06:00
Errors.clear = function (callback) {
db.delete('errors:404', callback);
2016-05-24 22:01:46 -04:00
};