From 7cda700a505471b4fe46af75bcbb5abceeedddd5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 19 Apr 2018 18:59:36 +0200 Subject: [PATCH] Fixed Interval Execution --- .vs/AACloud/v15/.suo | Bin 101376 -> 92672 bytes Extraction Bot Process Main Loop.js | 41 ++++++-- Run.js | 142 +++++++++++++++++----------- this.config.json | 4 +- 4 files changed, 125 insertions(+), 62 deletions(-) diff --git a/.vs/AACloud/v15/.suo b/.vs/AACloud/v15/.suo index 0dee02ef0c1efaf64095f9acc1b6e959e920b330..aebf997930c7edc2ffc71fa60fc454a9a3faac4f 100644 GIT binary patch delta 5455 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 Entering function."); } - loop(); + let intervalHandle; + + if (bot.runAtFixedInterval === true) { + + intervalHandle = setInterval(loop, bot.fixedInterval); + + } else { + + loop(); + + } function loop() { @@ -252,6 +262,8 @@ if (shallWeStop() === true) { + if (bot.runAtFixedInterval === true) { intervalHandle.clearInterval();} + if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Stopping the Loop Gracefully. See you next time! :-)"); } callBackFunction(global.DEFAULT_OK_RESPONSE); return; @@ -262,8 +274,13 @@ switch (nextWaitTime) { case 'Normal': { - if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Restarting Loop in " + (processConfig.normalWaitTime / 1000) + " seconds."); } - setTimeout(loop, processConfig.normalWaitTime); + if (bot.runAtFixedInterval === true) { + if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Fixed Interval Normal exit point reached."); } + return; + } else { + if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Restarting Loop in " + (processConfig.normalWaitTime / 1000) + " seconds."); } + setTimeout(loop, processConfig.normalWaitTime); + } } break; case 'Retry': { @@ -272,13 +289,23 @@ } break; case 'Sleep': { - if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - setTimeout(loop, processConfig.sleepWaitTime); + if (bot.runAtFixedInterval === true) { + if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Fixed Interval Sleep exit point reached."); } + return; + } else { + if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } + setTimeout(loop, processConfig.sleepWaitTime); + } } break; case 'Coma': { - if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - setTimeout(loop, processConfig.comaWaitTime); + if (bot.runAtFixedInterval === true) { + if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Fixed Interval Coma exit point reached."); } + return; + } else { + if (FULL_LOG === true) { logger.write("[INFO] run -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } + setTimeout(loop, processConfig.comaWaitTime); + } } break; } diff --git a/Run.js b/Run.js index cf3c5e684..a3920f4f9 100644 --- a/Run.js +++ b/Run.js @@ -198,41 +198,44 @@ for (let p = 0; p < global.PLATFORM_CONFIG.executionList.length; p++) { /* We tesst each type of start Mode to get what to run and how. */ - if (processConfig.startMode.allMonths.run === "true") { + if (processConfig.startMode.allMonths !== undefined) { - if (FULL_LOG === true) { logger.write("[INFO] run -> allMonths start mode detected. "); } + if (processConfig.startMode.allMonths.run === "true") { - for (let year = processConfig.startMode.allMonths.maxYear; year >= processConfig.startMode.allMonths.minYear; year--) { + if (FULL_LOG === true) { logger.write("[INFO] run -> allMonths start mode detected. "); } - for (let month = 12; month > 0; month--) { + for (let year = processConfig.startMode.allMonths.maxYear; year >= processConfig.startMode.allMonths.minYear; year--) { - botConfig.debug = { - month: pad(month, 2), - year: pad(year, 4) - }; + for (let month = 12; month > 0; month--) { - let padMonth = pad(month,2) + botConfig.debug = { + month: pad(month, 2), + year: pad(year, 4) + }; - let newInstanceBotConfig = JSON.parse(JSON.stringify(botConfig)); + let padMonth = pad(month, 2) - let timeDelay = Math.random() * 10 * 1000; // We introduce a short delay so as to not overload the machine. - setTimeout(startProcess, timeDelay); + let newInstanceBotConfig = JSON.parse(JSON.stringify(botConfig)); - function startProcess() { + let timeDelay = Math.random() * 10 * 1000; // We introduce a short delay so as to not overload the machine. + setTimeout(startProcess, timeDelay); - if (FULL_LOG === true) { logger.write("[INFO] run -> startProcess -> Ready to start process."); } + function startProcess() { - switch (botConfig.type) { - case 'Extraction': { - runExtractionBot(newInstanceBotConfig, processConfig, padMonth, year); - break; - } - case 'Indicator': { - runIndicatorBot(newInstanceBotConfig, processConfig, padMonth, year); - break; - } - default: { - logger.write("[ERROR] run -> Unexpected bot type. -> botConfig.type = " + botConfig.type); + if (FULL_LOG === true) { logger.write("[INFO] run -> startProcess -> Ready to start process."); } + + switch (botConfig.type) { + case 'Extraction': { + runExtractionBot(newInstanceBotConfig, processConfig, padMonth, year); + break; + } + case 'Indicator': { + runIndicatorBot(newInstanceBotConfig, processConfig, padMonth, year); + break; + } + default: { + logger.write("[ERROR] run -> Unexpected bot type. -> botConfig.type = " + botConfig.type); + } } } } @@ -240,23 +243,49 @@ for (let p = 0; p < global.PLATFORM_CONFIG.executionList.length; p++) { } } - if (processConfig.startMode.oneMonth.run === "true") { + if (processConfig.startMode.oneMonth !== undefined) { - if (FULL_LOG === true) { logger.write("[INFO] run -> oneMonth start mode detected. "); } + if (processConfig.startMode.oneMonth.run === "true") { - startProcess(); + if (FULL_LOG === true) { logger.write("[INFO] run -> oneMonth start mode detected. "); } - function startProcess() { + startProcess(); - if (FULL_LOG === true) { logger.write("[INFO] run -> startProcess -> Ready to start process."); } + function startProcess() { - let month = pad(processConfig.startMode.oneMonth.month, 2); - let year = processConfig.startMode.oneMonth.year; + if (FULL_LOG === true) { logger.write("[INFO] run -> startProcess -> Ready to start process."); } - botConfig.debug = { - month: pad(month, 2), - year: pad(year, 4) - }; + let month = pad(processConfig.startMode.oneMonth.month, 2); + let year = processConfig.startMode.oneMonth.year; + + botConfig.debug = { + month: pad(month, 2), + year: pad(year, 4) + }; + + switch (botConfig.type) { + case 'Extraction': { + runExtractionBot(botConfig, processConfig, month, year); + break; + } + case 'Indicator': { + runIndicatorBot(botConfig, processConfig, month, year); + break; + } + default: { + logger.write("[ERROR] run -> Unexpected bot type. -> botConfig.type = " + botConfig.type); + } + } + } + } + } + + if (processConfig.startMode.noTime !== undefined) { + + if (processConfig.startMode.noTime.run === "true") { + + let month = pad((new Date()).getUTCMonth() + 1, 2); + let year = (new Date()).getUTCFullYear(); switch (botConfig.type) { case 'Extraction': { @@ -267,30 +296,37 @@ for (let p = 0; p < global.PLATFORM_CONFIG.executionList.length; p++) { runIndicatorBot(botConfig, processConfig, month, year); break; } - default: { - logger.write("[ERROR] run -> Unexpected bot type. -> botConfig.type = " + botConfig.type); + case 'Trading': { + runTradingBot(botConfig, processConfig); + break; } } } } - if (processConfig.startMode.noTime.run === "true") { + if (processConfig.startMode.fixedInterval !== undefined) { - let month = pad((new Date()).getUTCMonth() + 1, 2); - let year = (new Date()).getUTCFullYear(); + if (processConfig.startMode.fixedInterval.run === "true") { - switch (botConfig.type) { - case 'Extraction': { - runExtractionBot(botConfig, processConfig, month, year); - break; - } - case 'Indicator': { - runIndicatorBot(botConfig, processConfig, month, year); - break; - } - case 'Trading': { - runTradingBot(botConfig, processConfig); - break; + botConfig.runAtFixedInterval = true; + botConfig.fixedInterval = processConfig.startMode.fixedInterval.interval; + + let month = pad((new Date()).getUTCMonth() + 1, 2); + let year = (new Date()).getUTCFullYear(); + + switch (botConfig.type) { + case 'Extraction': { + runExtractionBot(botConfig, processConfig, month, year); + break; + } + case 'Indicator': { + runIndicatorBot(botConfig, processConfig, month, year); + break; + } + case 'Trading': { + runTradingBot(botConfig, processConfig); + break; + } } } } diff --git a/this.config.json b/this.config.json index 74522385e..87d26b9af 100644 --- a/this.config.json +++ b/this.config.json @@ -7,7 +7,7 @@ }, "executionList": [ { - "enabled": "true", + "enabled": "false", "botPath": "../Bots/AAMasters/AAMariam-Trading-Bot", "process": "Trading-Process" }, @@ -32,7 +32,7 @@ "process": "Poloniex-Hole-Fixing" }, { - "enabled": "false", + "enabled": "true", "botPath": "../Bots/AAMasters/AACharly-Extraction-Bot", "process": "Poloniex-Live-Trades" },