X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fperformance%2Fstorage%2FJsonFileStorage.ts;h=592504a77c73ae104035da36f6415f4bf2986ffb;hb=8d2a9e1c5a2b21932c77846bdf10cbe726797685;hp=8aec3dc3b0a6f3b676351670a21c189137029515;hpb=061ff2b0d7abb884c9568d669e70ce1d65bcb628;p=e-mobility-charging-stations-simulator.git diff --git a/src/performance/storage/JsonFileStorage.ts b/src/performance/storage/JsonFileStorage.ts index 8aec3dc3..592504a7 100644 --- a/src/performance/storage/JsonFileStorage.ts +++ b/src/performance/storage/JsonFileStorage.ts @@ -1,91 +1,82 @@ -// 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 { closeSync, existsSync, mkdirSync, openSync, writeSync } from 'node:fs' +import { dirname } from 'node:path' -import { Storage } from './Storage'; -import { BaseError } from '../../exception'; -import { FileType, type Statistics } from '../../types'; -import { - AsyncLock, - AsyncLockType, - JSONStringifyWithMapSupport, - handleFileException, - isNullOrUndefined, -} from '../../utils'; +import { BaseError } from '../../exception/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 readonly performanceRecords: Map = new Map< - string, - Statistics - >(); + private fd?: number - private fd?: number; - - constructor(storageUri: string, logPrefix: string) { - super(storageUri, logPrefix); - this.dbName = this.storageUri.pathname; + constructor (storageUri: string, logPrefix: string) { + super(storageUri, logPrefix) + this.dbName = this.storageUri.pathname } - public storePerformanceStatistics(performanceStatistics: Statistics): void { - this.checkPerformanceRecordsFile(); - JsonFileStorage.performanceRecords.set(performanceStatistics.id, performanceStatistics); + public storePerformanceStatistics (performanceStatistics: Statistics): void { + this.setPerformanceStatistics(performanceStatistics) + this.checkPerformanceRecordsFile() 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) => { + 'utf8' + ) + }).catch(error => { handleFileException( this.dbName, FileType.PerformanceRecords, error as NodeJS.ErrnoException, - this.logPrefix, - ); - }); + this.logPrefix + ) + }) } - public open(): void { + public open (): void { try { - if (isNullOrUndefined(this?.fd)) { + if (this.fd == null) { if (!existsSync(dirname(this.dbName))) { - mkdirSync(dirname(this.dbName), { recursive: true }); + mkdirSync(dirname(this.dbName), { recursive: true }) } - this.fd = openSync(this.dbName, 'w'); + this.fd = openSync(this.dbName, 'w') } } catch (error) { handleFileException( this.dbName, FileType.PerformanceRecords, error as NodeJS.ErrnoException, - this.logPrefix, - ); + this.logPrefix + ) } } - public close(): void { + public close (): void { + this.clearPerformanceStatistics() try { - if (this?.fd) { - closeSync(this.fd); - delete this?.fd; + if (this.fd != null) { + closeSync(this.fd) + delete this.fd } } catch (error) { handleFileException( this.dbName, FileType.PerformanceRecords, error as NodeJS.ErrnoException, - this.logPrefix, - ); + this.logPrefix + ) } } - private checkPerformanceRecordsFile(): void { - if (!this?.fd) { + private checkPerformanceRecordsFile (): void { + if (this.fd == null) { throw new BaseError( - `${this.logPrefix} Performance records '${this.dbName}' file descriptor not found`, - ); + `${this.logPrefix} Performance records '${this.dbName}' file descriptor not found` + ) } } }