type EmptyObject,
type HandleErrorParams,
type Statistics,
- StorageType
+ StorageType,
} from '../../types/index.js'
-import { logger, setDefaultErrorParams } from '../../utils/index.js'
+import { logger } from '../../utils/index.js'
export abstract class Storage {
- protected readonly storageUri: URL
- protected readonly logPrefix: string
- protected dbName!: string
private static readonly performanceStatistics = new Map<string, Statistics>()
+ protected dbName!: string
+ protected readonly logPrefix: string
+ protected readonly storageUri: URL
constructor (storageUri: string, logPrefix: string) {
this.storageUri = new URL(storageUri)
this.logPrefix = logPrefix
}
- protected handleDBError (
+ public abstract close (): Promise<void> | void
+
+ public getPerformanceStatistics (): IterableIterator<Statistics> {
+ return Storage.performanceStatistics.values()
+ }
+
+ public abstract open (): Promise<void> | void
+
+ public abstract storePerformanceStatistics (
+ performanceStatistics: Statistics
+ ): Promise<void> | void
+
+ protected clearPerformanceStatistics (): void {
+ Storage.performanceStatistics.clear()
+ }
+
+ protected getDBNameFromStorageType (type: StorageType): DBName | undefined {
+ switch (type) {
+ case StorageType.MARIA_DB:
+ return DBName.MARIA_DB
+ case StorageType.MONGO_DB:
+ return DBName.MONGO_DB
+ case StorageType.MYSQL:
+ return DBName.MYSQL
+ case StorageType.SQLITE:
+ return DBName.SQLITE
+ }
+ }
+
+ protected handleDBStorageError (
type: StorageType,
error: Error,
table?: string,
- params: HandleErrorParams<EmptyObject> = { throwError: false, consoleOut: false }
+ params: HandleErrorParams<EmptyObject> = {
+ consoleOut: false,
+ throwError: false,
+ }
): void {
- setDefaultErrorParams(params, { throwError: false, consoleOut: false })
+ params = {
+ ...{
+ consoleOut: false,
+ throwError: false,
+ },
+ ...params,
+ }
const inTableOrCollectionStr = table != null && ` in table or collection '${table}'`
logger.error(
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
`${this.logPrefix} ${this.getDBNameFromStorageType(type)} error '${
error.message
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
}'${inTableOrCollectionStr}:`,
error
)
}
}
- protected getDBNameFromStorageType (type: StorageType): DBName | undefined {
- switch (type) {
- case StorageType.SQLITE:
- return DBName.SQLITE
- case StorageType.MARIA_DB:
- return DBName.MARIA_DB
- case StorageType.MYSQL:
- return DBName.MYSQL
- case StorageType.MONGO_DB:
- return DBName.MONGO_DB
- }
- }
-
- public getPerformanceStatistics (): IterableIterator<Statistics> {
- return Storage.performanceStatistics.values()
- }
-
protected setPerformanceStatistics (performanceStatistics: Statistics): void {
Storage.performanceStatistics.set(performanceStatistics.id, performanceStatistics)
}
-
- protected clearPerformanceStatistics (): void {
- Storage.performanceStatistics.clear()
- }
-
- public abstract open (): void | Promise<void>
- public abstract close (): void | Promise<void>
- public abstract storePerformanceStatistics (
- performanceStatistics: Statistics
- ): void | Promise<void>
}