Commit b7088016113a41d1769282c720e5c6c3461e118b

Authored by Adhidarma Hadiwinoto
1 parent c0be703f1e
Exists in master

Modem queue name is an array

Showing 1 changed file with 8 additions and 3 deletions Inline Diff

lib/smstools-config/queues-and-providers.js
1 const fs = require('fs'); 1 const fs = require('fs');
2 2
3 const config = require('komodo-sdk/config'); 3 const config = require('komodo-sdk/config');
4 const logger = require('komodo-sdk/logger'); 4 const logger = require('komodo-sdk/logger');
5 const smstoolsConfig = require('./config-file'); 5 const smstoolsConfig = require('./config-file');
6 6
7 const queuesBaseDir = config.smstools_queues_base_dir || '/var/spool/sms'; 7 const queuesBaseDir = config.smstools_queues_base_dir || '/var/spool/sms';
8 8
9 function composeQueueDir(queueName) { 9 function composeQueueDir(queueName) {
10 return `${queuesBaseDir}/${queueName}`; 10 return `${queuesBaseDir}/${queueName}`;
11 } 11 }
12 12
13 async function createDirectory(dirname) { 13 async function createDirectory(dirname) {
14 let isExists = true; 14 let isExists = true;
15 try { 15 try {
16 await fs.promises.access(dirname); 16 await fs.promises.access(dirname);
17 } catch (e) { 17 } catch (e) {
18 isExists = false; 18 isExists = false;
19 } 19 }
20 20
21 if (isExists) return; 21 if (isExists) return;
22 22
23 try { 23 try {
24 fs.promises.mkdir(dirname, { recursive: true, mode: 0o770 }); 24 fs.promises.mkdir(dirname, { recursive: true, mode: 0o770 });
25 } catch (e) { 25 } catch (e) {
26 logger.warn('QUEUES-AND-PROVIDERS: Exception on creating directory', { 26 logger.warn('QUEUES-AND-PROVIDERS: Exception on creating directory', {
27 dirname, 27 dirname,
28 e: e.message || e.toString(), 28 e: e.message || e.toString(),
29 }); 29 });
30 } 30 }
31 } 31 }
32 32
33 function queuesSorted(queuesArray) { 33 function queuesSorted(queuesArray) {
34 const result = (queuesArray || smstoolsConfig.queues || []).sort((a, b) => { 34 const result = (queuesArray || smstoolsConfig.queues || []).sort((a, b) => {
35 const orderA = (a && Number(a.order)) || 0; 35 const orderA = (a && Number(a.order)) || 0;
36 const orderB = (b && Number(b.order)) || 0; 36 const orderB = (b && Number(b.order)) || 0;
37 37
38 if (orderA < orderB) return -1; 38 if (orderA < orderB) return -1;
39 if (orderA > orderB) return 1; 39 if (orderA > orderB) return 1;
40 return 0; 40 return 0;
41 }); 41 });
42 42
43 return result; 43 return result;
44 } 44 }
45 45
46 exports.dump = async (mkdirIfQueueDirNotExists) => { 46 exports.dump = async (mkdirIfQueueDirNotExists) => {
47 if (config.smstools_disable_queue) return ''; 47 if (config.smstools_disable_queue) return '';
48 48
49 const queues = queuesSorted(); 49 const queues = queuesSorted();
50 const queuesCount = queues.length; 50 const queuesCount = queues.length;
51 51
52 const configLines = ['[queues]']; 52 const configLines = ['[queues]'];
53 const providerLines = ['[providers]']; 53 const providerLines = ['[providers]'];
54 const queuesDirs = []; 54 const queuesDirs = [];
55 let hasQueues = false; 55 let hasQueues = false;
56 let hasProviders = false; 56 let hasProviders = false;
57 for (let i = 0; i < queuesCount; i += 1) { 57 for (let i = 0; i < queuesCount; i += 1) {
58 const queue = queues[i]; 58 const queue = queues[i];
59 59
60 // eslint-disable-next-line no-continue 60 // eslint-disable-next-line no-continue
61 if (!queue.name || !queue.enabled) continue; 61 if (!queue.name || !queue.enabled) continue;
62 62
63 const queueDir = composeQueueDir(queue.name); 63 const queueDir = composeQueueDir(queue.name);
64 queuesDirs.push(queueDir); 64 queuesDirs.push(queueDir);
65 if (mkdirIfQueueDirNotExists) { 65 if (mkdirIfQueueDirNotExists) {
66 // eslint-disable-next-line no-await-in-loop 66 // eslint-disable-next-line no-await-in-loop
67 await createDirectory(queueDir); 67 await createDirectory(queueDir);
68 } 68 }
69 69
70 const line = `${queue.name} = ${queueDir}`; 70 const line = `${queue.name} = ${queueDir}`;
71 configLines.push(line); 71 configLines.push(line);
72 hasQueues = true; 72 hasQueues = true;
73 73
74 const hasPrefix = queue.prefix && queue.prefix.length; 74 const hasPrefix = queue.prefix && queue.prefix.length;
75 if (hasPrefix) { 75 if (hasPrefix) {
76 const providerLine = `${queue.name} = ${queue.prefix.join(', ')}`; 76 const providerLine = `${queue.name} = ${queue.prefix.join(', ')}`;
77 providerLines.push(providerLine); 77 providerLines.push(providerLine);
78 hasProviders = true; 78 hasProviders = true;
79 } else { 79 } else {
80 logger.verbose(`QUEUES-AND-PROVIDERS: DEBUG: ${queue.name} does not have prefix`); 80 logger.verbose(`QUEUES-AND-PROVIDERS: DEBUG: ${queue.name} does not have prefix`);
81 } 81 }
82 } 82 }
83 83
84 if (!hasQueues) return ''; 84 if (!hasQueues) return '';
85 85
86 if (!hasProviders) { 86 if (!hasProviders) {
87 return configLines.join('\n'); 87 return configLines.join('\n');
88 } 88 }
89 89
90 return `${configLines.join('\n')}\n\n${providerLines.join('\n')}`; 90 return `${configLines.join('\n')}\n\n${providerLines.join('\n')}`;
91 }; 91 };
92 92
93 exports.getModemQueueName = (modemName) => { 93 exports.getModemQueueName = (modemName) => {
94 const queue = (smstoolsConfig.queues || []) 94 const queues = queuesSorted().filter((queue) => {
95 .find((item) => (item.modems || []).indexOf(modemName) >= 0); 95 if (!queue.name || !queue.enabled) return false;
96 return (queue || {}).name || ''; 96 return (queue.modems || []).indexOf(modemName) >= 0;
97 });
98
99 return (queues || '').map((queue) => queue.name);
97 }; 100 };
101
102 exports.hasQueues = () => !!(smstoolsConfig.queues || []).filter((queue) => queue.enabled);
98 103