Commit 405087dd50d55c498899bf4b4bb8123ce20f91ad

Authored by Adhidarma Hadiwinoto
1 parent b794b32af9
Exists in master

Fix null retry by using OR 0

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

1 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 1 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
2 2
3 const module_name = require('path').basename(__filename); 3 const module_name = require('path').basename(__filename);
4 4
5 const http = require('http'); 5 const http = require('http');
6 const url = require('url'); 6 const url = require('url');
7 const request = require('request'); 7 const request = require('request');
8 8
9 const config = require('komodo-sdk/config') 9 const config = require('komodo-sdk/config')
10 const logger = require('komodo-sdk/logger'); 10 const logger = require('komodo-sdk/logger');
11 11
12 let _callback; 12 let _callback;
13 13
14 const maxSendRetry = Number(config.max_send_retry) || 5; 14 const maxSendRetry = Number(config.max_send_retry) || 5;
15 const sleepBeforeRetryMs = (Number(config.sleep_before_retry_secs) || 60) * 1000; 15 const sleepBeforeRetryMs = (Number(config.sleep_before_retry_secs) || 60) * 1000;
16 16
17 function sleep(ms) { 17 function sleep(ms) {
18 new Promise((resolve) => { 18 new Promise((resolve) => {
19 setTimeout(() => { 19 setTimeout(() => {
20 resolve(null); 20 resolve(null);
21 }, ms) 21 }, ms)
22 }); 22 });
23 }; 23 };
24 24
25 function createHttpServer() { 25 function createHttpServer() {
26 let listenPort = config.center_port; 26 let listenPort = config.center_port;
27 27
28 http.createServer(onRequestFromPartner).listen(listenPort, function() { 28 http.createServer(onRequestFromPartner).listen(listenPort, function() {
29 logger.info('Center HTTP server listen on port ' + listenPort); 29 logger.info('Center HTTP server listen on port ' + listenPort);
30 });; 30 });;
31 } 31 }
32 32
33 function onRequestFromPartner(req, res) { 33 function onRequestFromPartner(req, res) {
34 const method_name = 'onRequestFromPartner'; 34 const method_name = 'onRequestFromPartner';
35 35
36 let remote_address = req.connection.remoteAddress.replace(/^::ffff:/, ''); 36 let remote_address = req.connection.remoteAddress.replace(/^::ffff:/, '');
37 37
38 let qs = url.parse(req.url, true).query; 38 let qs = url.parse(req.url, true).query;
39 39
40 logger.verbose('Got a request from partner', {module_name: module_name, method_name: method_name, remote_address: remote_address, url: req.url, qs: qs}); 40 logger.verbose('Got a request from partner', {module_name: module_name, method_name: method_name, remote_address: remote_address, url: req.url, qs: qs});
41 41
42 let partner = qs.terminal_name + '@' + remote_address; 42 let partner = qs.terminal_name + '@' + remote_address;
43 let password = qs.password; 43 let password = qs.password;
44 let reverse_url = qs.reverse_url; 44 let reverse_url = qs.reverse_url;
45 45
46 let product_name = qs.product_name; 46 let product_name = qs.product_name;
47 let destination = qs.destination; 47 let destination = qs.destination;
48 let request_id = qs.request_id; 48 let request_id = qs.request_id;
49 49
50 if (!qs.terminal_name || !password || !reverse_url || ! product_name || !destination || !request_id) { 50 if (!qs.terminal_name || !password || !reverse_url || ! product_name || !destination || !request_id) {
51 res.end('INVALID REQUEST'); 51 res.end('INVALID REQUEST');
52 return; 52 return;
53 } 53 }
54 54
55 let msg = [ product_name, destination, password, request_id ].join('.'); 55 let msg = [ product_name, destination, password, request_id ].join('.');
56 56
57 _callback.onIncomingMessage( 57 _callback.onIncomingMessage(
58 { 58 {
59 me: config.username, 59 me: config.username,
60 partner: partner, 60 partner: partner,
61 msg: msg.trim(), 61 msg: msg.trim(),
62 reverse_url: reverse_url 62 reverse_url: reverse_url
63 }, 63 },
64 64
65 function(err, _result) { 65 function(err, _result) {
66 let result = cleanResponseToPartner(_result); 66 let result = cleanResponseToPartner(_result);
67 67
68 logger.verbose('Forwarding CORE response to partner as direct response', _result); 68 logger.verbose('Forwarding CORE response to partner as direct response', _result);
69 res.end(JSON.stringify(result)); 69 res.end(JSON.stringify(result));
70 } 70 }
71 ) 71 )
72 } 72 }
73 73
74 function cleanResponseToPartner(_data) { 74 function cleanResponseToPartner(_data) {
75 let data = JSON.parse(JSON.stringify(_data)); 75 let data = JSON.parse(JSON.stringify(_data));
76 76
77 delete data.origin; 77 delete data.origin;
78 delete data.origin_report_ip; 78 delete data.origin_report_ip;
79 delete data.origin_report_port; 79 delete data.origin_report_port;
80 delete data.reverse_url; 80 delete data.reverse_url;
81 delete data.misc; 81 delete data.misc;
82 delete data.inquiry_only; 82 delete data.inquiry_only;
83 83
84 for (let key in data) { 84 for (let key in data) {
85 85
86 if (data.hasOwnProperty(key)) { 86 if (data.hasOwnProperty(key)) {
87 87
88 if (key.indexOf('[') >= 0) { delete data[key]; } 88 if (key.indexOf('[') >= 0) { delete data[key]; }
89 89
90 } 90 }
91 } 91 }
92 92
93 return data; 93 return data;
94 } 94 }
95 95
96 function init(cb) { 96 function init(cb) {
97 if (!cb) { 97 if (!cb) {
98 logger.warn('Callback is not defined'); 98 logger.warn('Callback is not defined');
99 console.trace(); 99 console.trace();
100 process.exit(1); 100 process.exit(1);
101 return; 101 return;
102 } 102 }
103 103
104 _callback = cb; 104 _callback = cb;
105 105
106 createHttpServer(); 106 createHttpServer();
107 } 107 }
108 108
109 async function sleepAndResend(partner, msg, params, retry) { 109 async function sleepAndResend(partner, msg, params, retry) {
110 if ((retry || 0) > maxSendRetry) { 110 if (retry > maxSendRetry) {
111 logger.verbose('Retry exceeded', { 111 logger.verbose('Retry exceeded', {
112 params, 112 params,
113 retry: retry || 0, 113 retry: retry || 0,
114 }); 114 });
115 return; 115 return;
116 } 116 }
117 117
118 await sleep(sleepBeforeRetryMs); 118 await sleep(sleepBeforeRetryMs);
119 send(partner, msg, params, retry + 1); 119 send(partner, msg, params, retry + 1);
120 } 120 }
121 121
122 function send(partner, msg, params, retry) { 122 function send(partner, msg, params, retry) {
123 logger.verbose('Got response from CORE', { 123 if (retry) {
124 partner: partner, msg: msg, params: params, retry: retry || 0, 124 logger.verbose('F39C9082: Resending', {
125 }); 125 partner,
126 msg,
127 params,
128 retry,
129 })
130 } else {
131 logger.verbose('Got response from CORE', {
132 partner: partner, msg: msg, params: params, retry: retry || 0,
133 });
134 }
126 135
127 if (!params || !params.reverse_url) { 136 if (!params || !params.reverse_url) {
128 logger.verbose('Undefined reverse_url, not forwarding message to partner'); 137 logger.verbose('Undefined reverse_url, not forwarding message to partner');
129 return; 138 return;
130 } 139 }
131 140
132 if (params.reverse_url.indexOf('http') < 0) { 141 if (params.reverse_url.indexOf('http') < 0) {
133 logger.verbose('Invalid reverse_url, not forwarding message to partner'); 142 logger.verbose('Invalid reverse_url, not forwarding message to partner');
134 return; 143 return;
135 } 144 }
136 145
137 if (params.rc === '68') { 146 if (params.rc === '68') {
138 logger.verbose('Ignoring RC 68 reverse report'); 147 logger.verbose('Ignoring RC 68 reverse report');
139 return; 148 return;
140 } 149 }
141 150
142 let reqOptions = { 151 let reqOptions = {
143 url: params.reverse_url, 152 url: params.reverse_url,
144 qs: cleanResponseToPartner(params) 153 qs: cleanResponseToPartner(params)
145 } 154 }
146 155
147 logger.verbose('Sending reverse report to partner', {request: reqOptions}); 156 logger.verbose('Sending reverse report to partner', {request: reqOptions});
148 request(reqOptions, function(err, res, body) { 157 request(reqOptions, function(err, res, body) {
149 if (err) { 158 if (err) {
150 logger.warn('Error sending reverse report to partner', {request: reqOptions, err: err}); 159 logger.warn('Error sending reverse report to partner', {request: reqOptions, err: err});
151 sleepAndResend(partner, msg, params, retry); 160 sleepAndResend(partner, msg, params, retry || 0);
152 return; 161 return;
153 } 162 }
154 163
155 /* 164 /*
156 if (res.statusCode != 200) { 165 if (res.statusCode != 200) {
157 logger.warn('Partner not returning HTTP status code 200 on reverse report', { 166 logger.warn('Partner not returning HTTP status code 200 on reverse report', {
158 request: reqOptions, http_status: res.statusCode, 167 request: reqOptions, http_status: res.statusCode,
159 }); 168 });
160 169
161 _sleepAndResend(partner, msg, params, retry); 170 _sleepAndResend(partner, msg, params, retry);
162 return; 171 return;
163 } 172 }
164 */ 173 */
165 174
166 logger.verbose('Reverse report has been sent to partner', { request: reqOptions, httpStatus: res && res.statusCode }); 175 logger.verbose('Reverse report has been sent to partner', { request: reqOptions, httpStatus: res && res.statusCode });
167 }) 176 })
168 } 177 }
169 178
170 exports.init = init; 179 exports.init = init;
171 exports.send = send; 180 exports.send = send;
172 181