refactor: improve graceful shutdown logic and logging

This commit is contained in:
Tudor Stanciu 2025-10-04 18:08:01 +03:00
parent 310613851b
commit 5059780048

View File

@ -125,7 +125,6 @@ const server = app.listen(config.port, () => {
let isShuttingDown = false; let isShuttingDown = false;
const gracefulShutdown = async (signal: string): Promise<void> => { const gracefulShutdown = async (signal: string): Promise<void> => {
// Prevent multiple shutdown calls
if (isShuttingDown) { if (isShuttingDown) {
logger.warn(`Shutdown already in progress, ignoring ${signal}`); logger.warn(`Shutdown already in progress, ignoring ${signal}`);
return; return;
@ -134,7 +133,7 @@ const gracefulShutdown = async (signal: string): Promise<void> => {
logger.info(`Received ${signal}, shutting down gracefully`); logger.info(`Received ${signal}, shutting down gracefully`);
// Set a hard timeout for Docker (Docker default stop timeout is 10s) // Set timeout slightly less than Docker's default (10s)
const forceExitTimeout = setTimeout(() => { const forceExitTimeout = setTimeout(() => {
logger.error('Forced shutdown after timeout'); logger.error('Forced shutdown after timeout');
process.exit(1); process.exit(1);
@ -145,7 +144,6 @@ const gracefulShutdown = async (signal: string): Promise<void> => {
await new Promise<void>((resolve, reject) => { await new Promise<void>((resolve, reject) => {
server.close(err => { server.close(err => {
if (err) { if (err) {
logger.error('Error closing server', err);
reject(err); reject(err);
} else { } else {
logger.info('Server closed successfully'); logger.info('Server closed successfully');
@ -154,11 +152,10 @@ const gracefulShutdown = async (signal: string): Promise<void> => {
}); });
}); });
// Flush logs // Flush logs before exit
await logger.flush(); await logger.flush();
logger.info('Logs flushed successfully'); logger.info('Shutdown complete');
// Clean exit
clearTimeout(forceExitTimeout); clearTimeout(forceExitTimeout);
process.exit(0); process.exit(0);
} catch (error) { } catch (error) {