mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-16 12:32:50 +01:00
* perf: nconf/winston/render cache nconf.get calls modify middleware.pageView to call next earlier don't call winston.verbose on every hook see https://github.com/winstonjs/winston/issues/1669 translate header/footer separately and cache results for guests * fix: copy paste fail * refactor: style and fire hook only log in dev mode * fix: cache key, header changes based on template * perf: change replace * fix: add missing await * perf: category * perf: lodash clone * perf: remove escapeRegexChars
57 lines
1.3 KiB
JavaScript
57 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const winston = require('winston');
|
|
const validator = require('validator');
|
|
const cronJob = require('cron').CronJob;
|
|
|
|
const db = require('../database');
|
|
const analytics = require('../analytics');
|
|
|
|
const Errors = module.exports;
|
|
|
|
let counters = {};
|
|
|
|
new cronJob('0 * * * * *', function () {
|
|
Errors.writeData();
|
|
}, null, true);
|
|
|
|
Errors.writeData = async function () {
|
|
try {
|
|
const _counters = { ...counters };
|
|
counters = {};
|
|
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);
|
|
}
|
|
};
|
|
|
|
Errors.log404 = function (route) {
|
|
if (!route) {
|
|
return;
|
|
}
|
|
route = route.slice(0, 512).replace(/\/$/, ''); // remove trailing slashes
|
|
analytics.increment('errors:404');
|
|
counters[route] = counters[route] || 0;
|
|
counters[route] += 1;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
Errors.clear = async function () {
|
|
await db.delete('errors:404');
|
|
};
|