Commit 1a0da16079ebe13dd407e6e86f64a8e65bf9b057
1 parent
72fffae24d
Exists in
master
A little code clean
Showing 1 changed file with 2 additions and 3 deletions Inline Diff
lib/smstools-handler/failed.js
1 | const fs = require('fs'); | 1 | const fs = require('fs'); |
2 | const path = require('path'); | 2 | const path = require('path'); |
3 | const moment = require('moment'); | 3 | const moment = require('moment'); |
4 | const logger = require('komodo-sdk/logger'); | 4 | const logger = require('komodo-sdk/logger'); |
5 | const mailparser = require('../mailparser-wrapper'); | 5 | const mailparser = require('../mailparser-wrapper'); |
6 | const config = require('../../config'); | 6 | const config = require('../../config'); |
7 | 7 | ||
8 | const eventType = 'FAILED'; | 8 | const eventType = 'FAILED'; |
9 | 9 | ||
10 | module.exports = async (msgFilename) => { | 10 | module.exports = async (msgFilename) => { |
11 | const msg = await fs.promises.readFile(msgFilename); | 11 | const msg = await fs.promises.readFile(msgFilename); |
12 | 12 | ||
13 | if (!msg) { | 13 | if (!msg) { |
14 | logger.warn('Sent failed detected but we can not read message file', { eventType, msgFile: msgFilename }); | 14 | logger.warn('Sent failed detected but we can not read message file', { eventType, msgFile: msgFilename }); |
15 | return; | 15 | return; |
16 | } | 16 | } |
17 | 17 | ||
18 | const parsedMsg = await mailparser(msg); | 18 | const parsedMsg = await mailparser(msg); |
19 | if (!parsedMsg || !parsedMsg.headers) { | 19 | if (!parsedMsg || !parsedMsg.headers) { |
20 | logger.warn('Sent failed detected and we can not parsed message file', { | 20 | logger.warn('Sent failed detected and we can not parsed message file', { |
21 | eventType, | 21 | eventType, |
22 | msgFile: msgFilename, | 22 | msgFile: msgFilename, |
23 | msgFileContent: (msg || '').toString(), | 23 | msgFileContent: (msg || '').toString(), |
24 | }); | 24 | }); |
25 | return; | 25 | return; |
26 | } | 26 | } |
27 | 27 | ||
28 | const to = parsedMsg.headers.get('to').text; | 28 | const to = parsedMsg.headers.get('to').text; |
29 | const modem = parsedMsg.headers.get('modem'); | 29 | const modem = parsedMsg.headers.get('modem'); |
30 | const imsi = parsedMsg.headers.get('imsi'); | 30 | const imsi = parsedMsg.headers.get('imsi'); |
31 | const imei = parsedMsg.headers.get('imei'); | 31 | const imei = parsedMsg.headers.get('imei'); |
32 | const failReason = parsedMsg.headers.get('fail_reason'); | 32 | const failReason = parsedMsg.headers.get('fail_reason'); |
33 | const failed = parsedMsg.headers.get('failed'); | 33 | const failed = parsedMsg.headers.get('failed'); |
34 | const { text } = parsedMsg; | 34 | const { text } = parsedMsg; |
35 | 35 | ||
36 | const originalTsMatched = msgFilename.match(/komodo\.((\d+)_(\d+))/); | 36 | const originalTsMatched = msgFilename.match(/komodo\.((\d+)_(\d+))/); |
37 | const originalTs = originalTsMatched && originalTsMatched[1]; | 37 | const originalTs = originalTsMatched && originalTsMatched[1]; |
38 | const originalTsParsed = originalTs && moment(originalTs, 'YYYYMMDD_HHmmss'); | 38 | const originalTsParsed = originalTs && moment(originalTs, 'YYYYMMDD_HHmmss'); |
39 | 39 | ||
40 | const deltaTimeMs = originalTsParsed && Number(new Date() - originalTsParsed); | 40 | const deltaTimeMs = originalTsParsed && Number(new Date() - originalTsParsed); |
41 | const retry = !!(deltaTimeMs && (deltaTimeMs < (15 * 60 * 1000))); | 41 | const retry = (deltaTimeMs && (deltaTimeMs < (15 * 60 * 1000))) |
42 | && !config.smstools_disable_retry_on_failed; | ||
42 | 43 | ||
43 | logger.verbose('Sent failed detected', { | 44 | logger.verbose('Sent failed detected', { |
44 | eventType, | 45 | eventType, |
45 | msgFile: msgFilename, | 46 | msgFile: msgFilename, |
46 | to, | 47 | to, |
47 | modem, | 48 | modem, |
48 | imsi, | 49 | imsi, |
49 | imei, | 50 | imei, |
50 | failReason, | 51 | failReason, |
51 | failed, | 52 | failed, |
52 | text, | 53 | text, |
53 | originalTsParsed, | 54 | originalTsParsed, |
54 | deltaTimeMs, | 55 | deltaTimeMs, |
55 | retry, | 56 | retry, |
56 | }); | 57 | }); |
57 | 58 | ||
58 | if (config.smstools_disable_retry_on_failed) return; | ||
59 | |||
60 | if (!retry) { | 59 | if (!retry) { |
61 | logger.verbose('Not retry because of expired message', { | 60 | logger.verbose('Not retry because of expired message', { |
62 | eventType, | 61 | eventType, |
63 | msgFile: msgFilename, | 62 | msgFile: msgFilename, |
64 | to, | 63 | to, |
65 | text, | 64 | text, |
66 | }); | 65 | }); |
67 | return; | 66 | return; |
68 | } | 67 | } |
69 | 68 | ||
70 | try { | 69 | try { |
71 | await fs.promises.unlink(msgFilename); | 70 | await fs.promises.unlink(msgFilename); |
72 | } catch (e) { | 71 | } catch (e) { |
73 | logger.warn(`Can not unlink failed message. ${e.message || e.toString()}`, { | 72 | logger.warn(`Can not unlink failed message. ${e.message || e.toString()}`, { |
74 | eventType, | 73 | eventType, |
75 | msgFile: msgFilename, | 74 | msgFile: msgFilename, |
76 | to, | 75 | to, |
77 | text, | 76 | text, |
78 | }); | 77 | }); |
79 | return; | 78 | return; |
80 | } | 79 | } |
81 | 80 | ||
82 | const newMessageContent = ` | 81 | const newMessageContent = ` |
83 | To: ${to} | 82 | To: ${to} |
84 | 83 | ||
85 | ${text} | 84 | ${text} |
86 | `.trim(); | 85 | `.trim(); |
87 | 86 | ||
88 | const outboxDir = config.outbox_dir || '/var/spool/sms/outgoing'; | 87 | const outboxDir = config.outbox_dir || '/var/spool/sms/outgoing'; |
89 | const newFileName = `${outboxDir}/${path.basename(msgFilename)}`; | 88 | const newFileName = `${outboxDir}/${path.basename(msgFilename)}`; |
90 | 89 | ||
91 | try { | 90 | try { |
92 | fs.promises.writeFile(newFileName, newMessageContent, { mode: 0o660 }); | 91 | fs.promises.writeFile(newFileName, newMessageContent, { mode: 0o660 }); |
93 | } catch (e) { | 92 | } catch (e) { |
94 | logger.warn(`Can not create retry file. ${e.message || e.toString()}`, { | 93 | logger.warn(`Can not create retry file. ${e.message || e.toString()}`, { |
95 | eventType, | 94 | eventType, |
96 | msgFile: msgFilename, | 95 | msgFile: msgFilename, |
97 | newFileName, | 96 | newFileName, |
98 | to, | 97 | to, |
99 | text, | 98 | text, |
100 | }); | 99 | }); |
101 | 100 | ||
102 | return; | 101 | return; |
103 | } | 102 | } |
104 | 103 | ||
105 | logger.info('Retry file written', { | 104 | logger.info('Retry file written', { |
106 | eventType, | 105 | eventType, |
107 | msgFile: msgFilename, | 106 | msgFile: msgFilename, |
108 | newFileName, | 107 | newFileName, |
109 | to, | 108 | to, |
110 | text, | 109 | text, |
111 | textLength: text.length, | 110 | textLength: text.length, |
112 | }); | 111 | }); |
113 | }; | 112 | }; |