refactor: cleanup default params in error handlers
[e-mobility-charging-stations-simulator.git] / src / performance / storage / Storage.ts
index 4724681558894674f6bb1d3decd2ea5953c276a3..39d0a1b30250b80fd825351f4d476792ef89a3a6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
+// Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
 
 import { URL } from 'node:url'
 
@@ -9,25 +9,35 @@ import {
   type Statistics,
   StorageType
 } from '../../types/index.js'
-import { logger, setDefaultErrorParams } from '../../utils/index.js'
+import { logger } from '../../utils/index.js'
 
 export abstract class Storage {
   protected readonly storageUri: URL
   protected readonly logPrefix: string
   protected dbName!: string
+  private static readonly performanceStatistics = new Map<string, Statistics>()
 
   constructor (storageUri: string, logPrefix: string) {
     this.storageUri = new URL(storageUri)
     this.logPrefix = logPrefix
   }
 
-  protected handleDBError (
+  protected handleDBStorageError (
     type: StorageType,
     error: Error,
     table?: string,
-    params: HandleErrorParams<EmptyObject> = { throwError: false, consoleOut: false }
+    params: HandleErrorParams<EmptyObject> = {
+      throwError: false,
+      consoleOut: false
+    }
   ): void {
-    setDefaultErrorParams(params, { throwError: false, consoleOut: false })
+    params = {
+      ...{
+        throwError: false,
+        consoleOut: false
+      },
+      ...params
+    }
     const inTableOrCollectionStr = table != null && ` in table or collection '${table}'`
     logger.error(
       `${this.logPrefix} ${this.getDBNameFromStorageType(type)} error '${
@@ -42,17 +52,29 @@ export abstract class Storage {
 
   protected getDBNameFromStorageType (type: StorageType): DBName | undefined {
     switch (type) {
+      case StorageType.SQLITE:
+        return DBName.SQLITE
       case StorageType.MARIA_DB:
         return DBName.MARIA_DB
-      case StorageType.MONGO_DB:
-        return DBName.MONGO_DB
       case StorageType.MYSQL:
         return DBName.MYSQL
-      case StorageType.SQLITE:
-        return DBName.SQLITE
+      case StorageType.MONGO_DB:
+        return DBName.MONGO_DB
     }
   }
 
+  public getPerformanceStatistics (): IterableIterator<Statistics> {
+    return Storage.performanceStatistics.values()
+  }
+
+  protected setPerformanceStatistics (performanceStatistics: Statistics): void {
+    Storage.performanceStatistics.set(performanceStatistics.id, performanceStatistics)
+  }
+
+  protected clearPerformanceStatistics (): void {
+    Storage.performanceStatistics.clear()
+  }
+
   public abstract open (): void | Promise<void>
   public abstract close (): void | Promise<void>
   public abstract storePerformanceStatistics (