1 // Copyright Jerome Benoit. 2021. All Rights Reserved.
3 import { Configuration
, Connection
, IDatabaseDriver
, MikroORM
, Options
} from
'@mikro-orm/core';
4 import { MikroORMDBType
, StorageType
} from
'../../types/Storage';
6 import Constants from
'../../utils/Constants';
7 import { PerformanceData
} from
'../../types/orm/entities/PerformanceData';
8 import { PerformanceRecord
} from
'../../types/orm/entities/PerformanceRecord';
9 import Statistics from
'../../types/Statistics';
10 import { Storage
} from
'./Storage';
12 export class MikroORMStorage
extends Storage
{
13 private storageType
: StorageType
;
14 private orm
: MikroORM
;
16 constructor(storageURI
: string, logPrefix
: string, storageType
: StorageType
) {
17 super(storageURI
, logPrefix
);
18 this.storageType
= storageType
;
19 this.dbName
= this.storageURI
.pathname
.replace(/(?:^\
/)|(?:\
/$
)/g
, '') ?? Constants
.DEFAULT_PERFORMANCE_RECORDS_DB_NAME
;
22 public async storePerformanceStatistics(performanceStatistics
: Statistics
): Promise
<void> {
24 const performanceRecord
= new PerformanceRecord();
25 await this.orm
.em
.persistAndFlush(performanceRecord
);
27 this.handleDBError(this.storageType
, error
, Constants
.PERFORMANCE_RECORDS_TABLE
);
31 public async open(): Promise
<void> {
32 this.orm
= await MikroORM
.init(this.getOptions(), true);
35 public async close(): Promise
<void> {
36 await this.orm
.close();
39 private getOptions(): Configuration
<IDatabaseDriver
<Connection
>> | Options
<IDatabaseDriver
<Connection
>> {
41 entities
: [PerformanceRecord
, PerformanceData
],
43 type: this.storageType
as MikroORMDBType
,
44 clientUrl
: this.storageURI
.toString()