Commit 1caba187c264b39c9c96890ec1f84f44636c5dd8

Authored by Adhidarma Hadiwinoto
1 parent 6fc0cd5de0
Exists in master

mongodb

Showing 2 changed files with 105 additions and 8 deletions Side-by-side Diff

... ... @@ -22,6 +22,7 @@
22 22 "dependencies": {
23 23 "easysoap": "^1.0.5",
24 24 "ini": "^1.3.4",
  25 + "moment": "^2.13.0",
25 26 "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git",
26 27 "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
27 28 "soap": "^0.15.0",
partner-kospinjasa.js
... ... @@ -6,6 +6,8 @@ var fs = require("fs");
6 6 var whiskers = require("whiskers");
7 7 var http = require("http");
8 8 var url = require("url");
  9 +var mongoClient = require('mongodb').MongoClient;
  10 +var moment = require('moment');
9 11  
10 12 process.chdir(__dirname);
11 13 var soapTemplate = fs.readFileSync("message.xml");
... ... @@ -18,6 +20,7 @@ var callbackReport;
18 20 var aaa;
19 21 var logger;
20 22 var options;
  23 +var mongodb;
21 24  
22 25 function start(_config, _callbackReport, options) {
23 26 config = _config;
... ... @@ -36,9 +39,89 @@ function start(_config, _callbackReport, options) {
36 39 ]
37 40 });
38 41 }
  42 +
  43 + initMongoClient();
  44 +}
  45 +
  46 +function initMongoClient() {
  47 + if (!config || !config.mongodb || !config.mongodb.url) {
  48 + return;
  49 + }
  50 +
  51 + try {
  52 + var url = config.mongodb.url;
  53 +
  54 + mongoClient.connect(url, function(err, db) {
  55 + if (err) {
  56 + logger.warn('Failed to connect to mongodb', {err: err});
  57 + return;
  58 + }
  59 + mongodb = db;
  60 + logger.info('MongoDB connected');
  61 + });
  62 + }
  63 + catch(err) {
  64 + logger.warn('Exception when connecting to mongodb', {err: err, url: url});
  65 + }
  66 +}
  67 +
  68 +function insertTaskToMongoDb(task) {
  69 + if (!isMongoReady()) { return; }
  70 +
  71 + task.supplier = config.globals.gateway_name;
  72 + task.rc = '68';
  73 +
  74 + try {
  75 + mongodb.collection(config.mongodb.collection).insertOne(task);
  76 + }
  77 + catch(err) {
  78 + //logger.warn('Exception when inserting document to mongodb', {err: err, task: task});
  79 + }
  80 +}
  81 +
  82 +function pushResponseToMongoDb(task, response, rc) {
  83 + if (!isMongoReady()) { return; }
  84 +
  85 + try {
  86 + mongodb.collection(config.mongodb.collection).updateOne(
  87 + {requestId: task.requestId},
  88 + {
  89 + $set: {
  90 + lastResponse: response,
  91 + supplier: config.globals.gateway_name,
  92 + rc: rc
  93 + },
  94 + $push: {
  95 + responses: response
  96 + }
  97 + },
  98 + function(err, result) {
  99 + if (err) {
  100 + logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response});
  101 + return;
  102 + }
  103 + }
  104 + );
  105 + }
  106 + catch(err) {
  107 + logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response});
  108 + }
  109 +}
  110 +
  111 +function isMongoReady() {
  112 + if (!config.mongodb) { return; }
  113 + if (!config.mongodb.collection) { return; }
  114 + if (!mongodb) { return; }
  115 +
  116 + return true;
39 117 }
40 118  
41 119 function topupRequest(task, retry) {
  120 + task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
  121 + task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD');
  122 +
  123 + insertTaskToMongoDb(task);
  124 +
42 125 saldoCheck(billpayment, task);
43 126 }
44 127  
... ... @@ -58,8 +141,13 @@ function saldoCheck(callback, task) {
58 141 soap.createClient(config.h2h_out.partner, function(err, soapClient) {
59 142  
60 143 if (err) {
61   - logger.warn('Error creating soap client for saldoCheck', {err: err});
62   - callbackReport(task.requestId, '40', 'Error creating soap client for saldoCheck: ' + err);
  144 +
  145 + var errorMessage = 'Error creating soap client for saldoCheck: ' + err;
  146 +
  147 + logger.warn(errorMessage, {err: err});
  148 + callbackReport(task.requestId, '40', errorMessage);
  149 + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40');
  150 +
63 151 return;
64 152 }
65 153  
... ... @@ -77,8 +165,11 @@ function saldoCheck(callback, task) {
77 165 );
78 166  
79 167 if (err) {
80   - logger.warn('Error requesting saldoCheck', {err: err});
81   - callbackReport(task.requestId, '40', 'Gagal check saldo');
  168 + var errorMessage = 'Error requesting saldoCheck: ' + err;
  169 +
  170 + logger.warn(errorMessage, {err: err});
  171 + callbackReport(task.requestId, '40', errorMessage);
  172 + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40');
82 173 }
83 174  
84 175 var balance;
... ... @@ -147,17 +238,21 @@ function billpayment(task, balance) {
147 238 );
148 239  
149 240 if (err) {
150   - logger.warn('Error requesting service', {err: err});
151   - callbackReport(task.requestId, '68', 'something wrong');
  241 + var errorMessage = 'Error requesting service: ' + err;
  242 +
  243 + logger.warn(errorMessage, {err: err});
  244 + callbackReport(task.requestId, '68', errorMessage);
  245 + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: soapClient.lastResponse, parsed: result}, '68');
  246 +
152 247 return;
153 248 }
154 249  
155   - topupResponseHandler(task, result, balance);
  250 + topupResponseHandler(task, result, balance, soapClient.lastResponse);
156 251 });
157 252 });
158 253 }
159 254  
160   -function topupResponseHandler(task, response, balance) {
  255 +function topupResponseHandler(task, response, balance, rawResponse) {
161 256 var st24rc = '68';
162 257 var st24message = response.outputParameter.resultDesc.$value;
163 258  
... ... @@ -293,6 +388,7 @@ function topupResponseHandler(task, response, balance) {
293 388  
294 389 logger.info('Got result: ' + message, {response: response});
295 390 callbackReport(task.requestId, st24rc, st24message + ' -- Prev Balance: ' + balance);
  391 + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: rawResponse, parsed: response}, st24rc);
296 392 }
297 393  
298 394 function createSignature(params, password) {