Commit 4c529b27223359dda8ef2b188e558fba3fa0c418

Authored by Adhidarma Hadiwinoto
1 parent 426655c30a
Exists in master

queues and providers dump

Showing 2 changed files with 95 additions and 13 deletions Side-by-side Diff

lib/apiserver/routers/smstools-config.js
... ... @@ -7,9 +7,11 @@ const config = require('komodo-sdk/config');
7 7 const logger = require('komodo-sdk/logger');
8 8  
9 9 const smstoolsConfig = require('../../smstools-config');
  10 +const smstoolsConfigData = require('../../smstools-config/config-file');
10 11 const smstoolsConfigCreator = require('../../smstools-config/creator');
11 12 const smstoolsConfigSetter = require('../../smstools-config/setter');
12   -const smstoolsConfigData = require('../../smstools-config/config-file');
  13 +const queuesAndProviders = require('../../smstools-config/queues-and-providers');
  14 +
13 15  
14 16 const router = express.Router();
15 17 module.exports = router;
... ... @@ -151,16 +153,8 @@ async function pageInstallConfig(req, res) {
151 153 });
152 154 }
153 155  
154   -function pageSmsdLog(req, res) {
155   - // deprecated
156   - const maxLines = (req.params.maxLines || 200);
157   - childProcess.exec(`tail -n ${maxLines} /var/log/smsd/smsd.log | tac`, (err, stdout, stderr) => {
158   - res.json({
159   - err,
160   - stdout,
161   - stderr,
162   - });
163   - });
  156 +function pageQueuesAndProviders(req, res) {
  157 + res.end(queuesAndProviders.dump);
164 158 }
165 159  
166 160 router.get('/', pageIndex);
... ... @@ -172,5 +166,4 @@ router.post('/modem/set/:modemName', bodyParser.json({ type: '*/json' }), pageMo
172 166 router.post('/modem/set-single-value/:modemName', bodyParser.json({ type: '*/json' }), pageModemSetSingleValue);
173 167 router.get('/modem/delete/:modemName', pageModemDelete);
174 168 router.get('/install-config', pageInstallConfig);
175   -router.get('/smsd-log/:maxLines', pageSmsdLog);
176   -router.get('/smsd-log', pageSmsdLog);
  169 +router.get('/queues-and-providers', pageQueuesAndProviders);
lib/smstools-config/queues-and-providers.js
... ... @@ -0,0 +1,89 @@
  1 +const fs = require('fs');
  2 +
  3 +const config = require('komodo-sdk/config');
  4 +const logger = require('komodo-sdk/logger');
  5 +const smstoolsConfig = require('./config-file');
  6 +
  7 +const queuesBaseDir = config.smstools_queues_base_dir || '/var/spool/sms';
  8 +
  9 +function composeQueueDir(queueName) {
  10 + return `${queuesBaseDir}/${queueName}`;
  11 +}
  12 +
  13 +async function createDirectory(dirname) {
  14 + let isExists = true;
  15 + try {
  16 + await fs.promises.access(dirname);
  17 + } catch (e) {
  18 + isExists = false;
  19 + }
  20 +
  21 + if (isExists) return;
  22 +
  23 + try {
  24 + fs.promises.mkdir(dirname, { recursive: true, mode: 0o770 });
  25 + } catch (e) {
  26 + logger.warn('QUEUES-AND-PROVIDERS: Exception on creating directory', {
  27 + dirname,
  28 + e: e.message || e.toString(),
  29 + });
  30 + }
  31 +}
  32 +
  33 +function queuesSorted(queuesArray) {
  34 + const result = (queuesArray || smstoolsConfig.queues || []).sort((a, b) => {
  35 + const orderA = (a && Number(a.order)) || 0;
  36 + const orderB = (b && Number(b.order)) || 0;
  37 +
  38 + if (orderA < orderB) return -1;
  39 + if (orderA > orderB) return 1;
  40 + return 0;
  41 + });
  42 +
  43 + return result;
  44 +}
  45 +
  46 +exports.dump = async (mkdirIfQueueDirNotExists) => {
  47 + if (config.smstools_disable_queue) return '';
  48 +
  49 + const queues = queuesSorted();
  50 + const queuesCount = queues.length;
  51 +
  52 + const configLines = ['[queues]'];
  53 + const providerLines = ['[providers]'];
  54 + const queuesDirs = [];
  55 + let hasQueues = false;
  56 + let hasProviders = false;
  57 + for (let i = 0; i < queuesCount; i += 1) {
  58 + const queue = queues[i];
  59 +
  60 + // eslint-disable-next-line no-continue
  61 + if (!queue.name || !queue.enabled) continue;
  62 +
  63 + const queueDir = composeQueueDir(queue.name);
  64 + queuesDirs.push(queueDir);
  65 + if (mkdirIfQueueDirNotExists) {
  66 + // eslint-disable-next-line no-await-in-loop
  67 + await createDirectory(queueDir);
  68 + }
  69 +
  70 + const line = `${queue.name} = ${queueDir}`;
  71 + configLines.push(line);
  72 + hasQueues = true;
  73 +
  74 + const hasPrefix = (!queue.prefix || !queue.prefix.length);
  75 + if (hasPrefix) {
  76 + const providerLine = `${queue.name} = ${queue.prefix.join(', ')}`;
  77 + providerLines.push(providerLine);
  78 + hasProviders = true;
  79 + }
  80 + }
  81 +
  82 + if (!hasQueues) return '';
  83 +
  84 + if (!hasProviders) {
  85 + return configLines.join('\n');
  86 + }
  87 +
  88 + return `${configLines.join('\n')}\n${providerLines.join('\n')}`;
  89 +};