35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
import gracefulShutdown from "./lib/http-graceful-shutdown.mjs";
|
|
export function getGracefulShutdownConfig() {
|
|
return {
|
|
disabled: !!process.env.NITRO_SHUTDOWN_DISABLED,
|
|
signals: (process.env.NITRO_SHUTDOWN_SIGNALS || "SIGTERM SIGINT").split(" ").map((s) => s.trim()),
|
|
timeout: Number.parseInt(process.env.NITRO_SHUTDOWN_TIMEOUT || "", 10) || 3e4,
|
|
forceExit: !process.env.NITRO_SHUTDOWN_NO_FORCE_EXIT
|
|
};
|
|
}
|
|
export function setupGracefulShutdown(listener, nitroApp) {
|
|
const shutdownConfig = getGracefulShutdownConfig();
|
|
if (shutdownConfig.disabled) {
|
|
return;
|
|
}
|
|
gracefulShutdown(listener, {
|
|
signals: shutdownConfig.signals.join(" "),
|
|
timeout: shutdownConfig.timeout,
|
|
forceExit: shutdownConfig.forceExit,
|
|
onShutdown: async () => {
|
|
await new Promise((resolve) => {
|
|
const timeout = setTimeout(() => {
|
|
console.warn("Graceful shutdown timeout, force exiting...");
|
|
resolve();
|
|
}, shutdownConfig.timeout);
|
|
nitroApp.hooks.callHook("close").catch((error) => {
|
|
console.error(error);
|
|
}).finally(() => {
|
|
clearTimeout(timeout);
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}
|