Vulcan/packages/vulcan-newsletter/lib/server/cron.js

77 lines
2.3 KiB
JavaScript
Raw Normal View History

import { SyncedCron } from 'meteor/percolatestudio:synced-cron';
import moment from 'moment';
import Newsletter from '../namespace.js';
2017-03-23 16:27:59 +09:00
import { getSetting } from 'meteor/vulcan:core';
2016-07-07 12:49:57 +09:00
const defaultFrequency = [1]; // every monday
const defaultTime = '00:00'; // GMT
SyncedCron.options = {
log: true,
collectionName: 'cronHistory',
utc: false,
collectionTTL: 172800
};
const addZero = num => {
return num < 10 ? "0"+num : num;
};
var getSchedule = function (parser) {
2016-12-12 15:00:56 +09:00
var frequency = getSetting('newsletterFrequency', defaultFrequency);
var recur = parser.recur();
var schedule;
// Default is once a week (Mondays)
if (!!frequency) {
schedule = recur.on(frequency).dayOfWeek();
}
else {
schedule = recur.on(2).dayOfWeek();
}
const offsetInMinutes = new Date().getTimezoneOffset();
2016-12-12 15:00:56 +09:00
const GMTtime = moment.duration(getSetting('newsletterTime', defaultTime));
const serverTime = GMTtime.subtract(offsetInMinutes, "minutes");
const serverTimeString = addZero(serverTime.hours()) + ":" + addZero(serverTime.minutes());
2016-12-12 15:00:56 +09:00
// console.log("// scheduled for: (GMT): "+getSetting('newsletterTime', defaultTime));
2016-07-19 15:13:16 +09:00
// console.log("// server offset (minutes): "+offsetInMinutes);
// console.log("// server scheduled time (minutes): "+serverTime.asMinutes());
// console.log("// server scheduled time: "+serverTimeString);
return schedule.on(serverTimeString).time();
};
Meteor.methods({
getNextJob: function () {
var nextJob = SyncedCron.nextScheduledAtDate('scheduleNewsletter');
console.log(nextJob); // eslint-disable-line
return nextJob;
}
});
var addJob = function () {
SyncedCron.add({
name: 'scheduleNewsletter',
schedule: function(parser) {
// parser is a later.parse object
return getSchedule(parser);
},
job: function() {
// only schedule newsletter campaigns in production
2016-12-12 15:00:56 +09:00
if (process.env.NODE_ENV === "production" || getSetting("enableNewsletterInDev", false)) {
console.log("// Scheduling newsletter…"); // eslint-disable-line
console.log(new Date()); // eslint-disable-line
Newsletter.scheduleNextWithMailChimp();
}
}
});
};
Meteor.startup(function () {
2016-12-12 15:00:56 +09:00
if (getSetting('enableNewsletter', true) && getSetting('mailChimpAPIKey') && getSetting('mailChimpListId')) {
addJob();
}
});