Commit b7088016113a41d1769282c720e5c6c3461e118b
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 |