Blame view

lib/partner-listener/dumper/index.js 1.63 KB
732c359a7   Adhidarma Hadiwinoto   Partner listener ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  const MODULE_NAME = 'PARTNER-LISTENER.DUMPER';
  
  const fsPromise = require('fs').promises;
  const path = require('path');
  const moment = require('moment');
  const config = require('komodo-sdk/config');
  const logger = require('komodo-sdk/logger');
  
  const mkdirIfNotExists = require('../../utils/mkdir-if-not-exists');
  
  const baseDumpDir = path.join('dump', 'partner-listener');
  const lastDumpFileName = path.join(baseDumpDir, 'last');
  
  module.exports = async (xid, req, responseBody) => {
      if (
          !config
          || !config.listener
          || !config.listener.partner
          || !config.listener.partner.dump
      ) return;
  
      const data = `--------
  XID: ${xid}
  TS: ${moment().format('YYYY-MM-DD HH:mm:ss')}
  
  REQ FROM: ${req.ip}
  REQ CONTENT-TYPE: ${req.get('content-type')}
  REQ METHOD: ${req.method}
  REQ URL: ${req.url}
  
  REQ QUERY-STRING:
  ${JSON.stringify(req.query, null, 2)}
  
  REQ BODY:
  ${typeof req.body === 'string' ? req.body : JSON.stringify(req.body, null, 2)}
  
  RES BODY:
  ${typeof responseBody === 'string' ? responseBody : JSON.stringify(responseBody, null, 2)}
  `;
  
      const dumpFileName = path.join(
          baseDumpDir,
          moment().format('YYYY-MM-DD'),
          [
              moment().format('YYMMDD_HHmmss_SSS'),
              xid,
          ].join('_'),
      );
  
      try {
          await mkdirIfNotExists(xid, path.basename(dumpFileName));
          await fsPromise.writeFile(lastDumpFileName, data);
          await fsPromise.writeFile(dumpFileName, data);
      } catch (e) {
          logger.warn(`${MODULE_NAME} FBC46420: Exception on dumping file`, {
              xid,
              eCode: e.code,
              eMessage: e.eMessage,
          });
      }
  };