Commit 1a0a4c0beeb0c27c36993f7be5b2a83ad44705ef
1 parent
34c1fc6aa5
Exists in
master
mongodb
Showing 2 changed files with 80 additions and 2 deletions Side-by-side Diff
package.json
... | ... | @@ -21,8 +21,10 @@ |
21 | 21 | "dependencies": { |
22 | 22 | "crypto": "0.0.3", |
23 | 23 | "ini": "^1.3.4", |
24 | + "mongodb": "^2.1.18", | |
24 | 25 | "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", |
25 | 26 | "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", |
27 | + "strftime": "^0.9.2", | |
26 | 28 | "winston": "^2.2.0", |
27 | 29 | "xml": "^1.0.1", |
28 | 30 | "xml2js": "^0.4.16" |
partner-cjk.js
... | ... | @@ -4,12 +4,37 @@ var xml = require('xml'); |
4 | 4 | var url = require('url'); |
5 | 5 | var http = require('http'); |
6 | 6 | var xml2js = require('xml2js').parseString; |
7 | +var mongoClient = require('mongodb').MongoClient; | |
8 | +var strftime = require('strftime'); | |
7 | 9 | |
8 | 10 | var config; |
9 | 11 | var callbackReport; |
10 | 12 | var aaa; |
11 | 13 | var logger; |
12 | 14 | var options; |
15 | +var mongodb; | |
16 | + | |
17 | +function initMongoClient() { | |
18 | + if (!config.mongodb || !config.mongodb.url) { | |
19 | + return; | |
20 | + } | |
21 | + | |
22 | + try { | |
23 | + var url = config.mongodb.url; | |
24 | + | |
25 | + mongoClient.connect(url, function(err, db) { | |
26 | + if (err) { | |
27 | + logger.warn('Failed to connect to mongodb', {err: err}); | |
28 | + return; | |
29 | + } | |
30 | + mongodb = db; | |
31 | + logger.info('MongoDB connected'); | |
32 | + }); | |
33 | + } | |
34 | + catch(err) { | |
35 | + logger.warn('Exception when connecting to mongodb', {err: err, url: url}); | |
36 | + } | |
37 | +} | |
13 | 38 | |
14 | 39 | var maxRetry = 10; |
15 | 40 | var sleepBeforeRetry = 30; |
... | ... | @@ -31,6 +56,8 @@ function start(_config, _callbackReport, options) { |
31 | 56 | ] |
32 | 57 | }); |
33 | 58 | } |
59 | + | |
60 | + initMongoClient(); | |
34 | 61 | } |
35 | 62 | |
36 | 63 | function calculateSignature(params) { |
... | ... | @@ -65,6 +92,45 @@ function createXmlPayload(params) { |
65 | 92 | return payload; |
66 | 93 | } |
67 | 94 | |
95 | +function insertTaskToMongoDb(task) { | |
96 | + if (!isMongoReady()) { return; } | |
97 | + | |
98 | + try { | |
99 | + mongodb.collection(config.mongodb.collection).insertOne(task); | |
100 | + } | |
101 | + catch(err) { | |
102 | + //logger.warn('Exception when inserting document to mongodb', {err: err, task: task}); | |
103 | + } | |
104 | +} | |
105 | + | |
106 | +function pushResponseToMongoDb(task, response) { | |
107 | + if (!isMongoReady()) { return; } | |
108 | + | |
109 | + try { | |
110 | + mongodb.collection(config.mongodb.collection).updateOne( | |
111 | + {requestId: task.requestId}, | |
112 | + {$push: {responses: response}}, | |
113 | + function(err, result) { | |
114 | + if (err) { | |
115 | + logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response}); | |
116 | + return; | |
117 | + } | |
118 | + } | |
119 | + ); | |
120 | + } | |
121 | + catch(err) { | |
122 | + logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response}); | |
123 | + } | |
124 | +} | |
125 | + | |
126 | +function isMongoReady() { | |
127 | + if (!config.mongodb) { return; } | |
128 | + if (!config.mongodb.collection) { return; } | |
129 | + if (!mongodb) { return; } | |
130 | + | |
131 | + return true; | |
132 | +} | |
133 | + | |
68 | 134 | function getSNFromMessage(message) { |
69 | 135 | try { |
70 | 136 | var sn_match = message.match(/SN: (\w+)/); |
... | ... | @@ -112,16 +178,24 @@ function getSNFromResponseObject(respObj) { |
112 | 178 | } |
113 | 179 | |
114 | 180 | function topupResponseHandler(body, task) { |
181 | + | |
115 | 182 | //logger.info('Got reply from partner', {body: body}); |
183 | + | |
116 | 184 | xml2js(body, function(err, result) { |
185 | + var ts = strftime('%Y-%m-%d %H:%M:%S', new Date()); | |
186 | + pushResponseToMongoDb(task, {ts: ts, raw: body}); | |
187 | + | |
117 | 188 | if (err) { |
118 | 189 | logger.warn('Got invalid XML from partner', {err: err, body: body, task: task}); |
190 | + callbackReport(task.requestId, '68', body); | |
191 | + return; | |
119 | 192 | } |
120 | 193 | logger.info('XML message from partner', {result: result}); |
121 | 194 | |
122 | 195 | var rc = '68'; |
123 | 196 | var message = result.ciwaru.msg[0]; |
124 | 197 | |
198 | + /* | |
125 | 199 | var trxid = 0; |
126 | 200 | try { |
127 | 201 | trxid = result.ciwaru.reqnum[0]; |
... | ... | @@ -129,6 +203,7 @@ function topupResponseHandler(body, task) { |
129 | 203 | catch(err) { |
130 | 204 | trxid = result.ciwaru.trxid[0]; |
131 | 205 | } |
206 | + */ | |
132 | 207 | |
133 | 208 | if (message.toUpperCase().indexOf('PENDING') >= 0) { |
134 | 209 | rc = '68'; |
... | ... | @@ -150,7 +225,7 @@ function topupResponseHandler(body, task) { |
150 | 225 | } |
151 | 226 | |
152 | 227 | if ((task.retry == maxRetry) || (rc != '68')) { |
153 | - callbackReport(trxid, rc, message); | |
228 | + callbackReport(task.requestId, rc, message); | |
154 | 229 | } else { |
155 | 230 | logger.info('Not reporting to AAA for duplicate 68', {task: task}); |
156 | 231 | } |
... | ... | @@ -174,8 +249,9 @@ function topupRequestRetry(task) { |
174 | 249 | } |
175 | 250 | |
176 | 251 | function topupRequest(task, retry) { |
177 | - | |
252 | + | |
178 | 253 | if (retry === undefined) { |
254 | + insertTaskToMongoDb(task); | |
179 | 255 | retry = maxRetry; |
180 | 256 | } |
181 | 257 |