|
|
@@ -14,11 +14,16 @@ dotenv.config();
|
|
|
const LOG_LEVEL: LogLevel = (process.env.LOG_LEVEL as LogLevel) || 'INFO';
|
|
|
Logger.logLevel = LOG_LEVEL;
|
|
|
|
|
|
+process.on('SIGABRT', exitGracefully);
|
|
|
+process.on('SIGQUIT', exitGracefully);
|
|
|
+process.on('SIGTERM', exitGracefully);
|
|
|
+
|
|
|
+let pool: ControllerPool;
|
|
|
(async () => {
|
|
|
const db = new Database();
|
|
|
await db.open(true);
|
|
|
|
|
|
- const pool: ControllerPool = {
|
|
|
+ pool = {
|
|
|
db,
|
|
|
serverConnector: new ServerConnector(),
|
|
|
httpChecks: new HttpCheckController()
|
|
|
@@ -27,3 +32,23 @@ Logger.logLevel = LOG_LEVEL;
|
|
|
Timer.instance.start();
|
|
|
new Webserver(Number(process.env.WEB_PORT ?? '80'), pool);
|
|
|
})();
|
|
|
+
|
|
|
+async function exitGracefully(...args: any[]) {
|
|
|
+ Logger.info(`[EXITING] Graceful exit, received ${JSON.stringify(args)}`);
|
|
|
+ if (pool) {
|
|
|
+ try {
|
|
|
+ Logger.info(`[EXITING] Tear down ServerConnector ...`);
|
|
|
+ await pool.serverConnector.close();
|
|
|
+
|
|
|
+ Logger.info(`[EXITING] Tear down HttpCheckController ...`);
|
|
|
+ await pool.httpChecks.close();
|
|
|
+
|
|
|
+ Logger.info(`[EXITING] Tear down Main Database Controller ...`);
|
|
|
+ await pool.serverConnector.close();
|
|
|
+ } catch (err) {
|
|
|
+ Logger.error(`[ERROR] Tear down sequence failed:`, err);
|
|
|
+ process.exit(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ process.exit(0);
|
|
|
+}
|