Commit 4a7ed5bd6b8d31c41a98369a72289530376d1bdf
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 | +}; |