53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
// server/utils/cleanupManager.js
|
|
const logger = require("./logger");
|
|
|
|
let cleanupTasks = [];
|
|
let isShuttingDown = false;
|
|
|
|
/**
|
|
* Register a cleanup task to be executed during shutdown
|
|
* @param {Function} task - The cleanup task to register
|
|
*/
|
|
function registerCleanupTask(task) {
|
|
cleanupTasks.push(task);
|
|
}
|
|
|
|
/**
|
|
* Handle SIGTERM signal for graceful shutdown
|
|
*/
|
|
async function handleSigterm() {
|
|
if (isShuttingDown) {
|
|
logger.log("sigterm-api", "WARN", null, null, { message: "Shutdown already in progress, ignoring signal." });
|
|
return;
|
|
}
|
|
|
|
isShuttingDown = true;
|
|
|
|
logger.log("sigterm-api", "WARN", null, null, { message: "SIGTERM Received. Starting graceful shutdown." });
|
|
|
|
try {
|
|
for (const task of cleanupTasks) {
|
|
logger.log("sigterm-api", "WARN", null, null, { message: `Running cleanup task: ${task.name}` });
|
|
await task();
|
|
}
|
|
logger.log("sigterm-api", "WARN", null, null, { message: `All cleanup tasks completed.` });
|
|
} catch (error) {
|
|
logger.log("sigterm-api-error", "ERROR", null, null, { message: error.message, stack: error.stack });
|
|
}
|
|
|
|
process.exit(0);
|
|
}
|
|
|
|
/**
|
|
* Initialize cleanup manager with process event listeners
|
|
*/
|
|
function initializeCleanupManager() {
|
|
process.on("SIGTERM", handleSigterm);
|
|
process.on("SIGINT", handleSigterm); // Handle Ctrl+C
|
|
}
|
|
|
|
module.exports = {
|
|
registerCleanupTask,
|
|
initializeCleanupManager
|
|
};
|