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

View file

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