From 47f4ab28b9af722ae72cfce86ac01facb99ecbed Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 2 Jul 2018 07:01:05 +0200 Subject: [PATCH] HealthCheck Improved --- ExtractionBotProcessMainLoop.js | 149 +++++++++++--------- IndicatorBotProcessMainLoop.js | 132 ++++++++++-------- PoloniexAPIClient.js | 6 +- TradingBotProcessMainLoop.js | 232 +++++++++++++++++++------------- 4 files changed, 308 insertions(+), 211 deletions(-) diff --git a/ExtractionBotProcessMainLoop.js b/ExtractionBotProcessMainLoop.js index da304d9d4..02894eaeb 100644 --- a/ExtractionBotProcessMainLoop.js +++ b/ExtractionBotProcessMainLoop.js @@ -12,7 +12,9 @@ const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. - let timeoutHandle; + + let nextLoopTimeoutHandle; + let checkLoopHealthHandle; let thisObject = { initialize: initialize, @@ -128,11 +130,11 @@ try { if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[INFO] run -> Entering function."); } - let intervalHandle; + let fixedTimeLoopIntervalHandle; if (bot.runAtFixedInterval === true) { - intervalHandle = setInterval(loop, bot.fixedInterval); + fixedTimeLoopIntervalHandle = setInterval(loop, bot.fixedInterval); loop(); // First run. } else { @@ -214,8 +216,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -224,8 +227,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -234,8 +238,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -243,8 +248,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -280,8 +286,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -291,24 +298,27 @@ case "Too far in the future.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeUserBot -> onInizialized > Too far in the future. This Loop will enter in coma."); nextWaitTime = 'Coma'; - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); loopControl(nextWaitTime); return; } case "Not needed now, but soon.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeUserBot -> onInizialized > Not needed now, but soon. This Loop will continue with Normal wait time."); nextWaitTime = 'Normal'; - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); loopControl(nextWaitTime); return; } default: { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Unhandled custom response received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -319,8 +329,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -329,8 +340,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -338,8 +350,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -374,8 +387,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished > Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -397,32 +411,36 @@ case "Month before it is needed.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished > Month before it is needed. This Loop will be terminated."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } case "Month fully processed.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished > Month fully processed. This Loop will be terminated."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } case "End of the month reached.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished > End of the month reached. This Loop will be terminated."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } default: { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished > Unhandled custom response received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -433,8 +451,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished > Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -443,8 +462,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -452,8 +472,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -473,8 +494,9 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> onStop -> Stopping the Loop Gracefully. See you next time!"); } logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; @@ -490,21 +512,21 @@ case 'Normal': { if (bot.runAtFixedInterval === true) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Fixed Interval Normal exit point reached."); } - setTimeout(checkLoopHealth, bot.fixedInterval * 5, bot.loopCounter); + checkLoopHealthHandle = setTimeout(checkLoopHealth, bot.fixedInterval * 5, bot.loopCounter); logger.persist(); return; } else { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.normalWaitTime / 1000) + " seconds."); } - setTimeout(checkLoopHealth, processConfig.normalWaitTime * 5, bot.loopCounter); - timeoutHandle = setTimeout(loop, processConfig.normalWaitTime); + checkLoopHealthHandle = setTimeout(checkLoopHealth, processConfig.normalWaitTime * 5, bot.loopCounter); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.normalWaitTime); logger.persist(); } } break; case 'Retry': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.retryWaitTime / 1000) + " seconds."); } - setTimeout(checkLoopHealth, processConfig.retryWaitTime * 5, bot.loopCounter); - timeoutHandle = setTimeout(loop, processConfig.retryWaitTime); + checkLoopHealthHandle = setTimeout(checkLoopHealth, processConfig.retryWaitTime * 5, bot.loopCounter); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.retryWaitTime); logger.persist(); } break; @@ -515,7 +537,7 @@ return; } else { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - timeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); logger.persist(); } } @@ -527,7 +549,7 @@ return; } else { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - timeoutHandle = setTimeout(loop, processConfig.comaWaitTime); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.comaWaitTime); logger.persist(); } } @@ -548,7 +570,7 @@ console.log((new Date().toISOString() + " [ERROR] run -> loop -> checkLoopHealth -> " + pad(bot.codeName, 20) + " " + pad(bot.process, 30) + " Loop # " + pad(Number(bot.loopCounter), 5) + " found dead. Resurrecting it now.")); logger.persist(); // We persist the logs of the failed execution. - clearTimeout(timeoutHandle); // We cancel the timeout in case the original loop was still running and schedulled to reexecute. + clearTimeout(nextLoopTimeoutHandle); // We cancel the timeout in case the original loop was still running and schedulled to reexecute. loop(); // We restart the loop so that the processing can continue. } else { @@ -596,8 +618,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onInizialized -> CURRENT_EXECUTION_AT must be either 'Cloud' or 'Browser'."); logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onInizialized -> global.CURRENT_EXECUTION_AT = " + global.CURRENT_EXECUTION_AT); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -637,8 +660,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onFileReceived -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -649,8 +673,9 @@ catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -658,8 +683,9 @@ } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] run -> loop -> err = " + err.message); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -667,8 +693,9 @@ catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] run -> err = " + err.message); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } diff --git a/IndicatorBotProcessMainLoop.js b/IndicatorBotProcessMainLoop.js index 11ed7b313..0f4619156 100644 --- a/IndicatorBotProcessMainLoop.js +++ b/IndicatorBotProcessMainLoop.js @@ -12,7 +12,9 @@ const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. - let timeoutHandle; + + let nextLoopTimeoutHandle; + let checkLoopHealthHandle; let thisObject = { initialize: initialize, @@ -130,11 +132,11 @@ if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[INFO] run -> Entering function."); } - let intervalHandle; + let fixedTimeLoopIntervalHandle; if (bot.runAtFixedInterval === true) { - intervalHandle = setInterval(loop, bot.fixedInterval); + fixedTimeLoopIntervalHandle = setInterval(loop, bot.fixedInterval); } else { @@ -215,8 +217,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -225,8 +228,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -235,8 +239,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -244,8 +249,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -281,8 +287,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -304,8 +311,9 @@ default: { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Unhandled custom response received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -316,8 +324,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -326,8 +335,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -335,8 +345,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -371,8 +382,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -394,32 +406,36 @@ case "Month before it is needed.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished -> Month before it is needed. This Loop will be terminated."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } case "Month fully processed.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished -> Month fully processed. This Loop will be terminated."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } case "End of the month reached.": { logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished -> End of the month reached. This Loop will be terminated."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } default: { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Unhandled custom response received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -430,8 +446,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -440,8 +457,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -449,8 +467,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -485,27 +504,27 @@ switch (nextWaitTime) { case 'Normal': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.normalWaitTime / 1000) + " seconds."); } - setTimeout(checkLoopHealth, processConfig.normalWaitTime * 5, bot.loopCounter); - timeoutHandle = setTimeout(loop, processConfig.normalWaitTime); + checkLoopHealthHandle = setTimeout(checkLoopHealth, processConfig.normalWaitTime * 5, bot.loopCounter); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.normalWaitTime); logger.persist(); } break; case 'Retry': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.retryWaitTime / 1000) + " seconds."); } - setTimeout(checkLoopHealth, processConfig.retryWaitTime * 5, bot.loopCounter); - timeoutHandle = setTimeout(loop, processConfig.retryWaitTime); + checkLoopHealthHandle = setTimeout(checkLoopHealth, processConfig.retryWaitTime * 5, bot.loopCounter); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.retryWaitTime); logger.persist(); } break; case 'Sleep': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - timeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); logger.persist(); } break; case 'Coma': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - timeoutHandle = setTimeout(loop, processConfig.comaWaitTime); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.comaWaitTime); logger.persist(); } break; @@ -525,7 +544,7 @@ console.log((new Date().toISOString() + " [ERROR] run -> loop -> checkLoopHealth -> " + pad(bot.codeName,20) + " " + pad(bot.process,30) + " Loop # " + pad(Number(bot.loopCounter),5) + " found dead. Resurrecting it now.")); logger.persist(); // We persist the logs of the failed execution. - clearTimeout(timeoutHandle); // We cancel the timeout in case the original loop was still running and schedulled to reexecute. + clearTimeout(nextLoopTimeoutHandle); // We cancel the timeout in case the original loop was still running and schedulled to reexecute. loop(); // We restart the loop so that the processing can continue. } else { @@ -573,8 +592,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onInizialized -> CURRENT_EXECUTION_AT must be either 'Cloud' or 'Browser'."); logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onInizialized -> global.CURRENT_EXECUTION_AT = " + global.CURRENT_EXECUTION_AT); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -614,8 +634,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onFileReceived -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -626,8 +647,9 @@ catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -635,8 +657,9 @@ } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] run -> loop -> err = " + err.message); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -644,8 +667,9 @@ catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] run -> err = " + err.message); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } diff --git a/PoloniexAPIClient.js b/PoloniexAPIClient.js index 4c62f92ce..8eccf9526 100644 --- a/PoloniexAPIClient.js +++ b/PoloniexAPIClient.js @@ -402,7 +402,7 @@ analizeResponse: function (logger, exchangeErr, exchangeResponse, notOkCallBack, okCallBack) { const FULL_LOG = true; - const LOG_FILE_CONTENT = false; + const LOG_FILE_CONTENT = true; const MODULE_NAME = "Poloniex API Client"; /* This function analizes the different situations we might encounter trying to access Poloniex and returns appropiate standard errors. */ @@ -437,7 +437,9 @@ if (JSON.stringify(exchangeResponse).indexOf("error") > 0) { logger.write(MODULE_NAME, "[ERROR] analizeResponse -> Unexpected response from the Exchange."); - logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeResponse = " + JSON.stringify(exchangeErr)); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> JSON.stringify(exchangeErr) = " + JSON.stringify(exchangeErr)); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeErr = " + exchangeErr); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeResponse = " + exchangeResponse); notOkCallBack(global.DEFAULT_FAIL_RESPONSE); return; diff --git a/TradingBotProcessMainLoop.js b/TradingBotProcessMainLoop.js index 95bb1651d..2df64f78c 100644 --- a/TradingBotProcessMainLoop.js +++ b/TradingBotProcessMainLoop.js @@ -12,7 +12,9 @@ const DEBUG_MODULE = require(ROOT_DIR + 'DebugLog'); let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. - let timeoutHandle; + + let nextLoopTimeoutHandle; + let checkLoopHealthHandle; let thisObject = { initialize: initialize, @@ -130,11 +132,11 @@ try { if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[INFO] run -> Entering function."); } - let intervalHandle; + let fixedTimeLoopIntervalHandle; if (bot.runAtFixedInterval === true) { - intervalHandle = setInterval(loop, bot.fixedInterval); + fixedTimeLoopIntervalHandle = setInterval(loop, bot.fixedInterval); } else { @@ -277,8 +279,9 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> End of Backtesting Period reached. Exiting Bot Process Loop."); } logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } @@ -327,8 +330,9 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> End of Competition Period reached. Exiting Bot Process Loop."); } logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; } @@ -340,8 +344,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> Unexpected bot.startMode."); logger.write(MODULE_NAME, "[ERROR] run -> loop -> bot.startMode = " + bot.startMode); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -397,8 +402,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -407,8 +413,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -417,8 +424,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -426,8 +434,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -463,8 +472,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -473,8 +483,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -483,8 +494,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -492,8 +504,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -528,8 +541,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeContext -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -538,8 +552,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeContext -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -548,8 +563,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeContext -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -557,8 +573,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeContext -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -594,8 +611,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeExchangeAPI -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -604,8 +622,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeExchangeAPI -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -614,8 +633,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeContext -> onInizialized -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -623,8 +643,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeExchangeAPI -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -659,8 +680,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeAssistant -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -669,8 +691,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeAssistant -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -679,8 +702,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeAssistant -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -688,8 +712,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeAssistant -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -725,8 +750,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -735,8 +761,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -745,8 +772,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -754,8 +782,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -789,8 +818,9 @@ case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -799,8 +829,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -809,8 +840,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -818,8 +850,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -848,16 +881,18 @@ case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. logger.write(MODULE_NAME, "[ERROR] run -> loop -> saveContext -> onFinished -> Can not retry at this point."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. logger.write(MODULE_NAME, "[ERROR] run -> loop -> saveContext -> onFinished -> Operation Failed. Aborting the process."); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); return; } @@ -866,8 +901,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> saveContext -> onFinished -> Unhandled err.result received. -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -876,8 +912,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> saveContext -> onFinished -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -885,8 +922,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> saveContext -> err = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -906,8 +944,9 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> onStop -> Stopping the Loop Gracefully. See you next time!"); } logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_OK_RESPONSE); return; @@ -922,27 +961,27 @@ switch (nextWaitTime) { case 'Normal': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Normal -> Restarting Loop in " + (processConfig.normalWaitTime / 1000) + " seconds."); } - setTimeout(checkLoopHealth, processConfig.normalWaitTime * 5, bot.loopCounter); - timeoutHandle = setTimeout(loop, processConfig.normalWaitTime); + checkLoopHealthHandle = setTimeout(checkLoopHealth, processConfig.normalWaitTime * 5, bot.loopCounter); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.normalWaitTime); logger.persist(); } break; case 'Retry': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Retry -> Restarting Loop in " + (processConfig.retryWaitTime / 1000) + " seconds."); } - setTimeout(checkLoopHealth, processConfig.retryWaitTime * 5, bot.loopCounter); - timeoutHandle = setTimeout(loop, processConfig.retryWaitTime); + checkLoopHealthHandle = setTimeout(checkLoopHealth, processConfig.retryWaitTime * 5, bot.loopCounter); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.retryWaitTime); logger.persist(); } break; case 'Sleep': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Sleep -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - timeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); logger.persist(); } break; case 'Coma': { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Coma -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - timeoutHandle = setTimeout(loop, processConfig.comaWaitTime); + nextLoopTimeoutHandle = setTimeout(loop, processConfig.comaWaitTime); logger.persist(); } break; @@ -968,7 +1007,7 @@ console.log((new Date().toISOString() + " [ERROR] run -> loop -> checkLoopHealth -> " + pad(bot.codeName, 20) + " " + pad(bot.process, 30) + " Loop # " + pad(Number(bot.loopCounter), 5) + " found dead. Resurrecting it now.")); logger.persist(); // We persist the logs of the failed execution. - clearTimeout(timeoutHandle); // We cancel the timeout in case the original loop was still running and schedulled to reexecute. + clearTimeout(nextLoopTimeoutHandle); // We cancel the timeout in case the original loop was still running and schedulled to reexecute. loop(); // We restart the loop so that the processing can continue. } else { @@ -1016,8 +1055,9 @@ logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onInizialized -> CURRENT_EXECUTION_AT must be either 'Cloud' or 'Browser'."); logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onInizialized -> global.CURRENT_EXECUTION_AT = " + global.CURRENT_EXECUTION_AT); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -1057,8 +1097,9 @@ } catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> onFileReceived -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -1069,8 +1110,9 @@ catch (err) { logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> err.message = " + err.message); logger.persist(); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; } @@ -1078,8 +1120,9 @@ } catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] run -> loop -> err = " + err.message); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(err); } } @@ -1087,8 +1130,9 @@ catch (err) { parentLogger.write(MODULE_NAME, "[ERROR] run -> err = " + err.message); - clearInterval(intervalHandle); - clearTimeout(timeoutHandle); + clearInterval(fixedTimeLoopIntervalHandle); + clearTimeout(nextLoopTimeoutHandle); + clearTimeout(checkLoopHealthHandle); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } }