refactor: only write to db on runJobs processes

similart to analytics.js
This commit is contained in:
Barış Soner Uşaklı
2025-04-03 12:52:02 -04:00
parent 667367a68f
commit a6839b6149
2 changed files with 39 additions and 6 deletions

View File

@@ -1,24 +1,55 @@
'use strict'; 'use strict';
const nconf = require('nconf');
const winston = require('winston'); const winston = require('winston');
const validator = require('validator'); const validator = require('validator');
const cronJob = require('cron').CronJob; const cronJob = require('cron').CronJob;
const { setTimeout } = require('timers/promises')
const db = require('../database'); const db = require('../database');
const analytics = require('../analytics'); const analytics = require('../analytics');
const pubsub = require('../pubsub');
const utils = require('../utils');
const Errors = module.exports; const Errors = module.exports;
let counters = {}; const runJobs = nconf.get('runJobs');
new cronJob('0 * * * * *', (() => { let counters = {};
Errors.writeData(); let total = {};
}), null, true);
Errors.init = async function () {
new cronJob('0 * * * * *', async () => {
publishLocalErrors();
if (runJobs) {
await setTimeout(2000);
await Errors.writeData();
}
}, null, true);
if (runJobs) {
pubsub.on('errors:publish', (data) => {
for (const [key, value] of Object.entries(data.local)) {
if (utils.isNumber(value)) {
total[key] = total[key] || 0;
total[key] += value;
}
}
});
}
};
function publishLocalErrors() {
pubsub.publish('errors:publish', {
local: counters,
});
counters = {};
}
Errors.writeData = async function () { Errors.writeData = async function () {
try { try {
const _counters = { ...counters }; const _counters = { ...total };
counters = {}; total = {};
const keys = Object.keys(_counters); const keys = Object.keys(_counters);
if (!keys.length) { if (!keys.length) {
return; return;

View File

@@ -24,6 +24,7 @@ const helmet = require('helmet');
const Benchpress = require('benchpressjs'); const Benchpress = require('benchpressjs');
const db = require('./database'); const db = require('./database');
const analytics = require('./analytics'); const analytics = require('./analytics');
const errors = require('./meta/errors');
const file = require('./file'); const file = require('./file');
const emailer = require('./emailer'); const emailer = require('./emailer');
const meta = require('./meta'); const meta = require('./meta');
@@ -114,6 +115,7 @@ async function initializeNodeBB() {
await meta.blacklist.load(); await meta.blacklist.load();
await flags.init(); await flags.init();
await analytics.init(); await analytics.init();
await errors.init();
await topicEvents.init(); await topicEvents.init();
if (nconf.get('runJobs')) { if (nconf.get('runJobs')) {
await require('./widgets').moveMissingAreasToDrafts(); await require('./widgets').moveMissingAreasToDrafts();