diff --git a/core/server/services/email-analytics/jobs/fetch-latest.js b/core/server/services/email-analytics/jobs/fetch-latest.js index 05f79c8352..132c0016d1 100644 --- a/core/server/services/email-analytics/jobs/fetch-latest.js +++ b/core/server/services/email-analytics/jobs/fetch-latest.js @@ -6,9 +6,8 @@ const debug = require('@tryghost/debug')('jobs:email-analytics:fetch-latest'); // Exit early when cancelled to prevent stalling shutdown. No cleanup needed when cancelling as everything is idempotent and will pick up // where it left off on next run function cancel() { - parentPort.postMessage('Email analytics fetch-latest job cancelled before completion'); - if (parentPort) { + parentPort.postMessage('Email analytics fetch-latest job cancelled before completion'); parentPort.postMessage('cancelled'); } else { setTimeout(() => { @@ -31,13 +30,19 @@ if (parentPort) { const logging = { info(message) { - parentPort.postMessage(message); + if (parentPort) { + parentPort.postMessage(message); + } }, warn(message) { - parentPort.postMessage(message); + if (parentPort) { + parentPort.postMessage(message); + } }, error(message) { - parentPort.postMessage(message); + if (parentPort) { + parentPort.postMessage(message); + } } }; @@ -84,9 +89,8 @@ if (parentPort) { const aggregateEndDate = new Date(); debug(`Finished aggregating email analytics in ${aggregateEndDate - aggregateStartDate}ms`); - parentPort.postMessage(`Fetched ${eventStats.totalEvents} events and aggregated stats for ${eventStats.emailIds.length} emails in ${aggregateEndDate - fetchStartDate}ms`); - if (parentPort) { + parentPort.postMessage(`Fetched ${eventStats.totalEvents} events and aggregated stats for ${eventStats.emailIds.length} emails in ${aggregateEndDate - fetchStartDate}ms`); parentPort.postMessage('done'); } else { // give the logging pipes time finish writing before exit diff --git a/core/server/web/api/testmode/jobs/graceful-job.js b/core/server/web/api/testmode/jobs/graceful-job.js index c70bdb7322..f56a5ee4a2 100644 --- a/core/server/web/api/testmode/jobs/graceful-job.js +++ b/core/server/web/api/testmode/jobs/graceful-job.js @@ -3,13 +3,21 @@ const util = require('util'); let shutdown = false; -parentPort.on('message', (message) => { - parentPort.postMessage(`parent message received: ${message}`); - - if (message === 'cancel') { - shutdown = true; +const postParentPortMessage = (message) => { + if (parentPort) { + parentPort.postMessage(message); } -}); +}; + +if (parentPort) { + parentPort.on('message', (message) => { + parentPort.postMessage(`parent message received: ${message}`); + + if (message === 'cancel') { + shutdown = true; + } + }); +} const setTimeoutPromise = util.promisify(setTimeout); const internalContext = {context: {internal: true}}; @@ -19,25 +27,24 @@ const internalContext = {context: {internal: true}}; await models.init(); - parentPort.postMessage(`Fetching tags`); + postParentPortMessage(`Fetching tags`); const tags = await models.Tag.findPage(internalContext); - parentPort.postMessage(`Found ${tags.data.length} tags. First one: ${tags.data[0].toJSON().slug}`); + postParentPortMessage(`Found ${tags.data.length} tags. First one: ${tags.data[0].toJSON().slug}`); - parentPort.postMessage(`Waiting 5 seconds to perform second part of the job`); + postParentPortMessage(`Waiting 5 seconds to perform second part of the job`); await setTimeoutPromise(5 * 1000); if (shutdown) { - parentPort.postMessage(`Job shutting down gracefully`); + postParentPortMessage(`Job shutting down gracefully`); process.exit(0); } - parentPort.postMessage(`Fetching posts`); + postParentPortMessage(`Fetching posts`); const posts = await models.Post.findPage(internalContext); - parentPort.postMessage(`Found ${posts.data.length} posts. First one: ${posts.data[0].toJSON().slug}`); - - parentPort.postMessage('Graceful job has completed!'); + postParentPortMessage(`Found ${posts.data.length} posts. First one: ${posts.data[0].toJSON().slug}`); + postParentPortMessage('Graceful job has completed!'); process.exit(0); })();