Fix error handling at OCPP message sending
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / OCPPRequestService.ts
index e00e2b99f9a2bbbddbdca10a6ae1427ffe982d2c..921945e82cdea1bb92bee6373092151d12f8771c 100644 (file)
@@ -1,5 +1,3 @@
-import { parentPort } from 'worker_threads';
-
 import type { JSONSchemaType } from 'ajv';
 import Ajv from 'ajv-draft-04';
 import ajvFormats from 'ajv-formats';
@@ -23,7 +21,6 @@ import Constants from '../../utils/Constants';
 import logger from '../../utils/Logger';
 import Utils from '../../utils/Utils';
 import type ChargingStation from '../ChargingStation';
-import { MessageChannelUtils } from '../MessageChannelUtils';
 import type OCPPResponseService from './OCPPResponseService';
 import { OCPPServiceUtils } from './OCPPServiceUtils';
 
@@ -73,7 +70,9 @@ export default abstract class OCPPRequestService {
         commandName
       );
     } catch (error) {
-      this.handleRequestError(chargingStation, commandName, error as Error);
+      this.handleSendMessageError(chargingStation, commandName, error as Error, {
+        throwError: true,
+      });
     }
   }
 
@@ -93,7 +92,7 @@ export default abstract class OCPPRequestService {
         commandName
       );
     } catch (error) {
-      this.handleRequestError(chargingStation, commandName, error as Error);
+      this.handleSendMessageError(chargingStation, commandName, error as Error);
     }
   }
 
@@ -117,7 +116,7 @@ export default abstract class OCPPRequestService {
         params
       );
     } catch (error) {
-      this.handleRequestError(chargingStation, commandName, error as Error, { throwError: false });
+      this.handleSendMessageError(chargingStation, commandName, error as Error);
     }
   }
 
@@ -127,7 +126,7 @@ export default abstract class OCPPRequestService {
     schema: JSONSchemaType<T>,
     payload: T
   ): boolean {
-    if (!chargingStation.getPayloadSchemaValidation()) {
+    if (chargingStation.getPayloadSchemaValidation() === false) {
       return true;
     }
     const validate = this.ajv.compile(schema);
@@ -138,6 +137,7 @@ export default abstract class OCPPRequestService {
       `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: Request PDU is invalid: %j`,
       validate.errors
     );
+    // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
     throw new OCPPError(
       OCPPServiceUtils.ajvErrorsToErrorType(validate.errors),
       'Request PDU is invalid',
@@ -178,11 +178,11 @@ export default abstract class OCPPRequestService {
             responseCallback,
             errorCallback
           );
-          if (chargingStation.getEnableStatistics()) {
+          if (chargingStation.getEnableStatistics() === true) {
             chargingStation.performanceStatistics.addRequestStatistic(commandName, messageType);
           }
           // Check if wsConnection opened
-          if (chargingStation.isWebSocketConnectionOpened()) {
+          if (chargingStation.isWebSocketConnectionOpened() === true) {
             // Yes: Send Message
             const beginId = PerformanceStatistics.beginMeasure(commandName);
             // FIXME: Handle sending error
@@ -193,7 +193,7 @@ export default abstract class OCPPRequestService {
                 messageType
               )} payload: ${messageToSend}`
             );
-          } else if (!params.skipBufferingOnError) {
+          } else if (params.skipBufferingOnError === false) {
             // Buffer it
             chargingStation.bufferMessage(messageToSend);
             const ocppError = new OCPPError(
@@ -235,7 +235,7 @@ export default abstract class OCPPRequestService {
             payload: JsonType,
             requestPayload: JsonType
           ): Promise<void> {
-            if (chargingStation.getEnableStatistics()) {
+            if (chargingStation.getEnableStatistics() === true) {
               chargingStation.performanceStatistics.addRequestStatistic(
                 commandName,
                 MessageType.CALL_RESULT_MESSAGE
@@ -254,7 +254,6 @@ export default abstract class OCPPRequestService {
               reject(error);
             } finally {
               chargingStation.requests.delete(messageId);
-              // parentPort.postMessage(MessageChannelUtils.buildUpdatedMessage(chargingStation));
             }
           }
 
@@ -265,7 +264,7 @@ export default abstract class OCPPRequestService {
            * @param requestStatistic
            */
           function errorCallback(error: OCPPError, requestStatistic = true): void {
-            if (requestStatistic && chargingStation.getEnableStatistics()) {
+            if (requestStatistic === true && chargingStation.getEnableStatistics() === true) {
               chargingStation.performanceStatistics.addRequestStatistic(
                 commandName,
                 MessageType.CALL_ERROR_MESSAGE
@@ -278,7 +277,6 @@ export default abstract class OCPPRequestService {
               error
             );
             chargingStation.requests.delete(messageId);
-            // parentPort.postMessage(MessageChannelUtils.buildUpdatedMessage(chargingStation));
             reject(error);
           }
         }),
@@ -360,14 +358,14 @@ export default abstract class OCPPRequestService {
     }
   }
 
-  private handleRequestError(
+  private handleSendMessageError(
     chargingStation: ChargingStation,
     commandName: RequestCommand | IncomingRequestCommand,
     error: Error,
-    params: HandleErrorParams<EmptyObject> = { throwError: true }
+    params: HandleErrorParams<EmptyObject> = { throwError: false }
   ): void {
-    logger.error(`${chargingStation.logPrefix()} Request command ${commandName} error:`, error);
-    if (params?.throwError) {
+    logger.error(`${chargingStation.logPrefix()} Request command '${commandName}' error:`, error);
+    if (params?.throwError === true) {
       throw error;
     }
   }