Commit 732c359a73db49f1ca33fbc55cb2fcc276daee91

Authored by Adhidarma Hadiwinoto
1 parent c6a2bf27de
Exists in master and in 1 other branch dev

Partner listener dumper

Showing 5 changed files with 107 additions and 11 deletions Side-by-side Diff

lib/partner-listener/dumper/index.js
... ... @@ -0,0 +1,61 @@
  1 +const MODULE_NAME = 'PARTNER-LISTENER.DUMPER';
  2 +
  3 +const fsPromise = require('fs').promises;
  4 +const path = require('path');
  5 +const moment = require('moment');
  6 +const config = require('komodo-sdk/config');
  7 +const logger = require('komodo-sdk/logger');
  8 +
  9 +const mkdirIfNotExists = require('../../utils/mkdir-if-not-exists');
  10 +
  11 +const baseDumpDir = path.join('dump', 'partner-listener');
  12 +const lastDumpFileName = path.join(baseDumpDir, 'last');
  13 +
  14 +module.exports = async (xid, req, responseBody) => {
  15 + if (
  16 + !config
  17 + || !config.listener
  18 + || !config.listener.partner
  19 + || !config.listener.partner.dump
  20 + ) return;
  21 +
  22 + const data = `--------
  23 +XID: ${xid}
  24 +TS: ${moment().format('YYYY-MM-DD HH:mm:ss')}
  25 +
  26 +REQ FROM: ${req.ip}
  27 +REQ CONTENT-TYPE: ${req.get('content-type')}
  28 +REQ METHOD: ${req.method}
  29 +REQ URL: ${req.url}
  30 +
  31 +REQ QUERY-STRING:
  32 +${JSON.stringify(req.query, null, 2)}
  33 +
  34 +REQ BODY:
  35 +${typeof req.body === 'string' ? req.body : JSON.stringify(req.body, null, 2)}
  36 +
  37 +RES BODY:
  38 +${typeof responseBody === 'string' ? responseBody : JSON.stringify(responseBody, null, 2)}
  39 +`;
  40 +
  41 + const dumpFileName = path.join(
  42 + baseDumpDir,
  43 + moment().format('YYYY-MM-DD'),
  44 + [
  45 + moment().format('YYMMDD_HHmmss_SSS'),
  46 + xid,
  47 + ].join('_'),
  48 + );
  49 +
  50 + try {
  51 + await mkdirIfNotExists(xid, path.basename(dumpFileName));
  52 + await fsPromise.writeFile(lastDumpFileName, data);
  53 + await fsPromise.writeFile(dumpFileName, data);
  54 + } catch (e) {
  55 + logger.warn(`${MODULE_NAME} FBC46420: Exception on dumping file`, {
  56 + xid,
  57 + eCode: e.code,
  58 + eMessage: e.eMessage,
  59 + });
  60 + }
  61 +};
lib/partner-listener/routers/inquiry.js
... ... @@ -7,6 +7,7 @@ const logger = require('komodo-sdk/logger');
7 7  
8 8 const getFromBodyQsParams = require('../../get-from-body-qs-params');
9 9 const ipv6ToIpv4 = require('../../ipv6-to-ipv4');
  10 +const dumper = require('../dumper');
10 11  
11 12 const router = express.Router();
12 13 module.exports = router;
... ... @@ -25,7 +26,10 @@ const mainHandler = async (req, res) => {
25 26 const reverseUrl = getFromBodyQsParams(req, 'reverse_url');
26 27  
27 28 if (!requestId || !terminalNameWithoutIp || !productName || !destination) {
28   - res.end('INVALID REQUEST. Missing request_id or terminal_name or product_name or destination.');
  29 + const msg = 'INVALID REQUEST. Missing request_id or terminal_name or product_name or destination.';
  30 + res.end(msg);
  31 +
  32 + dumper(xid, req, msg);
29 33 return;
30 34 }
31 35  
... ... @@ -83,6 +87,8 @@ const mainHandler = async (req, res) => {
83 87 });
84 88  
85 89 res.json(resultForPartner);
  90 +
  91 + dumper(xid, req, resultForPartner);
