X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FConfiguration.ts;h=552fab21dc21bb764b179a7ca49078c2ae4214f4;hb=0d7b35c4bb09627e56413d39ae6b2da56b6dcbd2;hp=760695253531f6c64863315287eb36063895b5a7;hpb=963ee397d378bffb9d41154a38bd6a83e4ac0fb8;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/Configuration.ts b/src/utils/Configuration.ts index 76069525..552fab21 100644 --- a/src/utils/Configuration.ts +++ b/src/utils/Configuration.ts @@ -1,9 +1,18 @@ import ConfigurationData, { StationTemplateURL } from '../types/ConfigurationData'; +import { WorkerProcessType } from '../types/Worker'; import fs from 'fs'; +import path from 'path'; export default class Configuration { + private static configurationFilePath = path.join(path.resolve(__dirname, '../'), 'assets', 'config.json'); + private static configurationFileWatcher: fs.FSWatcher; private static configuration: ConfigurationData; + private static configurationChangeCallback: () => Promise; + + static setConfigurationChangeCallback(cb: () => Promise): void { + Configuration.configurationChangeCallback = cb; + } static getStatisticsDisplayInterval(): number { // Read conf @@ -37,12 +46,22 @@ export default class Configuration { return Configuration.getConfig().stationTemplateURLs; } - static useWorkerPool(): boolean { - return Configuration.getConfig().useWorkerPool; + static getWorkerProcess(): WorkerProcessType { + Configuration.deprecateConfigurationKey('useWorkerPool;', 'Use \'workerProcess\' to define the type of worker process to use instead'); + return Configuration.objectHasOwnProperty(Configuration.getConfig(), 'workerProcess') ? Configuration.getConfig().workerProcess : WorkerProcessType.WORKER_SET; + } + + static getWorkerPoolMinSize(): number { + return Configuration.objectHasOwnProperty(Configuration.getConfig(), 'workerPoolMinSize') ? Configuration.getConfig().workerPoolMinSize : 4; + } + + static getWorkerPoolMaxSize(): number { + Configuration.deprecateConfigurationKey('workerPoolSize;', 'Use \'workerPoolMaxSize\' instead'); + return Configuration.objectHasOwnProperty(Configuration.getConfig(), 'workerPoolMaxSize') ? Configuration.getConfig().workerPoolMaxSize : 16; } - static getWorkerPoolSize(): number { - return Configuration.getConfig().workerPoolSize; + static getChargingStationsPerWorker(): number { + return Configuration.objectHasOwnProperty(Configuration.getConfig(), 'chargingStationsPerWorker') ? Configuration.getConfig().chargingStationsPerWorker : 1; } static getLogConsole(): boolean { @@ -94,13 +113,27 @@ export default class Configuration { // Read the config file private static getConfig(): ConfigurationData { if (!Configuration.configuration) { - Configuration.configuration = JSON.parse(fs.readFileSync('./src/assets/config.json', 'utf8')) as ConfigurationData; + Configuration.configuration = JSON.parse(fs.readFileSync(Configuration.configurationFilePath, 'utf8')) as ConfigurationData; + if (!Configuration.configurationFileWatcher) { + Configuration.configurationFileWatcher = Configuration.getConfigurationFileWatcher(); + } } return Configuration.configuration; } + private static getConfigurationFileWatcher(): fs.FSWatcher { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + return fs.watch(Configuration.configurationFilePath).on('change', async (e): Promise => { + // Nullify to force configuration file reading + Configuration.configuration = null; + if (!Configuration.isUndefined(Configuration.configurationChangeCallback)) { + await Configuration.configurationChangeCallback(); + } + }); + } + private static objectHasOwnProperty(object: any, property: string): boolean { - return Object.prototype.hasOwnProperty.call(object, property); + return Object.prototype.hasOwnProperty.call(object, property) as boolean; } private static isUndefined(obj: any): boolean {