refactor: cleanup worker related type definitions
[e-mobility-charging-stations-simulator.git] / src / performance / storage / JsonFileStorage.ts
index f44d9f2b35adc56ca0d9d503e927ccfac6eae760..97ab104ccfb73a11fb52aafd8ca408eeaf1ff84f 100644 (file)
@@ -1,21 +1,14 @@
-// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
+// Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
 
 import { closeSync, existsSync, mkdirSync, openSync, writeSync } from 'node:fs'
 import { dirname } from 'node:path'
 
-import { Storage } from './Storage.js'
 import { BaseError } from '../../exception/index.js'
-import { FileType, type Statistics } from '../../types/index.js'
-import {
-  AsyncLock,
-  AsyncLockType,
-  JSONStringifyWithMapSupport,
-  handleFileException
-} from '../../utils/index.js'
+import { FileType, MapStringifyFormat, type Statistics } from '../../types/index.js'
+import { AsyncLock, AsyncLockType, handleFileException, JSONStringify } from '../../utils/index.js'
+import { Storage } from './Storage.js'
 
 export class JsonFileStorage extends Storage {
-  private static performanceRecords: Map<string, Statistics>
-
   private fd?: number
 
   constructor (storageUri: string, logPrefix: string) {
@@ -24,17 +17,17 @@ export class JsonFileStorage extends Storage {
   }
 
   public storePerformanceStatistics (performanceStatistics: Statistics): void {
+    this.setPerformanceStatistics(performanceStatistics)
     this.checkPerformanceRecordsFile()
-    JsonFileStorage.performanceRecords.set(performanceStatistics.id, performanceStatistics)
     AsyncLock.runExclusive(AsyncLockType.performance, () => {
       writeSync(
         // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
         this.fd!,
-        JSONStringifyWithMapSupport([...JsonFileStorage.performanceRecords.values()], 2),
+        JSONStringify([...this.getPerformanceStatistics()], 2, MapStringifyFormat.object),
         0,
         'utf8'
       )
-    }).catch((error) => {
+    }).catch((error: unknown) => {
       handleFileException(
         this.dbName,
         FileType.PerformanceRecords,
@@ -45,7 +38,6 @@ export class JsonFileStorage extends Storage {
   }
 
   public open (): void {
-    JsonFileStorage.performanceRecords = new Map<string, Statistics>()
     try {
       if (this.fd == null) {
         if (!existsSync(dirname(this.dbName))) {
@@ -64,7 +56,7 @@ export class JsonFileStorage extends Storage {
   }
 
   public close (): void {
-    JsonFileStorage.performanceRecords.clear()
+    this.clearPerformanceStatistics()
     try {
       if (this.fd != null) {
         closeSync(this.fd)