import {
ApplicationProtocol,
type ConfigurationData,
+ ConfigurationSection,
FileType,
type LogConfiguration,
type StationTemplateUrl,
} from '../types';
import { WorkerConstants, WorkerProcessType } from '../worker';
-enum ConfigurationSection {
- log = 'log',
- performanceStorage = 'performanceStorage',
- worker = 'worker',
- uiServer = 'uiServer',
-}
-
export class Configuration {
private static configurationFile = join(
dirname(fileURLToPath(import.meta.url)),
private static configurationSectionCache = new Map<
ConfigurationSection,
LogConfiguration | StorageConfiguration | WorkerConfiguration | UIServerConfiguration
- >();
+ >([
+ [ConfigurationSection.log, Configuration.buildLogSection()],
+ [ConfigurationSection.performanceStorage, Configuration.buildPerformanceStorageSection()],
+ [ConfigurationSection.worker, Configuration.buildWorkerSection()],
+ [ConfigurationSection.uiServer, Configuration.buildUIServerSection()],
+ ]);
private static configurationChangeCallback: () => Promise<void>;
Configuration.configurationChangeCallback = cb;
}
- public static getUIServer(): UIServerConfiguration {
+ public static getConfigurationSection<T>(sectionName: ConfigurationSection): T {
+ return Configuration.configurationSectionCache.get(sectionName) as T;
+ }
+
+ public static getAutoReconnectMaxRetries(): number | undefined {
+ Configuration.warnDeprecatedConfigurationKey(
+ 'autoReconnectTimeout',
+ undefined,
+ "Use 'ConnectionTimeOut' OCPP parameter in charging station template instead",
+ );
+ Configuration.warnDeprecatedConfigurationKey(
+ 'connectionTimeout',
+ undefined,
+ "Use 'ConnectionTimeOut' OCPP parameter in charging station template instead",
+ );
+ Configuration.warnDeprecatedConfigurationKey(
+ 'autoReconnectMaxRetries',
+ undefined,
+ 'Use it in charging station template instead',
+ );
+ if (hasOwnProp(Configuration.getConfigurationData(), 'autoReconnectMaxRetries')) {
+ return Configuration.getConfigurationData()?.autoReconnectMaxRetries;
+ }
+ }
+
+ public static getStationTemplateUrls(): StationTemplateUrl[] | undefined {
+ Configuration.warnDeprecatedConfigurationKey(
+ 'stationTemplateURLs',
+ undefined,
+ "Use 'stationTemplateUrls' instead",
+ );
+ // eslint-disable-next-line @typescript-eslint/dot-notation
+ !isUndefined(Configuration.getConfigurationData()!['stationTemplateURLs']) &&
+ (Configuration.getConfigurationData()!.stationTemplateUrls =
+ Configuration.getConfigurationData()![
+ // eslint-disable-next-line @typescript-eslint/dot-notation
+ 'stationTemplateURLs'
+ ] as StationTemplateUrl[]);
+ Configuration.getConfigurationData()!.stationTemplateUrls.forEach(
+ (stationTemplateUrl: StationTemplateUrl) => {
+ // eslint-disable-next-line @typescript-eslint/dot-notation
+ if (!isUndefined(stationTemplateUrl['numberOfStation'])) {
+ console.error(
+ `${chalk.green(Configuration.logPrefix())} ${chalk.red(
+ `Deprecated configuration key 'numberOfStation' usage for template file '${stationTemplateUrl.file}' in 'stationTemplateUrls'. Use 'numberOfStations' instead`,
+ )}`,
+ );
+ }
+ },
+ );
+ return Configuration.getConfigurationData()?.stationTemplateUrls;
+ }
+
+ public static workerPoolInUse(): boolean {
+ return [WorkerProcessType.dynamicPool, WorkerProcessType.staticPool].includes(
+ Configuration.buildWorkerSection().processType!,
+ );
+ }
+
+ public static workerDynamicPoolInUse(): boolean {
+ return Configuration.buildWorkerSection().processType === WorkerProcessType.dynamicPool;
+ }
+
+ public static getSupervisionUrls(): string | string[] | undefined {
+ Configuration.warnDeprecatedConfigurationKey(
+ 'supervisionURLs',
+ undefined,
+ "Use 'supervisionUrls' instead",
+ );
+ // eslint-disable-next-line @typescript-eslint/dot-notation
+ if (!isUndefined(Configuration.getConfigurationData()!['supervisionURLs'])) {
+ Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
+ // eslint-disable-next-line @typescript-eslint/dot-notation
+ 'supervisionURLs'
+ ] as string | string[];
+ }
+ return Configuration.getConfigurationData()?.supervisionUrls;
+ }
+
+ public static getSupervisionUrlDistribution(): SupervisionUrlDistribution | undefined {
+ Configuration.warnDeprecatedConfigurationKey(
+ 'distributeStationToTenantEqually',
+ undefined,
+ "Use 'supervisionUrlDistribution' instead",
+ );
+ Configuration.warnDeprecatedConfigurationKey(
+ 'distributeStationsToTenantsEqually',
+ undefined,
+ "Use 'supervisionUrlDistribution' instead",
+ );
+ return hasOwnProp(Configuration.getConfigurationData(), 'supervisionUrlDistribution')
+ ? Configuration.getConfigurationData()?.supervisionUrlDistribution
+ : SupervisionUrlDistribution.ROUND_ROBIN;
+ }
+
+ private static buildUIServerSection(): UIServerConfiguration {
if (hasOwnProp(Configuration.getConfigurationData(), 'uiWebSocketServer')) {
console.error(
`${chalk.green(Configuration.logPrefix())} ${chalk.red(
delete uiServerConfiguration.options?.host;
uiServerConfiguration.options!.port = parseInt(process.env.PORT!);
}
- return Configuration.getConfigurationSection<UIServerConfiguration>(
- ConfigurationSection.uiServer,
- uiServerConfiguration,
- );
+ return uiServerConfiguration;
}
- public static getPerformanceStorage(): StorageConfiguration {
+ private static buildPerformanceStorageSection(): StorageConfiguration {
Configuration.warnDeprecatedConfigurationKey(
'URI',
ConfigurationSection.performanceStorage,
}),
};
}
- return Configuration.getConfigurationSection<StorageConfiguration>(
- ConfigurationSection.performanceStorage,
- storageConfiguration,
- );
+ return storageConfiguration;
}
- public static getAutoReconnectMaxRetries(): number | undefined {
- Configuration.warnDeprecatedConfigurationKey(
- 'autoReconnectTimeout',
- undefined,
- "Use 'ConnectionTimeOut' OCPP parameter in charging station template instead",
- );
- Configuration.warnDeprecatedConfigurationKey(
- 'connectionTimeout',
- undefined,
- "Use 'ConnectionTimeOut' OCPP parameter in charging station template instead",
- );
- Configuration.warnDeprecatedConfigurationKey(
- 'autoReconnectMaxRetries',
- undefined,
- 'Use it in charging station template instead',
- );
- if (hasOwnProp(Configuration.getConfigurationData(), 'autoReconnectMaxRetries')) {
- return Configuration.getConfigurationData()?.autoReconnectMaxRetries;
- }
- }
-
- public static getStationTemplateUrls(): StationTemplateUrl[] | undefined {
- Configuration.warnDeprecatedConfigurationKey(
- 'stationTemplateURLs',
- undefined,
- "Use 'stationTemplateUrls' instead",
- );
- // eslint-disable-next-line @typescript-eslint/dot-notation
- !isUndefined(Configuration.getConfigurationData()!['stationTemplateURLs']) &&
- (Configuration.getConfigurationData()!.stationTemplateUrls =
- Configuration.getConfigurationData()![
- // eslint-disable-next-line @typescript-eslint/dot-notation
- 'stationTemplateURLs'
- ] as StationTemplateUrl[]);
- Configuration.getConfigurationData()!.stationTemplateUrls.forEach(
- (stationTemplateUrl: StationTemplateUrl) => {
- // eslint-disable-next-line @typescript-eslint/dot-notation
- if (!isUndefined(stationTemplateUrl['numberOfStation'])) {
- console.error(
- `${chalk.green(Configuration.logPrefix())} ${chalk.red(
- `Deprecated configuration key 'numberOfStation' usage for template file '${stationTemplateUrl.file}' in 'stationTemplateUrls'. Use 'numberOfStations' instead`,
- )}`,
- );
- }
- },
- );
- return Configuration.getConfigurationData()?.stationTemplateUrls;
- }
-
- public static getLog(): LogConfiguration {
+ private static buildLogSection(): LogConfiguration {
Configuration.warnDeprecatedConfigurationKey(
'logEnabled',
undefined,
...(hasOwnProp(Configuration.getConfigurationData(), ConfigurationSection.log) &&
Configuration.getConfigurationData()?.log),
};
- return Configuration.getConfigurationSection<LogConfiguration>(
- ConfigurationSection.log,
- logConfiguration,
- );
+ return logConfiguration;
}
- public static getWorker(): WorkerConfiguration {
+ private static buildWorkerSection(): WorkerConfiguration {
Configuration.warnDeprecatedConfigurationKey(
'useWorkerPool',
undefined,
`Invalid worker process type '${workerConfiguration.processType}' defined in configuration`,
);
}
- return Configuration.getConfigurationSection<WorkerConfiguration>(
- ConfigurationSection.worker,
- workerConfiguration,
- );
- }
-
- public static workerPoolInUse(): boolean {
- return [WorkerProcessType.dynamicPool, WorkerProcessType.staticPool].includes(
- Configuration.getWorker().processType!,
- );
- }
-
- public static workerDynamicPoolInUse(): boolean {
- return Configuration.getWorker().processType === WorkerProcessType.dynamicPool;
- }
-
- public static getSupervisionUrls(): string | string[] | undefined {
- Configuration.warnDeprecatedConfigurationKey(
- 'supervisionURLs',
- undefined,
- "Use 'supervisionUrls' instead",
- );
- // eslint-disable-next-line @typescript-eslint/dot-notation
- if (!isUndefined(Configuration.getConfigurationData()!['supervisionURLs'])) {
- Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
- // eslint-disable-next-line @typescript-eslint/dot-notation
- 'supervisionURLs'
- ] as string | string[];
- }
- return Configuration.getConfigurationData()?.supervisionUrls;
- }
-
- public static getSupervisionUrlDistribution(): SupervisionUrlDistribution | undefined {
- Configuration.warnDeprecatedConfigurationKey(
- 'distributeStationToTenantEqually',
- undefined,
- "Use 'supervisionUrlDistribution' instead",
- );
- Configuration.warnDeprecatedConfigurationKey(
- 'distributeStationsToTenantsEqually',
- undefined,
- "Use 'supervisionUrlDistribution' instead",
- );
- return hasOwnProp(Configuration.getConfigurationData(), 'supervisionUrlDistribution')
- ? Configuration.getConfigurationData()?.supervisionUrlDistribution
- : SupervisionUrlDistribution.ROUND_ROBIN;
+ return workerConfiguration;
}
private static logPrefix = (): string => {
}
}
- private static getConfigurationSection<T>(
- sectionName: ConfigurationSection,
- sectionConfiguration?: T,
- ): T {
- if (!Configuration.configurationSectionCache.has(sectionName) && sectionConfiguration) {
- Configuration.configurationSectionCache.set(sectionName, sectionConfiguration);
- }
- return Configuration.configurationSectionCache.get(sectionName) as T;
- }
-
private static getConfigurationData(): ConfigurationData | null {
if (!Configuration.configurationData) {
try {