X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FConfiguration.ts;h=b564cd6252ea4366993f24bb5e9961132bd9ad4d;hb=6e2f954cbb505ad26c61d950e29685d5d49d5f00;hp=f03e0472570ec0af65a1a0dd070d57a8131fd911;hpb=c7db8ecb3b71cbc4f6e0458c63c0aee37d720acf;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/Configuration.ts b/src/utils/Configuration.ts index f03e0472..b564cd62 100644 --- a/src/utils/Configuration.ts +++ b/src/utils/Configuration.ts @@ -20,7 +20,13 @@ import { type UIServerConfiguration, type WorkerConfiguration, } from '../types'; -import { WorkerConstants, WorkerProcessType } from '../worker'; +import { + DEFAULT_ELEMENT_START_DELAY, + DEFAULT_POOL_MAX_SIZE, + DEFAULT_POOL_MIN_SIZE, + DEFAULT_WORKER_START_DELAY, + WorkerProcessType, +} from '../worker'; type ConfigurationSectionType = | LogConfiguration @@ -47,7 +53,7 @@ export class Configuration { [ConfigurationSection.uiServer, Configuration.buildUIServerSection()], ]); - private static configurationChangeCallback: () => Promise; + private static configurationChangeCallback?: () => Promise; private constructor() { // This is intentional @@ -60,33 +66,8 @@ export class Configuration { public static getConfigurationSection( sectionName: ConfigurationSection, ): T { - if (!Configuration.configurationSectionCache.has(sectionName)) { - switch (sectionName) { - case ConfigurationSection.log: - Configuration.configurationSectionCache.set(sectionName, Configuration.buildLogSection()); - break; - case ConfigurationSection.performanceStorage: - Configuration.configurationSectionCache.set( - sectionName, - Configuration.buildPerformanceStorageSection(), - ); - break; - case ConfigurationSection.worker: - Configuration.configurationSectionCache.set( - sectionName, - Configuration.buildWorkerSection(), - ); - break; - case ConfigurationSection.uiServer: - Configuration.configurationSectionCache.set( - sectionName, - Configuration.buildUIServerSection(), - ); - break; - default: - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - throw new Error(`Unknown configuration section '${sectionName}'`); - } + if (!Configuration.isConfigurationSectionCached(sectionName)) { + Configuration.cacheConfigurationSection(sectionName); } return Configuration.configurationSectionCache.get(sectionName) as T; } @@ -188,6 +169,39 @@ export class Configuration { return Configuration.buildWorkerSection().processType === WorkerProcessType.dynamicPool; } + private static isConfigurationSectionCached(sectionName: ConfigurationSection): boolean { + return Configuration.configurationSectionCache.has(sectionName); + } + + private static cacheConfigurationSection(sectionName: ConfigurationSection): void { + switch (sectionName) { + case ConfigurationSection.log: + Configuration.configurationSectionCache.set(sectionName, Configuration.buildLogSection()); + break; + case ConfigurationSection.performanceStorage: + Configuration.configurationSectionCache.set( + sectionName, + Configuration.buildPerformanceStorageSection(), + ); + break; + case ConfigurationSection.worker: + Configuration.configurationSectionCache.set( + sectionName, + Configuration.buildWorkerSection(), + ); + break; + case ConfigurationSection.uiServer: + Configuration.configurationSectionCache.set( + sectionName, + Configuration.buildUIServerSection(), + ); + break; + default: + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + throw new Error(`Unknown configuration section '${sectionName}'`); + } + } + private static buildUIServerSection(): UIServerConfiguration { if (hasOwnProp(Configuration.getConfigurationData(), 'uiWebSocketServer')) { console.error( @@ -393,11 +407,11 @@ export class Configuration { ); const defaultWorkerConfiguration: WorkerConfiguration = { processType: WorkerProcessType.workerSet, - startDelay: WorkerConstants.DEFAULT_WORKER_START_DELAY, + startDelay: DEFAULT_WORKER_START_DELAY, elementsPerWorker: 'auto', - elementStartDelay: WorkerConstants.DEFAULT_ELEMENT_START_DELAY, - poolMinSize: WorkerConstants.DEFAULT_POOL_MIN_SIZE, - poolMaxSize: WorkerConstants.DEFAULT_POOL_MAX_SIZE, + elementStartDelay: DEFAULT_ELEMENT_START_DELAY, + poolMinSize: DEFAULT_POOL_MIN_SIZE, + poolMaxSize: DEFAULT_POOL_MAX_SIZE, }; hasOwnProp(Configuration.getConfigurationData(), 'workerPoolStrategy') && delete Configuration.getConfigurationData()?.workerPoolStrategy; @@ -509,7 +523,7 @@ export class Configuration { delete Configuration.configurationData; Configuration.configurationSectionCache.clear(); if (!isUndefined(Configuration.configurationChangeCallback)) { - Configuration.configurationChangeCallback().catch((error) => { + Configuration.configurationChangeCallback!().catch((error) => { throw typeof error === 'string' ? new Error(error) : error; }); } @@ -564,7 +578,7 @@ export class Configuration { `${Constants.DEFAULT_PERFORMANCE_DIRECTORY}/${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db`, ); default: - throw new Error(`Performance storage URI is mandatory with storage type '${storageType}'`); + throw new Error(`Unsupported storage type '${storageType}'`); } }