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