index.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { Pool } from 'mysql';
  2. import { Logger, LogLevel } from '../../common/util/logger.class';
  3. import { ControllerPool } from './ctrl/controller-pool.interface';
  4. import { HttpCheckController } from './ctrl/http-check-controller.class';
  5. import { MariaDBDatabase } from './ctrl/mariadb-database.class';
  6. import { MariaDBPoolFactory } from './ctrl/mariadb-poolfactory.class';
  7. import { ServerConnector } from './ctrl/server-connector.class';
  8. import { Webserver } from './webserver.class';
  9. import { Timer } from './timer.class';
  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. let db: MariaDBDatabase;
  17. let connectionPool: Pool;
  18. (async () => {
  19. connectionPool = await MariaDBPoolFactory.createConnectionPool();
  20. db = new MariaDBDatabase(connectionPool);
  21. await db.open();
  22. pool = {
  23. connectionPool,
  24. serverConnector: new ServerConnector(connectionPool),
  25. httpChecks: new HttpCheckController(connectionPool)
  26. };
  27. Timer.instance.start();
  28. Timer.instance.subscribe(7 * 24 * 60 * 60, db.cleanupData.bind(db));
  29. db.cleanupData();
  30. new Webserver(Number(process.env.WEB_PORT ?? '80'), pool);
  31. })();
  32. async function exitGracefully(...args: any[]) {
  33. Logger.info(`[EXITING] Graceful exit, received ${JSON.stringify(args)}`);
  34. try {
  35. Logger.info(`[EXITING] Tear down Main Database Controller ...`);
  36. if (db) await db.close();
  37. Logger.info(`[EXITING] Tear down MariaDB Connection Pool ...`);
  38. if (connectionPool) await MariaDBPoolFactory.end(connectionPool);
  39. } catch (err) {
  40. Logger.error(`[ERROR] Tear down sequence failed:`, err);
  41. process.exit(2);
  42. }
  43. Logger.info(`[EXITING] Tear down sequence succeeded. exiting.`);
  44. process.exit(0);
  45. }