index.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import dotenv from 'dotenv';
  2. import { Logger, LogLevel } from '../../common/util/logger.class';
  3. import { ControllerPool } from './ctrl/controller-pool.interface';
  4. import { Database } from './ctrl/database.class';
  5. import { HttpCheckController } from './ctrl/http-check-controller.class';
  6. import { ServerConnector } from './ctrl/server-connector.class';
  7. import { Webserver } from './webserver.class';
  8. import { Timer } from './timer.class';
  9. dotenv.config();
  10. const LOG_LEVEL: LogLevel = (process.env.LOG_LEVEL as LogLevel) || 'INFO';
  11. Logger.logLevel = LOG_LEVEL;
  12. process.on('SIGABRT', exitGracefully);
  13. process.on('SIGQUIT', exitGracefully);
  14. process.on('SIGTERM', exitGracefully);
  15. let pool: ControllerPool;
  16. (async () => {
  17. const db = new Database();
  18. await db.open(true);
  19. pool = {
  20. db,
  21. serverConnector: new ServerConnector(),
  22. httpChecks: new HttpCheckController()
  23. };
  24. Timer.instance.start();
  25. new Webserver(Number(process.env.WEB_PORT ?? '80'), pool);
  26. })();
  27. async function exitGracefully(...args: any[]) {
  28. Logger.info(`[EXITING] Graceful exit, received ${JSON.stringify(args)}`);
  29. if (pool) {
  30. try {
  31. Logger.info(`[EXITING] Tear down ServerConnector ...`);
  32. await pool.serverConnector.close();
  33. Logger.info(`[EXITING] Tear down HttpCheckController ...`);
  34. await pool.httpChecks.close();
  35. Logger.info(`[EXITING] Tear down Main Database Controller ...`);
  36. await pool.serverConnector.close();
  37. } catch (err) {
  38. Logger.error(`[ERROR] Tear down sequence failed:`, err);
  39. process.exit(2);
  40. }
  41. }
  42. process.exit(0);
  43. }