Commit 49aa80909ffc329da3f91a5fc7e80514ac291bed

Authored by Adhidarma Hadiwinoto
1 parent 7ec4016657
Exists in master

perbaikan retry

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

1 var url = require('url'); 1 var url = require('url');
2 var math = require('mathjs'); 2 var math = require('mathjs');
3 var request = require('request'); 3 var request = require('request');
4 var xml = require("xml2js").parseString; 4 var xml = require("xml2js").parseString;
5 5
6 var config; 6 var config;
7 var callbackReport; 7 var callbackReport;
8 8
9 var max_retry = 3; 9 var max_retry = 15;
10 var sleep_before_retry = 3000; 10 var sleep_before_retry = 3000;
11 11
12 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 12 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
13 13
14 function parseSN(message, _config) { 14 function parseSN(message, _config) {
15 15
16 if (!_config) { 16 if (!_config) {
17 _config = config; 17 _config = config;
18 } 18 }
19 19
20 var sn_regex = new RegExp(_config.h2h_out.sn_pattern); 20 var sn_regex = new RegExp(_config.h2h_out.sn_pattern);
21 var sn_match = message.match(sn_regex); 21 var sn_match = message.match(sn_regex);
22 22
23 if (sn_match <= 0) { 23 if (sn_match <= 0) {
24 console.log('SN Not found: ' + message); 24 console.log('SN Not found: ' + message);
25 return ''; 25 return '';
26 } 26 }
27 27
28 var sn = sn_match[0]; 28 var sn = sn_match[0];
29 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); 29 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator);
30 30
31 var count = sn_remove_patterns.length; 31 var count = sn_remove_patterns.length;
32 32
33 for(var i = 0; i < count; i++) { 33 for(var i = 0; i < count; i++) {
34 sn = sn.replace(sn_remove_patterns[i], ''); 34 sn = sn.replace(sn_remove_patterns[i], '');
35 } 35 }
36 36
37 return sn.trim(); 37 return sn.trim();
38 } 38 }
39 39
40 40
41 function topupRequest(task, retry) { 41 function topupRequest(task, retry) {
42 if (config.globals.requests_count == undefined) { 42 if (config.globals.requests_count == undefined) {
43 config.globals.requests_count = 1; 43 config.globals.requests_count = 1;
44 } else { 44 } else {
45 config.globals.requests_count++; 45 config.globals.requests_count++;
46 } 46 }
47 47
48 if (config.globals.active_requests_count == undefined) { 48 if (config.globals.active_requests_count == undefined) {
49 config.globals.active_requests_count = 1; 49 config.globals.active_requests_count = 1;
50 } else { 50 } else {
51 config.globals.active_requests_count++; 51 config.globals.active_requests_count++;
52 } 52 }
53 53
54 if (config.globals.max_active_requests_count == undefined) { 54 if (config.globals.max_active_requests_count == undefined) {
55 config.globals.max_active_requests_count = config.globals.active_requests_count; 55 config.globals.max_active_requests_count = config.globals.active_requests_count;
56 } else { 56 } else {
57 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); 57 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
58 } 58 }
59 59
60 60
61 if (retry === undefined) { 61 if (retry === undefined) {
62 retry = max_retry; 62 retry = max_retry;
63 } 63 }
64 64
65 var params = { 65 var params = {
66 userid: config.h2h_out.userid, 66 userid: config.h2h_out.userid,
67 pwd: config.h2h_out.password, 67 pwd: config.h2h_out.password,
68 memberreff: task['requestId'], 68 memberreff: task['requestId'],
69 produk: task['remoteProduct'], 69 produk: task['remoteProduct'],
70 tujuan: task['destination'] 70 tujuan: task['destination']
71 }; 71 };
72 console.log('PARAMS:'); 72 console.log('PARAMS:');
73 console.log(params); 73 console.log(params);
74 74
75 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { 75 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) {
76 76
77 config.globals.active_requests_count--; 77 config.globals.active_requests_count--;
78 78
79 if (err) { 79 if (err) {
80 console.log('HTTP Request Error (' + task['requestId'] + '): '); 80 console.log('HTTP Request Error (' + task['requestId'] + '): ');
81 console.log(err); 81 console.log(err);
82 82
83 if (retry) { 83 callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier');
84
85 console.log('Retrying trx hit (' + retry + ')');
86 setTimeout(function() {
87 topupRequest(task, retry - 1);
88 }, sleep_before_retry);
89
90 } else {
91 callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier');
92 }
93 return; 84 return;
94 } 85 }
95 86
96 console.log('Server Response: '); 87 console.log('Server Response: ');
97 console.log(httpResponseBody); 88 console.log(httpResponseBody);
98 89
99 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { 90 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) {
100 callbackReport(task['requestId'], '40', '502 Proxy error'); 91 callbackReport(task['requestId'], '40', '502 Proxy error');
101 return; 92 return;
102 } 93 }
103 94
104 xml(httpResponseBody, function(err, result) { 95 xml(httpResponseBody, function(err, result) {
105 if (err) { 96 if (err) {
106 console.log('Gagal parsing XML respon server'); 97 console.log('Gagal parsing XML respon server');
107 //topupRequest(task, retry - 1); 98 //topupRequest(task, retry - 1);
108 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); 99 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server');
109 return; 100 return;
110 } 101 }
111 102
112 console.log('Response Data:'); 103 console.log('Response Data:');
113 console.log(result); 104 console.log(result);
114 105
115 var response_code = result.respon.rc[0].replace(/^00/, ''); 106 var response_code = result.respon.rc[0].replace(/^00/, '');
116 107
117 var token = ''; 108 var token = '';
118 if (result.respon.token) { 109 if (result.respon.token) {
119 token = result.respon.token[0]; 110 token = result.respon.token[0];
120 } 111 }
121 112
122 var data_pelanggan = 'NO-DATA'; 113 var data_pelanggan = 'NO-DATA';
123 if (result.respon.data) { 114 if (result.respon.data) {
124 data_pelanggan = result.respon.data[0].replace(/ /g, '-'); 115 data_pelanggan = result.respon.data[0].replace(/ /g, '-');
125 } 116 }
126 117
127 var message = result.respon.pesan[0].replace(/\n/g, ' '); 118 var message = result.respon.pesan[0].replace(/\n/g, ' ');
128 119
120 if (response_code == '54' || response_code == '68') {
121 if (retry) {
122 setTimeout(function() {
123 topupRequest(task, retry - 1);
124 }, 60000);
125
126 } else {
127 callbackReport(task['requestId'], '68', message);
128 }
129 return;
130 }
131
129 132
130 if (response_code == '00') { 133 if (response_code == '00') {
131 134
132 var sn = ""; 135 var sn = "";
133 136
134 if (config.h2h_out.parse_sn == 'YES') { 137 if (config.h2h_out.parse_sn == 'YES') {
135 sn = parseSN(message); 138 sn = parseSN(message);
136 } else if (token && data_pelanggan) { 139 } else if (token && data_pelanggan) {
137 sn = token + '/' + data_pelanggan; 140 sn = token + '/' + data_pelanggan;
138 } 141 }
139 142
140 message = 'SN=' + sn + '; ' + message; 143 message = 'SN=' + sn + '; ' + message;
141 } 144 }
142 145
143 callbackReport(task['requestId'], response_code, message); 146 callbackReport(task['requestId'], response_code, message);
144 147
145 if (response_code == '54' || response_code == '68') {
146 setTimeout(function() {
147 topupRequest(task, 5);
148 }, 60000);
149 }
150
151 }); 148 });
152 }); 149 });
153 } 150 }
154 151
155 function start(_config, _callbackReport) { 152 function start(_config, _callbackReport) {
156 config = _config; 153 config = _config;
157 callbackReport = _callbackReport 154 callbackReport = _callbackReport
158 } 155 }
159 156
160 function parseResult(message) { 157 function parseResult(message) {