diff --git a/docker-compose.yml b/docker-compose.yml index 2382687..e98a5a2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -95,6 +95,7 @@ services: container_name: qmi-cloud-worker restart: on-failure environment: + - HOSTNAME_URL=http://localhost:3000 - REDIS_URL=redis://redis - MONGO_URI=mongodb://root:example@mongo/qmicloud?authSource=admin - PROJECT_PATH=%PWD% diff --git a/qmi-cloud-common/send-email.js b/qmi-cloud-common/send-email.js index 1894227..8e80687 100644 --- a/qmi-cloud-common/send-email.js +++ b/qmi-cloud-common/send-email.js @@ -3,6 +3,11 @@ const nodemailer = require('nodemailer'); const FROM = '"Qlik" '; var transporter; +const HOSTNAME_URL = process.env.HOSTNAME_URL || "https://qmicloud.qliktech.com"; +const FOOTER = `
+

Check it out at ${HOSTNAME_URL}

+
`; + if ( process.env.GMAIL_USERNAME && process.env.GMAIL_PASSWORD ) { //GMAIL transporter = nodemailer.createTransport({ @@ -85,9 +90,7 @@ function getHtmlScenarioDestroyIn24( provision, scenario, period, warningDays) {

If you don't want this to happen, you've got ${(warningDays*24)} hours (from when this email was sent) as a grace period to get back at 'Running' status this provision.

${common} -
-

Check it out at https://qmicloud.qliktech.com

-
+ ${FOOTER} `; } @@ -107,12 +110,10 @@ function getHtmlScenarioVMsStopped( provision, scenario) {

All VMs for this provision stopped automatically.

-

You can start them up again from https://qmicloud.qliktech.com

+

You can start them up again from ${HOSTNAME_URL}

${common} -
-

Check it out at https://qmicloud.qliktech.com

-
+ ${FOOTER} `; } @@ -137,9 +138,7 @@ function getHtmlScenarioWillStopIn24( provision, scenario, period, warningDays )

If you don't want the VMs to automatically stop, you've got ${warningDays*24} hours (from when this email was sent) as a grace period to extend this scenario's Running VMs for ${(period+warningDays)} extra days.

${common} -
-

Check it out at https://qmicloud.qliktech.com

-
+ ${FOOTER} `; } @@ -173,9 +172,7 @@ function getHtmlNewProvision(provision, scenario) {
${htmlint}
-
-

Check it out at https://qmicloud.qliktech.com

-
+ ${FOOTER} `; @@ -195,9 +192,7 @@ function getHtmlErrorProvision(provision, scenario) {

Scenario '${scenario.title}' failed during provision.

${common} -
-

Check it out at https://qmicloud.qliktech.com

-
+ ${FOOTER} `; } @@ -213,26 +208,24 @@ function getHtmlDestroyProvision(provision, scenario) {

Scenario '${scenario.title}' successfully destroyed!

${common} -
-

Check it out at https://qmicloud.qliktech.com

-
+ ${FOOTER} `; } // async..await is not allowed in global scope, must use a wrapper -async function send( provision, scenario ) { +async function sendProvisionSuccess( provision, scenario ) { const htmlText = getHtmlNewProvision(provision, scenario); await _doSend(provision.user.upn, 'QMI Cloud - Provision finished successfully', htmlText); } -async function sendError(provision, scenario ) { +async function sendProvisionError(provision, scenario ) { const htmlText = getHtmlErrorProvision(provision, scenario); await _doSend(provision.user.upn, 'QMI Cloud - Provision with failures', htmlText); } -async function sendDestroyed(provision, scenario ) { +async function sendDestroyedSuccess(provision, scenario ) { const htmlText = getHtmlDestroyProvision(provision, scenario); await _doSend(provision.user.upn, 'QMI Cloud - Provision destroyed successfully', htmlText); @@ -257,9 +250,9 @@ async function sendVMsStopped( provision, scenario ) { await _doSend(provision.user.upn, 'QMI Cloud - VMs stopped automatically', htmlText); } -module.exports.send = send; -module.exports.sendError = sendError; -module.exports.sendDestroyed = sendDestroyed; +module.exports.sendProvisionSuccess = sendProvisionSuccess; +module.exports.sendProvisionError = sendProvisionError; +module.exports.sendDestroyedSuccess = sendDestroyedSuccess; module.exports.sendWillStopIn24 = sendWillStopIn24; module.exports.sendVMsStopped = sendVMsStopped; module.exports.sendWillDestroyIn24 = sendWillDestroyIn24; diff --git a/qmi-cloud-worker/common-apply.js b/qmi-cloud-worker/common-apply.js index efff7d2..2557c07 100644 --- a/qmi-cloud-worker/common-apply.js +++ b/qmi-cloud-worker/common-apply.js @@ -60,15 +60,15 @@ module.exports = async function(job) { return azure.createimage(prov, job.data._scenario); } ).then( function(prov) { if (prov.status === "provisioned") { - sendEmail.send(prov, job.data._scenario); + sendEmail.sendProvisionSuccess(prov, job.data._scenario); } else { - sendEmail.sendError(prov, job.data._scenario); + sendEmail.sendProvisionError(prov, job.data._scenario); } return Promise.resolve({"success": true, provMongo: prov}); } ).catch( function(err) { console.log("ProcessorApply# Provision: error", err); db.provision.update(prov._id, {"status": err.provStatus? err.provStatus : 'error'}); - sendEmail.sendError(prov, job.data._scenario); + sendEmail.sendProvisionError(prov, job.data._scenario); return Promise.reject({"success": false, "error": err}); } ); } \ No newline at end of file diff --git a/qmi-cloud-worker/processor-destroy.js b/qmi-cloud-worker/processor-destroy.js index b29c669..47eaa3c 100644 --- a/qmi-cloud-worker/processor-destroy.js +++ b/qmi-cloud-worker/processor-destroy.js @@ -28,7 +28,7 @@ module.exports = async function(job){ update = await db.destroy.update(destroyMongo._id, {"status": "destroyed"}); let timeRunning = db.utils.getNewTimeRunning(provMongo); update2 = await db.provision.update(provMongo._id, {"isDestroyed": true, "timeRunning": timeRunning, "pendingNextAction": undefined, "actualDestroyDate": new Date()}); - sendEmail.sendDestroyed(update2, job.data._scenario); + sendEmail.sendDestroyedSuccess(update2, job.data._scenario); } return { destroy: update, provision: update2 }; }).then(async function(res) {