From 73f8d7d6c2d009bbd2fd7a85ec171a1e09eebf30 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <adhisimon@gmail.com>
Date: Thu, 8 Jul 2021 14:43:47 +0700
Subject: [PATCH] Optimasi retry send

---
 transport.js | 48 +++++++++++++++++++++++++++++++-----------------
 1 file changed, 31 insertions(+), 17 deletions(-)

diff --git a/transport.js b/transport.js
index dcfd714..3b3c9d5 100644
--- a/transport.js
+++ b/transport.js
@@ -1,5 +1,3 @@
-"use strict";
-
 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
 
 const module_name = require('path').basename(__filename);
@@ -13,6 +11,17 @@ const logger = require('komodo-sdk/logger');
 
 let _callback;
 
+const maxSendRetry = Number(config.max_send_retry) || 5;
+const sleepBeforeRetryMs = (Number(config.sleep_before_retry_secs) || 60) * 1000;
+
+function sleep(ms) {
+    new Promise((resolve) => {
+        setTimeout(() => {
+            resolve(null);
+        }, ms)
+    });
+};
+
 function createHttpServer() {
     let listenPort = config.center_port;
 
@@ -97,23 +106,23 @@ function init(cb) {
     createHttpServer();
 }
 
-function _sleepAndResend(partner, msg, params, retry) {
-    if (retry === null || retry === undefined) {
-        retry = Number(config.max_send_retry) || 5;
+async function sleepAndResend(partner, msg, params, retry) {
+    if ((retry || 0) > maxSendRetry) {
+        logger.verbose('Retry exceeded', {
+            params,
+            retry: retry || 0,
+        });
+        return;
     }
 
-    if (retry-- > 0) {
-        setTimeout(
-            function() {
-                send(partner, msg, params, retry);
-            },
-            (Number(config.sleep_before_retry_secs) || 60) * 1000
-        )
-    }
+    await sleep(sleepBeforeRetryMs);
+    send(partner, msg, params, retry + 1);
 }
 
 function send(partner, msg, params, retry) {
-    logger.verbose('Got response from CORE', {partner: partner, msg: msg, params: params, retry: retry});
+    logger.verbose('Got response from CORE', {
+        partner: partner, msg: msg, params: params, retry: retry || 0,
+    });
 
     if (!params || !params.reverse_url) {
         logger.verbose('Undefined reverse_url, not forwarding message to partner');
@@ -139,17 +148,22 @@ function send(partner, msg, params, retry) {
     request(reqOptions, function(err, res, body) {
         if (err) {
             logger.warn('Error sending reverse report to partner', {request: reqOptions, err: err});
-            _sleepAndResend(partner, msg, params, retry);
+            sleepAndResend(partner, msg, params, retry);
             return;
         }
 
+        /*
         if (res.statusCode != 200) {
-            logger.warn('Partner not returning HTTP status code 200 on reverse report', {request: reqOptions, http_status: res.statusCode});
+            logger.warn('Partner not returning HTTP status code 200 on reverse report', {
+                request: reqOptions, http_status: res.statusCode,
+            });
+
             _sleepAndResend(partner, msg, params, retry);
             return;
         }
+        */
 
-        logger.verbose('Reverse report has been sent to partner', {request: reqOptions});
+        logger.verbose('Reverse report has been sent to partner', { request: reqOptions, httpStatus: res && res.statusCode });
     })
 }
 
-- 
1.9.0