Commit 1a0da16079ebe13dd407e6e86f64a8e65bf9b057

Authored by Adhidarma Hadiwinoto
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 };