fix: shutdown gracefully

This commit is contained in:
sup39 2024-01-19 03:43:58 +09:00 committed by naskya
parent 7ffb8e2853
commit b28591abff
Signed by: naskya
GPG key ID: 712D413B3A9FED5C
2 changed files with 6 additions and 3 deletions

View file

@ -6,6 +6,7 @@
* @callback BeforeShutdownListener
* @param {string} [signalOrEvent] The exit signal or event name received on the process.
*/
type BeforeShutdownListener = (signalOrEvent: string) => PromiseLike<void>;
/**
* System signals the app will listen to initiate shutdown.
@ -24,7 +25,7 @@ const SHUTDOWN_TIMEOUT = 15000;
* down the process.
* @type {BeforeShutdownListener[]}
*/
const shutdownListeners: ((signalOrEvent: string) => void)[] = [];
const shutdownListeners: BeforeShutdownListener[] = [];
/**
* Listen for signals and execute given `fn` function once.
@ -89,7 +90,9 @@ async function shutdownHandler(signalOrEvent: string) {
* @param {BeforeShutdownListener} listener The shutdown listener to register.
* @returns {BeforeShutdownListener} Echoes back the supplied `listener`.
*/
export function beforeShutdown(listener: () => void) {
export function beforeShutdown(
listener: BeforeShutdownListener,
): BeforeShutdownListener {
shutdownListeners.push(listener);
return listener;
}

View file

@ -6,4 +6,4 @@ export const activeUsersChart = new ActiveUsersChart();
// 20分おきにメモリ情報をDBに書き込み
setInterval(() => activeUsersChart.save(), 1000 * 60 * 20);
beforeShutdown(async () => await new Promise(() => activeUsersChart.save()));
beforeShutdown(() => activeUsersChart.save());