X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Futils%2FConfiguration.ts;h=99519b7da3086ba9883e212ced852e3fbfbccff5;hb=85f78bc091168613cf4a82d3655313796d540d06;hp=e27ec1276539a2d7b32decec68ff9f3e6a87e39e;hpb=a4624c96a6c159b4885f5d0baaf592ceec0bab30;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/Configuration.ts b/src/utils/Configuration.ts index e27ec127..99519b7d 100644 --- a/src/utils/Configuration.ts +++ b/src/utils/Configuration.ts @@ -1,9 +1,13 @@ import ConfigurationData, { StationTemplateURL } from '../types/ConfigurationData'; +import Bootstrap from '../charging-station/Bootstrap'; 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; static getStatisticsDisplayInterval(): number { @@ -105,11 +109,23 @@ 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; + await Bootstrap.getInstance().restart(); + }); + } + private static objectHasOwnProperty(object: any, property: string): boolean { return Object.prototype.hasOwnProperty.call(object, property) as boolean; }