feat: move logging configuration into its own section
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 11 Jun 2023 15:37:43 +0000 (17:37 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 11 Jun 2023 15:37:43 +0000 (17:37 +0200)
Close #348

Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
README.md
docker/config.json
src/assets/config-template.json
src/performance/PerformanceStatistics.ts
src/types/ConfigurationData.ts
src/types/index.ts
src/utils/Configuration.ts
src/utils/Logger.ts

index 04771de2ff6647df14b63ec162a88ec675766dba..feafefac097ee65718786e961ec4b0360644e598 100644 (file)
--- a/README.md
+++ b/README.md
@@ -98,24 +98,15 @@ But the modifications to test have to be done to the files in the build target d
 
 **src/assets/config.json**:
 
-| Key                        | Value(s)                                         | Default Value                                                                                                                                                                                                 | Value type                                                                                                                                                                                                                          | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
-| -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| supervisionUrls            |                                                  | []                                                                                                                                                                                                            | string \| string[]                                                                                                                                                                                                                  | string or array of global connection URIs to OCPP-J servers                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
-| supervisionUrlDistribution | round-robin/random/charging-station-affinity     | charging-station-affinity                                                                                                                                                                                     | boolean                                                                                                                                                                                                                             | supervision urls distribution policy to simulated charging stations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
-| logStatisticsInterval      |                                                  | 60                                                                                                                                                                                                            | integer                                                                                                                                                                                                                             | seconds between charging stations statistics output in the logs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
-| logEnabled                 | true/false                                       | true                                                                                                                                                                                                          | boolean                                                                                                                                                                                                                             | enable logging                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
-| logConsole                 | true/false                                       | false                                                                                                                                                                                                         | boolean                                                                                                                                                                                                                             | output logs on the console                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
-| logFormat                  |                                                  | simple                                                                                                                                                                                                        | string                                                                                                                                                                                                                              | [winston](https://github.com/winstonjs/winston) log format                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
-| logRotate                  | true/false                                       | true                                                                                                                                                                                                          | boolean                                                                                                                                                                                                                             | enable daily log files rotation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
-| logMaxFiles                | x/"xd" where x is an integer                     | undefined                                                                                                                                                                                                     | integer \| string                                                                                                                                                                                                                   | maximum number of log files: https://github.com/winstonjs/winston-daily-rotate-file#options                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
-| logMaxSize                 | x/"xk"/"xm"/"xg" where x is a number             | undefined                                                                                                                                                                                                     | number \| string                                                                                                                                                                                                                    | maximum size of log files in bytes, or units of kb, mb, and gb: https://github.com/winstonjs/winston-daily-rotate-file#options                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
-| logLevel                   | emerg/alert/crit/error/warning/notice/info/debug | info                                                                                                                                                                                                          | string                                                                                                                                                                                                                              | [winston](https://github.com/winstonjs/winston) logging level                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
-| logFile                    |                                                  | combined.log                                                                                                                                                                                                  | string                                                                                                                                                                                                                              | log file relative path                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
-| logErrorFile               |                                                  | error.log                                                                                                                                                                                                     | string                                                                                                                                                                                                                              | error log file relative path                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
-| worker                     |                                                  | {<br />"processType": "workerSet",<br />"startDelay": 500,<br />"elementStartDelay": 0,<br />"elementsPerWorker": 1,<br />"poolMinSize": 4,<br />"poolMaxSize": 16,<br />"poolStrategy": "ROUND_ROBIN"<br />} | {<br />processType: WorkerProcessType;<br />startDelay: number;<br />elementStartDelay: number;<br />elementsPerWorker: number;<br />poolMinSize: number;<br />poolMaxSize: number;<br />poolStrategy: WorkerChoiceStrategy;<br />} | Worker configuration section:<br />- processType: worker threads process type (workerSet/staticPool/dynamicPool)<br />- startDelay: milliseconds to wait at worker threads startup (only for workerSet threads process type)<br />- elementStartDelay: milliseconds to wait at charging station startup<br />- elementsPerWorker: number of charging stations per worker threads for the `workerSet` process type<br />- poolMinSize: worker threads pool minimum number of threads</br >- poolMaxSize: worker threads pool maximum number of threads<br />- poolStrategy: worker threads pool [poolifier](https://github.com/poolifier/poolifier) worker choice strategy |
-| uiServer                   |                                                  | {<br />"enabled": false,<br />"type": "ws",<br />"options": {<br />"host": "localhost",<br />"port": 8080<br />}<br />}                                                                                       | {<br />enabled: boolean;<br />type: ApplicationProtocol;<br />options: ServerOptions;<br />authentication: {<br />enabled: boolean;<br />type: AuthenticationType;<br />username: string;<br />password: string;<br />}<br />}      | UI server configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
-| performanceStorage         |                                                  | {<br />"enabled": false,<br />"type": "jsonfile",<br />"file:///performanceRecords.json"<br />}                                                                                                               | {<br />enabled: boolean;<br />type: string;<br />URI: string;<br />}<br />where type can be 'jsonfile' or 'mongodb'                                                                                                                 | performance storage configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
-| stationTemplateUrls        |                                                  | {}[]                                                                                                                                                                                                          | {<br />file: string;<br />numberOfStations: number;<br />}[]                                                                                                                                                                        | array of charging station configuration templates URIs configuration section (charging station configuration template file name and number of stations)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+| Key                        | Value(s)                                     | Default Value                                                                                                                                                                                                                 | Value type                                                                                                                                                                                                                                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+| -------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| supervisionUrls            |                                              | []                                                                                                                                                                                                                            | string \| string[]                                                                                                                                                                                                                                                 | string or array of global connection URIs to OCPP-J servers                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+| supervisionUrlDistribution | round-robin/random/charging-station-affinity | charging-station-affinity                                                                                                                                                                                                     | string                                                                                                                                                                                                                                                             | supervision urls distribution policy to simulated charging stations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+| log                        |                                              | {<br />"enabled": true,<br />"file": "logs/combined.log",<br />"errorFile": "logs/error.log",<br />"statisticsInterval": 60,<br />"level": "info",<br />"console": false,<br />"format": "simple",<br />"rotate": true<br />} | {<br />enabled: boolean;<br />file: string;<br />errorFile: string;<br />statisticsInterval: number;<br />level: string;<br />console: boolean;<br />format: string;<br />rotate: boolean;<br />maxFiles: string \| number;<br />maxSize: string \| number;<br />} | Log configuration section:<br />- enabled: enable logging<br />- file: log file relative path<br />- errorFile: error log file relative path<br />- statisticsInterval: seconds between charging stations statistics output in the logs<br />- level: emerg/alert/crit/error/warning/notice/info/debug [winston](https://github.com/winstonjs/winston) logging level</br >- console: output logs on the console<br />- format: [winston](https://github.com/winstonjs/winston) log format<br />- rotate: enable daily log files rotation<br />- maxFiles: maximum number of log files: https://github.com/winstonjs/winston-daily-rotate-file#options<br />- maxSize: maximum size of log files in bytes, or units of kb, mb, and gb: https://github.com/winstonjs/winston-daily-rotate-file#options |
+| worker                     |                                              | {<br />"processType": "workerSet",<br />"startDelay": 500,<br />"elementStartDelay": 0,<br />"elementsPerWorker": 1,<br />"poolMinSize": 4,<br />"poolMaxSize": 16,<br />"poolStrategy": "ROUND_ROBIN"<br />}                 | {<br />processType: WorkerProcessType;<br />startDelay: number;<br />elementStartDelay: number;<br />elementsPerWorker: number;<br />poolMinSize: number;<br />poolMaxSize: number;<br />poolStrategy: WorkerChoiceStrategy;<br />}                                | Worker configuration section:<br />- processType: worker threads process type (workerSet/staticPool/dynamicPool)<br />- startDelay: milliseconds to wait at worker threads startup (only for workerSet threads process type)<br />- elementStartDelay: milliseconds to wait at charging station startup<br />- elementsPerWorker: number of charging stations per worker threads for the `workerSet` process type<br />- poolMinSize: worker threads pool minimum number of threads</br >- poolMaxSize: worker threads pool maximum number of threads<br />- poolStrategy: worker threads pool [poolifier](https://github.com/poolifier/poolifier) worker choice strategy                                                                                                                            |
+| uiServer                   |                                              | {<br />"enabled": false,<br />"type": "ws",<br />"options": {<br />"host": "localhost",<br />"port": 8080<br />}<br />}                                                                                                       | {<br />enabled: boolean;<br />type: ApplicationProtocol;<br />options: ServerOptions;<br />authentication: {<br />enabled: boolean;<br />type: AuthenticationType;<br />username: string;<br />password: string;<br />}<br />}                                     | UI server configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
+| performanceStorage         |                                              | {<br />"enabled": false,<br />"type": "jsonfile",<br />"file:///performanceRecords.json"<br />}                                                                                                                               | {<br />enabled: boolean;<br />type: string;<br />URI: string;<br />}<br />where type can be 'jsonfile' or 'mongodb'                                                                                                                                                | performance storage configuration section                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
+| stationTemplateUrls        |                                              | {}[]                                                                                                                                                                                                                          | {<br />file: string;<br />numberOfStations: number;<br />}[]                                                                                                                                                                                                       | array of charging station configuration templates URIs configuration section (charging station configuration template file name and number of stations)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
 
 #### Worker process model
 
index 003ee3e19d7537f6e2e1c286f54744ace94f33be..7808b07c0bc995a93720e9ec1ef2b53a91ba7968 100644 (file)
@@ -1,6 +1,12 @@
 {
   "supervisionUrls": ["ws://server:8010/OCPP16/5c866e81a2d9593de43efdb4"],
   "supervisionUrlDistribution": "round-robin",
+  "log": {
+    "file": "/dev/stdout",
+    "errorFile": "/dev/stderr",
+    "console": false,
+    "rotate": false
+  },
   "worker": {
     "processType": "workerSet",
     "elementsPerWorker": 1,
       "file": "virtual-simple-atg.station-template.json",
       "numberOfStations": 10
     }
-  ],
-  "logRotate": false,
-  "logConsole": false,
-  "logFile": "/dev/stdout",
-  "logErrorFile": "/dev/stderr",
-  "logStatisticsInterval": 60
+  ]
 }
index e1620aa7c899a071171eda539565f679ddb701b2..a875173f2069434ffb3740bab5ebb09d6d568053 100644 (file)
@@ -1,6 +1,12 @@
 {
   "supervisionUrls": ["ws://localhost:8010/OCPP16/5be7fb271014d90008992f06"],
   "supervisionUrlDistribution": "round-robin",
+  "log": {
+    "file": "logs/combined.log",
+    "errorFile": "logs/error.log",
+    "maxFiles": 7,
+    "statisticsInterval": 0
+  },
   "worker": {
     "processType": "workerSet",
     "elementsPerWorker": 1,
@@ -42,9 +48,5 @@
       "file": "schneider.station-template.json",
       "numberOfStations": 1
     }
-  ],
-  "logStatisticsInterval": 0,
-  "logMaxFiles": 7,
-  "logFile": "combined.log",
-  "logErrorFile": "error.log"
+  ]
 }
index 565ef6e7a2e4126a6fcc7e7e8e6c7c6f0f6cef8a..a111eb450e66dcfb88e036977db48ee0dd351f21 100644 (file)
@@ -165,7 +165,9 @@ export class PerformanceStatistics {
   }
 
   private startLogStatisticsInterval(): void {
-    const logStatisticsInterval = Configuration.getLogStatisticsInterval();
+    const logStatisticsInterval = Configuration.getLog().enabled
+      ? Configuration.getLog().statisticsInterval
+      : 0;
     if (logStatisticsInterval > 0 && !this.displayInterval) {
       this.displayInterval = setInterval(() => {
         this.logStatistics();
@@ -179,7 +181,7 @@ export class PerformanceStatistics {
           logStatisticsInterval
         )}`
       );
-    } else {
+    } else if (Configuration.getLog().enabled) {
       logger.info(
         `${this.logPrefix()} log interval is set to ${logStatisticsInterval?.toString()}. Not logging statistics`
       );
index a23940cf330295cb609f28b7a3439ee05e26f6f6..a244aa45d7cfafa99c6e6ca32568c5ac8b5738fd 100644 (file)
@@ -19,6 +19,19 @@ export type StationTemplateUrl = {
   numberOfStations: number;
 };
 
+export type LogConfiguration = {
+  enabled?: boolean;
+  file?: string;
+  errorFile?: string;
+  statisticsInterval?: number;
+  level?: string;
+  console?: boolean;
+  format?: string;
+  rotate?: boolean;
+  maxFiles?: string | number;
+  maxSize?: string | number;
+};
+
 export type UIServerConfiguration = {
   enabled?: boolean;
   type?: ApplicationProtocol;
@@ -51,9 +64,10 @@ export type ConfigurationData = {
   supervisionUrls?: string | string[];
   supervisionUrlDistribution?: SupervisionUrlDistribution;
   stationTemplateUrls: StationTemplateUrl[];
+  log?: LogConfiguration;
+  worker?: WorkerConfiguration;
   uiServer?: UIServerConfiguration;
   performanceStorage?: StorageConfiguration;
-  worker?: WorkerConfiguration;
   autoReconnectMaxRetries?: number;
   /** @deprecated Moved to worker configuration section. */
   workerProcess?: WorkerProcessType;
@@ -69,14 +83,24 @@ export type ConfigurationData = {
   workerPoolStrategy?: WorkerChoiceStrategy;
   /** @deprecated Moved to worker configuration section. */
   chargingStationsPerWorker?: number;
+  /** @deprecated Moved to log configuration section. */
   logStatisticsInterval?: number;
+  /** @deprecated Moved to log configuration section. */
   logEnabled?: boolean;
+  /** @deprecated Moved to log configuration section. */
   logConsole?: boolean;
+  /** @deprecated Moved to log configuration section. */
   logFormat?: string;
+  /** @deprecated Moved to log configuration section. */
   logLevel?: string;
+  /** @deprecated Moved to log configuration section. */
   logRotate?: boolean;
+  /** @deprecated Moved to log configuration section. */
   logMaxFiles?: number | string;
+  /** @deprecated Moved to log configuration section. */
   logMaxSize?: number | string;
+  /** @deprecated Moved to log configuration section. */
   logFile?: string;
+  /** @deprecated Moved to log configuration section. */
   logErrorFile?: string;
 };
index 2b833800b44800d2709eacb005130aa5f6cd1a1c..f9a42d4aae07d4f9c5d18e9adf964cbc5431522e 100644 (file)
@@ -167,6 +167,7 @@ export {
 } from './ChargingStationTemplate';
 export {
   type ConfigurationData,
+  type LogConfiguration,
   type StationTemplateUrl,
   type StorageConfiguration,
   SupervisionUrlDistribution,
index b67afd447ae0f2ebc7a6f80f53bdfa5f57dfdf8f..4f5e1ef143d96baf2828b3ce7169315049eec493 100644 (file)
@@ -12,6 +12,7 @@ import {
   ApplicationProtocol,
   type ConfigurationData,
   FileType,
+  type LogConfiguration,
   type StationTemplateUrl,
   type StorageConfiguration,
   StorageType,
@@ -40,18 +41,6 @@ export class Configuration {
     Configuration.configurationChangeCallback = cb;
   }
 
-  public static getLogStatisticsInterval(): number | undefined {
-    Configuration.warnDeprecatedConfigurationKey(
-      'statisticsDisplayInterval',
-      undefined,
-      "Use 'logStatisticsInterval' instead"
-    );
-    // Read conf
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logStatisticsInterval')
-      ? Configuration.getConfig()?.logStatisticsInterval
-      : Constants.DEFAULT_LOG_STATISTICS_INTERVAL;
-  }
-
   public static getUIServer(): UIServerConfiguration {
     if (Utils.hasOwnProp(Configuration.getConfig(), 'uiWebSocketServer')) {
       console.error(
@@ -150,6 +139,106 @@ export class Configuration {
     return Configuration.getConfig()?.stationTemplateUrls;
   }
 
+  public static getLog(): LogConfiguration {
+    Configuration.warnDeprecatedConfigurationKey(
+      'logEnabled',
+      undefined,
+      "Use 'log' section to define the logging enablement instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logFile',
+      undefined,
+      "Use 'log' section to define the log file instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logErrorFile',
+      undefined,
+      "Use 'log' section to define the log error file instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logConsole',
+      undefined,
+      "Use 'log' section to define the console logging enablement instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logStatisticsInterval',
+      undefined,
+      "Use 'log' section to define the log statistics interval instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logLevel',
+      undefined,
+      "Use 'log' section to define the log level instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logFormat',
+      undefined,
+      "Use 'log' section to define the log format instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logRotate',
+      undefined,
+      "Use 'log' section to define the log rotation instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logMaxFiles',
+      undefined,
+      "Use 'log' section to define the log maximum files instead"
+    );
+    Configuration.warnDeprecatedConfigurationKey(
+      'logMaxSize',
+      undefined,
+      "Use 'log' section to define the log maximum size instead"
+    );
+    const defaultLogConfiguration: LogConfiguration = {
+      enabled: true,
+      file: 'logs/combined.log',
+      errorFile: 'logs/error.log',
+      statisticsInterval: Constants.DEFAULT_LOG_STATISTICS_INTERVAL,
+      level: 'info',
+      format: 'simple',
+      rotate: true,
+    };
+    const deprecatedLogConfiguration: LogConfiguration = {
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logEnabled') && {
+        enabled: Configuration.getConfig()?.logEnabled,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logFile') && {
+        file: Configuration.getConfig()?.logFile,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logErrorFile') && {
+        errorFile: Configuration.getConfig()?.logErrorFile,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logStatisticsInterval') && {
+        statisticsInterval: Configuration.getConfig()?.logStatisticsInterval,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logLevel') && {
+        level: Configuration.getConfig()?.logLevel,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logConsole') && {
+        console: Configuration.getConfig()?.logConsole,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logFormat') && {
+        format: Configuration.getConfig()?.logFormat,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logRotate') && {
+        rotate: Configuration.getConfig()?.logRotate,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logMaxFiles') && {
+        maxFiles: Configuration.getConfig()?.logMaxFiles,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'logMaxSize') && {
+        maxSize: Configuration.getConfig()?.logMaxSize,
+      }),
+    };
+    const logConfiguration: LogConfiguration = {
+      ...defaultLogConfiguration,
+      ...deprecatedLogConfiguration,
+      ...Configuration.getConfig()?.log,
+    };
+    return logConfiguration;
+  }
+
   public static getWorker(): WorkerConfiguration {
     Configuration.warnDeprecatedConfigurationKey(
       'useWorkerPool',
@@ -196,31 +285,44 @@ export class Configuration {
       undefined,
       "Use 'worker' section to define the worker pool strategy instead"
     );
-    let workerConfiguration: WorkerConfiguration = {
-      processType: Utils.hasOwnProp(Configuration.getConfig(), 'workerProcess')
-        ? Configuration.getConfig()?.workerProcess
-        : WorkerProcessType.workerSet,
-      startDelay: Utils.hasOwnProp(Configuration.getConfig(), 'workerStartDelay')
-        ? Configuration.getConfig()?.workerStartDelay
-        : WorkerConstants.DEFAULT_WORKER_START_DELAY,
-      elementsPerWorker: Utils.hasOwnProp(Configuration.getConfig(), 'chargingStationsPerWorker')
-        ? Configuration.getConfig()?.chargingStationsPerWorker
-        : WorkerConstants.DEFAULT_ELEMENTS_PER_WORKER,
-      elementStartDelay: Utils.hasOwnProp(Configuration.getConfig(), 'elementStartDelay')
-        ? Configuration.getConfig()?.elementStartDelay
-        : WorkerConstants.DEFAULT_ELEMENT_START_DELAY,
-      poolMinSize: Utils.hasOwnProp(Configuration.getConfig(), 'workerPoolMinSize')
-        ? Configuration.getConfig()?.workerPoolMinSize
-        : WorkerConstants.DEFAULT_POOL_MIN_SIZE,
-      poolMaxSize: Utils.hasOwnProp(Configuration.getConfig(), 'workerPoolMaxSize')
-        ? Configuration.getConfig()?.workerPoolMaxSize
-        : WorkerConstants.DEFAULT_POOL_MAX_SIZE,
-      poolStrategy:
-        Configuration.getConfig()?.workerPoolStrategy ?? WorkerChoiceStrategies.ROUND_ROBIN,
+    const defaultWorkerConfiguration: WorkerConfiguration = {
+      processType: WorkerProcessType.workerSet,
+      startDelay: WorkerConstants.DEFAULT_WORKER_START_DELAY,
+      elementsPerWorker: WorkerConstants.DEFAULT_ELEMENTS_PER_WORKER,
+      elementStartDelay: WorkerConstants.DEFAULT_ELEMENT_START_DELAY,
+      poolMinSize: WorkerConstants.DEFAULT_POOL_MIN_SIZE,
+      poolMaxSize: WorkerConstants.DEFAULT_POOL_MAX_SIZE,
+      poolStrategy: WorkerChoiceStrategies.ROUND_ROBIN,
+    };
+    const deprecatedWorkerConfiguration: WorkerConfiguration = {
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'workerProcess') && {
+        processType: Configuration.getConfig()?.workerProcess,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'workerStartDelay') && {
+        startDelay: Configuration.getConfig()?.workerStartDelay,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'chargingStationsPerWorker') && {
+        elementsPerWorker: Configuration.getConfig()?.chargingStationsPerWorker,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'elementStartDelay') && {
+        elementStartDelay: Configuration.getConfig()?.elementStartDelay,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'workerPoolMinSize') && {
+        poolMinSize: Configuration.getConfig()?.workerPoolMinSize,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'workerPoolMaxSize') && {
+        poolMaxSize: Configuration.getConfig()?.workerPoolMaxSize,
+      }),
+      ...(Utils.hasOwnProp(Configuration.getConfig(), 'workerPoolStrategy') && {
+        poolStrategy:
+          Configuration.getConfig()?.workerPoolStrategy ?? WorkerChoiceStrategies.ROUND_ROBIN,
+      }),
+    };
+    const workerConfiguration: WorkerConfiguration = {
+      ...defaultWorkerConfiguration,
+      ...deprecatedWorkerConfiguration,
+      ...Configuration.getConfig()?.worker,
     };
-    if (Utils.hasOwnProp(Configuration.getConfig(), 'worker')) {
-      workerConfiguration = { ...workerConfiguration, ...Configuration.getConfig()?.worker };
-    }
     return workerConfiguration;
   }
 
@@ -234,72 +336,6 @@ export class Configuration {
     return Configuration.getWorker().processType === WorkerProcessType.dynamicPool;
   }
 
-  public static getLogEnabled(): boolean | undefined {
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logEnabled')
-      ? Configuration.getConfig()?.logEnabled
-      : true;
-  }
-
-  public static getLogConsole(): boolean | undefined {
-    Configuration.warnDeprecatedConfigurationKey(
-      'consoleLog',
-      undefined,
-      "Use 'logConsole' instead"
-    );
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logConsole')
-      ? Configuration.getConfig()?.logConsole
-      : false;
-  }
-
-  public static getLogFormat(): string | undefined {
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logFormat')
-      ? Configuration.getConfig()?.logFormat
-      : 'simple';
-  }
-
-  public static getLogRotate(): boolean | undefined {
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logRotate')
-      ? Configuration.getConfig()?.logRotate
-      : true;
-  }
-
-  public static getLogMaxFiles(): number | string | false | undefined {
-    return (
-      Utils.hasOwnProp(Configuration.getConfig(), 'logMaxFiles') &&
-      Configuration.getConfig()?.logMaxFiles
-    );
-  }
-
-  public static getLogMaxSize(): number | string | false | undefined {
-    return (
-      Utils.hasOwnProp(Configuration.getConfig(), 'logMaxFiles') &&
-      Configuration.getConfig()?.logMaxSize
-    );
-  }
-
-  public static getLogLevel(): string | undefined {
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logLevel')
-      ? Configuration.getConfig()?.logLevel?.toLowerCase()
-      : 'info';
-  }
-
-  public static getLogFile(): string | undefined {
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logFile')
-      ? Configuration.getConfig()?.logFile
-      : 'combined.log';
-  }
-
-  public static getLogErrorFile(): string | undefined {
-    Configuration.warnDeprecatedConfigurationKey(
-      'errorFile',
-      undefined,
-      "Use 'logErrorFile' instead"
-    );
-    return Utils.hasOwnProp(Configuration.getConfig(), 'logErrorFile')
-      ? Configuration.getConfig()?.logErrorFile
-      : 'error.log';
-  }
-
   public static getSupervisionUrls(): string | string[] | undefined {
     Configuration.warnDeprecatedConfigurationKey(
       'supervisionURLs',
index 637beb5bd533bffe6f0fb91cc8124bef730ce381..92fe6909e3740aa932b133be1378de947347adff 100644 (file)
@@ -7,15 +7,15 @@ import { Configuration } from './Configuration';
 import { Utils } from './Utils';
 
 let transports: transport[];
-if (Configuration.getLogRotate() === true) {
-  const logMaxFiles = Configuration.getLogMaxFiles();
-  const logMaxSize = Configuration.getLogMaxSize();
+if (Configuration.getLog().rotate === true) {
+  const logMaxFiles = Configuration.getLog().maxFiles;
+  const logMaxSize = Configuration.getLog().maxSize;
   transports = [
     new DailyRotateFile({
       filename: Utils.insertAt(
-        Configuration.getLogErrorFile(),
+        Configuration.getLog().errorFile,
         '-%DATE%',
-        Configuration.getLogErrorFile()?.indexOf('.log')
+        Configuration.getLog().errorFile?.indexOf('.log')
       ),
       level: 'error',
       ...(logMaxFiles && { maxFiles: logMaxFiles }),
@@ -23,9 +23,9 @@ if (Configuration.getLogRotate() === true) {
     }),
     new DailyRotateFile({
       filename: Utils.insertAt(
-        Configuration.getLogFile(),
+        Configuration.getLog().file,
         '-%DATE%',
-        Configuration.getLogFile()?.indexOf('.log')
+        Configuration.getLog().file?.indexOf('.log')
       ),
       ...(logMaxFiles && { maxFiles: logMaxFiles }),
       ...(logMaxSize && { maxSize: logMaxSize }),
@@ -33,15 +33,15 @@ if (Configuration.getLogRotate() === true) {
   ];
 } else {
   transports = [
-    new TransportType.File({ filename: Configuration.getLogErrorFile(), level: 'error' }),
-    new TransportType.File({ filename: Configuration.getLogFile() }),
+    new TransportType.File({ filename: Configuration.getLog().errorFile, level: 'error' }),
+    new TransportType.File({ filename: Configuration.getLog().file }),
   ];
 }
 
 export const logger = createLogger({
-  silent: !Configuration.getLogEnabled(),
-  level: Configuration.getLogLevel(),
-  format: format.combine(format.splat(), (format[Configuration.getLogFormat()] as FormatWrap)()),
+  silent: !Configuration.getLog().enabled,
+  level: Configuration.getLog().level,
+  format: format.combine(format.splat(), (format[Configuration.getLog().format] as FormatWrap)()),
   transports,
 });
 
@@ -49,12 +49,12 @@ export const logger = createLogger({
 // If enabled, log to the `console` with the format:
 // `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
 //
-if (Configuration.getLogConsole()) {
+if (Configuration.getLog().console) {
   logger.add(
     new TransportType.Console({
       format: format.combine(
         format.splat(),
-        (format[Configuration.getLogFormat()] as FormatWrap)()
+        (format[Configuration.getLog().format] as FormatWrap)()
       ),
     })
   );