Commit c256cbaaadf2859a34394abbbe156766f7bbdc54

Authored by Adhidarma Hadiwinoto
1 parent 0ac029f514
Exists in master

DEBUG on transport.send

Showing 1 changed file with 1 additions and 1 deletions Inline Diff

1 "use strict"; 1 "use strict";
2 2
3 const MAX_SMS_LENGTH = 140; 3 const MAX_SMS_LENGTH = 140;
4 4
5 const url = require('url'); 5 const url = require('url');
6 const request = require('request'); 6 const request = require('request');
7 const uuidv4 = require('uuid/v4'); 7 const uuidv4 = require('uuid/v4');
8 const moment = require('moment'); 8 const moment = require('moment');
9 9
10 const config = require('komodo-sdk/config'); 10 const config = require('komodo-sdk/config');
11 const logger = require('komodo-sdk/logger'); 11 const logger = require('komodo-sdk/logger');
12 12
13 const messagingService = require('komodo-center-messaging-client-lib'); 13 const messagingService = require('komodo-center-messaging-client-lib');
14 14
15 const common = require('./common'); 15 const common = require('./common');
16 const modems = require('./modems2'); 16 const modems = require('./modems2');
17 const modemChooser = require('./modem-chooser'); 17 const modemChooser = require('./modem-chooser');
18 // const partnerLastSeen = require('./partner-last-seen'); 18 // const partnerLastSeen = require('./partner-last-seen');
19 const history = require('./history'); 19 const history = require('./history');
20 const prefixes = require('./prefixes'); 20 const prefixes = require('./prefixes');
21 const truncate = require('./truncate-paragraph'); 21 const truncate = require('./truncate-paragraph');
22 22
23 function _send(destinationNumber, msg, handlerIMSI) { 23 function _send(destinationNumber, msg, handlerIMSI) {
24 24
25 if (msg.length > MAX_SMS_LENGTH) { 25 if (msg.length > MAX_SMS_LENGTH) {
26 logger.info('Splitting message'); 26 logger.info('Splitting message');
27 27
28 /* 28 /*
29 const newMsg = msg.slice(0, MAX_SMS_LENGTH); 29 const newMsg = msg.slice(0, MAX_SMS_LENGTH);
30 const remainingMsg = msg.slice(MAX_SMS_LENGTH); 30 const remainingMsg = msg.slice(MAX_SMS_LENGTH);
31 */ 31 */
32 32
33 const [newMsg, remainingMsg] = truncate(msg, MAX_SMS_LENGTH); 33 const [newMsg, remainingMsg] = truncate(msg, MAX_SMS_LENGTH);
34 logger.verbose('TRANSPORT: Truncate long message', {maxLength: MAX_SMS_LENGTH, original: msg, head: newMsg, tail: remainingMsg}); 34 logger.verbose('TRANSPORT: Truncate long message', {maxLength: MAX_SMS_LENGTH, original: msg, head: newMsg, tail: remainingMsg});
35 35
36 _send(destinationNumber, newMsg, handlerIMSI); 36 _send(destinationNumber, newMsg, handlerIMSI);
37 setTimeout(() => { 37 setTimeout(() => {
38 _send(destinationNumber, remainingMsg, handlerIMSI); 38 _send(destinationNumber, remainingMsg, handlerIMSI);
39 }, 1000); 39 }, 1000);
40 40
41 return; 41 return;
42 } 42 }
43 43
44 const modem = modems.get('imsi', handlerIMSI); 44 const modem = modems.get('imsi', handlerIMSI);
45 if (!modem) { 45 if (!modem) {
46 logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, modem_imsi: handlerIMSI }); 46 logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, modem_imsi: handlerIMSI });
47 return; 47 return;
48 } 48 }
49 49
50 if (!modem.reportIp || !modem.reportPort || !modem.reportApikey) { 50 if (!modem.reportIp || !modem.reportPort || !modem.reportApikey) {
51 logger.warn('Invalid modem configuration', { modem }); 51 logger.warn('Invalid modem configuration', { modem });
52 return; 52 return;
53 } 53 }
54 54
55 const reqId = uuidv4(); 55 const reqId = uuidv4();
56 56
57 history.push({ 57 history.push({
58 ts: moment().format('YYYY-MM-DD HH:mm:ss'), 58 ts: moment().format('YYYY-MM-DD HH:mm:ss'),
59 modem: { 59 modem: {
60 name: modem.name, 60 name: modem.name,
61 imsi: modem.imsi, 61 imsi: modem.imsi,
62 msisdn: modem.msisdn, 62 msisdn: modem.msisdn,
63 }, 63 },
64 direction: 'OUTGOING', 64 direction: 'OUTGOING',
65 partner: destinationNumber, 65 partner: destinationNumber,
66 message: msg, 66 message: msg,
67 }); 67 });
68 68
69 logger.verbose('TRANSPORT: saving outgoing message'); 69 logger.verbose('TRANSPORT: saving outgoing message');
70 messagingService.onIncomingMessage({ 70 messagingService.onIncomingMessage({
71 me: modem.name, 71 me: modem.name,
72 partner: destinationNumber, 72 partner: destinationNumber,
73 partner_raw: `+${destinationNumber}`.replace(/^\++/, '+'), 73 partner_raw: `+${destinationNumber}`.replace(/^\++/, '+'),
74 msg: msg, 74 msg: msg,
75 origin_label: modem.imsi || 'UNKNOWN', 75 origin_label: modem.imsi || 'UNKNOWN',
76 origin_transport: 'SMS', 76 origin_transport: 'SMS',
77 origin_partner: destinationNumber, 77 origin_partner: destinationNumber,
78 do_not_forward_to_core: true, 78 do_not_forward_to_core: true,
79 is_outgoing: true, 79 is_outgoing: true,
80 }); 80 });
81 81
82 const requestOptions = { 82 const requestOptions = {
83 url: url.format({ 83 url: url.format({
84 protocol: 'http', 84 protocol: 'http',
85 hostname: modem.reportIp, 85 hostname: modem.reportIp,
86 port: modem.reportPort, 86 port: modem.reportPort,
87 pathname: modem.reportPathSms || '/sms', 87 pathname: modem.reportPathSms || '/sms',
88 }), 88 }),
89 qs: { 89 qs: {
90 msg: msg, 90 msg: msg,
91 number: destinationNumber, 91 number: destinationNumber,
92 reqid: reqId, 92 reqid: reqId,
93 apikey: modem.reportApikey, 93 apikey: modem.reportApikey,
94 } 94 }
95 } 95 }
96 96
97 logger.info('Sending message to modem handler', { req_id: reqId, destination_number: destinationNumber, msg: msg, msg_length: msg.length, modem_name: modem.name, modem_imsi: modem.imsi }); 97 logger.info('Sending message to modem handler', { req_id: reqId, destination_number: destinationNumber, msg: msg, msg_length: msg.length, modem_name: modem.name, modem_imsi: modem.imsi });
98 request(requestOptions, function(err, res, body) { 98 request(requestOptions, function(err, res, body) {
99 if (err) { 99 if (err) {
100 logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi }); 100 logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi });
101 101
102 } 102 }
103 else if (res.statusCode != 200) { 103 else if (res.statusCode != 200) {
104 logger.warn('Modem handler not responding with HTTP status code 200.', { http_status_code: res.statusCode, req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi }); 104 logger.warn('Modem handler not responding with HTTP status code 200.', { http_status_code: res.statusCode, req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi });
105 } 105 }
106 else { 106 else {
107 logger.verbose('Message sent to handler', { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi, response_body: body }); 107 logger.verbose('Message sent to handler', { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi, response_body: body });
108 } 108 }
109 }) 109 })
110 110
111 } 111 }
112 112
113 async function send(partner, msg) { 113 async function send(partner, msg) {
114 if (!partner) return; 114 if (!partner) return;
115 115
116 if (typeof msg !== 'string') { 116 if (typeof msg !== 'string') {
117 logger.warn('Message to send is not a string, ignoring message'); 117 logger.warn('Message to send is not a string, ignoring message', { msg_type: typeof msg, msg });
118 return; 118 return;
119 } 119 }
120 120
121 msg = msg.trim(); 121 msg = msg.trim();
122 if (!msg) return; 122 if (!msg) return;
123 123
124 const destinationNumber = common.removeSuffixFromNumber(partner, config.number_suffix); 124 const destinationNumber = common.removeSuffixFromNumber(partner, config.number_suffix);
125 const prefixName = await prefixes.lookup(destinationNumber); 125 const prefixName = await prefixes.lookup(destinationNumber);
126 logger.verbose('Destination number prefix lookup', {partner: destinationNumber, prefix: prefixName}); 126 logger.verbose('Destination number prefix lookup', {partner: destinationNumber, prefix: prefixName});
127 127
128 // logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin }); 128 // logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin });
129 // const handlerIMSI = await partnerLastSeen.get(destinationNumber) ; 129 // const handlerIMSI = await partnerLastSeen.get(destinationNumber) ;
130 const handlerIMSI = await modemChooser.chooser(destinationNumber, config); 130 const handlerIMSI = await modemChooser.chooser(destinationNumber, config);
131 131
132 if (!handlerIMSI) { 132 if (!handlerIMSI) {
133 logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber }); 133 logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber });
134 return; 134 return;
135 } 135 }
136 136
137 _send(destinationNumber, msg, handlerIMSI); 137 _send(destinationNumber, msg, handlerIMSI);
138 } 138 }
139 139
140 exports.send = send; 140 exports.send = send;