Commit 4a7ed5bd6b8d31c41a98369a72289530376d1bdf

Authored by Adhidarma Hadiwinoto
1 parent d5dfe4ff42
Exists in master

Add config-save on api-server

Showing 1 changed file with 65 additions and 0 deletions Side-by-side Diff

api-server/config-save.js
... ... @@ -0,0 +1,65 @@
  1 +const MODULE_NAME = 'KOMODO-SDK.API-SERVER.CONFIG-SAVE';
  2 +
  3 +const fs = require('fs');
  4 +const logger = require('tektrans-logger');
  5 +const moment = require('moment');
  6 +const config = require('../config');
  7 +const matrix = require('../matrix');
  8 +
  9 +if (!fs.existsSync('config-backup')) fs.mkdirSync('config-backup');
  10 +
  11 +const backup = async (xid) => {
  12 + try {
  13 + const backupFilename = `config-backup/config_${moment().format('YYYYMMDD_HHmmss.SS')}.json`;
  14 + await fs.promises.copyFile('config.json', backupFilename);
  15 + logger.verbose(`${MODULE_NAME} 88213811: Backup saved`, {
  16 + xid,
  17 + backupFilename,
  18 + });
  19 +
  20 + return backupFilename;
  21 + } catch (e) {
  22 + const newE = new Error(`${MODULE_NAME} 0257A553: Exception on backup`);
  23 + newE.code = 'E_BACKUP_CONFIG';
  24 +
  25 + logger.warn(newE.message, {
  26 + xid,
  27 + eCode: e.code,
  28 + eMessage: e.message || e,
  29 + });
  30 +
  31 + throw newE;
  32 + }
  33 +};
  34 +
  35 +module.exports = async (xid) => {
  36 + try {
  37 + if (!matrix.config_is_dirty) {
  38 + logger.verbose(`${MODULE_NAME} 4B263CB4: No need to save because config is not dirty`, { xid });
  39 + return;
  40 + }
  41 +
  42 + const backupFilename = await backup(xid);
  43 +
  44 + await fs.promises.writeFile(
  45 + 'config.json',
  46 + `${JSON.stringify(config, null, 2)}\n`,
  47 + { mode: 0o640 },
  48 + );
  49 +
  50 + matrix.config_is_dirty = false;
  51 +
  52 + logger.verbose(`${MODULE_NAME} DE655EEF: Config saved`, { xid, backupFilename });
  53 + } catch (e) {
  54 + const newE = new Error(`${MODULE_NAME} CD9C1BE1: Exception on saving config file`);
  55 + newE.code = 'E_SAVE_CONFIG';
  56 +
  57 + logger.warn(newE.message, {
  58 + xid,
  59 + eCode: e.code,
  60 + eMessage: e.message || e,
  61 + });
  62 +
  63 + throw newE;
  64 + }
  65 +};