| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import dotenv from 'dotenv';
- import { Logger, LogLevel } from '../../common/util/logger.class';
- import { ControllerPool } from './ctrl/controller-pool.interface';
- import { Database } from './ctrl/database.class';
- import { HttpCheckController } from './ctrl/http-check-controller.class';
- import { ServerConnector } from './ctrl/server-connector.class';
- import { Webserver } from './webserver.class';
- import { Timer } from './timer.class';
- 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);
- pool = {
- db,
- serverConnector: new ServerConnector(),
- httpChecks: new HttpCheckController()
- };
- 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);
- }
|