diff --git a/lib/apiserver/routers/smstools-config.js b/lib/apiserver/routers/smstools-config.js index 17e2529..13950f7 100644 --- a/lib/apiserver/routers/smstools-config.js +++ b/lib/apiserver/routers/smstools-config.js @@ -7,9 +7,11 @@ const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger'); const smstoolsConfig = require('../../smstools-config'); +const smstoolsConfigData = require('../../smstools-config/config-file'); const smstoolsConfigCreator = require('../../smstools-config/creator'); const smstoolsConfigSetter = require('../../smstools-config/setter'); -const smstoolsConfigData = require('../../smstools-config/config-file'); +const queuesAndProviders = require('../../smstools-config/queues-and-providers'); + const router = express.Router(); module.exports = router; @@ -151,16 +153,8 @@ async function pageInstallConfig(req, res) { }); } -function pageSmsdLog(req, res) { - // deprecated - const maxLines = (req.params.maxLines || 200); - childProcess.exec(`tail -n ${maxLines} /var/log/smsd/smsd.log | tac`, (err, stdout, stderr) => { - res.json({ - err, - stdout, - stderr, - }); - }); +function pageQueuesAndProviders(req, res) { + res.end(queuesAndProviders.dump); } router.get('/', pageIndex); @@ -172,5 +166,4 @@ router.post('/modem/set/:modemName', bodyParser.json({ type: '*/json' }), pageMo router.post('/modem/set-single-value/:modemName', bodyParser.json({ type: '*/json' }), pageModemSetSingleValue); router.get('/modem/delete/:modemName', pageModemDelete); router.get('/install-config', pageInstallConfig); -router.get('/smsd-log/:maxLines', pageSmsdLog); -router.get('/smsd-log', pageSmsdLog); +router.get('/queues-and-providers', pageQueuesAndProviders); diff --git a/lib/smstools-config/queues-and-providers.js b/lib/smstools-config/queues-and-providers.js new file mode 100644 index 0000000..5e3573c --- /dev/null +++ b/lib/smstools-config/queues-and-providers.js @@ -0,0 +1,89 @@ +const fs = require('fs'); + +const config = require('komodo-sdk/config'); +const logger = require('komodo-sdk/logger'); +const smstoolsConfig = require('./config-file'); + +const queuesBaseDir = config.smstools_queues_base_dir || '/var/spool/sms'; + +function composeQueueDir(queueName) { + return `${queuesBaseDir}/${queueName}`; +} + +async function createDirectory(dirname) { + let isExists = true; + try { + await fs.promises.access(dirname); + } catch (e) { + isExists = false; + } + + if (isExists) return; + + try { + fs.promises.mkdir(dirname, { recursive: true, mode: 0o770 }); + } catch (e) { + logger.warn('QUEUES-AND-PROVIDERS: Exception on creating directory', { + dirname, + e: e.message || e.toString(), + }); + } +} + +function queuesSorted(queuesArray) { + const result = (queuesArray || smstoolsConfig.queues || []).sort((a, b) => { + const orderA = (a && Number(a.order)) || 0; + const orderB = (b && Number(b.order)) || 0; + + if (orderA < orderB) return -1; + if (orderA > orderB) return 1; + return 0; + }); + + return result; +} + +exports.dump = async (mkdirIfQueueDirNotExists) => { + if (config.smstools_disable_queue) return ''; + + const queues = queuesSorted(); + const queuesCount = queues.length; + + const configLines = ['[queues]']; + const providerLines = ['[providers]']; + const queuesDirs = []; + let hasQueues = false; + let hasProviders = false; + for (let i = 0; i < queuesCount; i += 1) { + const queue = queues[i]; + + // eslint-disable-next-line no-continue + if (!queue.name || !queue.enabled) continue; + + const queueDir = composeQueueDir(queue.name); + queuesDirs.push(queueDir); + if (mkdirIfQueueDirNotExists) { + // eslint-disable-next-line no-await-in-loop + await createDirectory(queueDir); + } + + const line = `${queue.name} = ${queueDir}`; + configLines.push(line); + hasQueues = true; + + const hasPrefix = (!queue.prefix || !queue.prefix.length); + if (hasPrefix) { + const providerLine = `${queue.name} = ${queue.prefix.join(', ')}`; + providerLines.push(providerLine); + hasProviders = true; + } + } + + if (!hasQueues) return ''; + + if (!hasProviders) { + return configLines.join('\n'); + } + + return `${configLines.join('\n')}\n${providerLines.join('\n')}`; +};