constructor(storageURI: string, logPrefix: string, storageType: StorageType) {
super(storageURI, logPrefix);
this.storageType = storageType;
- this.dbName = this.storageURI.pathname.replace(/(?:^\/)|(?:\/$)/g, '') ?? Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME;
+ this.dbName = this.getDBName();
}
public async storePerformanceStatistics(performanceStatistics: Statistics): Promise<void> {
await this.orm.close();
}
+ private getDBName(): string {
+ if (this.storageType === StorageType.SQLITE) {
+ return Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME;
+ }
+ return this.storageURI.pathname.replace(/(?:^\/)|(?:\/$)/g, '') ?? Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME;
+ }
+
private getOptions(): Configuration<IDatabaseDriver<Connection>> | Options<IDatabaseDriver<Connection>> {
return {
entities: [PerformanceRecord, PerformanceData],
dbName: this.dbName,
type: this.storageType as MikroORMDBType,
- clientUrl: this.storageURI.toString()
+ clientUrl: this.getClientUrl()
};
}
+
+ private getClientUrl(): string {
+ switch (this.storageType) {
+ case StorageType.SQLITE:
+ return this.storageURI.pathname;
+ case StorageType.MARIA_DB:
+ case StorageType.MYSQL:
+ return this.storageURI.toString();
+ }
+ }
}
}
static getPerformanceStorage(): StorageConfiguration {
- const defaultJSONFilePathURI = `file://${path.join(path.resolve(__dirname, '../../'), Constants.DEFAULT_PERFORMANCE_RECORDS_FILENAME)}`;
- const SQLiteFileName = `${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db`;
- const defaultSQLiteFilePathURI = `file://${path.join(path.resolve(__dirname, '../../'), SQLiteFileName)}`;
let storageConfiguration: StorageConfiguration;
if (Configuration.objectHasOwnProperty(Configuration.getConfig(), 'performanceStorage')) {
storageConfiguration =
...Configuration.objectHasOwnProperty(Configuration.getConfig().performanceStorage, 'type') ? { type: Configuration.getConfig().performanceStorage.type } : { type: StorageType.JSON_FILE },
...Configuration.objectHasOwnProperty(Configuration.getConfig().performanceStorage, 'URI')
? { URI: Configuration.getConfig().performanceStorage.URI }
- : { URI: (Configuration.getConfig().performanceStorage.type === StorageType.JSON_FILE) ? defaultJSONFilePathURI : defaultSQLiteFilePathURI }
+ : { URI: this.getDefaultPerformanceStorageURI(Configuration.getConfig()?.performanceStorage?.type ?? StorageType.JSON_FILE) }
};
} else {
storageConfiguration =
{
enabled: false,
type: StorageType.JSON_FILE,
- URI: defaultJSONFilePathURI
+ URI: this.getDefaultPerformanceStorageURI(StorageType.JSON_FILE)
};
}
return storageConfiguration;
}
}
+ private static getDefaultPerformanceStorageURI(storageType: StorageType) {
+ const SQLiteFileName = `${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db`;
+ switch (storageType) {
+ case StorageType.JSON_FILE:
+ return `file://${path.join(path.resolve(__dirname, '../../'), Constants.DEFAULT_PERFORMANCE_RECORDS_FILENAME)}`;
+ case StorageType.SQLITE:
+ return `file://${path.join(path.resolve(__dirname, '../../'), SQLiteFileName)}`;
+ default:
+ throw new Error(`Performance storage URI is mandatory with storage type '${storageType}'`);
+ }
+ }
+
private static objectHasOwnProperty(object: any, property: string): boolean {
return Object.prototype.hasOwnProperty.call(object, property) as boolean;
}