refactor(simulator): switch to named exports
[e-mobility-charging-stations-simulator.git] / src / performance / storage / Storage.ts
CommitLineData
edd13439 1// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
c27c3eee 2
130783a7 3import { URL } from 'node:url';
c27c3eee 4
268a74bb
JB
5import {
6 DBName,
7 type EmptyObject,
8 type HandleErrorParams,
9 type Statistics,
10 StorageType,
11} from '../../types';
12import { logger } from '../../utils/Logger';
13import { Utils } from '../../utils/Utils';
72f041bd
JB
14
15export abstract class Storage {
1f5df42a 16 protected readonly storageUri: URL;
2a370053 17 protected readonly logPrefix: string;
1895299d 18 protected dbName!: string;
72f041bd 19
1f5df42a
JB
20 constructor(storageUri: string, logPrefix: string) {
21 this.storageUri = new URL(storageUri);
72f041bd
JB
22 this.logPrefix = logPrefix;
23 }
24
e7aeea18
JB
25 protected handleDBError(
26 type: StorageType,
27 error: Error,
28 table?: string,
29 params: HandleErrorParams<EmptyObject> = { throwError: false }
30 ): void {
8f3d04b0
JB
31 const inTableOrCollectionStr =
32 (!Utils.isNullOrUndefined(table) || !table) && ` in table or collection '${table}'`;
e7aeea18 33 logger.error(
8f3d04b0
JB
34 `${this.logPrefix} ${this.getDBNameFromStorageType(type)} error '${
35 error.message
32de5a57 36 }'${inTableOrCollectionStr}:`,
e7aeea18
JB
37 error
38 );
e0a50bcd
JB
39 if (params?.throwError) {
40 throw error;
41 }
c27c3eee
JB
42 }
43
1895299d 44 protected getDBNameFromStorageType(type: StorageType): DBName | undefined {
c27c3eee
JB
45 switch (type) {
46 case StorageType.MARIA_DB:
a6b3c6c3 47 return DBName.MARIA_DB;
c27c3eee 48 case StorageType.MONGO_DB:
a6b3c6c3 49 return DBName.MONGO_DB;
c27c3eee 50 case StorageType.MYSQL:
a6b3c6c3 51 return DBName.MYSQL;
c27c3eee 52 case StorageType.SQLITE:
a6b3c6c3 53 return DBName.SQLITE;
c27c3eee 54 }
2a370053
JB
55 }
56
57 public abstract open(): void | Promise<void>;
58 public abstract close(): void | Promise<void>;
e7aeea18
JB
59 public abstract storePerformanceStatistics(
60 performanceStatistics: Statistics
61 ): void | Promise<void>;
72f041bd 62}