1 // Copyright Jerome Benoit. 2021. All Rights Reserved.
3 import Constants from
'../Constants';
4 import { MongoClient
} from
'mongodb';
5 import Statistics from
'../../types/Statistics';
6 import { Storage
} from
'./Storage';
7 import { StorageType
} from
'../../types/Storage';
9 export class MongoDBStorage
extends Storage
{
10 private client
: MongoClient
;
11 private connected
: boolean;
13 constructor(storageURI
: string, logPrefix
: string) {
14 super(storageURI
, logPrefix
);
15 this.client
= new MongoClient(this.storageURI
.toString());
16 this.connected
= false;
17 this.dbName
= this.storageURI
.pathname
.replace(/(?:^\
/)|(?:\
/$
)/g
, '') ?? Constants
.DEFAULT_PERFORMANCE_RECORDS_DB_NAME
;
20 public async storePerformanceStatistics(performanceStatistics
: Statistics
): Promise
<void> {
22 this.checkDBConnection();
23 await this.client
.db(this.dbName
).collection
<Statistics
>(Constants
.PERFORMANCE_RECORDS_TABLE
).insertOne(performanceStatistics
);
25 this.handleDBError(StorageType
.MONGO_DB
, error
, Constants
.PERFORMANCE_RECORDS_TABLE
);
29 public async open(): Promise
<void> {
31 if (!this.connected
) {
32 await this.client
.connect();
33 this.connected
= true;
36 this.handleDBError(StorageType
.MONGO_DB
, error
);
40 public async close(): Promise
<void> {
43 await this.client
.close();
44 this.connected
= false;
47 this.handleDBError(StorageType
.MONGO_DB
, error
);
51 private checkDBConnection() {
52 if (!this.connected
) {
53 throw new Error(`${this.logPrefix} ${this.getDBTypeFromStorageType(StorageType.MONGO_DB)} connection not opened while trying to issue a request`);