X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fperformance%2Fstorage%2FJsonFileStorage.ts;h=2cdab50560fda0cd5e744d8265c4f1f49edeef61;hb=9d73266c8bb85d7e2bc1fab9954a76910fd689eb;hp=9b016f0637bad0c15cbfa9b18700c6c10801ceaa;hpb=b77a543f4c2e5998b0373b44bd08930e82a64bcf;p=e-mobility-charging-stations-simulator.git diff --git a/src/performance/storage/JsonFileStorage.ts b/src/performance/storage/JsonFileStorage.ts index 9b016f06..2cdab505 100644 --- a/src/performance/storage/JsonFileStorage.ts +++ b/src/performance/storage/JsonFileStorage.ts @@ -1,12 +1,15 @@ // Copyright Jerome Benoit. 2021. All Rights Reserved. -import Constants from '../../utils/Constants'; -import FileUtils from '../../utils/FileUtils'; -import Statistics from '../../types/Statistics'; -import { Storage } from './Storage'; import fs from 'fs'; + import lockfile from 'proper-lockfile'; +import { FileType } from '../../types/FileType'; +import type Statistics from '../../types/Statistics'; +import FileUtils from '../../utils/FileUtils'; +import Utils from '../../utils/Utils'; +import { Storage } from './Storage'; + export class JsonFileStorage extends Storage { private fd: number | null = null; @@ -17,33 +20,33 @@ export class JsonFileStorage extends Storage { public storePerformanceStatistics(performanceStatistics: Statistics): void { this.checkPerformanceRecordsFile(); - lockfile.lock(this.dbName, { stale: 5000, retries: 3 }) + lockfile + .lock(this.dbName, { stale: 5000, retries: 3 }) .then(async (release) => { try { const fileData = fs.readFileSync(this.dbName, 'utf8'); - const performanceRecords: Statistics[] = fileData ? JSON.parse(fileData) as Statistics[] : []; + const performanceRecords: Statistics[] = fileData + ? (JSON.parse(fileData) as Statistics[]) + : []; performanceRecords.push(performanceStatistics); fs.writeFileSync( this.dbName, - JSON.stringify(performanceRecords, - (key, value) => { - if (value instanceof Map) { - return { - dataType: 'Map', - value: [...value] - }; - } - return value as Statistics; - }, - 2), + Utils.JSONStringifyWithMapSupport(performanceRecords, 2), 'utf8' ); } catch (error) { - FileUtils.handleFileException(this.logPrefix, Constants.PERFORMANCE_RECORDS_FILETYPE, this.dbName, error as NodeJS.ErrnoException); + FileUtils.handleFileException( + this.logPrefix, + FileType.PerformanceRecords, + this.dbName, + error as NodeJS.ErrnoException + ); } await release(); }) - .catch(() => { /* This is intentional */ }); + .catch(() => { + /* This is intentional */ + }); } public open(): void { @@ -52,7 +55,12 @@ export class JsonFileStorage extends Storage { this.fd = fs.openSync(this.dbName, 'a+'); } } catch (error) { - FileUtils.handleFileException(this.logPrefix, Constants.PERFORMANCE_RECORDS_FILETYPE, this.dbName, error as NodeJS.ErrnoException); + FileUtils.handleFileException( + this.logPrefix, + FileType.PerformanceRecords, + this.dbName, + error as NodeJS.ErrnoException + ); } } @@ -63,13 +71,20 @@ export class JsonFileStorage extends Storage { this.fd = null; } } catch (error) { - FileUtils.handleFileException(this.logPrefix, Constants.PERFORMANCE_RECORDS_FILETYPE, this.dbName, error as NodeJS.ErrnoException); + FileUtils.handleFileException( + this.logPrefix, + FileType.PerformanceRecords, + this.dbName, + error as NodeJS.ErrnoException + ); } } private checkPerformanceRecordsFile(): void { if (!this?.fd) { - throw new Error(`${this.logPrefix} Performance records '${this.dbName}' file descriptor not found`); + throw new Error( + `${this.logPrefix} Performance records '${this.dbName}' file descriptor not found` + ); } } }