request.js 2.71 KB
const MODULE_NAME = 'DUMPER.REQUEST';

const fs = require('fs');

const fsPromise = fs.promises;
const moment = require('moment');
const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');
const path = require('path');
const mkdirIfNotExists = require('../mkdir-if-not-exists');

require('./init');
const vars = require('./vars');

const { baseDumpDir } = vars;
const baseRequestDumpDir = path.join(baseDumpDir, 'request');

if (!fs.existsSync(baseRequestDumpDir)) {
    fs.mkdirSync(baseRequestDumpDir, { recursive: true });
}

const doNotDump = !config.partner.dump_request;

module.exports = async (
    xid, task, endpointUrl, payload, axiosConfig, axiosResponse, exceptionOnHit,
) => {
    if (doNotDump) return;

    const {
        trx_id: trxId,
    } = task;

    logger.verbose(`${MODULE_NAME} 826334AF: Dumping`, {
        xid,
        trxId,
    });

    const dumpDir = path.join(
        baseRequestDumpDir,
        moment().format('YYYY-MM-DD'),
    );

    await mkdirIfNotExists(xid, dumpDir);

    const dumpFileName = path.join(
        dumpDir,
        `trx_${trxId}_${xid}.txt`,
    );

    const data = `-------- BEGIN OF REQUEST DUMP --------

${moment().format('YYYY-MM-DD HH:mm:ss')}

XID: ${xid}
TRX ID: ${trxId}
TRX DATE: ${task.created}
DESTINATION: ${task.destination}
LOCAL PRODUCT: ${task.product}
REMOTE PRODUCT: ${task.remote_product}

HTTP METHOD: POST
ENDPOINT URL: ${endpointUrl}

HIT CONFIG: ${(axiosConfig && JSON.stringify(axiosConfig, null, 2)) || '-'}

PAYLOAD:
${payload}

RESPONSE HEADERS:
${axiosResponse && axiosResponse.headers && JSON.stringify(axiosResponse.headers)}

HTTP STATUS: ${axiosResponse && axiosResponse.status} ${(axiosResponse && axiosResponse.statusText) || ''}
HIT EXCEPTION: ${
    exceptionOnHit
        ? JSON.stringify({ code: exceptionOnHit.code, message: exceptionOnHit.message }, null, 2)
        : '-'
}

RESPONSE BODY:
${
    (
        axiosResponse && axiosResponse.data
        && (
            (typeof axiosResponse.data === 'string' && axiosResponse.data)
            || JSON.stringify(axiosResponse.data, null, 2)
        )
    ) || ''
}

-------- END OF REQUEST DUMP --------
`;

    try {
        logger.verbose(`${MODULE_NAME} E915E0D8: Writing file`, {
            xid,
            dumpFileName,
        });

        await fsPromise.writeFile(dumpFileName, data);

        logger.verbose(`${MODULE_NAME} 7275A26C: Writing last dump file`, { xid });
        await fsPromise.writeFile(
            path.join(baseDumpDir, 'last-request.txt'),
            data,
        );
    } catch (e) {
        logger.warn(`${MODULE_NAME} 29212E93: Exception on writing dump file`, {
            xid,
            eCode: e.code,
            eMessage: e.message,
        });
    }
};