From b0ae977b076e521fc6d2ec4e5a8f85a9c4259268 Mon Sep 17 00:00:00 2001 From: "mohammad.anang" Date: Fri, 27 Oct 2023 15:25:46 +0700 Subject: [PATCH] provide graceful shutdown handling process --- src/config/db/index.js | 11 +++++++++-- src/server.js | 21 ++++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/config/db/index.js b/src/config/db/index.js index dcc1d1b..eb84f30 100644 --- a/src/config/db/index.js +++ b/src/config/db/index.js @@ -4,7 +4,7 @@ import logger from "../logger/index.js" const { MONGODB_URI } = Config -const connectDB = async () => { +export const connectDB = async () => { try { const connectionInstance = await mongoose.connect(MONGODB_URI) logger.info( @@ -16,4 +16,11 @@ const connectDB = async () => { } } -export default connectDB +export const releaseConnection = async () => { + try { + await mongoose.connection.close(); + logger.info('☘️ Release MongoDB Connection Successfully!') + } catch (error) { + logger.error("Release MongoDB connection error: ", error.message) + } +} diff --git a/src/server.js b/src/server.js index 40d85d8..907e918 100644 --- a/src/server.js +++ b/src/server.js @@ -1,7 +1,7 @@ import app from "./app.js" import Config from "./config/index.js" import logger from "./config/logger/index.js" -import connectDB from "./config/db/index.js" +import { connectDB, releaseConnection } from "./config/db/index.js" const { PORT } = Config @@ -23,6 +23,25 @@ async function startServer () { } setTimeout(() => process.exit(1), 1000) }) + + /********************************************************************************** + * Gracefully Shutdown Handling + **********************************************************************************/ + process.on('SIGTERM', () => { + logger.info('SIGTERM signal received: closing HTTP server') + server.close(() => { + logger.log('HTTP server closed') + }) + releaseConnection() + }); + + process.on('SIGINT', () => { + logger.log('SIGINT signal received: closing HTTP server') + server.close(() => { + logger.log('HTTP server closed') + }) + releaseConnection() + }); } catch (err) { if (err instanceof Error) { logger.error(err.message)