Przeglądaj źródła

Рефакторинг конфига

Book Pauk 5 lat temu
rodzic
commit
a318568b72

+ 0 - 37
server/config/configSaver.js

@@ -1,37 +0,0 @@
-const fs = require('fs-extra');
-const _ = require('lodash');
-
-const propsToSave = [
-    'maxUploadFileSize',
-    'maxTempPublicDirSize',
-    'maxUploadPublicDirSize',
-    'useExternalBookConverter',
-    
-    'servers',
-];
-
-async function load(config, configFilename) {
-    if (!configFilename) {
-        configFilename = `${config.dataDir}/config.json`;
-
-        if (!await fs.pathExists(configFilename)) {
-            save(config);
-            return;
-        }
-    }
-
-    const data = await fs.readFile(configFilename, 'utf8');
-    Object.assign(config, JSON.parse(data));
-}
-
-async function save(config) {
-    const configFilename = `${config.dataDir}/config.json`;
-    const dataToSave = _.pick(config, propsToSave);
-
-    await fs.writeFile(configFilename, JSON.stringify(dataToSave, null, 4));
-}
-
-module.exports = {
-    load,
-    save
-};

+ 81 - 13
server/config/index.js

@@ -1,23 +1,91 @@
+const _ = require('lodash');
 const fs = require('fs-extra');
 const fs = require('fs-extra');
-const utils = require('../core/utils');
 
 
 const branchFilename = __dirname + '/application_env';
 const branchFilename = __dirname + '/application_env';
 
 
-let branch = 'production';
-try {
-    fs.accessSync(branchFilename);
-    branch = fs.readFileSync(branchFilename, 'utf8').trim();
-} catch (err) {
-}
+const propsToSave = [
+    'maxUploadFileSize',
+    'maxTempPublicDirSize',
+    'maxUploadPublicDirSize',
+    'useExternalBookConverter',
+    
+    'servers',
+];
+
+let instance = null;
+
+//singleton
+class ConfigManager {
+    constructor() {    
+        if (!instance) {
+            this.inited = false;
+
+            instance = this;
+        }
+
+        return instance;
+    }
+
+    async init() {
+        if (this.inited)
+            throw new Error('already inited');
+
+        this.branch = 'production';
+        try {
+            await fs.access(branchFilename);
+            this.branch = (await fs.readFile(branchFilename, 'utf8')).trim();
+        } catch (err) {
+            //
+        }
 
 
-process.env.NODE_ENV = branch;
+        process.env.NODE_ENV = this.branch;
 
 
-const confFilename = __dirname + `/${branch}.js`;
+        this.branchConfigFile = __dirname + `/${this.branch}.js`;
+        await fs.access(this.branchConfigFile);
+        this._config = require(this.branchConfigFile);
 
 
-fs.accessSync(confFilename);
+        this._userConfigFile = `${this._config.dataDir}/config.json`;
 
 
-const config = require(confFilename);
+        this.inited = true;
+    }
 
 
-//fs.ensureDirSync(config.dataDir);
+    get config() {
+        if (!this.inited)
+            throw new Error('not inited');
+        return _.cloneDeep(this._config);
+    }
+
+    set config(value) {
+        Object.assign(this._config, value);
+    }
+
+    get userConfigFile() {
+        return this._userConfigFile;
+    }
+
+    set userConfigFile(value) {
+        if (value)
+            this._userConfigFile = value;
+    }
+
+    async load() {
+        if (!this.inited)
+            throw new Error('not inited');
+        if (!await fs.pathExists(this.userConfigFile)) {
+            await this.save();
+            return;
+        }
+
+        const data = await fs.readFile(this.userConfigFile, 'utf8');
+        this.config = JSON.parse(data);
+    }
+
+    async save() {
+        if (!this.inited)
+            throw new Error('not inited');
+        const dataToSave = _.pick(this._config, propsToSave);
+        await fs.writeFile(this.userConfigFile, JSON.stringify(dataToSave, null, 4));
+    }
+}
 
 
-module.exports = config;
+module.exports = ConfigManager;

+ 7 - 5
server/core/AppLogger.js

@@ -1,5 +1,6 @@
 const fs = require('fs-extra');
 const fs = require('fs-extra');
 const Logger = require('./Logger');
 const Logger = require('./Logger');
+const configManager = new (require('../config'))();//singleton
 
 
 let instance = null;
 let instance = null;
 
 
@@ -14,14 +15,15 @@ class AppLogger {
         return instance;
         return instance;
     }
     }
 
 
