diff --git a/server/email/tasksEmails.js b/server/email/tasksEmails.js index 62462e7a8..f3ea56fe6 100644 --- a/server/email/tasksEmails.js +++ b/server/email/tasksEmails.js @@ -30,6 +30,38 @@ const transporter = nodemailer.createTransport({ // Initialize the Tasks Email Queue const tasksEmailQueue = taskEmailQueue(); +// Cleanup function for the Tasks Email Queue +const tasksEmailQueueCleanup = async () => { + try { + // Example async operation + console.log("Performing Tasks Email Reminder process cleanup..."); + await new Promise((resolve) => tasksEmailQueue.destroy(() => resolve())); + } catch (err) { + console.error("Tasks Email Reminder process cleanup failed:", err); + } +}; + +// Handling SIGINT (e.g., Ctrl+C) +process.on("SIGINT", async () => { + await tasksEmailQueueCleanup(); + process.exit(0); +}); +// Handling SIGTERM (e.g., sent by system shutdown) +process.on("SIGTERM", async () => { + await tasksEmailQueueCleanup(); + process.exit(0); +}); +// Handling uncaught exceptions +process.on("uncaughtException", async (err) => { + await tasksEmailQueueCleanup(); + process.exit(1); // Exit with an 'error' code +}); +// Handling unhandled promise rejections +process.on("unhandledRejection", async (reason, promise) => { + await tasksEmailQueueCleanup(); + process.exit(1); // Exit with an 'error' code +}); + const fromEmails = InstanceManager({ imex: "ImEX Online ", rome: "Rome Online ", @@ -211,7 +243,7 @@ const tasksRemindEmail = async (req, res) => { // Send Email sendMail("remind", emailData.to, emailData.subject, emailData.html, taskIds, (taskIds) => { for (const taskId of taskIds) { - taskEmailQueue.push(taskId); + tasksEmailQueue.push(taskId); } }); } diff --git a/server/email/tasksEmailsQueue.js b/server/email/tasksEmailsQueue.js index 7175403d1..c74c6bd3d 100644 --- a/server/email/tasksEmailsQueue.js +++ b/server/email/tasksEmailsQueue.js @@ -7,7 +7,6 @@ const moment = require("moment/moment"); const { client } = require("../graphql-client/graphql-client"); const { UPDATE_TASKS_REMIND_AT_SENT } = require("../graphql-client/queries"); const logger = require("../utils/logger"); - const taskEmailQueue = () => new Queue( (taskIds, cb) => { @@ -35,25 +34,4 @@ const taskEmailQueue = () => } ); -// Handle process signals -process.on("SIGINT", () => { - taskEmailQueue.destroy(); - process.exit(0); -}); -process.on("SIGTERM", () => { - taskEmailQueue.destroy(); - process.exit(0); -}); -process.on("uncaughtException", (err) => { - console.error("Unhandled Exception:", err); - taskEmailQueue.destroy(); - // Perform cleanup or log before exit - process.exit(1); // Exit with a 'failure' code -}); -process.on("unhandledRejection", (reason, promise) => { - console.error("Unhandled Rejection:", reason); - taskEmailQueue.destroy(); - process.exit(1); -}); - module.exports = { taskEmailQueue };