86 92 } catch (e) {
87 93 logger.warn('EXCEPTION on forwarding INQUIRY request to CORE', {
88 94 xid,
... ... @@ -90,7 +96,7 @@ const mainHandler = async (req, res) => {
90 96 errMessage: e.message,
91 97 });
92 98  
93   - res.json({
  99 + const resultForPartner = {
94 100 httpgetx_xid: xid,
95 101 command: 'INQUIRY',
96 102 request_id: requestId,
... ... @@ -99,7 +105,10 @@ const mainHandler = async (req, res) => {
99 105 destination,
100 106 rc: '68',
101 107 message: 'CORE tidak merespon dengan benar, tidak dapat mengetahui status request anda',
102   - });
  108 + };
  109 +
  110 + res.json(resultForPartner);
  111 + dumper(xid, req, resultForPartner);
103 112 }
104 113 };
105 114  
lib/partner-listener/routers/pay.js
... ... @@ -7,6 +7,7 @@ const logger = require('komodo-sdk/logger');
7 7  
8 8 const getFromBodyQsParams = require('../../get-from-body-qs-params');
9 9 const ipv6ToIpv4 = require('../../ipv6-to-ipv4');
  10 +const dumper = require('../dumper');
10 11  
11 12 const router = express.Router();
12 13 module.exports = router;
... ... @@ -25,7 +26,9 @@ const mainHandler = async (req, res) => {
25 26 const reverseUrl = getFromBodyQsParams(req, 'reverse_url');
26 27  
27 28 if (!requestId || !terminalNameWithoutIp || !productName || !destination) {
28   - res.end('INVALID REQUEST. Missing request_id or terminal_name or product_name or destination.');
  29 + const msg = 'INVALID REQUEST. Missing request_id or terminal_name or product_name or destination.';
  30 + res.end(msg);
  31 + dumper(xid, req, msg);
29 32 return;
30 33 }
31 34  
... ... @@ -82,6 +85,7 @@ const mainHandler = async (req, res) => {
82 85 });
83 86  
84 87 res.json(resultForPartner);
  88 + dumper(xid, req, resultForPartner);
85 89 } catch (e) {
86 90 logger.warn('EXCEPTION on forwarding PAY request to CORE', {
87 91 xid,
... ... @@ -89,7 +93,7 @@ const mainHandler = async (req, res) => {
89 93 errMessage: e.message,
90 94 });
91 95  
92   - res.json({
  96 + const resultForPartner = {
93 97 httpgetx_xid: xid,
94 98 command: 'PAY',
95 99 request_id: requestId,
... ... @@ -98,7 +102,9 @@ const mainHandler = async (req, res) => {
98 102 destination,
99 103 rc: '68',
100 104 message: 'CORE tidak merespon dengan benar, tidak dapat mengetahui status request anda',
101   - });
  105 + };
  106 +
  107 + dumper(xid, req, resultForPartner);
102 108 }
103 109 };
104 110  
lib/partner-listener/routers/topup.js
... ... @@ -7,6 +7,7 @@ const logger = require('komodo-sdk/logger');
7 7 const coreapi = require('komodo-sdk/coreapi');
8 8 // const coreapi = require('../../coreapi');
9 9 const matrix = require('../../matrix');
  10 +const dumper = require('../dumper');
10 11  
11 12 const router = express.Router();
12 13 module.exports = router;
... ... @@ -94,6 +95,8 @@ async function pageIndex(req, res) {
94 95 coreResponse,
95 96 });
96 97 res.end('INVALID CORE RESPONSE');
  98 +
  99 + dumper(xid, req, 'INVALID CORE RESPONSE');
97 100 return;
98 101 }
99 102  
... ... @@ -119,6 +122,7 @@ async function pageIndex(req, res) {
119 122 };
120 123  
121 124 res.json(responseToPartner);
  125 + dumper(xid, req, responseToPartner);
122 126 }
123 127  
124 128 // router.all('/', (req, res) => { res.status(404).end('404: Not implemented yet'); });
lib/partner-listener/routers/trx-status.js
... ... @@ -6,6 +6,7 @@ const moment = require('moment');
6 6 const logger = require('komodo-sdk/logger');
7 7  
8 8 const coreapi = require('../../coreapi');
  9 +const dumper = require('../dumper');
9 10  
10 11 const router = express.Router();
11 12 module.exports = router;
... ... @@ -15,29 +16,38 @@ async function pageIndex(req, res) {
15 16 if (!req.body) req.body = {};
16 17  
17 18 if (!req.body.terminal_name && !req.query.terminal_name) {
  19 + const msg = 'Parameter terminal_name tidak terdefinisi';
18 20 res.json({
19 21 httpgetx_xid: xid,
20 22 error: true,
21   - message: 'Parameter terminal_name tidak terdefinisi',
  23 + message: msg,
22 24 });
  25 +
  26 + dumper(xid, req, msg);
23 27 return;
24 28 }
25 29  
26 30 if (!req.body.password && !req.query.password) {
  31 + const msg = 'Parameter password tidak terdefinisi';
27 32 res.json({
28 33 httpgetx_xid: xid,
29 34 error: true,
30   - message: 'Parameter password tidak terdefinisi',
  35 + message: msg,
31 36 });
  37 +
  38 + dumper(xid, req, msg);
32 39 return;
33 40 }
34 41  
35 42 if (!req.body.request_id && !req.query.request_id) {
  43 + const msg = 'Parameter request_id tidak terdefinisi';
36 44 res.json({
37 45 httpgetx_xid: xid,
38 46 error: true,
39   - message: 'Parameter request_id tidak terdefinisi',
  47 + message: msg,
40 48 });
  49 +
  50 + dumper(xid, req, msg);
41 51 return;
42 52 }
43 53  
... ... @@ -64,7 +74,7 @@ async function pageIndex(req, res) {
64 74 request_id: req.body.request_id || req.query.request_id,
65 75 });
66 76  
67   - res.json({
  77 + const responseBody = {
68 78 httpgetx_xid: xid,
69 79 error: true,
70 80 from_ip: remoteIp,
... ... @@ -72,7 +82,11 @@ async function pageIndex(req, res) {
72 82 full_terminal_name: askerTerminalName,
73 83 password: req.body.password || req.query.password,
74 84 message: msg,
75   - });
  85 + };
  86 +
  87 + res.json(responseBody);
  88 + dumper(xid, req, responseBody);
  89 +
76 90 return;
77 91 }
78 92  
... ... @@ -116,6 +130,8 @@ async function pageIndex(req, res) {
116 130 processing_time_in_ms: new Date() - res.locals.x_http_request_ts,
117 131 result,
118 132 });
  133 +
  134 + dumper(xid, req, result);
119 135 }
120 136  
121 137 router.get('/', pageIndex);