Commit 66e7cb63fc9b706f09f6b391bbaeab6b8b0b45b5
1 parent
b53ba3002b
Exists in
master
logger
Showing 3 changed files with 26 additions and 15 deletions Inline Diff
httppulsakita.js
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 | 6 | ||
7 | var logger; | ||
6 | var config; | 8 | var config; |
7 | var callbackReport; | 9 | var callbackReport; |
8 | 10 | ||
9 | var max_retry = 15; | 11 | var max_retry = 15; |
10 | var sleep_before_retry = 3000; | 12 | var sleep_before_retry = 3000; |
11 | 13 | ||
12 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; | 14 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; |
13 | 15 | ||
14 | function parseSN(message, _config) { | 16 | function parseSN(message, _config) { |
15 | 17 | ||
16 | if (!_config) { | 18 | if (!_config) { |
17 | _config = config; | 19 | _config = config; |
18 | } | 20 | } |
19 | 21 | ||
20 | var sn_regex = new RegExp(_config.h2h_out.sn_pattern); | 22 | var sn_regex = new RegExp(_config.h2h_out.sn_pattern); |
21 | var sn_match = message.match(sn_regex); | 23 | var sn_match = message.match(sn_regex); |
22 | 24 | ||
23 | if (sn_match <= 0) { | 25 | if (sn_match <= 0) { |
24 | console.log('SN Not found: ' + message); | 26 | logger.info('SN Not found: ' + message); |
25 | return ''; | 27 | return ''; |
26 | } | 28 | } |
27 | 29 | ||
28 | var sn = sn_match[0]; | 30 | var sn = sn_match[0]; |
29 | var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); | 31 | var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); |
30 | 32 | ||
31 | var count = sn_remove_patterns.length; | 33 | var count = sn_remove_patterns.length; |
32 | 34 | ||
33 | for(var i = 0; i < count; i++) { | 35 | for(var i = 0; i < count; i++) { |
34 | sn = sn.replace(sn_remove_patterns[i], ''); | 36 | sn = sn.replace(sn_remove_patterns[i], ''); |
35 | } | 37 | } |
36 | 38 | ||
37 | return sn.trim(); | 39 | return sn.trim(); |
38 | } | 40 | } |
39 | 41 | ||
40 | 42 | ||
41 | function topupRequest(task, retry) { | 43 | function topupRequest(task, retry) { |
42 | if (config.globals.requests_count == undefined) { | 44 | if (config.globals.requests_count == undefined) { |
43 | config.globals.requests_count = 1; | 45 | config.globals.requests_count = 1; |
44 | } else { | 46 | } else { |
45 | config.globals.requests_count++; | 47 | config.globals.requests_count++; |
46 | } | 48 | } |
47 | 49 | ||
48 | if (config.globals.active_requests_count == undefined) { | 50 | if (config.globals.active_requests_count == undefined) { |
49 | config.globals.active_requests_count = 1; | 51 | config.globals.active_requests_count = 1; |
50 | } else { | 52 | } else { |
51 | config.globals.active_requests_count++; | 53 | config.globals.active_requests_count++; |
52 | } | 54 | } |
53 | 55 | ||
54 | if (config.globals.max_active_requests_count == undefined) { | 56 | if (config.globals.max_active_requests_count == undefined) { |
55 | config.globals.max_active_requests_count = config.globals.active_requests_count; | 57 | config.globals.max_active_requests_count = config.globals.active_requests_count; |
56 | } else { | 58 | } else { |
57 | config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); | 59 | config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); |
58 | } | 60 | } |
59 | 61 | ||
60 | 62 | ||
61 | if (retry === undefined) { | 63 | if (retry === undefined) { |
62 | retry = max_retry; | 64 | retry = max_retry; |
63 | } | 65 | } |
64 | 66 | ||
65 | var params = { | 67 | var params = { |
66 | userid: config.h2h_out.userid, | 68 | userid: config.h2h_out.userid, |
67 | pwd: config.h2h_out.password, | 69 | pwd: config.h2h_out.password, |
68 | memberreff: task['requestId'], | 70 | memberreff: task['requestId'], |
69 | produk: task['remoteProduct'], | 71 | produk: task['remoteProduct'], |
70 | tujuan: task['destination'] | 72 | tujuan: task['destination'] |
71 | }; | 73 | }; |
72 | console.log('PARAMS:'); | 74 | logger.info('Creating http request to gateway', {params: params}); |
73 | console.log(params); | ||
74 | 75 | ||
75 | request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { | 76 | request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { |
76 | 77 | ||
77 | config.globals.active_requests_count--; | 78 | config.globals.active_requests_count--; |
78 | 79 | ||
79 | if (err) { | 80 | if (err) { |
80 | console.log('HTTP Request Error (' + task['requestId'] + '): '); | 81 | logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err); |
81 | console.log(err); | ||
82 | 82 | ||
83 | callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier'); | 83 | callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier'); |
84 | return; | 84 | return; |
85 | } | 85 | } |
86 | 86 | ||
87 | console.log('Server Response: '); | 87 | logger.info('Got response from gateway ', {response_body: httpResponseBody}); |
88 | console.log(httpResponseBody); | ||
89 | 88 | ||
90 | if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { | 89 | if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { |
91 | callbackReport(task['requestId'], '40', '502 Proxy error'); | 90 | callbackReport(task['requestId'], '40', '502 Proxy error'); |
92 | return; | 91 | return; |
93 | } | 92 | } |
94 | 93 | ||
95 | xml(httpResponseBody, function(err, result) { | 94 | xml(httpResponseBody, function(err, result) { |
96 | if (err) { | 95 | if (err) { |
97 | console.log('Gagal parsing XML respon server'); | 96 | logger.warn('Gagal parsing XML respon server'); |
98 | //topupRequest(task, retry - 1); | 97 | //topupRequest(task, retry - 1); |
99 | callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); | 98 | callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); |
100 | return; | 99 | return; |
101 | } | 100 | } |
102 | 101 | ||
103 | console.log('Response Data:'); | 102 | logger.info('Response Data:', {result: result}); |
104 | console.log(result); | ||
105 | 103 | ||
106 | var response_code = result.respon.rc[0].replace(/^00/, ''); | 104 | var response_code = result.respon.rc[0].replace(/^00/, ''); |
107 | if (response_code == '54' || response_code == '68') { | 105 | if (response_code == '54' || response_code == '68') { |
108 | if (retry) { | 106 | if (retry) { |
109 | setTimeout(function() { | 107 | setTimeout(function() { |
110 | topupRequest(task, retry - 1); | 108 | topupRequest(task, retry - 1); |
111 | }, 60000); | 109 | }, 60000); |
112 | 110 | ||
113 | } else { | 111 | } else { |
114 | callbackReport(task['requestId'], '68', message); | 112 | callbackReport(task['requestId'], '68', message); |
115 | } | 113 | } |
116 | return; | 114 | return; |
117 | } | 115 | } |
118 | 116 | ||
119 | var token = ''; | 117 | var token = ''; |
120 | if (result.respon.token) { | 118 | if (result.respon.token) { |
121 | token = result.respon.token[0]; | 119 | token = result.respon.token[0]; |
122 | } | 120 | } |
123 | 121 | ||
124 | var data_pelanggan = 'NO-DATA'; | 122 | var data_pelanggan = 'NO-DATA'; |
125 | if (result.respon.data) { | 123 | if (result.respon.data) { |
126 | data_pelanggan = result.respon.data[0].replace(/ /g, '-'); | 124 | data_pelanggan = result.respon.data[0].replace(/ /g, '-'); |
127 | } | 125 | } |
128 | 126 | ||
129 | var message = result.respon.pesan[0].replace(/\n/g, ' '); | 127 | var message = result.respon.pesan[0].replace(/\n/g, ' '); |
130 | 128 | ||
131 | 129 | ||
132 | if (response_code == '00') { | 130 | if (response_code == '00') { |
133 | 131 | ||
134 | var sn = ""; | 132 | var sn = ""; |
135 | 133 | ||
136 | if (config.h2h_out.parse_sn == 'YES') { | 134 | if (config.h2h_out.parse_sn == 'YES') { |
137 | sn = parseSN(message); | 135 | sn = parseSN(message); |
138 | } else if (token && data_pelanggan) { | 136 | } else if (token && data_pelanggan) { |
139 | sn = token + '/' + data_pelanggan; | 137 | sn = token + '/' + data_pelanggan; |
140 | } | 138 | } |
141 | 139 | ||
142 | message = 'SN=' + sn + '; ' + message; | 140 | message = 'SN=' + sn + '; ' + message; |
143 | } | 141 | } |
144 | 142 | ||
145 | callbackReport(task['requestId'], response_code, message); | 143 | callbackReport(task['requestId'], response_code, message); |
146 | 144 | ||
147 | }); | 145 | }); |
148 | }); | 146 | }); |
149 | } | 147 | } |
150 | 148 | ||
151 | function start(_config, _callbackReport) { | 149 | function start(_config, _callbackReport, options) { |
152 | config = _config; | 150 | config = _config; |
153 | callbackReport = _callbackReport | 151 | callbackReport = _callbackReport |
152 | |||
153 | if (options && options.logger) { | ||
154 | logger = options.logger; | ||
155 | } else { | ||
156 | logger = new winston.Logger({ | ||
157 | transports: [ | ||
158 | new (winston.transports.Console)() | ||
159 | ] | ||
160 | }); | ||
161 | } | ||
154 | } | 162 | } |
155 | 163 | ||
156 | function parseResult(message) { | 164 | function parseResult(message) { |
157 | var data; | 165 | var data; |
158 | xml(message, function(err, result) { | 166 | xml(message, function(err, result) { |
159 | data = result; | 167 | data = result; |
160 | }); | 168 | }); |
161 | return data; | 169 | return data; |
162 | } | 170 | } |
163 | 171 | ||
164 | exports.start = start; | 172 | exports.start = start; |
index.js
1 | var iniparser = require('iniparser'); | 1 | var iniparser = require('iniparser'); |
2 | var config = iniparser.parseSync('./config.ini'); | 2 | var config = iniparser.parseSync('./config.ini'); |
3 | 3 | ||
4 | var logger = require('sate24/logger.js').start(); | ||
5 | |||
4 | var aaaHost = config.globals.aaa_host; | 6 | var aaaHost = config.globals.aaa_host; |
5 | 7 | ||
6 | HttpServer = require('sate24/httpserver.js'); | 8 | HttpServer = require('sate24/httpserver.js'); |
7 | var httpServer = HttpServer.start(config); | 9 | var httpServer = HttpServer.start(config, {logger: logger}); |
8 | 10 | ||
9 | var aaa = require('sate24/aaa.js'); | 11 | var aaa = require('sate24/aaa.js'); |
10 | HttpServer.setAaa(aaa); | 12 | HttpServer.setAaa(aaa); |
11 | 13 | ||
12 | var partner = require('./httppulsakita.js'); | 14 | var partner = require('./httppulsakita.js'); |
13 | 15 | ||
14 | partner.start(config, aaa.callbackReport); | 16 | partner.start(config, aaa.callbackReport, {aaa: aaa, logger: logger}); |
15 | aaa.start(config, partner); | 17 | aaa.start(config, partner, {logger: logger}); |
16 | 18 |
package.json
1 | { | 1 | { |
2 | "name": "sate24-to-sate24", | 2 | "name": "sate24-to-sate24", |
3 | "version": "0.0.1", | 3 | "version": "0.0.1", |
4 | "description": "ST24 to ST24 H2H OUT", | 4 | "description": "ST24 to ST24 H2H OUT", |
5 | "main": "index.js", | 5 | "main": "index.js", |
6 | "scripts": { | 6 | "scripts": { |
7 | "test": "mocha" | 7 | "test": "mocha" |
8 | }, | 8 | }, |
9 | "repository": { | 9 | "repository": { |
10 | "type": "git", | 10 | "type": "git", |
11 | "url": "git@gitlab.kodesumber.com:reload97/sate24-to-pulsakita.git" | 11 | "url": "git@gitlab.kodesumber.com:reload97/sate24-to-pulsakita.git" |
12 | }, | 12 | }, |
13 | "keywords": [ | 13 | "keywords": [ |
14 | "st24", | 14 | "st24", |
15 | "reload97", | 15 | "reload97", |
16 | "ppob", | 16 | "ppob", |
17 | "h2h", | 17 | "h2h", |
18 | "m2m", | 18 | "m2m", |
19 | "xmlrpc" | 19 | "xmlrpc" |
20 | ], | 20 | ], |
21 | "author": "Adhidarma Hadiwinoto <gua@adhisimon.org>", | 21 | "author": "Adhidarma Hadiwinoto <gua@adhisimon.org>", |
22 | "license": "BSD", | 22 | "license": "BSD", |
23 | "dependencies": { | 23 | "dependencies": { |
24 | "mocha": "~2.2.5", | 24 | "mocha": "~2.2.5", |
25 | "request": "~2.57.0", | 25 | "request": "~2.57.0", |
26 | "strftime": "~0.9.2", | 26 | "strftime": "~0.9.2", |
27 | "iniparser": "~1.0.5", | 27 | "iniparser": "~1.0.5", |
28 | "mathjs": "~1.7.0", | 28 | "mathjs": "~1.7.0", |
29 | "xmlrpc": "~1.3.1", | 29 | "xmlrpc": "~1.3.1", |
30 | "xml2js": "~0.4.9", | 30 | "xml2js": "~0.4.9", |
31 | "sate24": "git+http://git@gitlab.kodesumber.com/reload97/node-sate24.git" | 31 | "sate24": "git+http://git@gitlab.kodesumber.com/reload97/node-sate24.git", |
32 | "winston": "~1.0.1" | ||
32 | } | 33 | } |
33 | } | 34 | } |
34 | 35 |