-    init(config) {
+    async init() {
         if (this.inited)
         if (this.inited)
             throw new Error('already inited');
             throw new Error('already inited');
 
 
+        let config = configManager.config;
         let loggerParams = null;
         let loggerParams = null;
 
 
         if (config.loggingEnabled) {
         if (config.loggingEnabled) {
-            fs.ensureDirSync(config.logDir);
+            await fs.ensureDir(config.logDir);
             loggerParams = [
             loggerParams = [
                 {log: 'ConsoleLog'},
                 {log: 'ConsoleLog'},
                 {log: 'FileLog', fileName: `${config.logDir}/${config.name}.log`},
                 {log: 'FileLog', fileName: `${config.logDir}/${config.name}.log`},
@@ -35,9 +37,9 @@ class AppLogger {
     }
     }
 
 
     get logger() {
     get logger() {
-        if (this.inited)
-            return this._logger;
-        throw new Error('not inited');
+        if (!this.inited)
+            throw new Error('not inited');
+        return this._logger;
     }
     }
 
 
     get log() {
     get log() {

+ 2 - 1
server/db/ConnManager.js

@@ -1,6 +1,7 @@
 const fs = require('fs-extra');
 const fs = require('fs-extra');
 
 
 const SqliteConnectionPool = require('./SqliteConnectionPool');
 const SqliteConnectionPool = require('./SqliteConnectionPool');
+const configManager = new (require('../config'))();//singleton
 const log = new (require('../core/AppLogger'))().log;//singleton
 const log = new (require('../core/AppLogger'))().log;//singleton
 
 
 const migrations = {
 const migrations = {
@@ -23,7 +24,7 @@ class ConnManager {
     }
     }
 
 
     async init(config) {
     async init(config) {
-        this.config = config;
+        this.config = configManager.config;
         this._pool = {};
         this._pool = {};
 
 
         const force = null;//(config.branch == 'development' ? 'last' : null);
         const force = null;//(config.branch == 'development' ? 'last' : null);

+ 24 - 18
server/index.js

@@ -1,19 +1,26 @@
-const config = require('./config');
-const appLogger = new (require('./core/AppLogger'))();//singleton
-appLogger.init(config);
-const log = appLogger.log;
-
-const configSaver = require('./config/configSaver');
-const argv = require('minimist')(process.argv.slice(2));
-
 const fs = require('fs-extra');
 const fs = require('fs-extra');
 const path = require('path');
 const path = require('path');
+const argv = require('minimist')(process.argv.slice(2));
 const express = require('express');
 const express = require('express');
 const compression = require('compression');
 const compression = require('compression');
 
 
-const connManager = new(require('./db/ConnManager'))();//singleton
-
 async function init() {
 async function init() {
+    //config
+    const configManager = new (require('./config'))();//singleton
+    await configManager.init();
+    configManager.userConfigFile = argv.config;
+    await configManager.load();
+    const config = configManager.config;
+
+    //logger
+    const appLogger = new (require('./core/AppLogger'))();//singleton
+    await appLogger.init();
+    const log = appLogger.log;
+
+    //dirs
+    log(`${config.name} v${config.version}`);
+    log('Initializing');
+
     await fs.ensureDir(config.dataDir);
     await fs.ensureDir(config.dataDir);
     await fs.ensureDir(config.uploadDir);
     await fs.ensureDir(config.uploadDir);
     await fs.ensureDir(config.sharedDir);
     await fs.ensureDir(config.sharedDir);
@@ -28,16 +35,14 @@ async function init() {
         await fs.move(appNewDir, appDir);
         await fs.move(appNewDir, appDir);
     }
     }
 
 
-    //загружаем конфиг из файла
-    await configSaver.load(config, argv.config);
+    //connections
+    const connManager = new (require('./db/ConnManager'))();//singleton
+    await connManager.init();
 }
 }
 
 
-async function main() {
-    log(`${config.name} v${config.version}`);
-    log('Initializing');
-    await init();
-
-    await connManager.init(config);
+async function main() {    
+    const log = new (require('./core/AppLogger'))().log;//singleton
+    const config = new (require('./config'))().config;//singleton
 
 
     //servers
     //servers
     for (let server of config.servers) {
     for (let server of config.servers) {
@@ -88,6 +93,7 @@ async function main() {
 
 
 (async() => {
 (async() => {
     try {
     try {
+        await init();
         await main();
         await main();
     } catch (e) {
     } catch (e) {
         console.error(e);
         console.error(e);