From f07ced2cbd7d3071538e63b35084c69912cf7887 Mon Sep 17 00:00:00 2001 From: nowfred Date: Fri, 11 Oct 2024 14:40:14 -0700 Subject: [PATCH] fix: handle system signals --- package-lock.json | 7 +++++++ package.json | 1 + src/node/server.ts | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/package-lock.json b/package-lock.json index 29474f5..866af54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { + "@moebius/http-graceful-shutdown": "^1.1.0", "chalk": "^5.3.0", "commander": "^12.1.0", "compression": "^1.7.4", @@ -1595,6 +1596,12 @@ "integrity": "sha512-FrVirpbyDueB9IPP2sDS3G4vil0XWQuJhqsoWuBiqvojtr/+nfIQmpmkztyuWGUWmRJC0MMa1xK26LP2RQPtOQ==", "dev": true }, + "node_modules/@moebius/http-graceful-shutdown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@moebius/http-graceful-shutdown/-/http-graceful-shutdown-1.1.0.tgz", + "integrity": "sha512-cjODgYTIGuCwgsuVMZNDh8RBK697ULAoQAmLqMVpqnqF3nOlPaJHqtGrdLooyn81l83wzHYwG6kPvEIv+Fo+sQ==", + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", diff --git a/package.json b/package.json index 8917de4..a90f964 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "prepare": "husky" }, "dependencies": { + "@moebius/http-graceful-shutdown": "^1.1.0", "chalk": "^5.3.0", "commander": "^12.1.0", "compression": "^1.7.4", diff --git a/src/node/server.ts b/src/node/server.ts index b19272b..9f12b25 100644 --- a/src/node/server.ts +++ b/src/node/server.ts @@ -2,6 +2,7 @@ import http from 'node:http'; import https from 'node:https'; import type { Server } from 'node:net'; import path from 'path'; +import { GracefulShutdownManager } from '@moebius/http-graceful-shutdown'; import compression from 'compression'; import type { Express } from 'express'; import express from 'express'; @@ -161,6 +162,20 @@ async function createServer(config: ServerConfig): Promise { void printServerInfo(config, { version, server }); }); + const shutdownManager = new GracefulShutdownManager(server); + + process.on('SIGTERM', () => { + shutdownManager.terminate(() => { + console.log('Server has been gracefully terminated'); + }); + }); + + process.on('SIGINT', () => { + shutdownManager.terminate(() => { + console.log('Server has been gracefully terminated'); + }); + }); + return server; }, app,