Commit a86e06242da514fad22e37a44931e30305d07352

Authored by Adhidarma Hadiwinoto
1 parent 15c426f7fa
Exists in master

Debug on no retry at failed

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