Commit adeaa884bb9ff8a6d40939794c4c7ef38fb8cc57
1 parent
db8d24625a
Exists in
master
Retry in 15 minutes on failed
Showing 1 changed file with 41 additions and 2 deletions Side-by-side Diff
lib/smstools-handler/failed.js
1 | 1 | const fs = require('fs'); |
2 | +const path = require('path'); | |
3 | +const moment = require('moment'); | |
2 | 4 | const logger = require('komodo-sdk/logger'); |
3 | 5 | const mailparser = require('../mailparser-wrapper'); |
6 | +const config = require('../../config'); | |
4 | 7 | |
5 | 8 | const eventType = 'FAILED'; |
6 | 9 | |
... | ... | @@ -30,8 +33,12 @@ module.exports = async (msgFilename) => { |
30 | 33 | const failed = parsedMsg.headers.get('failed'); |
31 | 34 | const { text } = parsedMsg; |
32 | 35 | |
33 | - const originalTsMatched = msgFilename.match(/komodo\.(\d+)_(d+)/); | |
36 | + const originalTsMatched = msgFilename.match(/komodo\.((\d+)_(\d+))/); | |
37 | + const originalTs = originalTsMatched && originalTsMatched[1]; | |
38 | + const originalTsParsed = originalTs && moment(originalTs, 'YYYYMMDD_HHmmss'); | |
34 | 39 | |
40 | + const deltaTimeMs = originalTsParsed && Number(new Date() - originalTsParsed); | |
41 | + const retry = !!(deltaTimeMs && (deltaTimeMs < (15 * 60 * 1000))); | |
35 | 42 | |
36 | 43 | logger.verbose('Sent failed detected', { |
37 | 44 | eventType, |
... | ... | @@ -43,6 +50,38 @@ module.exports = async (msgFilename) => { |
43 | 50 | failReason, |
44 | 51 | failed, |
45 | 52 | text, |
46 | - originalTsMatched, | |
53 | + originalTsParsed, | |
54 | + deltaTimeMs, | |
55 | + retry, | |
47 | 56 | }); |
57 | + | |
58 | + if (!retry) return; | |
59 | + | |
60 | + try { | |
61 | + await fs.promises.unlink(msgFilename); | |
62 | + } catch (e) { | |
63 | + logger.warn(`Can not unlink failed message. ${e.message || e.toString()}`, { | |
64 | + eventType, | |
65 | + msgFile: msgFilename, | |
66 | + }); | |
67 | + return; | |
68 | + } | |
69 | + | |
70 | + const newMessageContent = ` | |
71 | +To: ${to} | |
72 | + | |
73 | +${text} | |
74 | + `.trim(); | |
75 | + | |
76 | + const outboxDir = config.outbox_dir || '/var/spool/sms/outgoing'; | |
77 | + const newFileName = `${outboxDir}/${path.basename(msgFilename)}`; | |
78 | + | |
79 | + try { | |
80 | + fs.promises.writeFile(newFileName, newMessageContent, { mode: 0o660 }); | |
81 | + } catch (e) { | |
82 | + logger.warn(`Can not create retry file. ${e.message || e.toString()}`, { | |
83 | + eventType, | |
84 | + msgFile: msgFilename, | |
85 | + }); | |
86 | + } | |
48 | 87 | }; |