UNPKG

2.37 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11Object.defineProperty(exports, "__esModule", { value: true });
12const logger_1 = require("./logger");
13function registerGracefulShutdown(closeHandlers = [], { logger = {
14 info: logger_1.default.info.bind(logger_1.default),
15 error: logger_1.default.error.bind(logger_1.default),
16}, timeout = 30, } = {}) {
17 // gracefully shutdown on SIGTERM or SIGINT signal
18 process.once('SIGTERM', gracefulShutDown.bind(this, 'SIGTERM'));
19 process.once('SIGINT', gracefulShutDown.bind(this, 'SIGINT'));
20 function gracefulShutDown(signal = 'SIGTERM') {
21 return __awaiter(this, void 0, void 0, function* () {
22 logger.info(`got kill signal (${signal}), starting graceful shut down`);
23 // shut down anyway after `timeout` seconds
24 if (timeout) {
25 setTimeout(() => {
26 logger.error('could not finish in time, forcefully exiting');
27 process.exit(1);
28 }, timeout * 1000).unref();
29 }
30 // release resources
31 let isError = false;
32 for (const handler of closeHandlers) {
33 try {
34 yield Promise.resolve(handler());
35 }
36 catch (err) {
37 logger.error(err, 'error happened during graceful shut down');
38 isError = true;
39 }
40 }
41 if (isError) {
42 process.exit(1);
43 }
44 logger.info('graceful shut down finished');
45 process.kill(process.pid, signal);
46 });
47 }
48}
49exports.default = registerGracefulShutdown;
50//# sourceMappingURL=graceful-shutdown.js.map
\No newline at end of file