From 4c2a0fd2d3b83709927dd42b847f32f60abfbf09 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 1 Jan 2025 13:33:01 -0800 Subject: [PATCH] Use initJobQueue method to initialize JobQueue, flush Redis DB on shutdown timeout --- Server/index.js | 23 ++++++++++++++++++++--- Server/package-lock.json | 8 ++++---- Server/package.json | 1 + 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/Server/index.js b/Server/index.js index f53872a2c..abdc22314 100644 --- a/Server/index.js +++ b/Server/index.js @@ -68,6 +68,8 @@ import ServiceRegistry from "./service/serviceRegistry.js"; import MongoDB from "./db/mongo/MongoDB.js"; +import IORedis from "ioredis"; + const SERVICE_NAME = "Server"; const SHUTDOWN_TIMEOUT = 1000; let isShuttingDown = false; @@ -87,12 +89,24 @@ const shutdown = async () => { } isShuttingDown = true; logger.info({ message: "Attempting graceful shutdown" }); - setTimeout(() => { + setTimeout(async () => { logger.error({ message: "Could not shut down in time, forcing shutdown", service: SERVICE_NAME, method: "shutdown", }); + // flush Redis + const settings = + ServiceRegistry.get(SettingsService.SERVICE_NAME).getSettings() || {}; + + const { redisHost = "127.0.0.1", redisPort = 6379 } = settings; + const redis = new IORedis({ + host: redisHost, + port: redisPort, + }); + logger.info({ message: "Flushing Redis" }); + await redis.flushall(); + logger.info({ message: "Redis flushed" }); process.exit(1); }, SHUTDOWN_TIMEOUT); try { @@ -133,10 +147,11 @@ const startApp = async () => { const networkService = new NetworkService(axios, ping, logger, http, Docker, net); const statusService = new StatusService(db, logger); const notificationService = new NotificationService(emailService, db, logger); - const jobQueue = await JobQueue.createJobQueue( + + const jobQueue = new JobQueue( db, - networkService, statusService, + networkService, notificationService, settingsService, logger, @@ -212,6 +227,8 @@ const startApp = async () => { ); const queueRoutes = new QueueRoutes(queueController); const statusPageRoutes = new StatusPageRoutes(statusPageController); + // Init job queue + await jobQueue.initJobQueue(); // Middleware app.use( cors() diff --git a/Server/package-lock.json b/Server/package-lock.json index e9dc276c4..c5565e667 100644 --- a/Server/package-lock.json +++ b/Server/package-lock.json @@ -18,6 +18,7 @@ "express": "^4.19.2", "handlebars": "^4.7.8", "helmet": "^8.0.0", + "ioredis": "^5.4.2", "joi": "^17.13.1", "jsonwebtoken": "9.0.2", "mailersend": "^2.2.0", @@ -3902,10 +3903,9 @@ "license": "ISC" }, "node_modules/ioredis": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", - "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", - "license": "MIT", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.2.tgz", + "integrity": "sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", diff --git a/Server/package.json b/Server/package.json index c8460aa03..f729a7707 100644 --- a/Server/package.json +++ b/Server/package.json @@ -25,6 +25,7 @@ "express": "^4.19.2", "handlebars": "^4.7.8", "helmet": "^8.0.0", + "ioredis": "^5.4.2", "joi": "^17.13.1", "jsonwebtoken": "9.0.2", "mailersend": "^2.2.0",