queues-and-providers.js
2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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/queue';
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;
} else {
logger.verbose(`QUEUES-AND-PROVIDERS: DEBUG: ${queue.name} does not have prefix`);
}
}
if (!hasQueues) return '';
if (!hasProviders) {
return configLines.join('\n');
}
return `${configLines.join('\n')}\n\n${providerLines.join('\n')}`;
};
exports.getModemQueueName = (modemName) => {
const queues = queuesSorted().filter((queue) => {
if (!queue.name || !queue.enabled) return false;
return (queue.modems || []).indexOf(modemName) >= 0;
});
return (queues || '').map((queue) => queue.name);
};
exports.hasQueues = () => !!(smstoolsConfig.queues || []).filter((queue) => queue.enabled);