diff --git a/src/cloudron.js b/src/cloudron.js index e7a20297f..bb5a621ad 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -60,6 +60,8 @@ var REBOOT_CMD = path.join(__dirname, 'scripts/reboot.sh'), BACKUP_SWAP_CMD = path.join(__dirname, 'scripts/backupswap.sh'), INSTALLER_UPDATE_URL = 'http://127.0.0.1:2020/api/v1/installer/update'; +var NOOP_CALLBACK = function (error) { if (error) console.error(error); }; + var gAddDnsRecordsTimerId = null, gCloudronDetails = null, // cached cloudron details like region,size... gIsActivated = false; // cached activation state so that return value is synchronous @@ -114,7 +116,7 @@ function initialize(callback) { assert.strictEqual(typeof callback, 'function'); if (process.env.BOX_ENV !== 'test') { - exports.events.on(exports.EVENT_ACTIVATED, addDnsRecords); + addDnsRecords(sendHeartbeat); } userdb.count(function (error, count) { @@ -122,7 +124,7 @@ function initialize(callback) { gIsActivated = count !== 0; - if (gIsActivated && process.env.BOX_ENV !== 'test') addDnsRecords(); + if (gIsActivated) exports.events.emit(exports.EVENT_ACTIVATED); callback(null); }); @@ -292,11 +294,10 @@ function sendHeartbeat() { }); } -function addDnsRecords() { - if (config.isCustomDomain()) { - debug('addDnsRecords: Skip adding dns records for custom domain'); - return; - } +function addDnsRecords(callback) { + callback = callback || NOOP_CALLBACK; + + if (config.isCustomDomain()) return callback(); var DKIM_SELECTOR = 'mail'; var DMARC_REPORT_EMAIL = 'dmarc-report@cloudron.io'; @@ -306,7 +307,7 @@ function addDnsRecords() { if (publicKey === null) { console.error('Error reading dkim public key. Stop DNS setup.'); - return; + return callback(new Error('Error reading dkim public key')); } // remove header, footer and new lines @@ -331,20 +332,20 @@ function addDnsRecords() { subdomains.addMany(records, function (error, changeIds) { if (error) { console.error('Admin DNS record addition failed', error); - gAddDnsRecordsTimerId = setTimeout(addDnsRecords, 10000); + gAddDnsRecordsTimerId = setTimeout(addDnsRecords.bind(null, callback), 10000); return; } function checkIfInSync() { debug('addDnsRecords: Check if admin DNS record is in sync.'); - async.eachSeries(changeIds, function (changeId, callback) { + async.eachSeries(changeIds, function (changeId, iteratorCallback) { subdomains.status(changeId, function (error, result) { - if (error) return callback(new Error('Failed to check if admin DNS record is in sync.', error)); + if (error) return iteratorCallback(new Error('Failed to check if admin DNS record is in sync.', error)); - if (result !== 'done') return callback(new Error(changeId + ' is not in sync. result:' + result)); + if (result !== 'done') return iteratorCallback(new Error(changeId + ' is not in sync. result:' + result)); - callback(null); + iteratorCallback(null); }); }, function (error) { if (error) { @@ -354,6 +355,7 @@ function addDnsRecords() { } debug('addDnsRecords: done'); config.setDnsInSync('DNS is in sync for ip ' + sysinfo.getIp()); + callback(); }); } diff --git a/src/cron.js b/src/cron.js index 662c4c8b8..52b350da1 100644 --- a/src/cron.js +++ b/src/cron.js @@ -46,15 +46,6 @@ function initialize(callback) { settings.events.on(settings.AUTOUPDATE_PATTERN_KEY, autoupdatePatternChanged); cloudron.events.on(cloudron.EVENT_ACTIVATED, recreateJobs); - cloudron.events.on(cloudron.EVENT_ACTIVATED, cloudron.sendHeartbeat); - - // send heartbeats regardless of activation - cloudron.sendHeartbeat(); - gHeartbeatJob = new CronJob({ - cronTime: '00 */1 * * * *', // every minute - onTick: cloudron.sendHeartbeat, - start: true - }); gInitialized = true; @@ -71,6 +62,14 @@ function recreateJobs(unusedTimeZone, callback) { settings.getAll(function (error, allSettings) { debug('Creating jobs with timezone %s', allSettings[settings.TIME_ZONE_KEY]); + if (gHeartbeatJob) gBackupJob.stop(); + gHeartbeatJob = new CronJob({ + cronTime: '00 */1 * * * *', // every minute + onTick: cloudron.sendHeartbeat, + start: true, + timeZone: allSettings[settings.TIME_ZONE_KEY] + }); + if (gBackupJob) gBackupJob.stop(); gBackupJob = new CronJob({ cronTime: '00 00 */4 * * *', // every 4 hours