refactor: improve configuration sanity checks log messages
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 18 Mar 2024 12:30:32 +0000 (13:30 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 18 Mar 2024 12:30:32 +0000 (13:30 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/ChargingStation.ts
src/charging-station/ui-server/AbstractUIServer.ts
src/charging-station/ui-server/UIServerFactory.ts

index 2f758aa3518d6b39f71429b17294ba5134596d6e..5e3771f67324cacc6a1f0851ab0ae2c9bed42ec5 100644 (file)
@@ -2364,9 +2364,9 @@ export class ChargingStation extends EventEmitter {
             // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
             Configuration.getSupervisionUrlDistribution()!
           ) &&
-            logger.error(
+            logger.warn(
               // eslint-disable-next-line @typescript-eslint/no-base-to-string
-              `${this.logPrefix()} Unknown supervision url distribution '${Configuration.getSupervisionUrlDistribution()}' from values '${SupervisionUrlDistribution.toString()}', defaulting to ${
+              `${this.logPrefix()} Unknown supervision url distribution '${Configuration.getSupervisionUrlDistribution()}' in configuration from values '${SupervisionUrlDistribution.toString()}', defaulting to ${
                 SupervisionUrlDistribution.CHARGING_STATION_AFFINITY
               }`
             )
index b2a5b44e5e508a2ab8751c81edfc6d3e467a1a36..9d2705f28f677f37ffcc869c60587ade090745f5 100644 (file)
@@ -8,6 +8,7 @@ import {
   ApplicationProtocolVersion,
   AuthenticationType,
   type ChargingStationData,
+  ConfigurationSection,
   type ProcedureName,
   type ProtocolRequest,
   type ProtocolResponse,
@@ -46,7 +47,7 @@ export abstract class AbstractUIServer {
         break
       default:
         throw new BaseError(
-          `Unsupported application protocol version ${this.uiServerConfiguration.version}`
+          `Unsupported application protocol version ${this.uiServerConfiguration.version} in '${ConfigurationSection.uiServer}' configuration section`
         )
     }
     this.responseHandlers = new Map<
index 0eb71cd469f7e7b3431a6caa0e7a9c19fd949314..2549a0aa355e8935b962dda5f53ba33a5d42c514 100644 (file)
@@ -5,8 +5,10 @@ import {
   ApplicationProtocol,
   ApplicationProtocolVersion,
   AuthenticationType,
+  ConfigurationSection,
   type UIServerConfiguration
 } from '../../types/index.js'
+import { logger, logPrefix } from '../../utils/index.js'
 import type { AbstractUIServer } from './AbstractUIServer.js'
 import { UIHttpServer } from './UIHttpServer.js'
 import { isLoopback } from './UIServerUtils.js'
@@ -26,7 +28,7 @@ export class UIServerFactory {
       !Object.values(AuthenticationType).includes(uiServerConfiguration.authentication.type)
     ) {
       throw new BaseError(
-        `Unknown authentication type '${uiServerConfiguration.authentication.type}' for UI server`
+        `Unknown authentication type '${uiServerConfiguration.authentication.type}' in '${ConfigurationSection.uiServer}' configuration section`
       )
     }
     if (
@@ -34,28 +36,26 @@ export class UIServerFactory {
       uiServerConfiguration.authentication?.enabled === true &&
       uiServerConfiguration.authentication.type === AuthenticationType.PROTOCOL_BASIC_AUTH
     ) {
-      throw new BaseError('Protocol basic authentication is not supported for HTTP UI server')
+      throw new BaseError(
+        `'${uiServerConfiguration.authentication.type}' authentication type with application protocol type '${uiServerConfiguration.type}' is not supported in '${ConfigurationSection.uiServer}' configuration section`
+      )
     }
     if (
       uiServerConfiguration.authentication?.enabled !== true &&
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       !isLoopback(uiServerConfiguration.options!.host!)
     ) {
-      console.warn(
-        chalk.yellow(
-          'Non loopback address in UI server configuration without authentication enabled. This is not recommended'
-        )
-      )
+      const logMsg = `Non loopback address in '${ConfigurationSection.uiServer}' configuration section without authentication enabled. This is not recommended`
+      logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`)
+      console.warn(chalk.yellow(logMsg))
     }
     if (
       uiServerConfiguration.type === ApplicationProtocol.WS &&
       uiServerConfiguration.version !== ApplicationProtocolVersion.VERSION_11
     ) {
-      console.warn(
-        chalk.yellow(
-          `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}`
-        )
-      )
+      const logMsg = `Only version ${ApplicationProtocolVersion.VERSION_11} is with application protocol type '${uiServerConfiguration.type}' supported in '${ConfigurationSection.uiServer}' configuration section. Falling back to version ${ApplicationProtocolVersion.VERSION_11}`
+      logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`)
+      console.warn(chalk.yellow(logMsg))
       uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11
     }
     switch (uiServerConfiguration.type) {
@@ -63,7 +63,28 @@ export class UIServerFactory {
         return new UIHttpServer(uiServerConfiguration)
       case ApplicationProtocol.WS:
       default:
+        if (
+          !Object.values(ApplicationProtocol).includes(
+            uiServerConfiguration.type as ApplicationProtocol
+          )
+        ) {
+          // eslint-disable-next-line @typescript-eslint/no-base-to-string
+          const logMsg = `Unknown application protocol type '${uiServerConfiguration.type}' in '${ConfigurationSection.uiServer}' configuration section from values '${ApplicationProtocol.toString()}', defaulting to ${
+            ApplicationProtocol.WS
+          }`
+          logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`)
+          console.warn(logMsg)
+        }
         return new UIWebSocketServer(uiServerConfiguration)
     }
   }
+
+  private static readonly logPrefix = (modName?: string, methodName?: string): string => {
+    const logMsgPrefix = 'UI Server'
+    const logMsg =
+      modName != null && methodName != null
+        ? ` ${logMsgPrefix} | ${modName}.${methodName}:`
+        : ` ${logMsgPrefix} |`
+    return logPrefix(logMsg)
+  }
 }