Commit aa772dd1e954970ca499f32345e72e24d0c649bc

Authored by Adhidarma Hadiwinoto
1 parent 788de2a534
Exists in master

config.smstools_disable_retry_on_failed

Showing 1 changed file with 2 additions and 0 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 42
43 logger.verbose('Sent failed detected', { 43 logger.verbose('Sent failed detected', {
44 eventType, 44 eventType,
45 msgFile: msgFilename, 45 msgFile: msgFilename,
46 to, 46 to,
47 modem, 47 modem,
48 imsi, 48 imsi,
49 imei, 49 imei,
50 failReason, 50 failReason,
51 failed, 51 failed,
52 text, 52 text,
53 originalTsParsed, 53 originalTsParsed,
54 deltaTimeMs, 54 deltaTimeMs,
55 retry, 55 retry,
56 }); 56 });
57 57
58 if (config.smstools_disable_retry_on_failed) return;
59
58 if (!retry) { 60 if (!retry) {
59 logger.verbose('Not retry because of expired message', { 61 logger.verbose('Not retry because of expired message', {
60 eventType, 62 eventType,
61 msgFile: msgFilename, 63 msgFile: msgFilename,
62 to, 64 to,
63 text, 65 text,
64 }); 66 });
65 return; 67 return;
66 } 68 }
67 69
68 try { 70 try {
69 await fs.promises.unlink(msgFilename); 71 await fs.promises.unlink(msgFilename);
70 } catch (e) { 72 } catch (e) {
71 logger.warn(`Can not unlink failed message. ${e.message || e.toString()}`, { 73 logger.warn(`Can not unlink failed message. ${e.message || e.toString()}`, {
72 eventType, 74 eventType,
73 msgFile: msgFilename, 75 msgFile: msgFilename,
74 to, 76 to,
75 text, 77 text,
76 }); 78 });
77 return; 79 return;
78 } 80 }
79 81
80 const newMessageContent = ` 82 const newMessageContent = `
81 To: ${to} 83 To: ${to}
82 84
83 ${text} 85 ${text}
84 `.trim(); 86 `.trim();
85 87
86 const outboxDir = config.outbox_dir || '/var/spool/sms/outgoing'; 88 const outboxDir = config.outbox_dir || '/var/spool/sms/outgoing';
87 const newFileName = `${outboxDir}/${path.basename(msgFilename)}`; 89 const newFileName = `${outboxDir}/${path.basename(msgFilename)}`;
88 90
89 try { 91 try {
90 fs.promises.writeFile(newFileName, newMessageContent, { mode: 0o660 }); 92 fs.promises.writeFile(newFileName, newMessageContent, { mode: 0o660 });
91 } catch (e) { 93 } catch (e) {
92 logger.warn(`Can not create retry file. ${e.message || e.toString()}`, { 94 logger.warn(`Can not create retry file. ${e.message || e.toString()}`, {
93 eventType, 95 eventType,
94 msgFile: msgFilename, 96 msgFile: msgFilename,
95 newFileName, 97 newFileName,
96 to, 98 to,
97 text, 99 text,
98 }); 100 });
99 101
100 return; 102 return;
101 } 103 }
102 104
103 logger.info('Retry file written', { 105 logger.info('Retry file written', {
104 eventType, 106 eventType,
105 msgFile: msgFilename, 107 msgFile: msgFilename,
106 newFileName, 108 newFileName,
107 to, 109 to,
108 text, 110 text,
109 textLength: text.length, 111 textLength: text.length,
110 }); 112 });
111 }; 113 };
112 114