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