index.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import fs from 'fs';
  2. import fsp from 'fs/promises';
  3. import path from 'path';
  4. import moment from 'moment';
  5. import { Pool } from 'mysql';
  6. import { Logger, LogLevel } from '../../common/util/logger.class';
  7. import { ControllerPool } from './ctrl/controller-pool.interface';
  8. import { HttpCheckController } from './ctrl/http-check-controller.class';
  9. import { MariaDBDatabase } from './ctrl/mariadb-database.class';
  10. import { MariaDBImporter } from './ctrl/mariadb-importer.class';
  11. import { MariaDBPoolFactory } from './ctrl/mariadb-poolfactory.class';
  12. import { ServerConnector } from './ctrl/server-connector.class';
  13. import { Webserver } from './webserver.class';
  14. import { Timer } from './timer.class';
  15. const LOG_LEVEL: LogLevel = (process.env.LOG_LEVEL as LogLevel) || 'INFO';
  16. Logger.logLevel = LOG_LEVEL;
  17. process.on('SIGABRT', exitGracefully);
  18. process.on('SIGQUIT', exitGracefully);
  19. process.on('SIGTERM', exitGracefully);
  20. let pool: ControllerPool;
  21. let db: MariaDBDatabase;
  22. let mig: MariaDBImporter;
  23. let connectionPool: Pool;
  24. (async () => {
  25. connectionPool = await MariaDBPoolFactory.createConnectionPool();
  26. const sqliteDir = path.resolve(process.cwd(), process.env.DATA_DIR || 'data');
  27. const doneFile = path.resolve(sqliteDir, 'import_done.txt');
  28. if (fs.existsSync(sqliteDir) && !fs.existsSync(doneFile)) {
  29. mig = new MariaDBImporter(connectionPool);
  30. await mig.connect();
  31. await mig.runImport();
  32. await fsp.writeFile(doneFile, moment().format('YYYY-MM-DD[T]HH:mm:ss.SSSZZ'), { encoding: 'utf-8' });
  33. }
  34. db = new MariaDBDatabase(connectionPool);
  35. await db.open();
  36. pool = {
  37. connectionPool,
  38. serverConnector: new ServerConnector(connectionPool),
  39. httpChecks: new HttpCheckController(connectionPool)
  40. };
  41. Timer.instance.start();
  42. new Webserver(Number(process.env.WEB_PORT ?? '80'), pool);
  43. })();
  44. async function exitGracefully(...args: any[]) {
  45. Logger.info(`[EXITING] Graceful exit, received ${JSON.stringify(args)}`);
  46. try {
  47. if (mig) {
  48. Logger.info(`[EXITING] Tear down MariaDBImporter instance ...`);
  49. await mig.close();
  50. }
  51. Logger.info(`[EXITING] Tear down Main Database Controller ...`);
  52. if (db) await db.close();
  53. Logger.info(`[EXITING] Tear down MariaDB Connection Pool ...`);
  54. if (connectionPool) await MariaDBPoolFactory.end(connectionPool);
  55. } catch (err) {
  56. Logger.error(`[ERROR] Tear down sequence failed:`, err);
  57. process.exit(2);
  58. }
  59. Logger.info(`[EXITING] Tear down sequence succeeded. exiting.`);
  60. process.exit(0);
  61. }