From: Jérôme Benoit Date: Fri, 10 Nov 2023 13:00:40 +0000 (+0100) Subject: feat: reenable configuration files change watchers X-Git-Tag: v1.2.24~23 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=1f8f633225a3594f1a7a31f76dd711f507eda145;p=e-mobility-charging-stations-simulator.git feat: reenable configuration files change watchers Signed-off-by: Jérôme Benoit --- diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 575293e8..3ecf33d2 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -151,7 +151,7 @@ import { roundTo, secureRandom, sleep, - // watchJsonFile, + watchJsonFile, } from '../utils'; export class ChargingStation extends EventEmitter { @@ -677,55 +677,44 @@ export class ChargingStation extends EventEmitter { } this.openWSConnection(); // Monitor charging station template file - // FIXME: Disabled until the spurious configuration file change detection is identified - // this.templateFileWatcher = watchJsonFile( - // this.templateFile, - // FileType.ChargingStationTemplate, - // this.logPrefix(), - // undefined, - // (event, filename): void => { - // if (isNotEmptyString(filename) && event === 'change') { - // try { - // logger.debug( - // `${this.logPrefix()} ${FileType.ChargingStationTemplate} ${ - // this.templateFile - // } file have changed, reload`, - // ); - // this.sharedLRUCache.deleteChargingStationTemplate(this.templateFileHash); - // // Initialize - // this.initialize(); - // this.idTagsCache.deleteIdTags(getIdTagsFile(this.stationInfo)!); - // // Restart the ATG - // this.stopAutomaticTransactionGenerator() - // .then(() => { - // delete this.automaticTransactionGeneratorConfiguration; - // if (this.getAutomaticTransactionGeneratorConfiguration()?.enable === true) { - // this.startAutomaticTransactionGenerator(); - // } - // }) - // .catch((err) => - // logger.error( - // `${this.logPrefix()} failed to stop ATG at ${ - // FileType.ChargingStationTemplate - // } reload`, - // err, - // ), - // ); - // if (this.getEnableStatistics() === true) { - // this.performanceStatistics?.restart(); - // } else { - // this.performanceStatistics?.stop(); - // } - // // FIXME?: restart heartbeat and WebSocket ping when their interval values have changed - // } catch (error) { - // logger.error( - // `${this.logPrefix()} ${FileType.ChargingStationTemplate} file monitoring error:`, - // error, - // ); - // } - // } - // }, - // ); + this.templateFileWatcher = watchJsonFile( + this.templateFile, + FileType.ChargingStationTemplate, + this.logPrefix(), + undefined, + (event, filename): void => { + if (isNotEmptyString(filename) && event === 'change') { + try { + logger.debug( + `${this.logPrefix()} ${FileType.ChargingStationTemplate} ${ + this.templateFile + } file have changed, reload`, + ); + this.sharedLRUCache.deleteChargingStationTemplate(this.templateFileHash); + // Initialize + this.initialize(); + this.idTagsCache.deleteIdTags(getIdTagsFile(this.stationInfo)!); + // Restart the ATG + this.stopAutomaticTransactionGenerator(); + delete this.automaticTransactionGeneratorConfiguration; + if (this.getAutomaticTransactionGeneratorConfiguration()?.enable === true) { + this.startAutomaticTransactionGenerator(); + } + if (this.getEnableStatistics() === true) { + this.performanceStatistics?.restart(); + } else { + this.performanceStatistics?.stop(); + } + // FIXME?: restart heartbeat and WebSocket ping when their interval values have changed + } catch (error) { + logger.error( + `${this.logPrefix()} ${FileType.ChargingStationTemplate} file monitoring error:`, + error, + ); + } + } + }, + ); this.started = true; this.emit(ChargingStationEvents.started); this.starting = false; diff --git a/src/charging-station/IdTagsCache.ts b/src/charging-station/IdTagsCache.ts index 5c0a454a..5e0ab0b8 100644 --- a/src/charging-station/IdTagsCache.ts +++ b/src/charging-station/IdTagsCache.ts @@ -7,14 +7,14 @@ import { handleFileException, isNotEmptyString, logPrefix, - // logger, + logger, secureRandom, - // watchJsonFile, + watchJsonFile, } from '../utils'; interface IdTagsCacheValueType { idTags: string[]; - idTagsFileWatcher?: FSWatcher | undefined; + idTagsFileWatcher: FSWatcher | undefined; } export class IdTagsCache { @@ -123,34 +123,33 @@ export class IdTagsCache { private setIdTagsCache(file: string, idTags: string[]) { return this.idTagsCaches.set(file, { idTags, - // FIXME: Disabled until the spurious configuration file change detection is identified - // idTagsFileWatcher: watchJsonFile( - // file, - // FileType.Authorization, - // this.logPrefix(file), - // undefined, - // (event, filename) => { - // if (isNotEmptyString(filename) && event === 'change') { - // try { - // logger.debug( - // `${this.logPrefix(file)} ${FileType.Authorization} file have changed, reload`, - // ); - // this.deleteIdTagsCache(file); - // this.deleteIdTagsCacheIndexes(file); - // } catch (error) { - // handleFileException( - // file, - // FileType.Authorization, - // error as NodeJS.ErrnoException, - // this.logPrefix(file), - // { - // throwError: false, - // }, - // ); - // } - // } - // }, - // ), + idTagsFileWatcher: watchJsonFile( + file, + FileType.Authorization, + this.logPrefix(file), + undefined, + (event, filename) => { + if (isNotEmptyString(filename) && event === 'change') { + try { + logger.debug( + `${this.logPrefix(file)} ${FileType.Authorization} file have changed, reload`, + ); + this.deleteIdTagsCache(file); + this.deleteIdTagsCacheIndexes(file); + } catch (error) { + handleFileException( + file, + FileType.Authorization, + error as NodeJS.ErrnoException, + this.logPrefix(file), + { + throwError: false, + }, + ); + } + } + }, + ), }); } diff --git a/src/utils/Configuration.ts b/src/utils/Configuration.ts index ebf99c55..1f370480 100644 --- a/src/utils/Configuration.ts +++ b/src/utils/Configuration.ts @@ -529,10 +529,9 @@ export class Configuration { Configuration.configurationData = JSON.parse( readFileSync(Configuration.configurationFile, 'utf8'), ) as ConfigurationData; - // FIXME: Disabled until the spurious configuration file change detection is identified - // if (!Configuration.configurationFileWatcher) { - // Configuration.configurationFileWatcher = Configuration.getConfigurationFileWatcher(); - // } + if (!Configuration.configurationFileWatcher) { + Configuration.configurationFileWatcher = Configuration.getConfigurationFileWatcher(); + } } catch (error) { Configuration.handleFileException( Configuration.configurationFile,