Commit adeaa884bb9ff8a6d40939794c4c7ef38fb8cc57

Authored by Adhidarma Hadiwinoto
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) =&gt; {
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 };