65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
|
const path = require('path');
|
||
|
const fs = require('fs');
|
||
|
const chalk = require('chalk');
|
||
|
|
||
|
const { Provider } = require('./interfaces/');
|
||
|
|
||
|
class StorageManager {
|
||
|
|
||
|
constructor(client, options = {}) {
|
||
|
|
||
|
this.client = client;
|
||
|
|
||
|
this.providers = {};
|
||
|
this.options = options;
|
||
|
|
||
|
}
|
||
|
|
||
|
async initialize() {
|
||
|
|
||
|
// this.manager.logger.write('debug', "Initializing storage providers.");
|
||
|
|
||
|
const _providers = path.join(process.cwd(), "structure/storage/providers");
|
||
|
const providers = fs.readdirSync(_providers);
|
||
|
|
||
|
for(const _provider of providers) {
|
||
|
|
||
|
let provider = require(path.join(_providers, _provider));
|
||
|
provider = new provider(this.client, this.options);
|
||
|
|
||
|
this.providers[provider.name] = provider;
|
||
|
await provider.initialize();
|
||
|
this._log(`Provider ${chalk.bold(provider.name)} was ${chalk.bold('loaded')}.`, provider);
|
||
|
|
||
|
await provider.loadTables();
|
||
|
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
|
||
|
}
|
||
|
|
||
|
_getName(instance) {
|
||
|
if(instance instanceof Provider) return instance.name.substring(0, 5);
|
||
|
return `${instance.provider.name.substring(0, 5)}:${instance.name}`;
|
||
|
}
|
||
|
|
||
|
_error(info, instance = null) {
|
||
|
this.client.logger.error(`${chalk.bold(`[STORA]`)} ${instance ? `(${this._getName(instance)}) ` : ''}${info}`);
|
||
|
}
|
||
|
|
||
|
_log(info, instance = null) {
|
||
|
this.client.logger.info(`${chalk.bold(`[STORA]`)} ${instance ? `(${this._getName(instance)}) ` : ''}${info}`);
|
||
|
}
|
||
|
|
||
|
get mongodb() {
|
||
|
return this.providers.mongodb;
|
||
|
}
|
||
|
|
||
|
get mariadb() {
|
||
|
return this.providers.mariadb;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
module.exports = StorageManager;
|