Commit aa26f84e6cca1f0baa0b21c71debf9985c726017

Authored by Adhidarma Hadiwinoto
1 parent 77d71adf18
Exists in master

log to mongo

Showing 2 changed files with 86 additions and 1 deletions Side-by-side Diff

... ... @@ -21,9 +21,12 @@
21 21 "license": "ISC",
22 22 "dependencies": {
23 23 "ini": "^1.3.4",
  24 + "moment": "^2.13.0",
  25 + "mongodb": "^2.1.18",
24 26 "request": "^2.72.0",
25 27 "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git",
26 28 "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
  29 + "strftime": "^0.9.2",
27 30 "url": "^0.11.0",
28 31 "winston": "^2.2.0",
29 32 "xmlrpc": "^1.3.1"
... ... @@ -3,6 +3,9 @@ var request = require('request');
3 3 var xmlrpc = require('xmlrpc');
4 4 var url = require('url');
5 5 var http = require('http');
  6 +var mongoClient = require('mongodb').MongoClient;
  7 +var strftime = require('strftime');
  8 +var moment = require('moment');
6 9  
7 10 var max_retry = 3;
8 11 var sleep_before_retry = 2000;
... ... @@ -14,6 +17,7 @@ var callbackReport;
14 17 var aaa;
15 18 var logger;
16 19 var options;
  20 +var mongodb;
17 21  
18 22 function start(_config, _callbackReport, options) {
19 23 config = _config;
... ... @@ -34,6 +38,7 @@ function start(_config, _callbackReport, options) {
34 38 }
35 39  
36 40 createXMLRPCServer();
  41 + initMongoClient();
37 42 }
38 43  
39 44 function createXMLRPCServer() {
... ... @@ -57,6 +62,10 @@ function createXMLRPCServer() {
57 62 for (var i = 0; i < paramscount; i++) {
58 63 var value = params[i];
59 64  
  65 + var responseTs = strftime('%Y-%m-%d %H:%M:%S', new Date());
  66 + var dummyTask = { requestId: value.REQUESTID };
  67 + pushResponseToMongoDb(dummyTask, {ts: responseTs, supplier: config.globals.gateway_name, parsed: value});
  68 +
60 69 if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') {
61 70 value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE'];
62 71 }
... ... @@ -119,7 +128,7 @@ function topupRequestXMLRPC(task, retry) {
119 128 var methodName = 'topUpRequest';
120 129 logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params});
121 130  
122   - client.methodCall(methodName, [ params ], function (error, value) {
  131 + client.methodCall(methodName, [ params ], function (error, value) {
123 132 // Results of the method response
124 133 if (error) {
125 134  
... ... @@ -140,6 +149,9 @@ function topupRequestXMLRPC(task, retry) {
140 149  
141 150 logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value});
142 151  
  152 + var responseTs = strftime('%Y-%m-%d %H:%M:%S', new Date());
  153 + pushResponseToMongoDb(task, {ts: responseTs, supplier: config.globals.gateway_name, parsed: value});
  154 +
143 155 if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') {
144 156 value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE'];
145 157 }
... ... @@ -153,8 +165,78 @@ function topupRequestXMLRPC(task, retry) {
153 165 }
154 166  
155 167 function topupRequest(task, retry) {
  168 + if (retry === undefined) {
  169 + task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
  170 + task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD');
  171 +
  172 + insertTaskToMongoDb(task);
  173 + }
  174 +
156 175 topupRequestXMLRPC(task, retry);
157 176 }
158 177  
  178 +function initMongoClient() {
  179 + if (!config.mongodb || !config.mongodb.url) {
  180 + return;
  181 + }
  182 +
  183 + try {
  184 + var url = config.mongodb.url;
  185 +
  186 + mongoClient.connect(url, function(err, db) {
  187 + if (err) {
  188 + logger.warn('Failed to connect to mongodb', {err: err});
  189 + return;
  190 + }
  191 + mongodb = db;
  192 + logger.info('MongoDB connected');
  193 + });
  194 + }
  195 + catch(err) {
  196 + logger.warn('Exception when connecting to mongodb', {err: err, url: url});
  197 + }
  198 +}
  199 +
  200 +function insertTaskToMongoDb(task) {
  201 + if (!isMongoReady()) { return; }
  202 +
  203 + task.supplier = config.globals.gateway_name;
  204 +
  205 + try {
  206 + mongodb.collection(config.mongodb.collection).insertOne(task);
  207 + }
  208 + catch(err) {
  209 + //logger.warn('Exception when inserting document to mongodb', {err: err, task: task});
  210 + }
  211 +}
  212 +
  213 +function pushResponseToMongoDb(task, response) {
  214 + if (!isMongoReady()) { return; }
  215 +
  216 + try {
  217 + mongodb.collection(config.mongodb.collection).updateOne(
  218 + {requestId: task.requestId},
  219 + {
  220 + $set: {
  221 + lastResponse: response,
  222 + supplier: config.globals.gateway_name
  223 + },
  224 + $push: {
  225 + responses: response
  226 + }
  227 + },
  228 + function(err, result) {
  229 + if (err) {
  230 + logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response});
  231 + return;
  232 + }
  233 + }
  234 + );
  235 + }
  236 + catch(err) {
  237 + logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response});
  238 + }
  239 +}
  240 +
159 241 exports.start = start;
160 242 exports.topupRequest = topupRequest;