import merge from 'just-merge';
import { WorkerChoiceStrategies } from 'poolifier';
-// import { Constants, FileUtils, Utils } from './internal';
import { Constants } from './Constants';
-import { FileUtils } from './FileUtils';
import { Utils } from './Utils';
import {
ApplicationProtocol,
export class Configuration {
private static configurationFile = path.join(
- path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../'),
+ path.dirname(fileURLToPath(import.meta.url)),
'assets',
'config.json'
);
// This is intentional
}
- static setConfigurationChangeCallback(cb: () => Promise<void>): void {
+ public static setConfigurationChangeCallback(cb: () => Promise<void>): void {
Configuration.configurationChangeCallback = cb;
}
- static getLogStatisticsInterval(): number | undefined {
+ public static getLogStatisticsInterval(): number | undefined {
Configuration.warnDeprecatedConfigurationKey(
'statisticsDisplayInterval',
undefined,
: Constants.DEFAULT_LOG_STATISTICS_INTERVAL;
}
- static getUIServer(): UIServerConfiguration {
+ public static getUIServer(): UIServerConfiguration {
if (Utils.hasOwnProp(Configuration.getConfig(), 'uiWebSocketServer')) {
console.error(
chalk`{green ${Configuration.logPrefix()}} {red Deprecated configuration section 'uiWebSocketServer' usage. Use 'uiServer' instead}`
return uiServerConfiguration;
}
- static getPerformanceStorage(): StorageConfiguration {
+ public static getPerformanceStorage(): StorageConfiguration {
Configuration.warnDeprecatedConfigurationKey('URI', 'performanceStorage', "Use 'uri' instead");
let storageConfiguration: StorageConfiguration = {
enabled: false,
storageConfiguration = {
...storageConfiguration,
...Configuration.getConfig()?.performanceStorage,
+ ...(Configuration.getConfig()?.performanceStorage?.type === StorageType.JSON_FILE &&
+ Configuration.getConfig()?.performanceStorage?.uri && {
+ uri: Configuration.buildPerformanceUriFilePath(
+ new URL(Configuration.getConfig()?.performanceStorage?.uri).pathname
+ ),
+ }),
};
}
return storageConfiguration;
}
- static getAutoReconnectMaxRetries(): number | undefined {
+ public static getAutoReconnectMaxRetries(): number | undefined {
Configuration.warnDeprecatedConfigurationKey(
'autoReconnectTimeout',
undefined,
}
}
- static getStationTemplateUrls(): StationTemplateUrl[] | undefined {
+ public static getStationTemplateUrls(): StationTemplateUrl[] | undefined {
Configuration.warnDeprecatedConfigurationKey(
'stationTemplateURLs',
undefined,
!Utils.isUndefined(Configuration.getConfig()['stationTemplateURLs']) &&
(Configuration.getConfig().stationTemplateUrls = Configuration.getConfig()[
'stationTemplateURLs'
- ] as unknown as StationTemplateUrl[]);
- Configuration.getConfig().stationTemplateUrls.forEach((stationUrl: StationTemplateUrl) => {
- if (!Utils.isUndefined(stationUrl['numberOfStation'])) {
- console.error(
- chalk`{green ${Configuration.logPrefix()}} {red Deprecated configuration key 'numberOfStation' usage for template file '${
- stationUrl.file
- }' in 'stationTemplateUrls'. Use 'numberOfStations' instead}`
- );
+ ] as StationTemplateUrl[]);
+ Configuration.getConfig().stationTemplateUrls.forEach(
+ (stationTemplateUrl: StationTemplateUrl) => {
+ if (!Utils.isUndefined(stationTemplateUrl['numberOfStation'])) {
+ console.error(
+ chalk`{green ${Configuration.logPrefix()}} {red Deprecated configuration key 'numberOfStation' usage for template file '${
+ stationTemplateUrl.file
+ }' in 'stationTemplateUrls'. Use 'numberOfStations' instead}`
+ );
+ }
}
- });
+ );
// Read conf
return Configuration.getConfig()?.stationTemplateUrls;
}
- static getWorker(): WorkerConfiguration {
+ public static getWorker(): WorkerConfiguration {
Configuration.warnDeprecatedConfigurationKey(
'useWorkerPool',
undefined,
return workerConfiguration;
}
- static getLogConsole(): boolean | undefined {
+ 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 getLogConsole(): boolean | undefined {
Configuration.warnDeprecatedConfigurationKey(
'consoleLog',
undefined,
: false;
}
- static getLogFormat(): string | undefined {
+ public static getLogFormat(): string | undefined {
return Utils.hasOwnProp(Configuration.getConfig(), 'logFormat')
? Configuration.getConfig()?.logFormat
: 'simple';
}
- static getLogRotate(): boolean | undefined {
+ public static getLogRotate(): boolean | undefined {
return Utils.hasOwnProp(Configuration.getConfig(), 'logRotate')
? Configuration.getConfig()?.logRotate
: true;
}
- static getLogMaxFiles(): number | string | false | undefined {
+ public static getLogMaxFiles(): number | string | false | undefined {
return (
Utils.hasOwnProp(Configuration.getConfig(), 'logMaxFiles') &&
Configuration.getConfig()?.logMaxFiles
);
}
- static getLogMaxSize(): number | string | false | undefined {
+ public static getLogMaxSize(): number | string | false | undefined {
return (
Utils.hasOwnProp(Configuration.getConfig(), 'logMaxFiles') &&
Configuration.getConfig()?.logMaxSize
);
}
- static getLogLevel(): string | undefined {
+ public static getLogLevel(): string | undefined {
return Utils.hasOwnProp(Configuration.getConfig(), 'logLevel')
? Configuration.getConfig()?.logLevel?.toLowerCase()
: 'info';
}
- static getLogFile(): string | undefined {
+ public static getLogFile(): string | undefined {
return Utils.hasOwnProp(Configuration.getConfig(), 'logFile')
? Configuration.getConfig()?.logFile
: 'combined.log';
}
- static getLogErrorFile(): string | undefined {
+ public static getLogErrorFile(): string | undefined {
Configuration.warnDeprecatedConfigurationKey(
'errorFile',
undefined,
: 'error.log';
}
- static getSupervisionUrls(): string | string[] | undefined {
+ public static getSupervisionUrls(): string | string[] | undefined {
Configuration.warnDeprecatedConfigurationKey(
'supervisionURLs',
undefined,
return Configuration.getConfig()?.supervisionUrls;
}
- static getSupervisionUrlDistribution(): SupervisionUrlDistribution | undefined {
+ public static getSupervisionUrlDistribution(): SupervisionUrlDistribution | undefined {
Configuration.warnDeprecatedConfigurationKey(
'distributeStationToTenantEqually',
undefined,
) {
console.error(
chalk`{green ${Configuration.logPrefix()}} {red Deprecated configuration key '${key}' usage in section '${sectionName}'${
- logMsgToAppend.trim().length > 0 && `. ${logMsgToAppend}`
+ logMsgToAppend.trim().length > 0 ? `. ${logMsgToAppend}` : ''
}}`
);
} else if (!Utils.isUndefined(Configuration.getConfig()[key])) {
console.error(
chalk`{green ${Configuration.logPrefix()}} {red Deprecated configuration key '${key}' usage${
- logMsgToAppend.trim().length > 0 && `. ${logMsgToAppend}`
+ logMsgToAppend.trim().length > 0 ? `. ${logMsgToAppend}` : ''
}}`
);
}
fs.readFileSync(Configuration.configurationFile, 'utf8')
) as ConfigurationData;
} catch (error) {
- FileUtils.handleFileException(
+ Configuration.handleFileException(
Configuration.configurationFile,
FileType.Configuration,
error as NodeJS.ErrnoException,
- Configuration.logPrefix(),
- { consoleOut: true }
+ Configuration.logPrefix()
);
}
if (!Configuration.configurationFileWatcher) {
}
});
} catch (error) {
- FileUtils.handleFileException(
+ Configuration.handleFileException(
Configuration.configurationFile,
FileType.Configuration,
error as NodeJS.ErrnoException,
- Configuration.logPrefix(),
- { consoleOut: true }
+ Configuration.logPrefix()
);
}
}
+ private static handleFileException(
+ file: string,
+ fileType: FileType,
+ error: NodeJS.ErrnoException,
+ logPrefix: string
+ ): void {
+ const prefix = Utils.isNotEmptyString(logPrefix) ? `${logPrefix} ` : '';
+ let logMsg: string;
+ switch (error.code) {
+ case 'ENOENT':
+ logMsg = `${fileType} file ${file} not found:`;
+ break;
+ case 'EEXIST':
+ logMsg = `${fileType} file ${file} already exists:`;
+ break;
+ case 'EACCES':
+ logMsg = `${fileType} file ${file} access denied:`;
+ break;
+ case 'EPERM':
+ logMsg = `${fileType} file ${file} permission denied:`;
+ break;
+ default:
+ logMsg = `${fileType} file ${file} error:`;
+ }
+ console.error(`${chalk.green(prefix)}${chalk.red(`${logMsg} `)}`, error);
+ throw error;
+ }
+
private static getDefaultPerformanceStorageUri(storageType: StorageType) {
switch (storageType) {
case StorageType.JSON_FILE:
- return `file://${path.join(
- path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../'),
+ return Configuration.buildPerformanceUriFilePath(
Constants.DEFAULT_PERFORMANCE_RECORDS_FILENAME
- )}`;
+ );
case StorageType.SQLITE:
- return `file://${path.join(
- path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../'),
+ return Configuration.buildPerformanceUriFilePath(
`${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db`
- )}`;
+ );
default:
throw new Error(`Performance storage URI is mandatory with storage type '${storageType}'`);
}
}
+
+ private static buildPerformanceUriFilePath(file: string) {
+ return `file://${path.join(
+ path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../'),
+ file
+ )}`;
+ }
}