diff --git a/src/DailyFiles.js b/src/DailyFiles.js index 14d77eeac..8e58e1e52 100644 --- a/src/DailyFiles.js +++ b/src/DailyFiles.js @@ -82,9 +82,9 @@ function newDailyFiles () { case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { if (err.message === 'File does not exist.') { - err.message = 'Dataset Unavailable.' - callBackFunction(err) - return + beginDateRange = new Date() + endDateRange = new Date() + break } if (err.message === 'Missing Configuration.') { if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> The needed configuration for the dateRange at the dataSet of the product was not found.') } diff --git a/src/FileCursor.js b/src/FileCursor.js index 19dde9d7e..e856afedd 100644 --- a/src/FileCursor.js +++ b/src/FileCursor.js @@ -97,72 +97,28 @@ function newFileCursor () { } } - function updateFiles () { + function updateFiles (message) { try { if (finalized === true) { return } - /* + if (message.event === undefined || message.event.lastFile === undefined) { return } - In order to know if we need to update any file we follow this logic: - - 1. If the current date is already a file in the cursor, we need to update it. - 2. If the current date is one day ahead of a file in the cursor, we need to add this one to the cursor. - - */ - - let targetDate + let targetDate = new Date(message.event.lastFile) let dateString let file - /* Situation 1 */ - - targetDate = new Date() dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2) - file = thisObject.files.get(dateString) - - if (file !== undefined) { - fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, targetDate, undefined, undefined, onFileReceived) - - return - } - - /* Situation 2 */ - - targetDate = new Date((new Date()).valueOf() - ONE_DAY_IN_MILISECONDS) - dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2) - - file = thisObject.files.get(dateString) // This is from yesterday - - targetDate = new Date() - dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2) - - if (file !== undefined) { - fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, targetDate, undefined, undefined, onFileReceived) - - return - } + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, targetDate, undefined, undefined, onFileReceived) function onFileReceived (err, file) { try { if (finalized === true) { return } - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - return - } - - default: { - return - } + if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { + thisObject.files.set(dateString, file) + thisObject.eventHandler.raiseEvent('Files Updated') } - - thisObject.files.set(dateString, file) - thisObject.eventHandler.raiseEvent('Files Updated') } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> onFileReceived -> err = ' + err.stack) } callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) diff --git a/src/FileSequence.js b/src/FileSequence.js index 24ebd4033..cfca4992d 100644 --- a/src/FileSequence.js +++ b/src/FileSequence.js @@ -29,18 +29,27 @@ function newFileSequence () { thisObject.eventHandler = newEventHandler() - let intervalHandle + let eventSubscriptionIdDatasetUpdated return thisObject function finalize () { try { - clearInterval(intervalHandle) + systemEventHandler.stopListening('Dataset Updated', eventSubscriptionIdDatasetUpdated) + + thisObject.eventHandler.finalize() + thisObject.eventHandler = undefined filesLoaded = undefined fileCloud = undefined files = undefined maxSequence = undefined + market = undefined + devTeam = undefined + bot = undefined + thisSet = undefined + product = undefined + finalized = true } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } @@ -55,8 +64,6 @@ function newFileSequence () { throw 'Exchange not supoorted by this pProduct of the ecosystem! - pDevTeam.codeName = ' + pDevTeam.codeName + ', pBot.codeName = ' + pBot.codeName + ', pProduct.codeName = ' + pProduct.codeName + ', pExchange = ' + pExchange } - intervalHandle = setInterval(updateFiles, _1_MINUTE_IN_MILISECONDS) - market = pMarket devTeam = pDevTeam bot = pBot @@ -66,12 +73,20 @@ function newFileSequence () { fileCloud = newFileCloud() fileCloud.initialize(bot) + let key = devTeam.codeName + '-' + bot.codeName + '-' + product.codeName + '-' + thisSet.codeName + systemEventHandler.listenToEvent(key, 'Dataset Updated', undefined, key, onResponse, updateFiles) + + function onResponse (message) { + eventSubscriptionIdDatasetUpdated = message.eventSubscriptionId + } + /* First we will get the sequence max number */ fileCloud.getFile(devTeam, bot, thisSet, exchange, market, undefined, undefined, 'Sequence', undefined, onSequenceFileReceived) function onSequenceFileReceived (err, file) { try { + if (finalized === true) { return } initialized = true switch (err.result) { @@ -113,6 +128,7 @@ function newFileSequence () { function onFileReceived (err, file) { try { + if (finalized === true) { return } switch (err.result) { case GLOBAL.DEFAULT_OK_RESPONSE.result: { break @@ -179,6 +195,7 @@ function newFileSequence () { function onSequenceFileReceived (err, file) { try { + if (finalized === true) { return } switch (err.result) { case GLOBAL.DEFAULT_OK_RESPONSE.result: { break @@ -213,6 +230,7 @@ function newFileSequence () { function onFileReceived (err, file) { try { + if (finalized === true) { return } switch (err.result) { case GLOBAL.DEFAULT_OK_RESPONSE.result: { break diff --git a/src/MarketFiles.js b/src/MarketFiles.js index e574e3893..05aa887ba 100644 --- a/src/MarketFiles.js +++ b/src/MarketFiles.js @@ -27,6 +27,7 @@ function newMarketFiles () { let devTeam let bot let thisSet + let product let periodName thisObject.eventHandler = newEventHandler() @@ -34,18 +35,29 @@ function newMarketFiles () { let intervalHandle let finalized = false + let eventSubscriptionIdDatasetUpdated + return thisObject function finalize () { try { - clearInterval(intervalHandle) - - filesLoaded = undefined - files = undefined - finalized = true + systemEventHandler.stopListening('Dataset Updated', eventSubscriptionIdDatasetUpdated) thisObject.eventHandler.finalize() thisObject.eventHandler = undefined + + filesLoaded = undefined + files = undefined + + market = undefined + exchange = undefined + devTeam = undefined + bot = undefined + thisSet = undefined + product = undefined + periodName = undefined + + finalized = true } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } } @@ -59,12 +71,11 @@ function newMarketFiles () { throw 'Exchange not supoorted by this pProduct of the ecosystem! - pDevTeam.codeName = ' + pDevTeam.codeName + ', pBot.codeName = ' + pBot.codeName + ', pProduct.codeName = ' + pProduct.codeName + ', pExchange = ' + pExchange } - intervalHandle = setInterval(updateFiles, _10_MINUTES_IN_MILISECONDS) - market = pMarket devTeam = pDevTeam bot = pBot thisSet = pSet + product = pProduct fileCloud = newFileCloud() fileCloud.initialize(pBot) @@ -80,6 +91,7 @@ function newMarketFiles () { function onFileReceived (err, file) { try { + if (finalized === true) { return } if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { files.set(periodTime, file) filesLoaded++ @@ -88,7 +100,14 @@ function newMarketFiles () { } if (filesLoaded + filesNotLoaded === marketFilesPeriods.length) { + let key = devTeam.codeName + '-' + bot.codeName + '-' + product.codeName + '-' + thisSet.codeName + systemEventHandler.listenToEvent(key, 'Dataset Updated', undefined, key + '-' + periodName, onResponse, updateFiles) + callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, thisObject) + + function onResponse (message) { + eventSubscriptionIdDatasetUpdated = message.eventSubscriptionId + } } } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onFileReceived -> err = ' + err.stack) } @@ -119,6 +138,7 @@ function newMarketFiles () { function onFileReceived (err, file) { try { + if (finalized === true) { return } files.set(periodTime, file) updatedFiles++