Ghost/core/server/services/email-analytics/jobs/index.js
Kevin Ansfield c40a8e978d Fixed incorrect knex syntax
refs 166d072cd4

- accidentally committed an earlier attempt 🤦🏻‍♂️ updated with the valid syntax
2020-12-02 14:53:10 +00:00

44 lines
1.5 KiB
JavaScript

const path = require('path');
const moment = require('moment');
const config = require('../../../../shared/config');
const models = require('../../../models');
const jobsService = require('../../jobs');
let hasScheduled = false;
module.exports = {
async scheduleRecurringJobs() {
if (
!hasScheduled &&
config.get('emailAnalytics') &&
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('created_at', '>', moment.utc().subtract(30, 'days').toDate())
.where('status', '<>', 'failed')
.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;
}
};