From d70e8995d9d2e2620ee5b48c4e68d647a12cf1dc Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 2 Mar 2018 17:59:36 +0100 Subject: [PATCH] Storage and downwards ready --- .vs/AAWebPlatform/v15/.suo | Bin 68096 -> 77824 bytes AAWebPlatform.njsproj | 3 + File.js | 28 ++------ FileCache.js | 48 ++++++------- FileCloud.js | 14 +--- FileCursor.js | 15 +++-- FileCursorCache.js | 48 +++++++------ Storage.js | 133 +++++++++++++++++++++++++++++++++++++ ecosystem.json | 18 ++--- 9 files changed, 216 insertions(+), 91 deletions(-) create mode 100644 Storage.js diff --git a/.vs/AAWebPlatform/v15/.suo b/.vs/AAWebPlatform/v15/.suo index e3036f402a22fd72d58ca648993138c08659a33f..c4514eca9cb626728d148d05cba44345d018fc7b 100644 GIT binary patch delta 5612 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 + + Code + Code diff --git a/File.js b/File.js index c42a92278..290a28a1b 100644 --- a/File.js +++ b/File.js @@ -1,5 +1,5 @@  -function newFile() { +function newFile() { let fileObject = { getFile: getFile, @@ -11,38 +11,22 @@ function newFile() { return fileObject; - function initialize(pTeamCodeName, pBotCodeName, pProductCodeName, pSetCodeName, pExchange, pMarket, callBackFunction) { + function initialize(pDevTeam, pBot, pProduct, pSet, pExchange, pMarket, callBackFunction) { - let product = ecosystem.getProduct(ecosystem.getBot(ecosystem.getTeam(pTeamCodeName), pBotCodeName), pProductCodeName); - - if (product === undefined) { - - throw "Product not found at this bot of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName; - - } - - let exchange = ecosystem.getExchange(product, pExchange); + let exchange = ecosystem.getExchange(pProduct, pExchange); if (exchange === undefined) { - throw "Exchange not supoorted by this product of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName + ", pExchange = " + pExchange; - - } - - let productSet = ecosystem.getSet(product, pSetCodeName); - - if (productSet === undefined) { - - throw "Set not found at this product of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName + ", pSetCodeName = " + pSetCodeName; + throw "Exchange not supoorted by this pProduct of the ecosystem! - pDevTeam.codeName = " + pDevTeam.codeName + ", pBot.codeName = " + pBot.codeName + ", pProduct.codeName = " + pProduct.codeName + ", pExchange = " + pExchange; } fileCloud = newFileCloud(); - fileCloud.initialize(pTeamCodeName, pBotCodeName); + fileCloud.initialize(pBot); /* Now we will get the file */ - fileCloud.getFile(productSet, exchange, pMarket, undefined, undefined, onFileReceived); + fileCloud.getFile(pSet, exchange, pMarket, undefined, undefined, onFileReceived); function onFileReceived(pFile) { diff --git a/FileCache.js b/FileCache.js index ee06603eb..164523cf1 100644 --- a/FileCache.js +++ b/FileCache.js @@ -3,9 +3,13 @@ function newFileCache() { let fileCache = { getFile: getFile, + getExpectedFiles: getExpectedFiles, + getFilesLoaded: getFilesLoaded, initialize: initialize } + let filesLoaded = 0; + let fileCloud; let files = new Map; @@ -14,34 +18,18 @@ function newFileCache() { return fileCache; - function initialize(pTeamCodeName, pBotCodeName, pProductCodeName, pSetCodeName, pExchange, pMarket, callBackFunction) { + function initialize(pDevTeam, pBot, pProduct, pSet, pExchange, pMarket, callBackFunction) { - let product = ecosystem.getProduct(ecosystem.getBot(ecosystem.getTeam(pTeamCodeName), pBotCodeName), pProductCodeName); - - if (product === undefined) { - - throw "Product not found at this bot of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName; - - } - - let exchange = ecosystem.getExchange(product, pExchange); + let exchange = ecosystem.getExchange(pProduct, pExchange); if (exchange === undefined) { - throw "Exchange not supoorted by this product of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName + ", pExchange = " + pExchange; - - } - - let productSet = ecosystem.getSet(product, pSetCodeName); - - if (productSet === undefined) { - - throw "Set not found at this product of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName + ", pSetCodeName = " + pSetCodeName; + throw "Exchange not supoorted by this pProduct of the ecosystem! - pDevTeam.codeName = " + pDevTeam.codeName + ", pBot.codeName = " + pBot.codeName + ", pProduct.codeName = " + pProduct.codeName + ", pExchange = " + pExchange; } fileCloud = newFileCloud(); - fileCloud.initialize(pTeamCodeName, pBotCodeName); + fileCloud.initialize(pBot); /* Now we will get the market files */ @@ -50,15 +38,17 @@ function newFileCache() { let periodTime = marketFilesPeriods[i][0]; let periodName = marketFilesPeriods[i][1]; - if (productSet.validPeriods.includes(periodName) === true) { + if (pSet.validPeriods.includes(periodName) === true) { - fileCloud.getFile(productSet, exchange, pMarket, periodName, undefined, onFileReceived); + fileCloud.getFile(pSet, exchange, pMarket, periodName, undefined, onFileReceived); function onFileReceived(file) { files.set(periodTime, file); - callBackFunction(); // Note that the call back is called for every file loaded. + filesLoaded++; + + callBackFunction(); // Note that the callback is called for every file loaded. } } @@ -71,4 +61,16 @@ function newFileCache() { } + function getExpectedFiles() { + + return marketFilesPeriods.length; + + } + + function getFilesLoaded() { + + return filesLoaded; + + } + } \ No newline at end of file diff --git a/FileCloud.js b/FileCloud.js index 92eea0eaf..0a548ff8f 100644 --- a/FileCloud.js +++ b/FileCloud.js @@ -10,11 +10,9 @@ function newFileCloud() { return fileCloud; - function initialize(pTeamCodeName, pBotCodeName) { + function initialize(pBot) { - let bot = ecosystem.getBot(ecosystem.getTeam(pTeamCodeName), pBotCodeName); - - fileService = AzureStorage.createFileServiceWithSas(bot.storage.fileUri, bot.storage.sas).withFilter(new AzureStorage.ExponentialRetryPolicyFilter()); + fileService = AzureStorage.createFileServiceWithSas(pBot.storage.fileUri, pBot.storage.sas).withFilter(new AzureStorage.ExponentialRetryPolicyFilter()); } @@ -79,10 +77,4 @@ function newFileCloud() { } } - - -} - - - - +} \ No newline at end of file diff --git a/FileCursor.js b/FileCursor.js index f25961627..537832bdd 100644 --- a/FileCursor.js +++ b/FileCursor.js @@ -8,6 +8,7 @@ function newFileCursor() { setDatetime: setDatetime, setTimePeriod: setTimePeriod, files: undefined, + getExpectedFiles: getExpectedFiles, initialize: initialize } @@ -19,18 +20,18 @@ function newFileCursor() { let market; let exchange; let fileCloud; - let productSet; + let thisSet; let periodName; let timePeriod; return fileCursor; - function initialize(pFileCloud, pProductSet, pExchange, pMarket, pPeriodName, pTimePeriod, pCursorDate, pCurrentTimePeriod, callBackFunction) { + function initialize(pFileCloud, pSet, pExchange, pMarket, pPeriodName, pTimePeriod, pCursorDate, pCurrentTimePeriod, callBackFunction) { market = pMarket; exchange = pExchange; fileCloud = pFileCloud; - productSet = pProductSet; + thisSet = pSet; periodName = pPeriodName; cursorDate = pCursorDate; timePeriod = pTimePeriod; @@ -289,7 +290,7 @@ function newFileCursor() { if (fileCursor.files.get(dateString) === undefined) { // We dont reload files we already have. - fileCloud.getFile(productSet, exchange, market, periodName, targetDate, onFileReceived); + fileCloud.getFile(thisSet, exchange, market, periodName, targetDate, onFileReceived); } else { @@ -349,4 +350,10 @@ function newFileCursor() { } + function getExpectedFiles() { + + return minCursorSize; + + } + } \ No newline at end of file diff --git a/FileCursorCache.js b/FileCursorCache.js index 3abeb88a6..626616eef 100644 --- a/FileCursorCache.js +++ b/FileCursorCache.js @@ -5,9 +5,14 @@ function newFileCursorCache() { getFileCursor: getFileCursor, setDatetime: setDatetime, setTimePeriod: setTimePeriod, + getExpectedFiles: getExpectedFiles, + getFilesLoaded: getFilesLoaded, initialize: initialize } + let filesLoaded = 0; + let expectedFiles = 0; + let fileCloud; let marketFiles = new Map; @@ -15,34 +20,18 @@ function newFileCursorCache() { return fileCursorCache; - function initialize(pTeamCodeName, pBotCodeName, pProductCodeName, pSetCodeName, pExchange, pMarket, pDatetime, pTimePeriod, callBackFunction) { + function initialize(pDevTeam, pBot, pProduct, pSet, pExchange, pMarket, pDatetime, pTimePeriod, callBackFunction) { - let product = ecosystem.getProduct(ecosystem.getBot(ecosystem.getTeam(pTeamCodeName), pBotCodeName), pProductCodeName); - - if (product === undefined) { - - throw "Product not found at this bot of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName; - - } - - let exchange = ecosystem.getExchange(product, pExchange); + let exchange = ecosystem.getExchange(pProduct, pExchange); if (exchange === undefined) { - throw "Exchange not supoorted by this product of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName + ", pExchange = " + pExchange; - - } - - let productSet = ecosystem.getSet(product, pSetCodeName); - - if (productSet === undefined) { - - throw "Set not found at this product of the ecosystem! - pTeamCodeName = " + pTeamCodeName + ", pBotCodeName = " + pBotCodeName + ", pProductCodeName = " + pProductCodeName + ", pSetCodeName = " + pSetCodeName; + throw "Exchange not supoorted by this product of the ecosystem! - pDevTeam.codeName = " + pDevTeam.codeName + ", pBot.codeName = " + pBot.codeName + ", pProduct.codeName = " + pProduct.codeName + ", pExchange = " + pExchange; } fileCloud = newFileCloud(); - fileCloud.initialize(pTeamCodeName, pBotCodeName); + fileCloud.initialize(pBot); /* Now we will get the daily files */ @@ -51,15 +40,18 @@ function newFileCursorCache() { let periodTime = dailyFilePeriods[i][0]; let periodName = dailyFilePeriods[i][1]; - if (productSet.validPeriods.includes(periodName) === true) { + if (pSet.validPeriods.includes(periodName) === true) { let fileCursor = newFileCursor(); - fileCursor.initialize(fileCloud, productSet, exchange, pMarket, periodName, periodTime, pDatetime, pTimePeriod, onFileReceived); + fileCursor.initialize(fileCloud, pSet, exchange, pMarket, periodName, periodTime, pDatetime, pTimePeriod, onFileReceived); fileCursors.set(periodTime, fileCursor); + expectedFiles = expectedFiles + fileCursor.getExpectedFiles(); + function onFileReceived() { + filesLoaded++; callBackFunction(); // Note that the call back is called for every file loaded at each cursor. } @@ -94,4 +86,16 @@ function newFileCursorCache() { } } + + function getExpectedFiles() { + + return expectedFiles; + + } + + function getFilesLoaded() { + + return filesLoaded; + + } } \ No newline at end of file diff --git a/Storage.js b/Storage.js new file mode 100644 index 000000000..7ea0fef91 --- /dev/null +++ b/Storage.js @@ -0,0 +1,133 @@ + +function newStorage() { + + /* + + This object will initialize children objects that will end up loading the data of each set defined at each product of the bot received at initialization. + Once all the underlaying objects are fully initialized it will callback. + + At the same time it will raise an event for each underlaying file being loaded, so that the UI can reflect the progress to the end user. + + */ + + thisObject = { + + fileCache: undefined, + fileCursorCache: undefined, + file: undefined, + + eventHandler: undefined, + initialize: initialize + + } + + thisObject.eventHandler = newEventHandler(); + + return thisObject; + +} + +function initialize(pDevTeam, pBot, pProduct, pExchange, pMarket, pDatetime, pTimePeriod, callBackFunction) { + + /* We name the event Handler to easy debugging. */ + + thisObject.eventHandler.name = "Storage" + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName + + let dataSetsToLoad = 0; + let dataSetsLoaded = 0; + + for (i = 0; i < pProduct.sets.length; i++) { + + let thisSet = pProduct.sets[i]; + + switch (thisSet.type) { + case 'Market Files': { + + thisObject.fileCache = newFileCache(); + thisObject.fileCache.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, onCacheFileReady); + dataSetsToLoad++; + + } + break; + + case 'Daily Files': { + + thisObject.fileCursorCache = newFileCursorCache(); + thisObject.fileCursorCache.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, pDatetime, pTimePeriod, onFileCursorReady); + dataSetsToLoad++; + + } + break; + + case 'Single File': { + + thisObject.file = newFile(); + thisObject.file.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, onSingleFileReady); + dataSetsToLoad++; + + } + break; + + } + } + + function onCacheFileReady() { + + let event = { + totalValue: thisObject.fileCache.getExpectedFiles(), + currentValue: thisObject.fileCache.getFilesLoaded() + } + + thisObject.eventHandler.raiseEvent('Storage File Ready', event); + + if (event.currentValue === event.totalValue) { + + dataSetsLoaded++; + + checkInitializeComplete(); + } + } + + function onFileCursorReady() { + + let event = { + totalValue: thisObject.fileCursorCache.getExpectedFiles(), + currentValue: thisObject.fileCursorCache.getFilesLoaded() + } + + thisObject.eventHandler.raiseEvent('Storage File Ready', event); + + if (event.currentValue === event.totalValue) { + + dataSetsLoaded++; + + checkInitializeComplete(); + } + } + + function onSingleFileReady() { + + let event = { + totalValue: 1, + currentValue: 1 + } + + thisObject.eventHandler.raiseEvent('Storage File Ready', event); + + if (event.currentValue === event.totalValue) { + + dataSetsLoaded++; + + checkInitializeComplete(); + } + } + + function checkInitializeComplete() { + + if (dataSetsLoaded === dataSetsToLoad) { + + callBackFunction(); + + } + } +} \ No newline at end of file diff --git a/ecosystem.json b/ecosystem.json index fd412ed53..850ecb930 100644 --- a/ecosystem.json +++ b/ecosystem.json @@ -37,13 +37,13 @@ "storageAccount": "aaolivia", "sets": [ { - "codeName": "Market Files", + "type": "Market Files", "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], "filePath": "@Exchange/Output/Candles/Multi-Period-Market/@Period", "fileName": "@AssetA_@AssetB.json" }, { - "codeName": "Daily Files", + "type": "Daily Files", "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], "filePath": "@Exchange/Output/Candles/Multi-Period-Daily/@Period/@Year/@Month/@Day", "fileName": "@AssetA_@AssetB.json" @@ -68,13 +68,13 @@ "storageAccount": "aaolivia", "sets": [ { - "codeName": "Market Files", + "type": "Market Files", "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], "filePath": "@Exchange/Output/Volumes/Multi-Period-Market/@Period", "fileName": "@AssetA_@AssetB.json" }, { - "codeName": "Daily Files", + "type": "Daily Files", "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], "filePath": "@Exchange/Output/Volumes/Multi-Period-Daily/@Period/@Year/@Month/@Day", "fileName": "@AssetA_@AssetB.json" @@ -113,13 +113,13 @@ "storageAccount": "aatom", "sets": [ { - "codeName": "Market Files", + "type": "Market Files", "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], "filePath": "@Exchange/Tom/dataSet.V1/Output/Candle-Stairs/Multi-Period-Market/@Period", "fileName": "@AssetA_@AssetB.json" }, { - "codeName": "Daily Files", + "type": "Daily Files", "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], "filePath": "@Exchange/Tom/dataSet.V1/Output/Candle-Stairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", "fileName": "@AssetA_@AssetB.json" @@ -143,13 +143,13 @@ "storageAccount": "aatom", "sets": [ { - "codeName": "Market Files", + "type": "Market Files", "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], "filePath": "@Exchange/Tom/dataSet.V1/Output/Volume-Stairs/Multi-Period-Market/@Period", "fileName": "@AssetA_@AssetB.json" }, { - "codeName": "Daily Files", + "type": "Daily Files", "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], "filePath": "@Exchange/Tom/dataSet.V1/Output/Volume-Stairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", "fileName": "@AssetA_@AssetB.json" @@ -188,7 +188,7 @@ "storageAccount": "aamariam", "sets": [ { - "codeName": "Trading History File", + "type": "Single File", "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], "filePath": "@Exchange/Mariam/dataSet.V1/Output/Trading-Process", "fileName": "Execution.History.json"