From 61e843876a2fda187976d3b92ac1d6acca0d85bd Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 9 May 2018 19:36:43 +0200 Subject: [PATCH] Functionality for reading the Data Range introduced. --- .vs/AAWeb/v15/.suo | Bin 71168 -> 70144 bytes Files/DailyFiles.js | 92 ++++++++++++++++++++++++++++++++++++---- Files/FileCloud.js | 33 ++++++++++++-- Files/FileCursor.js | 42 ++++++++++++++++-- Files/FileSequence.js | 4 +- Files/MarketFiles.js | 2 +- Files/SingleFile.js | 2 +- Panels/ProductsPanel.js | 4 +- SplashScreen.js | 4 +- 9 files changed, 159 insertions(+), 24 deletions(-) diff --git a/.vs/AAWeb/v15/.suo b/.vs/AAWeb/v15/.suo index cc2147a359550a72fdf8bf4e5301d3ae9bf737bf..c4072ea2ebce651e04a2968592ccb0b160c3b6e8 100644 GIT binary patch delta 3838 zcmeHKdrTB(5Z`a_fa8F>QywBH+#L^j98VQmAIRfCL=+II)+&|Q^FayX0Y+^TXiKzK zMcIkfzBI0;G1?Mgn7Bc>pt5z`Ryh+qUw z$Wxxri?ff_RD zo`6{>qaafP%m_+=`dO3!;>RW+L6K7&#wNgkx@?4p1T;|wxGV%Epa|iQSd35;K*l^J zAQH!fBGd%XI7)yPu?9g2AekD|nfRWI$XDc~n@_G0Q;0$}%nOmH(2|^}vaKwTErmtC z^H@3T@qHL$Wf&4fG$IBOi-;eLjy~OMne-zf(Q6(gGS@X zsKkU4sd2(d9hjq|d>MV31wRue*yErfx&$urY0_}CjY;MyLrl!&MKdo%Y~gzh(zb~0 ztTWWiOXk=iCPe2wZSsr~2Buye4E1THl7xOAFlQgrQH4=*$&NIfUCJc;bLW`2mKQef zH(e?9xxH-i<>ahKg}Zhh=^utFbCA@v*~&~m=|hZlS&oG#lYj2LT zaJjh5-&?SmJ^Aj>Ix`}fX-`ya_r(g!X@_x3zIQz5B-g;6dCuilh*d{hjJBW4k+2e9 zMy)AZl?;dVQnFw;+y>_KXt?B^3JvM#ZaB))OMJN;964Vd-7ptMeemz2p*!Mk6Hr8_0Ts>FEIk}C<-2$UfCoEY9UkVk{ z?4zIK)Fi9COy|cM9^M{EkdhAFU}B3_JkH~4(0q-Sy3g47nMYD0!FVFvzhFa+qkd)i zhT3&C4yZhCh1A*r_5oC#czJ?LMZe{aO^uG)HBfatQr5pudXr1PsLJ`Oqk(uh)MJAc zDY1}xeioE;rNNK$4D3A`YIF^?S8b@-s*cq9aQ3IKV=|1cTc2EAKNI@fEx}_gKG94Z zuMrROFxZtJV#au@M5hiNjrKoraDx27iq{S_pF!qBTt?`3tV*%(u7dBn3PR}IQOSV} zbpg8^5+!;xBd^g}ztIVYdlHQSqwi>S23ZXvQT@vC3MHsd6fn?LuBWygMn(?0#a$j! zv$63NvSE-@o=2}}Vmg{Ii-&mJFhQ~n#gd!a;%-P@g*>BMgG$tGsE4{d^SGsq0j@1Z zpEAa?@d_n2qY62ebmvfstkYG(Wzp02G6p=^ZL~|=Lpffd7#vl|2I-hnsR|i7KJ9xc zuDH90g6L?cP}51PK@dUjsZ2@%2kb;Vw07uVc88yCd9R*i9CWk?!tZ z)hB)DX8n5Bo-=r};NjgCXgigp!P^e}y~Szs>%pr8-Ku=JrwyrqXtU+jeoXTqrYJt0qh0q-!oGpR{H|MfYe{h{1KJzz7kAZYzoCsqC+GVzMHc%O%|rBkFSeRsUXVLgbqLt)o~(9@|r>thE5 wp1DtXENTu28kPaYgA-2|db2a^kK=*w&xNyJ=}#B?vpX6{@1N*;)3eXm?-yhK2mk;8 delta 3319 zcmd^BYfMx}6uxu!vh3orT%KLg;<6x6UhYz=-~$)-sz_D9qSdro7QrfM5OA>;ZQTm- zQB#F`>Z5JY_G;T$4O(v_3P!QoM4J|CY>cUfXl%45O{9rd`$OqD`@ls>6Z^wIo#fj& z^Ud5dXTCWzv+g~Dd%w_Pg}!FJN#wXlj^i|lhyDHiSaA%I_)X~u-gvcdq`v9q1vUd2 z_jG9F8`)^M%QvyF;2q5>RtI-A$!m<*iC#DzVl)E1^ygsx93m5ufG{A455d}jcpj0A zcmWZONJorBWFW>M^oV#w3L+Ij-@b@-6vBddfbCGM!#Hj(C!vvsn2i{Yn1_f!j7N+> zOh=4DkP|8~0ro_+lMp5!Hx=tz#Dvz;5u=09AW^7{^9>-|8eq=^TTongbg7eNbx+Zry%_PrcoBr78D|id>thEET2sS<6282 z*+Q79pUleOL;XEjyizPyXaScm=yZCE?hOquejEIcd5WY_b=86P3 z#oNGDQS7PjRGfoTl{UDuC|xy=yvk(DO5R~m8!hXYV&>%tGnl0m!H&^D_~I1RC6zE8 zEtqnU7-oaJ$+NsJV~h2S5}Oj-Gx|uI(@OLt%3Oew_-GJlMP1?As~mrPl2XJvQZ>d3oT zx1{v;m*6xWaEM?s%3mHg9>w`8d=oK#Gce^Z5!sF{e1JopqRN!@6QHio~+vQ zx|y7HT1V>BG4-w{tAwdi+%d*(sBE#!#Epgd(M|EUuk_w}uys@Zt_;sSN8T)y(;QH8 z$)vtE^$U$$pU57n@nbJDIo+(9XY3iKqdSA{2d~pt4O+#`D+RprfmiOVJ&#XoV9Hot zS;8xJL8%eIEm^=4Y0=Rkp&TPW;F?$*=93xlkl zI5ke`W9&49wbU}&0twb#Gs2CQIpJ1MaQBGs;?Ck$GhsuQUtF4j$?zKaB?! zJ@ALNX?PIN8Pu?ye=>;QmpZJZepzM1BA3HiUkPCyX-tOC4!@yyEUR%jm)2C(69?^k zcd<6&Lra`BRc|eS-TM*75bRp+p=g+(<)ke%O6zdetZ*(TZkXO{XI3vyh0?w8A%mO2 zzNXwhCC15o8-i6W+VuEHLquaV3GstV`6HKs=0cU4njOLMJ&(lUvl(ZQmEr-mm z2&mmDg0&_T7IY=R!F_tT2A^Mznw-Tqzq3KLRjrVs(57~(U zgwy%-m)U5T)w-h+i`Jn@es?*~aCLwPnz2;wc%qHk&QO zk)1!)W|PKAxw-l8QcffW&pSs?A_wcQ=YsosDU_Z#@a&Uu_%H`9C=%n)a{n$eqkM}| zyN}zM`N<_c`;>OXP}KhNKg-7CA+ynUtNBjGlbKFp`8(zIY>O`gi8gTz&o}*L^p`p` zo`<@lap3Msfoq3N;+5)s`bl~BJEi>Ii&O92Y=)CxCxfe`D2T}ADC%L6V^ z_@pce%6Ev$4~GAeZ_1^Rr2QK(}_u&*VsRee4W?B@mO{3WDghJk&{ dfIna0Z~dkLZCfLVZM6fi^4h~jX61+K_y=)wD*XTe diff --git a/Files/DailyFiles.js b/Files/DailyFiles.js index ac67a86f0..bd044b890 100644 --- a/Files/DailyFiles.js +++ b/Files/DailyFiles.js @@ -48,22 +48,96 @@ function newDailyFiles() { fileCloud = newFileCloud(); fileCloud.initialize(pBot); - /* Now we will get the daily files */ + /* First we will get the Data Range */ - for (i = 0; i < dailyFilePeriods.length; i++) { + fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, undefined, true, onDataRangeReceived); - let periodTime = dailyFilePeriods[i][0]; - let periodName = dailyFilePeriods[i][1]; + function onDataRangeReceived(err, pFile) { - if (pSet.validPeriods.includes(periodName) === true) { + try { - let fileCursor = newFileCursor(); - fileCursor.initialize(fileCloud, pDevTeam, pBot, pSet, exchange, pMarket, periodName, periodTime, pDatetime, pTimePeriod, onFileReceived); + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Entering function."); } - fileCursors.set(periodTime, fileCursor); + let beginDateRange; + let endDateRange; - expectedFiles = expectedFiles + fileCursor.getExpectedFiles(); + switch (err.result) { + case GLOBAL.DEFAULT_OK_RESPONSE.result: { + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received OK Response."); } + + beginDateRange = new Date(pFile.begin); + endDateRange = new Date(pFile.end); + + break; + } + + case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received FAIL Response."); } + callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); + return; + } + + case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received CUSTOM FAIL Response."); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> err.message = " + err.message); } + + if (err.message === "File does not exist.") { + + if (INFO_LOG === true) { logger.write("[WARN] initialize -> onFileReceived -> No Date Range file found. maxDate will be set to current datetime. "); } + + 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."); } + if (ERROR_LOG === true) { logger.write("[WARN] initialize -> onFileReceived -> maxDate will be set to current datetime."); } + + endDateRange = new Date(); + break; + } + + /* If none of the previous conditions are met, the we return the err to the caller. */ + + callBackFunction(err); + return; + } + + default: { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received Unexpected Response."); } + callBackFunction(err); + return; + } + } + + /* Now we will get the daily files */ + + for (i = 0; i < dailyFilePeriods.length; i++) { + + let periodTime = dailyFilePeriods[i][0]; + let periodName = dailyFilePeriods[i][1]; + + if (pSet.validPeriods.includes(periodName) === true) { + + let fileCursor = newFileCursor(); + fileCursor.initialize(fileCloud, pDevTeam, pBot, pSet, exchange, pMarket, periodName, periodTime, pDatetime, pTimePeriod, beginDateRange, endDateRange, onFileReceived); + + fileCursors.set(periodTime, fileCursor); + + expectedFiles = expectedFiles + fileCursor.getExpectedFiles(); + + } + } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> onFileReceived -> err = " + err); } + callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } diff --git a/Files/FileCloud.js b/Files/FileCloud.js index fd172c5a0..7fed6bb54 100644 --- a/Files/FileCloud.js +++ b/Files/FileCloud.js @@ -31,15 +31,42 @@ function newFileCloud() { } - function getFile(pDevTeam, pBot, pSet, pExchange, pMarket, pPeriodName, pDatetime, pSequence, callBackFunction) { + function getFile(pDevTeam, pBot, pSet, pExchange, pMarket, pPeriodName, pDatetime, pSequence, pDataRange, callBackFunction) { try { if (INFO_LOG === true) { logger.write("[INFO] getFile -> Entering function."); } if (INFO_LOG === true) { logger.write("[INFO] getFile -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pSet.filePath + "-" + pSet.fileName); } - let fileName = pSet.fileName; - let filePath = pSet.filePath; + let fileName; + let filePath; + + if (pDataRange === undefined) { + + fileName = pSet.fileName; + filePath = pSet.filePath; + + } else { + + if (pSet.dataRange !== undefined) { + + fileName = pSet.dataRange.fileName; + filePath = pSet.dataRange.filePath; + + } else { + + let customErr = { + result: GLOBAL.CUSTOM_FAIL_RESPONSE.result, + message: "Missing Configuration." + }; + + if (ERROR_LOG === true) { logger.write("[WARN] getFile -> onFileReceived -> customErr.message = " + customErr.message); } + if (ERROR_LOG === true) { logger.write("[WARN] getFile -> onFileReceived -> Data Range configuration could not be found. "); } + + callBackFunction(customErr); + return; + } + } if (fileName === undefined) { diff --git a/Files/FileCursor.js b/Files/FileCursor.js index 1a716c103..4a65ac2ad 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -31,10 +31,12 @@ function newFileCursor() { let thisSet; let periodName; let timePeriod; + let beginDateRange; + let endDateRange; return thisObject; - function initialize(pFileCloud, pDevTeam, pBot, pSet, pExchange, pMarket, pPeriodName, pTimePeriod, pCursorDate, pCurrentTimePeriod, callBackFunction) { + function initialize(pFileCloud, pDevTeam, pBot, pSet, pExchange, pMarket, pPeriodName, pTimePeriod, pCursorDate, pCurrentTimePeriod, pBeginDateRange, pEndDateRange, callBackFunction) { try { @@ -50,6 +52,8 @@ function newFileCursor() { periodName = pPeriodName; cursorDate = pCursorDate; timePeriod = pTimePeriod; + beginDateRange = pBeginDateRange; + endDateRange = pEndDateRange; setTimePeriod(pCurrentTimePeriod, pCursorDate, callBackFunction); @@ -289,8 +293,6 @@ function newFileCursor() { } } - - function setDatetime(pDatetime, callBackFunction) { try { @@ -346,6 +348,38 @@ function newFileCursor() { } } + let compareTargetDate = new Date(targetDate.toDateString()); + + if (beginDateRange !== undefined) { + + let compareBeginDate = new Date(beginDateRange.toDateString()); + + if (compareTargetDate.valueOf() < compareBeginDate.valueOf()) { + + if (INFO_LOG === true) { logger.write("[INFO] getFiles -> getNextFile -> compareTargetDate < compareBeginDate -> Not loading the file for this date."); } + if (INFO_LOG === true) { logger.write("[INFO] getFiles -> getNextFile -> compareTargetDate < compareBeginDate -> compareTargetDate = " + compareTargetDate); } + if (INFO_LOG === true) { logger.write("[INFO] getFiles -> getNextFile -> compareTargetDate < compareBeginDate -> compareBeginDate = " + compareBeginDate); } + + controlLoop(); + return; + } + } + + if (endDateRange !== undefined) { + + let compareEndDate = new Date(endDateRange.toDateString()); + + if (compareTargetDate.valueOf() > compareEndDate.valueOf()) { + + if (INFO_LOG === true) { logger.write("[INFO] getFiles -> getNextFile -> compareTargetDate > compareEndDate -> Not loading the file for this date."); } + if (INFO_LOG === true) { logger.write("[INFO] getFiles -> getNextFile -> compareTargetDate > compareEndDate -> compareTargetDate = " + compareTargetDate); } + if (INFO_LOG === true) { logger.write("[INFO] getFiles -> getNextFile -> compareTargetDate > compareEndDate -> compareEndDate = " + compareEndDate); } + + controlLoop(); + return; + } + } + dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2); let currentDay = Math.trunc((new Date()).valueOf() / (24 * 60 * 60 * 1000)); @@ -359,7 +393,7 @@ function newFileCursor() { if (thisObject.files.get(dateString) === undefined) { // We dont reload files we already have. - fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, targetDate, undefined, onFileReceived); + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, targetDate, undefined, undefined, onFileReceived); } else { diff --git a/Files/FileSequence.js b/Files/FileSequence.js index a6e4013cc..2665e0840 100644 --- a/Files/FileSequence.js +++ b/Files/FileSequence.js @@ -44,7 +44,7 @@ function newFileSequence() { /* First we will get the sequence max number */ - fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, "Sequence", onSequenceFileReceived); + fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, "Sequence", undefined, onSequenceFileReceived); function onSequenceFileReceived(err, file) { @@ -99,7 +99,7 @@ function newFileSequence() { for (let i = 0; i <= maxSequence; i++) { - fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, i, onFileReceived); + fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, i, undefined, onFileReceived); function onFileReceived(err, file) { diff --git a/Files/MarketFiles.js b/Files/MarketFiles.js index ee9fe0035..cd8c20946 100644 --- a/Files/MarketFiles.js +++ b/Files/MarketFiles.js @@ -49,7 +49,7 @@ function newMarketFiles() { if (pSet.validPeriods.includes(periodName) === true) { - fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, periodName, undefined, undefined, onFileReceived); + fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, periodName, undefined, undefined, undefined, onFileReceived); function onFileReceived(err, file) { diff --git a/Files/SingleFile.js b/Files/SingleFile.js index 710346470..38e4602c4 100644 --- a/Files/SingleFile.js +++ b/Files/SingleFile.js @@ -37,7 +37,7 @@ function newSingleFile() { /* Now we will get the file */ - fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, undefined, onFileReceived); + fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, undefined, undefined, onFileReceived); function onFileReceived(err, pFile) { diff --git a/Panels/ProductsPanel.js b/Panels/ProductsPanel.js index e8a3e6e6e..e02f31910 100644 --- a/Panels/ProductsPanel.js +++ b/Panels/ProductsPanel.js @@ -12,14 +12,14 @@ var container = newContainer(); - container.name = "Bots Product Panel"; + container.name = "Algobots Product Panel"; container.initialize(); container.isDraggeable = true; container.isWheelable = true; thisObject.container = container; - thisObject.container.frame.containerName = "Bot's Products"; + thisObject.container.frame.containerName = "Algobots's Products"; let isInitialized = false; let productCards = []; diff --git a/SplashScreen.js b/SplashScreen.js index 2fbca421d..b8fb64aaa 100644 --- a/SplashScreen.js +++ b/SplashScreen.js @@ -128,11 +128,11 @@ function newSplashScreen() { browserCanvasContext.fillStyle = 'rgba(255, 0, 0, ' + opacity + ')'; browserCanvasContext.fillText(title, titlePoint.x, titlePoint.y); - /* Trading Bots Competitions Sub Title */ + /* Algo Bots Competitions Sub Title */ fontSize = 50; - title = "Trading Bots Competitions" + title = "Algobots Competitions" titlePoint = { x: splashScreen.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO + 0,