diff --git a/api-server/config-save.js b/api-server/config-save.js new file mode 100644 index 0000000..db27723 --- /dev/null +++ b/api-server/config-save.js @@ -0,0 +1,65 @@ +const MODULE_NAME = 'KOMODO-SDK.API-SERVER.CONFIG-SAVE'; + +const fs = require('fs'); +const logger = require('tektrans-logger'); +const moment = require('moment'); +const config = require('../config'); +const matrix = require('../matrix'); + +if (!fs.existsSync('config-backup')) fs.mkdirSync('config-backup'); + +const backup = async (xid) => { + try { + const backupFilename = `config-backup/config_${moment().format('YYYYMMDD_HHmmss.SS')}.json`; + await fs.promises.copyFile('config.json', backupFilename); + logger.verbose(`${MODULE_NAME} 88213811: Backup saved`, { + xid, + backupFilename, + }); + + return backupFilename; + } catch (e) { + const newE = new Error(`${MODULE_NAME} 0257A553: Exception on backup`); + newE.code = 'E_BACKUP_CONFIG'; + + logger.warn(newE.message, { + xid, + eCode: e.code, + eMessage: e.message || e, + }); + + throw newE; + } +}; + +module.exports = async (xid) => { + try { + if (!matrix.config_is_dirty) { + logger.verbose(`${MODULE_NAME} 4B263CB4: No need to save because config is not dirty`, { xid }); + return; + } + + const backupFilename = await backup(xid); + + await fs.promises.writeFile( + 'config.json', + `${JSON.stringify(config, null, 2)}\n`, + { mode: 0o640 }, + ); + + matrix.config_is_dirty = false; + + logger.verbose(`${MODULE_NAME} DE655EEF: Config saved`, { xid, backupFilename }); + } catch (e) { + const newE = new Error(`${MODULE_NAME} CD9C1BE1: Exception on saving config file`); + newE.code = 'E_SAVE_CONFIG'; + + logger.warn(newE.message, { + xid, + eCode: e.code, + eMessage: e.message || e, + }); + + throw newE; + } +};