From aa26f84e6cca1f0baa0b21c71debf9985c726017 Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <gua@adhisimon.org> Date: Mon, 9 May 2016 22:07:51 +0700 Subject: [PATCH] log to mongo --- package.json | 3 +++ partner-irs.js | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index cb9e37c..3f9d367 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,12 @@ "license": "ISC", "dependencies": { "ini": "^1.3.4", + "moment": "^2.13.0", + "mongodb": "^2.1.18", "request": "^2.72.0", "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", + "strftime": "^0.9.2", "url": "^0.11.0", "winston": "^2.2.0", "xmlrpc": "^1.3.1" diff --git a/partner-irs.js b/partner-irs.js index 2362a28..4cc2194 100644 --- a/partner-irs.js +++ b/partner-irs.js @@ -3,6 +3,9 @@ var request = require('request'); var xmlrpc = require('xmlrpc'); var url = require('url'); var http = require('http'); +var mongoClient = require('mongodb').MongoClient; +var strftime = require('strftime'); +var moment = require('moment'); var max_retry = 3; var sleep_before_retry = 2000; @@ -14,6 +17,7 @@ var callbackReport; var aaa; var logger; var options; +var mongodb; function start(_config, _callbackReport, options) { config = _config; @@ -34,6 +38,7 @@ function start(_config, _callbackReport, options) { } createXMLRPCServer(); + initMongoClient(); } function createXMLRPCServer() { @@ -57,6 +62,10 @@ function createXMLRPCServer() { for (var i = 0; i < paramscount; i++) { var value = params[i]; + var responseTs = strftime('%Y-%m-%d %H:%M:%S', new Date()); + var dummyTask = { requestId: value.REQUESTID }; + pushResponseToMongoDb(dummyTask, {ts: responseTs, supplier: config.globals.gateway_name, parsed: value}); + if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') { value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE']; } @@ -119,7 +128,7 @@ function topupRequestXMLRPC(task, retry) { var methodName = 'topUpRequest'; logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params}); - client.methodCall(methodName, [ params ], function (error, value) { + client.methodCall(methodName, [ params ], function (error, value) { // Results of the method response if (error) { @@ -140,6 +149,9 @@ function topupRequestXMLRPC(task, retry) { logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value}); + var responseTs = strftime('%Y-%m-%d %H:%M:%S', new Date()); + pushResponseToMongoDb(task, {ts: responseTs, supplier: config.globals.gateway_name, parsed: value}); + if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') { value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE']; } @@ -153,8 +165,78 @@ function topupRequestXMLRPC(task, retry) { } function topupRequest(task, retry) { + if (retry === undefined) { + task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss'); + task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD'); + + insertTaskToMongoDb(task); + } + topupRequestXMLRPC(task, retry); } +function initMongoClient() { + if (!config.mongodb || !config.mongodb.url) { + return; + } + + try { + var url = config.mongodb.url; + + mongoClient.connect(url, function(err, db) { + if (err) { + logger.warn('Failed to connect to mongodb', {err: err}); + return; + } + mongodb = db; + logger.info('MongoDB connected'); + }); + } + catch(err) { + logger.warn('Exception when connecting to mongodb', {err: err, url: url}); + } +} + +function insertTaskToMongoDb(task) { + if (!isMongoReady()) { return; } + + task.supplier = config.globals.gateway_name; + + try { + mongodb.collection(config.mongodb.collection).insertOne(task); + } + catch(err) { + //logger.warn('Exception when inserting document to mongodb', {err: err, task: task}); + } +} + +function pushResponseToMongoDb(task, response) { + if (!isMongoReady()) { return; } + + try { + mongodb.collection(config.mongodb.collection).updateOne( + {requestId: task.requestId}, + { + $set: { + lastResponse: response, + supplier: config.globals.gateway_name + }, + $push: { + responses: response + } + }, + function(err, result) { + if (err) { + logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response}); + return; + } + } + ); + } + catch(err) { + logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response}); + } +} + exports.start = start; exports.topupRequest = topupRequest; -- 1.9.0