|
24 | 24 | import {Database} from 'ueberdb2';
|
25 | 25 | import settings from '../utils/Settings';
|
26 | 26 | import log4js from 'log4js';
|
27 |
| -const stats = require('../stats') |
| 27 | +import stats from '../stats'; |
28 | 28 |
|
29 | 29 | const logger = log4js.getLogger('ueberDB');
|
30 | 30 |
|
31 | 31 | /**
|
32 | 32 | * The UeberDB Object that provides the database functions
|
33 | 33 | */
|
34 |
| -exports.db = null; |
| 34 | +export let db:Database|null = null; |
35 | 35 |
|
36 | 36 | /**
|
37 | 37 | * Initializes the database with the settings provided by the settings module
|
38 | 38 | */
|
39 |
| -exports.init = async () => { |
40 |
| - exports.db = new Database(settings.dbType, settings.dbSettings, null, logger); |
41 |
| - await exports.db.init(); |
42 |
| - if (exports.db.metrics != null) { |
43 |
| - for (const [metric, value] of Object.entries(exports.db.metrics)) { |
| 39 | +export const init = async () => { |
| 40 | + db = new Database(settings.dbType, settings.dbSettings, null, logger); |
| 41 | + await db.init(); |
| 42 | + if (db.metrics != null) { |
| 43 | + for (const [metric, value] of Object.entries(db.metrics)) { |
44 | 44 | if (typeof value !== 'number') continue;
|
45 |
| - stats.gauge(`ueberdb_${metric}`, () => exports.db.metrics[metric]); |
| 45 | + stats.gauge(`ueberdb_${metric}`, () => db!.metrics[metric]); |
46 | 46 | }
|
47 | 47 | }
|
48 | 48 | for (const fn of ['get', 'set', 'findKeys', 'getSub', 'setSub', 'remove']) {
|
49 |
| - const f = exports.db[fn]; |
50 |
| - exports[fn] = async (...args:string[]) => await f.call(exports.db, ...args); |
51 |
| - Object.setPrototypeOf(exports[fn], Object.getPrototypeOf(f)); |
52 |
| - Object.defineProperties(exports[fn], Object.getOwnPropertyDescriptors(f)); |
| 49 | + // @ts-ignore |
| 50 | + const f = db[fn]; |
| 51 | + // @ts-ignore |
| 52 | + dbInstance[fn] = async (...args:string[]) => await f.call(db, ...args); |
| 53 | + // @ts-ignore |
| 54 | + Object.setPrototypeOf(dbInstance[fn], Object.getPrototypeOf(f)); |
| 55 | + // @ts-ignore |
| 56 | + Object.defineProperties(dbInstance[fn], Object.getOwnPropertyDescriptors(f)); |
53 | 57 | }
|
54 | 58 | };
|
55 | 59 |
|
56 |
| -exports.shutdown = async (hookName: string, context:any) => { |
57 |
| - if (exports.db != null) await exports.db.close(); |
58 |
| - exports.db = null; |
| 60 | +export const shutdown = async (hookName: string, context:any) => { |
| 61 | + if (db != null) await db.close(); |
| 62 | + db = null; |
59 | 63 | logger.log('Database closed');
|
60 | 64 | };
|
| 65 | + |
| 66 | +let dbInstance = {} as { |
| 67 | + get: (key:string) => any; |
| 68 | + set: (key:string, value:any) => void; |
| 69 | + findKeys: (key:string) => string[]; |
| 70 | + getSub: (key:string, subkey:string) => any; |
| 71 | + setSub: (key:string, subkey:string, value:any) => void; |
| 72 | + remove: (key:string) => void; |
| 73 | + init: () => Promise<void>; |
| 74 | +} |
| 75 | + |
| 76 | +dbInstance.init = init |
| 77 | + |
| 78 | +export default dbInstance |
0 commit comments