docs: update UI protocol requests collections
[e-mobility-charging-stations-simulator.git] / src / charging-station / Bootstrap.ts
index f238d9515e1ba989d09176963323787b193c4cd7..acd8e73cb23ea1b7cf0b41e5e6cd3436cc4ee0f9 100644 (file)
@@ -18,6 +18,7 @@ import { BaseError } from '../exception/index.js'
 import { type Storage, StorageFactory } from '../performance/index.js'
 import {
   type ChargingStationData,
+  type ChargingStationOptions,
   type ChargingStationWorkerData,
   type ChargingStationWorkerEventError,
   type ChargingStationWorkerMessage,
@@ -120,6 +121,10 @@ export class Bootstrap extends EventEmitter {
     return this.chargingStationsByTemplate.get(templateName)?.lastIndex ?? 0
   }
 
+  public getPerformanceStatistics (): IterableIterator<Statistics> | undefined {
+    return this.storage?.getPerformanceStatistics()
+  }
+
   private get numberOfAddedChargingStations (): number {
     return [...this.chargingStationsByTemplate.values()].reduce(
       (accumulator, value) => accumulator + value.added,
@@ -146,6 +151,15 @@ export class Bootstrap extends EventEmitter {
           ChargingStationWorkerMessageEvents.performanceStatistics,
           this.workerEventPerformanceStatistics
         )
+        this.on(
+          ChargingStationWorkerMessageEvents.workerElementError,
+          (eventError: ChargingStationWorkerEventError) => {
+            logger.error(
+              `${this.logPrefix()} ${moduleName}.start: Error occurred while handling '${eventError.event}' event on worker:`,
+              eventError
+            )
+          }
+        )
         this.initializeCounters()
         const workerConfiguration = Configuration.getConfigurationSection<WorkerConfiguration>(
           ConfigurationSection.worker
@@ -334,30 +348,24 @@ export class Bootstrap extends EventEmitter {
     try {
       switch (msg.event) {
         case ChargingStationWorkerMessageEvents.added:
-          this.emit(ChargingStationWorkerMessageEvents.added, msg.data as ChargingStationData)
+          this.emit(ChargingStationWorkerMessageEvents.added, msg.data)
           break
         case ChargingStationWorkerMessageEvents.started:
-          this.emit(ChargingStationWorkerMessageEvents.started, msg.data as ChargingStationData)
+          this.emit(ChargingStationWorkerMessageEvents.started, msg.data)
           break
         case ChargingStationWorkerMessageEvents.stopped:
-          this.emit(ChargingStationWorkerMessageEvents.stopped, msg.data as ChargingStationData)
+          this.emit(ChargingStationWorkerMessageEvents.stopped, msg.data)
           break
         case ChargingStationWorkerMessageEvents.updated:
-          this.emit(ChargingStationWorkerMessageEvents.updated, msg.data as ChargingStationData)
+          this.emit(ChargingStationWorkerMessageEvents.updated, msg.data)
           break
         case ChargingStationWorkerMessageEvents.performanceStatistics:
-          this.emit(
-            ChargingStationWorkerMessageEvents.performanceStatistics,
-            msg.data as Statistics
-          )
+          this.emit(ChargingStationWorkerMessageEvents.performanceStatistics, msg.data)
           break
         case ChargingStationWorkerMessageEvents.addedWorkerElement:
+          this.emit(ChargingStationWorkerMessageEvents.addWorkerElement, msg.data)
           break
         case ChargingStationWorkerMessageEvents.workerElementError:
-          logger.error(
-            `${this.logPrefix()} ${moduleName}.messageHandler: Error occurred while handling '${(msg.data as ChargingStationWorkerEventError).event}' event on worker:`,
-            msg.data
-          )
           this.emit(ChargingStationWorkerMessageEvents.workerElementError, msg.data)
           break
         default:
@@ -480,7 +488,11 @@ export class Bootstrap extends EventEmitter {
     }
   }
 
-  public async addChargingStation (index: number, stationTemplateFile: string): Promise<void> {
+  public async addChargingStation (
+    index: number,
+    stationTemplateFile: string,
+    options?: ChargingStationOptions
+  ): Promise<void> {
     await this.workerImplementation?.addElement({
       index,
       templateFile: join(
@@ -488,7 +500,8 @@ export class Bootstrap extends EventEmitter {
         'assets',
         'station-templates',
         stationTemplateFile
-      )
+      ),
+      options
     })
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     this.chargingStationsByTemplate.get(parse(stationTemplateFile).name)!.lastIndex = max(