Commit 66e7cb63fc9b706f09f6b391bbaeab6b8b0b45b5

Authored by Adhidarma Hadiwinoto
1 parent b53ba3002b
Exists in master

logger

Showing 3 changed files with 26 additions and 15 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 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;
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
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