const MODULE_NAME = 'KOMODO-SDK-PUSH-TRX.CLIENT.PUSH-TASK-PREPAID'; const MAX_RETRY = 3; const RETRY_DELAY_MS = 2 * 1000; const uniqid = require('uniqid'); const config = require('komodo-sdk/config'); const { report } = require('komodo-sdk/gateway/pull'); const logger = require('tektrans-logger'); const wsList = require('./ws-list'); /** * @param {string} xid * @param {object} task * @param {string} gwName * @param {number} [retry] */ const pusher = (xid, task, gwName, retry) => { /** * @type WebSocket */ const ws = wsList[gwName]; const senderName = config.handler_name; if (!ws) { logger.verbose(`${MODULE_NAME} 7EB181CF: Invalid websocket`, { xid, gwName, hasWs: !!ws, }); if ((retry || 0) < MAX_RETRY) { logger.verbose(`${MODULE_NAME} B7B937A2: Will retry`, { xid, retried: retry || 0, delayMs: RETRY_DELAY_MS, }); report({ trx_id: task.trx_id, rc: '68', message: { xid, 'KOMODO-SDK-PUSH-TRX': { msg: 'B7B937A2 Invalid websocket on pushing to related gateway, will retry', gwOrigin: senderName, gwTarget: gwName, retried: retry || 0, }, }, }, xid); setTimeout(() => { logger.verbose(`${MODULE_NAME} EA985FC2: Retrying`, { xid, retried: (retry || 0) + 1, }); pusher(xid, task, gwName, (retry || 0) + 1); }, RETRY_DELAY_MS); } else { logger.warn(`${MODULE_NAME} 7151F200: Retry exceeded`, { xid, retried: (retry || 0) + 1, }); report({ trx_id: task.trx_id, rc: '91', message: { xid, 'KOMODO-SDK-PUSH-TRX': { msg: '7151F200 Invalid websocket on pushing to related gateway, retry exceeded', gwOrigin: senderName, gwTarget: gwName, retried: retry || 0, }, }, }, xid); } return; } const pushReportMsg = `${MODULE_NAME} 1E8EB9B9: Pushing task to related gateway`; logger.verbose(pushReportMsg, { xid, gwName, task, }); report({ trx_id: task.trx_id, rc: '68', message: { xid, 'KOMODO-SDK-PUSH-TRX': { msg: pushReportMsg, gwOrigin: senderName, gwTarget: gwName, }, }, }); const newTask = JSON.parse(JSON.stringify(task)); const sdkTrxIdAdder = Number(config.sdk_trx_id_adder); if (sdkTrxIdAdder) { const newTrxId = Number(newTask.trx_id) - sdkTrxIdAdder; logger.verbose(`${MODULE_NAME} 94669AEA: Reverting trx id to original`, { xid, currentTrxId: newTask.trx_id, newTrxId, }); newTask.trx_id = newTrxId; } ws.send(JSON.stringify({ type: 'TASK', ts: new Date(), rid: xid || uniqid(), senderName, payload: newTask, })); logger.verbose(`${MODULE_NAME} 7D3CECCA: Task pushed`, { xid, gwName }); }; module.exports = pusher;