Commit d073f46c90718542288846e593a59ab1718655c4

Authored by Adhidarma Hadiwinoto
1 parent 76e39b15cc
Exists in master

resync with others

Showing 2 changed files with 22 additions and 9 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 var winston = require('winston'); 5 var winston = require('winston');
6 6
7 var logger; 7 var logger;
8 var config; 8 var config;
9 var callbackReport; 9 var callbackReport;
10 var aaa;
10 11
11 var max_retry = 15; 12 var max_retry = 15;
12 var sleep_before_retry = 60 * 1000; 13 var sleep_before_retry = 60 * 1000;
13 14
14 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 15 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
15 16
16 function parseSN(message, _config) { 17 function parseSN(message, _config) {
17 18
18 if (!_config) { 19 if (!_config) {
19 _config = config; 20 _config = config;
20 } 21 }
21 22
22 var sn_regex = new RegExp(_config.h2h_out.sn_pattern); 23 var sn_regex = new RegExp(_config.h2h_out.sn_pattern);
23 var sn_match = message.match(sn_regex); 24 var sn_match = message.match(sn_regex);
24 25
25 if (sn_match <= 0) { 26 if (sn_match <= 0) {
26 logger.info('SN Not found: ' + message); 27 logger.info('SN Not found: ' + message);
27 return ''; 28 return '';
28 } 29 }
29 30
30 var sn = sn_match[0]; 31 var sn = sn_match[0];
31 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); 32 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator);
32 33
33 var count = sn_remove_patterns.length; 34 var count = sn_remove_patterns.length;
34 35
35 for(var i = 0; i < count; i++) { 36 for(var i = 0; i < count; i++) {
36 sn = sn.replace(sn_remove_patterns[i], ''); 37 sn = sn.replace(sn_remove_patterns[i], '');
37 } 38 }
38 39
39 return sn.trim(); 40 return sn.trim();
40 } 41 }
41 42
42 function topupRequest(task, retry) { 43 function topupRequest(task, retry) {
43 /* 44 /*
44 if (config.globals.requests_count == undefined) { 45 if (config.globals.requests_count == undefined) {
45 config.globals.requests_count = 1; 46 config.globals.requests_count = 1;
46 } else { 47 } else {
47 config.globals.requests_count++; 48 config.globals.requests_count++;
48 } 49 }
49 50
50 if (config.globals.active_requests_count == undefined) { 51 if (config.globals.active_requests_count == undefined) {
51 config.globals.active_requests_count = 1; 52 config.globals.active_requests_count = 1;
52 } else { 53 } else {
53 config.globals.active_requests_count++; 54 config.globals.active_requests_count++;
54 } 55 }
55 56
56 if (config.globals.max_active_requests_count == undefined) { 57 if (config.globals.max_active_requests_count == undefined) {
57 config.globals.max_active_requests_count = config.globals.active_requests_count; 58 config.globals.max_active_requests_count = config.globals.active_requests_count;
58 } else { 59 } else {
59 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); 60 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
60 } 61 }
61 */ 62 */
62 63
63 64
64 if (retry === undefined) { 65 if (retry === undefined) {
65 retry = max_retry; 66 retry = max_retry;
66 } 67 }
67 68
68 var params = { 69 var params = {
69 userid: config.h2h_out.userid, 70 userid: config.h2h_out.userid,
70 pwd: config.h2h_out.password, 71 pwd: config.h2h_out.password,
71 memberreff: task['requestId'], 72 memberreff: task['requestId'],
72 produk: task['remoteProduct'], 73 produk: task['remoteProduct'],
73 tujuan: task['destination'] 74 tujuan: task['destination']
74 }; 75 };
75 logger.info('Creating http request to gateway', {params: params}); 76 logger.info('Creating http request to gateway', {params: params});
76 77
77 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { 78 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) {
78 79
79 /* 80 /*
80 config.globals.active_requests_count--; 81 config.globals.active_requests_count--;
81 */ 82 */
82 83
83 if (err) { 84 if (err) {
84 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err); 85 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err);
85 86
86 callbackReport(task['requestId'], '89', 'Gangguan koneksi ke suplier'); 87 callbackReport(task['requestId'], '89', 'Gangguan koneksi ke suplier');
87 return; 88 return;
88 } 89 }
89 90
90 logger.info('Got response from gateway ', {response_body: httpResponseBody}); 91 logger.info('Got response from gateway ', {response_body: httpResponseBody});
91 92
92 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { 93 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) {
93 callbackReport(task['requestId'], '91', '502 Proxy error'); 94 callbackReport(task['requestId'], '91', '502 Proxy error');
94 return; 95 return;
95 } 96 }
96 97
97 xml(httpResponseBody, function(err, result) { 98 xml(httpResponseBody, function(err, result) {
98 if (err) { 99 if (err) {
99 logger.warn('Gagal parsing XML respon server'); 100 logger.warn('Gagal parsing XML respon server');
100 //topupRequest(task, retry - 1); 101 //topupRequest(task, retry - 1);
101 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); 102 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server');
102 return; 103 return;
103 } 104 }
104 105
105 logger.info('Response Data:', {result: result}); 106 logger.info('Response Data:', {result: result});
106 107
107 var response_code = result.respon.rc[0].replace(/^00/, ''); 108 var response_code = result.respon.rc[0].replace(/^00/, '');
108 if (response_code == '54' || response_code == '68') { 109 if (response_code == '54' || response_code == '68') {
109 if (retry) { 110 if (retry) {
110 setTimeout(function() { 111 setTimeout(function() {
111 112
112 logger.info('Sending advice', {task: task}); 113 logger.info('Sending advice', {task: task});
113 114
114 task['remoteProduct'] = 'ADVPLN'; 115 task['remoteProduct'] = 'ADVPLN';
115 topupRequest(task, retry - 1); 116 topupRequest(task, retry - 1);
116 117
117 }, sleep_before_retry); 118 }, sleep_before_retry);
118 119
119 } else { 120 } else {
120 logger.warn('Max retries exceeded', {task: task}); 121 logger.warn('Max retries exceeded', {task: task});
121 callbackReport(task['requestId'], '68', message + '. Max retries exceeded'); 122 callbackReport(task['requestId'], '68', message + '. Max retries exceeded');
122 } 123 }
123 return; 124 return;
124 } 125 }
125 126
126 var token = ''; 127 var token = '';
127 if (result.respon.token) { 128 if (result.respon.token) {
128 token = result.respon.token[0]; 129 token = result.respon.token[0];
129 } 130 }
130 131
131 var data_pelanggan = 'NO-DATA'; 132 var data_pelanggan = 'NO-DATA';
132 if (result.respon.data) { 133 if (result.respon.data) {
133 134
134 try { 135 try {
135 var _data_pelanggan = result.respon.data[0].replace(/ /g, '-'); 136 var _data_pelanggan = result.respon.data[0].replace(/ /g, '-');
136 var fields = _data_pelanggan.split('/'); 137 var fields = _data_pelanggan.split('/');
137 138
138 data_pelanggan = [ 139 data_pelanggan = [
139 fields[0], fields[1], fields[2], fields[3] 140 fields[0], fields[1], fields[2], fields[3]
140 ].join('/'); 141 ].join('/');
141 } 142 }
142 catch(err) { 143 catch(err) {
143 logger.warn('Error parsing data pelanggan', {data_pelanggan: _data_pelanggan}); 144 logger.warn('Error parsing data pelanggan', {data_pelanggan: _data_pelanggan});
144 } 145 }
145 146
146 147
147 } 148 }
148 149
149 var message = result.respon.pesan[0].replace(/\n/g, ' '); 150 var message = result.respon.pesan[0].replace(/\n/g, ' ');
150 151
151 152
152 if (response_code == '00') { 153 if (response_code == '00') {
153 154
154 var sn = ""; 155 var sn = "";
155 156
156 if (config.h2h_out.parse_sn == 'YES') { 157 if (config.h2h_out.parse_sn == 'YES') {
157 sn = parseSN(message); 158 sn = parseSN(message);
158 } else if (token && data_pelanggan) { 159 } else if (token && data_pelanggan) {
159 sn = token + '/' + data_pelanggan; 160 sn = token + '/' + data_pelanggan;
160 } 161 }
161 162
162 message = 'SN=' + sn + '; ' + message; 163 message = 'SN=' + sn + '; ' + message;
163 } 164 }
164 165
165 callbackReport(task['requestId'], response_code, message); 166 callbackReport(task['requestId'], response_code, message);
166 167
167 }); 168 });
168 }); 169 });
169 } 170 }
170 171
171 function start(_config, _callbackReport, options) { 172 function start(_config, _callbackReport, options) {
172 config = _config; 173 config = _config;
173 callbackReport = _callbackReport 174 callbackReport = _callbackReport;
175
176 if (options && options.aaa) {
177 aaa = options.aaa;
178 }
174 179
175 if (options && options.logger) { 180 if (options && options.logger) {
176 logger = options.logger; 181 logger = options.logger;
177 } else { 182 } else {
178 logger = new winston.Logger({ 183 logger = new winston.Logger({
179 transports: [ 184 transports: [
180 new (winston.transports.Console)() 185 new (winston.transports.Console)()
181 ] 186 ]
182 }); 187 });
183 } 188 }
184 } 189 }
185 190
186 function parseResult(message) { 191 function parseResult(message) {
187 var data; 192 var data;
188 xml(message, function(err, result) { 193 xml(message, function(err, result) {
189 data = result; 194 data = result;
190 }); 195 });
191 return data; 196 return data;
192 } 197 }
193 198
194 exports.start = start; 199 exports.start = start;
195 exports.topupRequest = topupRequest; 200 exports.topupRequest = topupRequest;
196 exports.parseResult = parseResult; 201 exports.parseResult = parseResult;
197 exports.parseSN = parseSN; 202 exports.parseSN = parseSN;
198 203
1 var fs = require('fs'); 1 var fs = require('fs');
2 var ini = require('ini'); 2 var ini = require('ini');
3 var expresso = require('sate24-expresso');
3 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 4 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
4 5
6 process.chdir(__dirname);
5 7
6 var logger = require('sate24/logger.js').start(); 8 var logger = require('sate24/logger.js').start();
9 var HttpServer = require('sate24/httpserver.js');
10 var aaa = require('sate24/aaa.js');
11 var partner = require('./httppulsakita.js');
7 12
8 var aaaHost = config.globals.aaa_host; 13 var matrix = aaa.prepareMatrix();
9 14
10 HttpServer = require('sate24/httpserver.js'); 15 var options = {
11 var httpServer = HttpServer.start(config, {logger: logger}); 16 'aaa': aaa,
17 'logger': logger,
18 'config': config,
19 'matrix': matrix,
20 }
12 21
13 var aaa = require('sate24/aaa.js'); 22 var httpServer = HttpServer.start(config, options);
14 HttpServer.setAaa(aaa);
15 23
16 var partner = require('./httppulsakita.js'); 24 partner.start(config, aaa.callbackReport, options);
25 aaa.start(config, partner, options);
26 expresso.start(options);
17 27