fix: move and fix statistic related helpers implementation
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStationUtils.ts
index 517a3c9a5e0f40c4e56d9f7ea84cafaf13279793..d8f67c21460b626875d01be4bae961e93d1c3b78 100644 (file)
@@ -153,10 +153,42 @@ export class ChargingStationUtils {
     return connectorBootStatus;
   }
 
+  public static checkTemplateFile(
+    stationTemplate: ChargingStationTemplate,
+    logPrefix: string,
+    templateFile: string
+  ) {
+    if (Utils.isNullOrUndefined(stationTemplate)) {
+      const errorMsg = `Failed to read charging station template file ${templateFile}`;
+      logger.error(`${logPrefix} ${errorMsg}`);
+      throw new BaseError(errorMsg);
+    }
+    if (Utils.isEmptyObject(stationTemplate)) {
+      const errorMsg = `Empty charging station information from template file ${templateFile}`;
+      logger.error(`${logPrefix} ${errorMsg}`);
+      throw new BaseError(errorMsg);
+    }
+    if (Utils.isEmptyObject(stationTemplate.AutomaticTransactionGenerator)) {
+      stationTemplate.AutomaticTransactionGenerator = {
+        enable: false,
+        minDuration: 60,
+        maxDuration: 120,
+        minDelayBetweenTwoTransactions: 15,
+        maxDelayBetweenTwoTransactions: 30,
+        probabilityOfStart: 1,
+        stopAfterHours: 0.3,
+        stopOnConnectionFailure: true,
+      };
+      logger.warn(
+        `${logPrefix} Empty automatic transaction generator configuration from template file ${templateFile}, set to default values`
+      );
+    }
+  }
+
   public static checkConnectorsConfiguration(
-    stationTemplate: ChargingStationTemplate | ChargingStationInfo,
-    templateFile: string,
-    logPrefix: string
+    stationTemplate: ChargingStationTemplate,
+    logPrefix: string,
+    templateFile: string
   ): {
     configuredMaxConnectors: number;
     templateMaxConnectors: number;
@@ -166,13 +198,13 @@ export class ChargingStationUtils {
       ChargingStationUtils.getConfiguredNumberOfConnectors(stationTemplate);
     ChargingStationUtils.checkConfiguredMaxConnectors(
       configuredMaxConnectors,
-      templateFile,
-      logPrefix
+      logPrefix,
+      templateFile
     );
     const templateMaxConnectors = ChargingStationUtils.getMaxNumberOfConnectors(
       stationTemplate.Connectors
     );
-    ChargingStationUtils.checkTemplateMaxConnectors(templateMaxConnectors, templateFile, logPrefix);
+    ChargingStationUtils.checkTemplateMaxConnectors(templateMaxConnectors, logPrefix, templateFile);
     const templateMaxAvailableConnectors = stationTemplate?.Connectors[0]
       ? templateMaxConnectors - 1
       : templateMaxConnectors;
@@ -330,9 +362,9 @@ export class ChargingStationUtils {
   }
 
   public static warnTemplateKeysDeprecation(
-    templateFile: string,
     stationTemplate: ChargingStationTemplate,
-    logPrefix: string
+    logPrefix: string,
+    templateFile: string
   ) {
     const templateKeys: { key: string; deprecatedKey: string }[] = [
       { key: 'supervisionUrls', deprecatedKey: 'supervisionUrl' },
@@ -342,8 +374,8 @@ export class ChargingStationUtils {
       ChargingStationUtils.warnDeprecatedTemplateKey(
         stationTemplate,
         templateKey.deprecatedKey,
-        templateFile,
         logPrefix,
+        templateFile,
         `Use '${templateKey.key}' instead`
       );
       ChargingStationUtils.convertDeprecatedTemplateKey(
@@ -357,9 +389,11 @@ export class ChargingStationUtils {
   public static stationTemplateToStationInfo(
     stationTemplate: ChargingStationTemplate
   ): ChargingStationInfo {
-    stationTemplate = Utils.cloneObject(stationTemplate);
+    stationTemplate = Utils.cloneObject<ChargingStationTemplate>(stationTemplate);
     delete stationTemplate.power;
     delete stationTemplate.powerUnit;
+    delete stationTemplate?.Connectors;
+    delete stationTemplate?.Evses;
     delete stationTemplate.Configuration;
     delete stationTemplate.AutomaticTransactionGenerator;
     delete stationTemplate.chargeBoxSerialNumberPrefix;
@@ -437,15 +471,15 @@ export class ChargingStationUtils {
     let limit: number, matchingChargingProfile: ChargingProfile;
     // Get charging profiles for connector and sort by stack level
     const chargingProfiles =
-      Utils.cloneObject(chargingStation.getConnectorStatus(connectorId)?.chargingProfiles)?.sort(
-        (a, b) => b.stackLevel - a.stackLevel
-      ) ?? [];
+      Utils.cloneObject<ChargingProfile[]>(
+        chargingStation.getConnectorStatus(connectorId)?.chargingProfiles
+      )?.sort((a, b) => b.stackLevel - a.stackLevel) ?? [];
     // Get profiles on connector 0
     if (chargingStation.getConnectorStatus(0)?.chargingProfiles) {
       chargingProfiles.push(
-        ...Utils.cloneObject(chargingStation.getConnectorStatus(0).chargingProfiles).sort(
-          (a, b) => b.stackLevel - a.stackLevel
-        )
+        ...Utils.cloneObject<ChargingProfile[]>(
+          chargingStation.getConnectorStatus(0).chargingProfiles
+        ).sort((a, b) => b.stackLevel - a.stackLevel)
       );
     }
     if (Utils.isNotEmptyArray(chargingProfiles)) {
@@ -493,8 +527,8 @@ export class ChargingStationUtils {
 
   public static getDefaultVoltageOut(
     currentType: CurrentType,
-    templateFile: string,
-    logPrefix: string
+    logPrefix: string,
+    templateFile: string
   ): Voltage {
     const errorMsg = `Unknown ${currentType} currentOutType in template file ${templateFile}, cannot define default voltage out`;
     let defaultVoltageOut: number;
@@ -523,9 +557,7 @@ export class ChargingStationUtils {
     );
   }
 
-  private static getConfiguredNumberOfConnectors(
-    stationTemplate: ChargingStationTemplate | ChargingStationInfo
-  ): number {
+  private static getConfiguredNumberOfConnectors(stationTemplate: ChargingStationTemplate): number {
     let configuredMaxConnectors: number;
     if (Utils.isNotEmptyArray(stationTemplate.numberOfConnectors) === true) {
       const numberOfConnectors = stationTemplate.numberOfConnectors as number[];
@@ -553,8 +585,8 @@ export class ChargingStationUtils {
 
   private static checkConfiguredMaxConnectors(
     configuredMaxConnectors: number,
-    templateFile: string,
-    logPrefix: string
+    logPrefix: string,
+    templateFile: string
   ): void {
     if (configuredMaxConnectors <= 0) {
       logger.warn(
@@ -565,8 +597,8 @@ export class ChargingStationUtils {
 
   private static checkTemplateMaxConnectors(
     templateMaxConnectors: number,
-    templateFile: string,
-    logPrefix: string
+    logPrefix: string,
+    templateFile: string
   ): void {
     if (templateMaxConnectors === 0) {
       logger.warn(
@@ -595,8 +627,8 @@ export class ChargingStationUtils {
   private static warnDeprecatedTemplateKey(
     template: ChargingStationTemplate,
     key: string,
-    templateFile: string,
     logPrefix: string,
+    templateFile: string,
     logMsgToAppend = ''
   ): void {
     if (!Utils.isUndefined(template[key])) {