Files
NodeBB/src/meta/errors.js

58 lines
1.3 KiB
JavaScript
Raw Normal View History

2016-05-24 22:01:46 -04:00
'use strict';
2019-07-23 22:20:39 -04:00
const _ = require('lodash');
const winston = require('winston');
const validator = require('validator');
const cronJob = require('cron').CronJob;
2016-05-24 22:01:46 -04:00
2019-07-23 22:20:39 -04:00
const db = require('../database');
const analytics = require('../analytics');
2016-05-24 22:01:46 -04:00
2019-07-23 22:20:39 -04:00
const Errors = module.exports;
2016-05-24 22:01:46 -04:00
2019-07-23 22:20:39 -04:00
let counters = {};
2017-05-29 12:14:55 -06:00
new cronJob('0 * * * * *', function () {
Errors.writeData();
}, null, true);
2019-07-23 22:20:39 -04:00
Errors.writeData = async function () {
try {
const _counters = _.clone(counters);
2017-05-29 12:14:55 -06:00
counters = {};
2019-07-23 22:20:39 -04:00
const keys = Object.keys(_counters);
if (!keys.length) {
return;
}
for (const key of keys) {
/* eslint-disable no-await-in-loop */
await db.sortedSetIncrBy('errors:404', _counters[key], key);
}
} catch (err) {
winston.error(err.stack);
2017-05-29 12:14:55 -06:00
}
};
2019-07-23 22:20:39 -04:00
Errors.log404 = function (route) {
2017-05-29 12:14:55 -06:00
if (!route) {
2019-07-23 22:20:39 -04:00
return;
2017-05-29 12:14:55 -06:00
}
2019-07-23 22:20:39 -04:00
route = route.slice(0, 512).replace(/\/$/, ''); // remove trailing slashes
2017-05-29 12:14:55 -06:00
analytics.increment('errors:404');
counters[route] = counters[route] || 0;
counters[route] += 1;
};
2016-05-24 22:01:46 -04:00
2019-07-23 22:20:39 -04:00
Errors.get = async function (escape) {
const data = await db.getSortedSetRevRangeWithScores('errors:404', 0, 199);
data.forEach(function (nfObject) {
nfObject.value = escape ? validator.escape(String(nfObject.value || '')) : nfObject.value;
});
return data;
2017-05-29 12:14:55 -06:00
};
2016-05-24 22:01:46 -04:00
2019-07-23 22:20:39 -04:00
Errors.clear = async function () {
await db.delete('errors:404');
2016-05-24 22:01:46 -04:00
};