mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-21 09:52:06 +03:00
92ef83c61a
no issue - if emails are older than 30 days we wouldn't be able to fetch any analytics for them and if a site used emails in the past but is no longer using them it doesn't make sense to keep potentially expensive background worker threads spinning up
42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
const path = require('path');
|
|
const config = require('../../../../shared/config');
|
|
const models = require('../../../models');
|
|
const jobsService = require('../../jobs');
|
|
|
|
let hasScheduled = false;
|
|
|
|
module.exports = {
|
|
async scheduleRecurringJobs() {
|
|
if (
|
|
!hasScheduled &&
|
|
config.get('backgroundJobs:emailAnalytics') &&
|
|
!process.env.NODE_ENV.match(/^testing/)
|
|
) {
|
|
// don't register email analytics job if we have no emails,
|
|
// processer usage from many sites spinning up threads can be high
|
|
const emailCount = await models.Email
|
|
.where('status', 'submitted')
|
|
.where('created_at', '>', moment.utc().subtract(30, 'days').toDate())
|
|
.count();
|
|
|
|
if (emailCount > 0) {
|
|
// use a random seconds value to avoid spikes to external APIs on the minute
|
|
const s = Math.floor(Math.random() * 60); // 0-59
|
|
// run every 5 minutes, on 1,6,11..., 2,7,12..., 3,8,13..., etc
|
|
const m = Math.floor(Math.random() * 5); // 0-4
|
|
|
|
jobsService.scheduleJob(
|
|
`${s} ${m}/5 * * * *`,
|
|
path.resolve(__dirname, 'fetch-latest.js'),
|
|
undefined,
|
|
'email-analytics-fetch-latest'
|
|
);
|
|
|
|
hasScheduled = true;
|
|
}
|
|
}
|
|
|
|
return hasScheduled;
|
|
}
|
|
};
|