From 07f8795ae6e87b6e7882eca366554149fe490937 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 15 May 2018 15:38:47 +0200 Subject: [PATCH 001/334] Improvements on positioning in the timeline when openning the app Now the app will try to re position itself on the timeline at the last place visited with the same zoom level. This will not be possible only when it is the first time the app is usued or when the screen resolution was changed, in both cases the positionning will be at the current datetime. --- Canvas.js | 18 +++-- Dashboard.js | 8 +- Panels/TimeControlPanel.js | 17 +++- Spaces/ChartSpace.js | 49 +++++++++--- TimeMachine.js | 16 +++- TimelineChart.js | 27 +++++-- ViewPort.js | 159 +++++++++++++++++++++++++------------ 7 files changed, 211 insertions(+), 83 deletions(-) diff --git a/Canvas.js b/Canvas.js index e6855f970..8138525d0 100644 --- a/Canvas.js +++ b/Canvas.js @@ -86,17 +86,25 @@ function newCanvas() { let panelsSpace = newPanelsSpace(); panelsSpace.initialize(); - this.panelsSpace = panelsSpace; + thisObject.panelsSpace = panelsSpace; let floatingSpace = newFloatingSpace(); floatingSpace.initialize(); - this.floatingSpace = floatingSpace; + thisObject.floatingSpace = floatingSpace; let chartSpace = newChartSpace(); - chartSpace.initialize(); + chartSpace.initialize(onCharSpaceInitialized); - this.chartSpace = chartSpace; + thisObject.chartSpace = chartSpace; + + function onCharSpaceInitialized(err) { + viewPort.raiseEvents(); // These events will impacts on objects just initialized. + + /* We will store the last used this screen resolution. This will help us know if we can remember the las viewPort offset or not, since they depends on the screen resolution. */ + + window.localStorage.setItem('webApp.lastRun.screenResolution', browserCanvas.width + '.' + browserCanvas.height); + } /* Splash Screen */ @@ -108,7 +116,7 @@ function newCanvas() { function onAnimationInitialized(err) { - this.animation = animation; + thisObject.animation = animation; /* Here we add all the functions that will be called during the animation cycle. */ diff --git a/Dashboard.js b/Dashboard.js index 3f2ae9899..2e039b20b 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -129,7 +129,7 @@ const FONT_ASPECT_RATIO = 0.60; const CHART_ASPECT_RATIO = 1 / 10; const INITIAL_ZOOM_LEVEL = -22; // This is the zoom level at the view port in which the APP starts. -const INITIAL_TIME_PERIOD = recalculatePeriod(INITIAL_ZOOM_LEVEL); +let INITIAL_TIME_PERIOD = recalculatePeriod(INITIAL_ZOOM_LEVEL); // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser. var viewPort = newViewPort(); @@ -153,11 +153,7 @@ const PERIOD_10_MIN = "10-min"; const PERIOD_05_MIN = "05-min"; const PERIOD_01_MIN = "01-min"; -var newDate = new Date(); -newDate.setMilliseconds(0); -newDate.setDate(newDate.getDate() - 90); - -const INITIAL_DATE = new Date(); +const INITIAL_DATE = new Date(); // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser. var maxDate = new Date(); maxDate.setMilliseconds(0); diff --git a/Panels/TimeControlPanel.js b/Panels/TimeControlPanel.js index 949cb69af..f6b3e98a5 100644 --- a/Panels/TimeControlPanel.js +++ b/Panels/TimeControlPanel.js @@ -86,8 +86,21 @@ function newTimeControlPanel() { thisObject.buttons = buttons; + let datetime = INITIAL_DATE; - var datetime = INITIAL_DATE; + /* There is a chance that we could resume the last session at the place we left it. */ + + let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); + + if (lastRun !== null && lastRun === browserCanvas.width + '.' + browserCanvas.height) { + + let savedCurrentDatetime = window.localStorage.getItem('timeControlPanel.currentDatetime'); + + if (savedCurrentDatetime !== null) { + datetime = new Date(savedCurrentDatetime); + + } + } var datetimeDisplay = { currentDatetime: datetime, @@ -153,6 +166,8 @@ function newTimeControlPanel() { thisObject.datetimeDisplay.currentDatetime = newDatetime; + window.localStorage.setItem('timeControlPanel.currentDatetime', newDatetime); + } diff --git a/Spaces/ChartSpace.js b/Spaces/ChartSpace.js index 81a441fe0..16c0f3e10 100644 --- a/Spaces/ChartSpace.js +++ b/Spaces/ChartSpace.js @@ -13,7 +13,7 @@ function newChartSpace() { const logger = newDebugLog(); logger.fileName = MODULE_NAME; - var chartSpace = { + var thisObject = { container: undefined, draw: draw, timeMachines: [], @@ -24,25 +24,28 @@ function newChartSpace() { var container = newContainer(); container.initialize(); - chartSpace.container = container; + thisObject.container = container; - chartSpace.container.frame.width = browserCanvas.width * 1000; - chartSpace.container.frame.height = browserCanvas.height * 100; + thisObject.container.frame.width = browserCanvas.width * 1000; + thisObject.container.frame.height = browserCanvas.height * 100; container.displacement.containerName = "Chart Space"; container.frame.containerName = "Chart Space"; - container.frame.position.x = browserCanvas.width / 2 - chartSpace.container.frame.width / 2; - container.frame.position.y = browserCanvas.height / 2 - chartSpace.container.frame.height / 2; + container.frame.position.x = browserCanvas.width / 2 - thisObject.container.frame.width / 2; + container.frame.position.y = browserCanvas.height / 2 - thisObject.container.frame.height / 2; container.isDraggeable = false; - return chartSpace; + return thisObject; - function initialize() { + function initialize(callBackFunction) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } + let initializedCounter = 0; + let toInitialize = 1; + /* We create the first of many possible time machines that could live at the Chart Space. */ var timeMachine = newTimeMachine(); @@ -60,21 +63,41 @@ function newChartSpace() { timeMachine.container.frame.position.x = this.container.frame.width / 2 - timeMachine.container.frame.width / 2; timeMachine.container.frame.position.y = this.container.frame.height / 2 - timeMachine.container.frame.height / 2; - timeMachine.initialize(); + timeMachine.initialize(onTimeMachineInitialized); - this.timeMachines.push(timeMachine); + function onTimeMachineInitialized(err) { + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onTimeMachineInitialized -> Entering function."); } + + initializedCounter++; + + if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onTimeMachineInitialized -> Initialization of a Time Machine failed."); } + + callBackFunction(err); + return; + } + + thisObject.timeMachines.push(timeMachine); + + if (initializedCounter === toInitialize) { + + callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); + + } + } } function draw() { - chartSpace.container.frame.draw(false, false); + thisObject.container.frame.draw(false, false); /* When we draw the chart space, that means we draw all the time machines in it. */ - for (var i = 0; i < chartSpace.timeMachines.length; i++ ) { + for (var i = 0; i < thisObject.timeMachines.length; i++ ) { - var timeMachine = chartSpace.timeMachines[i]; + var timeMachine = thisObject.timeMachines[i]; timeMachine.draw(); } diff --git a/TimeMachine.js b/TimeMachine.js index 6d651beb1..1345ff66f 100644 --- a/TimeMachine.js +++ b/TimeMachine.js @@ -37,7 +37,7 @@ function newTimeMachine() { return thisObject; - function initialize() { + function initialize(callBackFunction) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } @@ -70,16 +70,26 @@ function newTimeMachine() { iteration++; - function onDefaultMarketInitialized() { + function onDefaultMarketInitialized(err) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> onDefaultMarketInitialized -> Entering function."); } + if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onDefaultMarketInitialized -> Initialization of the only market failed."); } + + callBackFunction(err); + return; + } + thisObject.charts.push(timelineChart); controlPanel.container.eventHandler.listenToEvent('Datetime Changed', timelineChart.setDatetime, undefined); timelineChart.container.eventHandler.listenToEvent('Datetime Changed', controlPanel.setDatetime); - initializeTheRestOfTheMarkets(); + callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); + + //initializeTheRestOfTheMarkets(); } diff --git a/TimelineChart.js b/TimelineChart.js index 6fd38b31c..9ffd0bdc1 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -65,8 +65,16 @@ chartGrid = newChartGrid(); recalculateScale(); - moveViewPortToCurrentDatetime(); + /* When the Web App has never run, we need to position the viewPort at the current Date. This in turn will set the current date as the date for loading the data. */ + + let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); + + if (lastRun === null || lastRun !== browserCanvas.width + '.' + browserCanvas.height) { + + moveViewPortToCurrentDatetime(); + } + /* Event Subscriptions - we need this events to be fired first here and then in active Plotters. */ viewPort.eventHandler.listenToEvent("Offset Changed", onOffsetChanged); @@ -117,7 +125,7 @@ if (INFO_LOG === true) { logger.write("[INFO] initialize -> onCompetitionPlottersInitialized -> onProductPlottersInitialized -> Received OK Response."); } initializationReady = true; - callBackFunction(GLOBAL.CUSTOM_OK_RESPONSE); + callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); break; } @@ -496,10 +504,17 @@ if (INFO_LOG === true) { logger.write("[INFO] initializeProductPlotter -> onProductStorageInitialized -> onPlotterInizialized -> Entering function."); } if (INFO_LOG === true) { logger.write("[INFO] initializeProductPlotter -> onProductStorageInitialized -> onPlotterInizialized -> key = " + pProductCard.product.plotter.devTeam + "-" + pProductCard.product.plotter.codeName + "-" + pProductCard.product.plotter.moduleName); } - try { - plotter.positionAtDatetime(INITIAL_DATE); - } catch (err) { - // If the plotter does not implement this function its ok. + /* When the Web App has never run, we need to position the viewPort at the current Date. Otherwise it will get automatically positioned at the last thing the user was browsing. */ + + let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); + + if (lastRun === null || lastRun !== browserCanvas.width + '.' + browserCanvas.height) { + + try { + plotter.positionAtDatetime(INITIAL_DATE); + } catch (err) { + // If the plotter does not implement this function its ok. + } } let productPlotter = { diff --git a/ViewPort.js b/ViewPort.js index 6ca6a9d33..9c5d7f18d 100644 --- a/ViewPort.js +++ b/ViewPort.js @@ -9,10 +9,10 @@ function newViewPort() { const LEFT_MARGIN = 50; const RIGHT_MARGIN = 50; - let viewPort = { + let thisObject = { visibleArea: undefined, eventHandler: undefined, - zoomLevel: INITIAL_ZOOM_LEVEL, + zoomLevel: undefined, mousePosition: undefined, applyZoom: applyZoom, zoomFontSize: zoomFontSize, @@ -24,11 +24,10 @@ function newViewPort() { displaceTarget: displaceTarget, animate: animate, draw: draw, + raiseEvents: raiseEvents, initialize: initialize }; - zoomTargetLevel = INITIAL_ZOOM_LEVEL; - let increment = 0.035; var offset = { @@ -46,42 +45,93 @@ function newViewPort() { y: 0 }; - viewPort.mousePosition = { + thisObject.mousePosition = { x: 0, y: 0 }; - viewPort.eventHandler = newEventHandler(); + thisObject.eventHandler = newEventHandler(); - return viewPort; + let zoomTargetLevel; + + return thisObject; function initialize() { - viewPort.visibleArea = { + thisObject.visibleArea = { topLeft: { x: LEFT_MARGIN, y: TOP_MARGIN }, topRight: { x: browserCanvas.width - RIGHT_MARGIN , y: TOP_MARGIN }, bottomRight: { x: browserCanvas.width - RIGHT_MARGIN, y: browserCanvas.height - BOTTOM_MARGIN}, bottomLeft: { x: LEFT_MARGIN, y: browserCanvas.height - BOTTOM_MARGIN} }; + /* There is a chance that we could resume the last session at the place we left it. */ + + let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); + + if (lastRun !== null && lastRun === browserCanvas.width + '.' + browserCanvas.height) { + + /* We get from the local storage the recored values of Zoom and OffSet during the last session using this app with this browser */ + + let savedZoomTargetLevel = window.localStorage.getItem('viewPort.zoomTargetLevel'); + + if (savedZoomTargetLevel !== null) { + + thisObject.zoomLevel = Number(savedZoomTargetLevel); + zoomTargetLevel = Number(savedZoomTargetLevel); + + INITIAL_TIME_PERIOD = recalculatePeriod(thisObject.zoomLevel); + } + + let savedOffset = window.localStorage.getItem('viewPort.offset'); + + if (savedOffset !== null) { + + offset = JSON.parse(savedOffset); + } + + let savedTargetOffset = window.localStorage.getItem('viewPort.targetOffset'); + + if (savedTargetOffset !== null) { + + targetOffset = JSON.parse(savedTargetOffset); + } + + } else { + + thisObject.zoomLevel = INITIAL_ZOOM_LEVEL; + zoomTargetLevel = INITIAL_ZOOM_LEVEL; + + INITIAL_TIME_PERIOD = recalculatePeriod(thisObject.zoomLevel); + } + } + + function raiseEvents() { + + let event = { + newOffset: offset + }; + + thisObject.eventHandler.raiseEvent("Offset Changed", event); + } function animate() { - if (viewPort.zoomLevel < zoomTargetLevel) { - if (zoomTargetLevel - viewPort.zoomLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - viewPort.zoomLevel); + if (thisObject.zoomLevel < zoomTargetLevel) { + if (zoomTargetLevel - thisObject.zoomLevel < ANIMATION_INCREMENT) { + ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - thisObject.zoomLevel); } - viewPort.zoomLevel = viewPort.zoomLevel + ANIMATION_INCREMENT; - changeZoom(viewPort.zoomLevel - ANIMATION_INCREMENT, viewPort.zoomLevel); + thisObject.zoomLevel = thisObject.zoomLevel + ANIMATION_INCREMENT; + changeZoom(thisObject.zoomLevel - ANIMATION_INCREMENT, thisObject.zoomLevel); } - if (viewPort.zoomLevel > zoomTargetLevel) { - if (viewPort.zoomLevel - zoomTargetLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - viewPort.zoomLevel); + if (thisObject.zoomLevel > zoomTargetLevel) { + if (thisObject.zoomLevel - zoomTargetLevel < ANIMATION_INCREMENT) { + ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - thisObject.zoomLevel); } - viewPort.zoomLevel = viewPort.zoomLevel - ANIMATION_INCREMENT; - changeZoom(viewPort.zoomLevel + ANIMATION_INCREMENT, viewPort.zoomLevel); + thisObject.zoomLevel = thisObject.zoomLevel - ANIMATION_INCREMENT; + changeZoom(thisObject.zoomLevel + ANIMATION_INCREMENT, thisObject.zoomLevel); } /* @@ -119,7 +169,9 @@ function newViewPort() { newOffset: offset }; - viewPort.eventHandler.raiseEvent("Offset Changed", event); + thisObject.eventHandler.raiseEvent("Offset Changed", event); + + window.localStorage.setItem('viewPort.offset', JSON.stringify(offset)); //console.log("displace produced new Offset x = " + offset.x + " y = " + offset.y); @@ -137,6 +189,8 @@ function newViewPort() { y: (targetOffset.y - offset.y) / 10 }; + window.localStorage.setItem('viewPort.targetOffset', JSON.stringify(targetOffset)); + //console.log("displaceTarget x = " + targetOffset.x + " y = " + targetOffset.y); } @@ -195,7 +249,7 @@ function newViewPort() { zoomTargetLevel = zoomTargetLevel + amount; - ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - viewPort.zoomLevel) / 3; + ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - thisObject.zoomLevel) / 3; let event = { newLevel: zoomTargetLevel, @@ -211,24 +265,31 @@ function newViewPort() { //console.log("Zoom Changed > " + event.newLevel); - viewPort.eventHandler.raiseEvent("Zoom Changed", event); + thisObject.eventHandler.raiseEvent("Zoom Changed", event); + + window.localStorage.setItem('viewPort.zoomTargetLevel', zoomTargetLevel); + return true; } function changeZoom(oldLevel, newLevel) { - let mouseNoZoom = unzoomThisPoint(viewPort.mousePosition, oldLevel); + let mouseNoZoom = unzoomThisPoint(thisObject.mousePosition, oldLevel); let newMouse = zoomThisPoint(mouseNoZoom, newLevel); - offset.x = offset.x - newMouse.x + viewPort.mousePosition.x; - offset.y = offset.y - newMouse.y + viewPort.mousePosition.y; + offset.x = offset.x - newMouse.x + thisObject.mousePosition.x; + offset.y = offset.y - newMouse.y + thisObject.mousePosition.y; + + window.localStorage.setItem('viewPort.offset', JSON.stringify(offset)); //console.log("changeZoom produced new Offset x = " + offset.x + " y = " + offset.y); targetOffset.x = offset.x targetOffset.y = offset.y ; + window.localStorage.setItem('viewPort.targetOffset', JSON.stringify(targetOffset)); + offsetIncrement = { x: 0, y: 0 @@ -239,11 +300,11 @@ function newViewPort() { function zoomFontSize(baseSize, level) { - let zoomFactor = increment; // + increment * viewPort.zoomLevel / 100; + let zoomFactor = increment; // + increment * thisObject.zoomLevel / 100; if (level === undefined) { - baseSize = baseSize * (1 + zoomFactor * viewPort.zoomLevel); + baseSize = baseSize * (1 + zoomFactor * thisObject.zoomLevel); } else { @@ -259,20 +320,20 @@ function newViewPort() { /* Here we check the boundaries of the resulting points, so they dont go out of the visible area. */ - if (point.x > viewPort.visibleArea.bottomRight.x + 1) { - point.x = viewPort.visibleArea.bottomRight.x + 1; + if (point.x > thisObject.visibleArea.bottomRight.x + 1) { + point.x = thisObject.visibleArea.bottomRight.x + 1; } - if (point.x < viewPort.visibleArea.topLeft.x - 1) { - point.x = viewPort.visibleArea.topLeft.x - 1; + if (point.x < thisObject.visibleArea.topLeft.x - 1) { + point.x = thisObject.visibleArea.topLeft.x - 1; } - if (point.y > viewPort.visibleArea.bottomRight.y + 1) { - point.y = viewPort.visibleArea.bottomRight.y + 1; + if (point.y > thisObject.visibleArea.bottomRight.y + 1) { + point.y = thisObject.visibleArea.bottomRight.y + 1; } - if (point.y < viewPort.visibleArea.topLeft.y - 1) { - point.y = viewPort.visibleArea.topLeft.y - 1; + if (point.y < thisObject.visibleArea.topLeft.y - 1) { + point.y = thisObject.visibleArea.topLeft.y - 1; } return point; @@ -281,12 +342,12 @@ function newViewPort() { function zoomThisPoint(point, level) { - let zoomFactor = increment; // + increment * viewPort.zoomLevel / 100; + let zoomFactor = increment; // + increment * thisObject.zoomLevel / 100; if (level === undefined) { - point.x = point.x * (1 + zoomFactor * viewPort.zoomLevel) + offset.x; - point.y = point.y * (1 + zoomFactor * viewPort.zoomLevel) + offset.y; + point.x = point.x * (1 + zoomFactor * thisObject.zoomLevel) + offset.x; + point.y = point.y * (1 + zoomFactor * thisObject.zoomLevel) + offset.y; } else { @@ -301,13 +362,13 @@ function newViewPort() { function unzoomThisPoint(pointWithZoom, level) { let pointWithoutZoom; - let zoomFactor = increment; // + increment * viewPort.zoomLevel / 100; + let zoomFactor = increment; // + increment * thisObject.zoomLevel / 100; if (level === undefined) { pointWithoutZoom = { - x: (pointWithZoom.x - offset.x) / (1 + zoomFactor * viewPort.zoomLevel), - y: (pointWithZoom.y - offset.y) / (1 + zoomFactor * viewPort.zoomLevel) + x: (pointWithZoom.x - offset.x) / (1 + zoomFactor * thisObject.zoomLevel), + y: (pointWithZoom.y - offset.y) / (1 + zoomFactor * thisObject.zoomLevel) }; } else { @@ -352,12 +413,12 @@ function newViewPort() { function drawGrid(step) { - let squareWidth = (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / step; - squareWidth = squareWidth + squareWidth * increment * viewPort.zoomLevel; + let squareWidth = (thisObject.visibleArea.bottomRight.x - thisObject.visibleArea.bottomLeft.x) / step; + squareWidth = squareWidth + squareWidth * increment * thisObject.zoomLevel; let startingX = offset.x - Math.trunc(offset.x / squareWidth) * squareWidth; let startingY = offset.y - Math.trunc(offset.y / squareWidth) * squareWidth; - let lineWidth = 10 / step + 10 / step * increment * viewPort.zoomLevel; + let lineWidth = 10 / step + 10 / step * increment * thisObject.zoomLevel; if (lineWidth < 0.5) { return; @@ -369,17 +430,17 @@ function newViewPort() { browserCanvasContext.beginPath(); - for (var i = startingX; i < viewPort.visibleArea.bottomRight.x; i = i + squareWidth) { + for (var i = startingX; i < thisObject.visibleArea.bottomRight.x; i = i + squareWidth) { - for (var j = startingY; j < viewPort.visibleArea.bottomRight.y; j = j + squareWidth) { + for (var j = startingY; j < thisObject.visibleArea.bottomRight.y; j = j + squareWidth) { let point1 = { - x: viewPort.visibleArea.bottomLeft.x, + x: thisObject.visibleArea.bottomLeft.x, y: j }; let point2 = { - x: viewPort.visibleArea.bottomRight.x, + x: thisObject.visibleArea.bottomRight.x, y: j }; @@ -389,12 +450,12 @@ function newViewPort() { let point3 = { x: i, - y: viewPort.visibleArea.topLeft.y + y: thisObject.visibleArea.topLeft.y }; let point4 = { x: i, - y: viewPort.visibleArea.bottomLeft.y + y: thisObject.visibleArea.bottomLeft.y }; browserCanvasContext.moveTo(point3.x, point3.y); From 8c995c143a229971670b4761bfacacdca1f958dd Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 15 May 2018 21:27:18 +0200 Subject: [PATCH 002/334] Automatic update of files on cursors and market files as time goes by --- Files/DailyFiles.js | 29 +++++++++- Files/FileCursor.js | 104 ++++++++++++++++++++++++++++++++- Files/MarketFiles.js | 134 ++++++++++++++++++++++++++++++++++++++++--- ProductStorage.js | 31 +++++++++- TimelineChart.js | 6 +- 5 files changed, 290 insertions(+), 14 deletions(-) diff --git a/Files/DailyFiles.js b/Files/DailyFiles.js index bd044b890..8c5601d71 100644 --- a/Files/DailyFiles.js +++ b/Files/DailyFiles.js @@ -13,7 +13,8 @@ function newDailyFiles() { setTimePeriod: setTimePeriod, getExpectedFiles: getExpectedFiles, getFilesLoaded: getFilesLoaded, - initialize: initialize + initialize: initialize, + finalize: finalize } let filesLoaded = 0; @@ -21,13 +22,37 @@ function newDailyFiles() { let fileCloud; - let marketFiles = new Map; let fileCursors = new Map; let callBackWhenFileReceived; return thisObject; + function finalize() { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } + + filesLoaded = undefined; + expectedFiles = undefined; + fileCloud = undefined; + + fileCursors.forEach(finalizeEach); + + function finalizeEach(item, key, mapObj) { + + if (INFO_LOG === true) { logger.write("[INFO] finalize -> finalizeEach -> Entering function."); } + + item.finalize(); + } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err); } + } + } + function initialize(pDevTeam, pBot, pProduct, pSet, pExchange, pMarket, pDatetime, pTimePeriod, callBackFunction) { try { diff --git a/Files/FileCursor.js b/Files/FileCursor.js index 4a65ac2ad..d25ce9a6b 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -2,7 +2,7 @@ function newFileCursor() { const MODULE_NAME = "File Cursor"; - const INFO_LOG = false; + const INFO_LOG = true; const ERROR_LOG = true; const logger = newDebugLog(); logger.fileName = MODULE_NAME; @@ -15,7 +15,8 @@ function newFileCursor() { setTimePeriod: setTimePeriod, files: undefined, getExpectedFiles: getExpectedFiles, - initialize: initialize + initialize: initialize, + finalize: finalize } thisObject.files = files; @@ -34,8 +35,37 @@ function newFileCursor() { let beginDateRange; let endDateRange; + let intervalHandle; + return thisObject; + function finalize() { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } + + clearInterval(intervalHandle); + + files = undefined; + cursorDate = undefined; + market = undefined; + exchange = undefined; + fileCloud = undefined; + devTeam = undefined; + bot = undefined; + thisSet = undefined; + periodName = undefined; + timePeriod = undefined; + beginDateRange = undefined; + endDateRange = undefined; + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err); } + } + } + function initialize(pFileCloud, pDevTeam, pBot, pSet, pExchange, pMarket, pPeriodName, pTimePeriod, pCursorDate, pCurrentTimePeriod, pBeginDateRange, pEndDateRange, callBackFunction) { try { @@ -57,6 +87,8 @@ function newFileCursor() { setTimePeriod(pCurrentTimePeriod, pCursorDate, callBackFunction); + intervalHandle = setInterval(updateFiles , timePeriod); + } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err); } @@ -64,6 +96,72 @@ function newFileCursor() { } } + function updateFiles() { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> Entering function."); } + + let targetDate = new Date(); + let dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2); + + let file = thisObject.files.get(dateString); + + if (file !== undefined) { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> File found at the cursor, proceeding to update."); } + + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, targetDate, undefined, undefined, onFileReceived); + + } + + function onFileReceived(err, file) { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Entering function."); } + + switch (err.result) { + case GLOBAL.DEFAULT_OK_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received OK Response."); } + break; + } + + case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received FAIL Response."); } + return; + } + + default: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received Unexpected Response."); } + return; + } + } + + thisObject.files.set(dateString, file); + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> File updated."); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> devTeam = " + devTeam.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> bot = " + bot.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> thisSet = " + thisSet.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> dateString = " + dateString); } + + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> onFileReceived -> err = " + err); } + callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); + } + } + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> err = " + err); } + } + } + function setTimePeriod(pTimePeriod, pDatetime, callBackFunction) { try { @@ -449,7 +547,7 @@ function newFileCursor() { default: { - if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received Unexpected Response."); } + if (INFO_LOG === true) { logger.write("[INFO] getFiles -> onFileReceived -> Received Unexpected Response."); } callBackFunction(err); return; } diff --git a/Files/MarketFiles.js b/Files/MarketFiles.js index cd8c20946..2e2a068a7 100644 --- a/Files/MarketFiles.js +++ b/Files/MarketFiles.js @@ -2,16 +2,18 @@ function newMarketFiles() { const MODULE_NAME = "Market Files"; - const INFO_LOG = false; + const INFO_LOG = true; const ERROR_LOG = true; const logger = newDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { + eventHandler: undefined, getFile: getFile, getExpectedFiles: getExpectedFiles, getFilesLoaded: getFilesLoaded, - initialize: initialize + initialize: initialize, + finalize: finalize } let filesLoaded = 0; @@ -19,9 +21,42 @@ function newMarketFiles() { let fileCloud; let files = new Map; - + + let market; + let exchange; + let devTeam; + let bot; + let thisSet; + let periodName; + + thisObject.eventHandler = newEventHandler(); + + let intervalHandle; + return thisObject; + function finalize() { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } + + clearInterval(intervalHandle); + + filesLoaded = undefined; + market = undefined; + exchange = undefined; + devTeam = undefined; + bot = undefined; + thisSet = undefined; + periodName = undefined; + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err); } + } + } + function initialize(pDevTeam, pBot, pProduct, pSet, pExchange, pMarket, callBackFunction) { try { @@ -29,7 +64,7 @@ function newMarketFiles() { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } if (INFO_LOG === true) { logger.write("[INFO] initialize -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } - let exchange = ecosystem.getExchange(pProduct, pExchange); + exchange = ecosystem.getExchange(pProduct, pExchange); if (exchange === undefined) { @@ -37,6 +72,13 @@ function newMarketFiles() { } + intervalHandle = setInterval(updateFiles, _10_MINUTES_IN_MILISECONDS); + + market = pMarket; + devTeam = pDevTeam; + bot = pBot; + thisSet = pSet; + fileCloud = newFileCloud(); fileCloud.initialize(pBot); @@ -47,9 +89,9 @@ function newMarketFiles() { let periodTime = marketFilesPeriods[i][0]; let periodName = marketFilesPeriods[i][1]; - if (pSet.validPeriods.includes(periodName) === true) { + if (thisSet.validPeriods.includes(periodName) === true) { - fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, periodName, undefined, undefined, undefined, onFileReceived); + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, undefined, undefined, undefined, onFileReceived); function onFileReceived(err, file) { @@ -110,7 +152,85 @@ function newMarketFiles() { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } - + + function updateFiles() { + + try { + + let updateFiles = 0; + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> Entering function."); } + + /* Now we will get the market files */ + + for (let i = 0; i < marketFilesPeriods.length; i++) { + + let periodTime = marketFilesPeriods[i][0]; + let periodName = marketFilesPeriods[i][1]; + + if (thisSet.validPeriods.includes(periodName) === true) { + + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, undefined, undefined, undefined, onFileReceived); + + function onFileReceived(err, file) { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Entering function."); } + + switch (err.result) { + case GLOBAL.DEFAULT_OK_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received OK Response."); } + break; + } + + case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received FAIL Response."); } + return; + } + + case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received CUSTOM FAIL Response."); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> err.message = " + err.message); } + return; + } + + default: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received Unexpected Response."); } + return; + } + } + + files.set(periodTime, file); + updateFiles++; + + if (updateFiles === marketFilesPeriods.length) { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> All files received. "); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> devTeam = " + devTeam.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> bot = " + bot.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> thisSet = " + thisSet.codeName); } + + thisObject.eventHandler.raiseEvent("Files Updated", undefined); + } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> onFileReceived -> err = " + err); } + } + } + } + } + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> err = " + err); } + } + } + function getFile(pPeriod) { if (INFO_LOG === true) { logger.write("[INFO] getFile -> Entering function."); } diff --git a/ProductStorage.js b/ProductStorage.js index 1893beffc..bf5d71d70 100644 --- a/ProductStorage.js +++ b/ProductStorage.js @@ -37,7 +37,8 @@ function newProductStorage(pName) { setTimePeriod: setTimePeriod, eventHandler: undefined, - initialize: initialize + initialize: initialize, + finalize: finalize } @@ -52,6 +53,34 @@ function newProductStorage(pName) { return thisObject; + function finalize() { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } + + for (let i = 0; i < thisObject.marketFiles.length; i++) { + + let marketFile = thisObject.marketFiles[i]; + marketFile.finalize(); + } + + thisObject.marketFiles = undefined; + + for (let i = 0; i < thisObject.dailyFiles.length; i++) { + + let dailyFile = thisObject.dailyFiles[i]; + dailyFile.finalize(); + } + + thisObject.dailyFile = undefined; + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err); } + } + } + function initialize(pDevTeam, pBot, pProduct, pExchange, pMarket, pDatetime, pTimePeriod, callBackFunction) { try { diff --git a/TimelineChart.js b/TimelineChart.js index 9ffd0bdc1..7e317abab 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -668,7 +668,7 @@ canvas.floatingSpace.noteSets.destroyNoteSet(productPlotters[i].noteSet); - /* Finally the panels. */ + /* Then the panels. */ for (let j = 0; j < productPlotters[i].panels.length; j++) { @@ -676,6 +676,10 @@ } + /* Finally the Storage Objects */ + + productPlotters[i].storage.finalize(); + productPlotters.splice(i, 1); // Delete item from array. } From 0c72f06835b4ce22ebcaaa4e3e50cd1e773076d2 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 15 May 2018 21:35:33 +0200 Subject: [PATCH 003/334] Deleting the config --- .gitignore | 2 +- this.server.config.json | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 this.server.config.json diff --git a/.gitignore b/.gitignore index 5856c6c68..41cae50cc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ node_modules/* -this.server.config.json + diff --git a/this.server.config.json b/this.server.config.json deleted file mode 100644 index 2d2579a0a..000000000 --- a/this.server.config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "localMode": true, - "ambient": "Develop" -} \ No newline at end of file From afcdd55974eae841848caa88580842f7ba4bbf7e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 15 May 2018 21:36:40 +0200 Subject: [PATCH 004/334] gitIgnore Updated --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 41cae50cc..5856c6c68 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ node_modules/* - +this.server.config.json From 2143c698899f558cd91d64895a21792f619af0eb Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 07:57:51 +0200 Subject: [PATCH 005/334] gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5856c6c68..0ec0e4cc7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .vs/* -.obj/* + node_modules/* From dd513c37d0f91c2091513eab3247db76a2be072f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 07:58:26 +0200 Subject: [PATCH 006/334] cleaning --- bin/Microsoft.NodejsTools.WebRole.dll | Bin 32992 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/Microsoft.NodejsTools.WebRole.dll diff --git a/bin/Microsoft.NodejsTools.WebRole.dll b/bin/Microsoft.NodejsTools.WebRole.dll deleted file mode 100644 index 03b93f4a1c5dfb1659630bf8ea0ad76d2a599ed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32992 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 From b4026dd8d81daa653b254f52175edb8e7060d734 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 07:59:14 +0200 Subject: [PATCH 007/334] final git ignore --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 0ec0e4cc7..f1d32b8c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .vs/* - - +obj/* +bin/* node_modules/* this.server.config.json From 97df74b42b2f542c4f279c35761c2187ffab0ca1 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 08:16:05 +0200 Subject: [PATCH 008/334] BUG FIX, Cursor not being updated when datetime reaches new day --- Files/FileCursor.js | 43 +++++++++++++++++++++++++++++++++++++++---- Files/MarketFiles.js | 2 +- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Files/FileCursor.js b/Files/FileCursor.js index d25ce9a6b..e476dd193 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -2,7 +2,7 @@ function newFileCursor() { const MODULE_NAME = "File Cursor"; - const INFO_LOG = true; + const INFO_LOG = false; const ERROR_LOG = true; const logger = newDebugLog(); logger.fileName = MODULE_NAME; @@ -102,10 +102,25 @@ function newFileCursor() { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> Entering function."); } - let targetDate = new Date(); - let dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2); + /* - let file = thisObject.files.get(dateString); + 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 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) { @@ -113,6 +128,26 @@ function newFileCursor() { 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) { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> Previous day file found at the cursor, proceeding to add current date."); } + + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, targetDate, undefined, undefined, onFileReceived); + + return; } function onFileReceived(err, file) { diff --git a/Files/MarketFiles.js b/Files/MarketFiles.js index 2e2a068a7..d3657dfbf 100644 --- a/Files/MarketFiles.js +++ b/Files/MarketFiles.js @@ -2,7 +2,7 @@ function newMarketFiles() { const MODULE_NAME = "Market Files"; - const INFO_LOG = true; + const INFO_LOG = false; const ERROR_LOG = true; const logger = newDebugLog(); logger.fileName = MODULE_NAME; From cb17dc10ddcb8555e808fe846b257abd1a67776e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 08:22:16 +0200 Subject: [PATCH 009/334] change ambient for environment --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 2276372ec..9adf61dda 100644 --- a/server.js +++ b/server.js @@ -580,7 +580,7 @@ function initialize() { let fileUri; let sas; - switch (serverConfig.ambient) { + switch (serverConfig.environment) { case "Develop": { From 2d51354a0ca0a6ae62e264f6fead8dbe7d12e4e0 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 11:22:13 +0200 Subject: [PATCH 010/334] Improvements needed to deal correctly with Data Ranges When outside the range, files are not requsted to the server, then there is no async operation as usual, and these modules where not expecting that. Now fixed. --- Files/DailyFiles.js | 103 ++++++++++++++++++++++++++++++++++++++++---- Files/FileCursor.js | 46 ++++++++++++++------ ProductStorage.js | 45 ++++++++++++++++--- 3 files changed, 165 insertions(+), 29 deletions(-) diff --git a/Files/DailyFiles.js b/Files/DailyFiles.js index 8c5601d71..7d5337a7f 100644 --- a/Files/DailyFiles.js +++ b/Files/DailyFiles.js @@ -147,15 +147,85 @@ function newDailyFiles() { let periodTime = dailyFilePeriods[i][0]; let periodName = dailyFilePeriods[i][1]; + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> periodTime = " + periodTime); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> periodName = " + periodName); } + if (pSet.validPeriods.includes(periodName) === true) { let fileCursor = newFileCursor(); - fileCursor.initialize(fileCloud, pDevTeam, pBot, pSet, exchange, pMarket, periodName, periodTime, pDatetime, pTimePeriod, beginDateRange, endDateRange, onFileReceived); + fileCursor.initialize(fileCloud, pDevTeam, pBot, pSet, exchange, pMarket, periodName, periodTime, pDatetime, pTimePeriod, beginDateRange, endDateRange, onInitialized); - fileCursors.set(periodTime, fileCursor); + function onInitialized(err) { - expectedFiles = expectedFiles + fileCursor.getExpectedFiles(); + try { + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> onInitialized -> Entering function."); } + + switch (err.result) { + case GLOBAL.DEFAULT_OK_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> onInitialized -> Received OK Response."); } + break; + } + + case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> onInitialized -> Received FAIL Response."); } + callBackWhenFileReceived(GLOBAL.DEFAULT_FAIL_RESPONSE); + return; + } + default: { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> onInitialized -> Received Unexpected Response."); } + callBackWhenFileReceived(err); + return; + } + } + + fileCursors.set(periodTime, fileCursor); + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> onInitialized -> expectedFiles = " + expectedFiles); } + + expectedFiles = expectedFiles + fileCursor.getExpectedFiles(); + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> onInitialized -> expectedFiles = " + expectedFiles); } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> onFileReceived -> onInitialized -> err = " + err); } + callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); + } + } + } + } + + loadThemAll(); + + function loadThemAll() { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> loadThemAll -> Entering function."); } + + for (i = 0; i < dailyFilePeriods.length; i++) { + + let periodTime = dailyFilePeriods[i][0]; + let periodName = dailyFilePeriods[i][1]; + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> loadThemAll -> periodTime = " + periodTime); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> loadThemAll -> periodName = " + periodName); } + + if (pSet.validPeriods.includes(periodName) === true) { + + let fileCursor = fileCursors.get(periodTime); + fileCursor.reload(onFileReceived); + + } + } + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> onFileReceived -> loadThemAll -> err = " + err); } + callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } @@ -211,6 +281,9 @@ function newDailyFiles() { } filesLoaded++; + + if (INFO_LOG === true) { logger.write("[INFO] onFileReceived -> filesLoaded = " + filesLoaded); } + callBackWhenFileReceived(GLOBAL.DEFAULT_OK_RESPONSE, thisObject); // Note that the call back is called for every file loaded at each cursor. } catch (err) { @@ -248,12 +321,17 @@ function newDailyFiles() { function setDatetimeToEach(fileCursor, key, map) { - fileCursor.setDatetime(pDatetime, onFileReceived); + fileCursor.setDatetime(pDatetime); + + if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> expectedFiles = " + expectedFiles); } + expectedFiles = expectedFiles + fileCursor.getExpectedFiles(); - } + if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> expectedFiles = " + expectedFiles); } - if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> expectedFiles = " + expectedFiles); } + fileCursor.reload(onFileReceived); + + } } catch (err) { @@ -275,12 +353,17 @@ function newDailyFiles() { function setTimePeriodToEach(fileCursor, key, map) { - fileCursor.setTimePeriod(pTimePeriod, pDatetime, onFileReceived); + fileCursor.setTimePeriod(pTimePeriod, pDatetime); + + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> expectedFiles = " + expectedFiles); } + expectedFiles = expectedFiles + fileCursor.getExpectedFiles(); - } + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> expectedFiles = " + expectedFiles); } - if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> expectedFiles = " + expectedFiles); } + fileCursor.reload(onFileReceived); + + } } catch (err) { @@ -292,6 +375,7 @@ function newDailyFiles() { function getExpectedFiles() { if (INFO_LOG === true) { logger.write("[INFO] getExpectedFiles -> Entering function."); } + if (INFO_LOG === true) { logger.write("[INFO] getExpectedFiles -> expectedFiles = " + expectedFiles); } return expectedFiles; @@ -300,6 +384,7 @@ function newDailyFiles() { function getFilesLoaded() { if (INFO_LOG === true) { logger.write("[INFO] getFilesLoaded -> Entering function."); } + if (INFO_LOG === true) { logger.write("[INFO] getFilesLoaded -> filesLoaded = " + filesLoaded); } return filesLoaded; diff --git a/Files/FileCursor.js b/Files/FileCursor.js index e476dd193..72d89ef8d 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -11,6 +11,7 @@ function newFileCursor() { let cursorDate; let thisObject = { + reload: reload, setDatetime: setDatetime, setTimePeriod: setTimePeriod, files: undefined, @@ -85,10 +86,12 @@ function newFileCursor() { beginDateRange = pBeginDateRange; endDateRange = pEndDateRange; - setTimePeriod(pCurrentTimePeriod, pCursorDate, callBackFunction); + setTimePeriod(pCurrentTimePeriod, pCursorDate); intervalHandle = setInterval(updateFiles , timePeriod); + callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); + } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err); } @@ -197,7 +200,7 @@ function newFileCursor() { } } - function setTimePeriod(pTimePeriod, pDatetime, callBackFunction) { + function setTimePeriod(pTimePeriod, pDatetime) { try { @@ -237,20 +240,22 @@ function newFileCursor() { if (Math.abs(positionB - positionA) <= 1) { + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> Will EXIT Saving Mode."); } + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> pTimePeriod = " + convertTimePeriodToName(pTimePeriod)); } + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> timePeriod = " + convertTimePeriodToName(timePeriod)); } + exitSavingMode(); - //console.log("File Cursor with period " + periodName + " EXITED saving mode after being notified the user is at period " + convertTimePeriodToName(pTimePeriod)); } else { + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> Will ENTER Saving Mode."); } + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> pTimePeriod = " + convertTimePeriodToName(pTimePeriod)); } + if (INFO_LOG === true) { logger.write("[INFO] setTimePeriod -> timePeriod = " + convertTimePeriodToName(timePeriod)); } + enterSavingMode(); - //console.log("File Cursor with period " + periodName + " ENTERED saving mode after being notified the user is at period " + convertTimePeriodToName(pTimePeriod)); } - getFiles(callBackFunction); - - collectGarbage(callBackFunction); - function enterSavingMode() { try { @@ -331,7 +336,6 @@ function newFileCursor() { } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] setTimePeriod -> enterSavingMode -> err = " + err); } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } @@ -415,34 +419,48 @@ function newFileCursor() { } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] setTimePeriod -> exitSavingMode -> err = " + err); } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] setTimePeriod -> err = " + err); } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } - function setDatetime(pDatetime, callBackFunction) { + function setDatetime(pDatetime) { try { if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> Entering function."); } - if (pDatetime === undefined) { return; } + if (pDatetime === undefined) { + + if (ERROR_LOG === true) { logger.write("[ERROR] setDatetime -> Received undefined datetime."); } + return; + } cursorDate = pDatetime; + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] setDatetime -> err = " + err); } + } + } + + function reload(callBackFunction) { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] reload -> Entering function."); } + getFiles(callBackFunction); collectGarbage(callBackFunction); } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] setDatetime -> err = " + err); } + if (ERROR_LOG === true) { logger.write("[ERROR] reload -> err = " + err); } callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } diff --git a/ProductStorage.js b/ProductStorage.js index bf5d71d70..6db6296be 100644 --- a/ProductStorage.js +++ b/ProductStorage.js @@ -94,6 +94,10 @@ function newProductStorage(pName) { let dataSetsToLoad = 0; let dataSetsLoaded = 0; + if (INFO_LOG === true) { logger.write("[INFO] initialize -> dataSetsToLoad = " + dataSetsToLoad); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> dataSetsLoaded = " + dataSetsLoaded); } + + for (let i = 0; i < pProduct.dataSets.length; i++) { let thisSet = pProduct.dataSets[i]; @@ -103,10 +107,13 @@ function newProductStorage(pName) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Market Files -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } + dataSetsToLoad++; + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> dataSetsToLoad = " + dataSetsToLoad); } + let marketFiles = newMarketFiles(); marketFiles.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, onMarketFileReady); thisObject.marketFiles.push(marketFiles); - dataSetsToLoad++; } break; @@ -114,10 +121,13 @@ function newProductStorage(pName) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Daily Files -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } + dataSetsToLoad++; + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> dataSetsToLoad = " + dataSetsToLoad); } + let dailyFiles = newDailyFiles(); dailyFiles.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, pDatetime, pTimePeriod, onDailyFileReady); thisObject.dailyFiles.push(dailyFiles); - dataSetsToLoad++; } break; @@ -125,10 +135,13 @@ function newProductStorage(pName) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Single File -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } + dataSetsToLoad++; + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> dataSetsToLoad = " + dataSetsToLoad); } + let singleFile = newSingleFile(); singleFile.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, onSingleFileReady); thisObject.singleFile.push(singleFile); - dataSetsToLoad++; } break; @@ -136,10 +149,13 @@ function newProductStorage(pName) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> File Sequence -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } + dataSetsToLoad++; + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> dataSetsToLoad = " + dataSetsToLoad); } + let fileSequence = newFileSequence(); fileSequence.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, onFileSequenceReady); thisObject.fileSequence.push(fileSequence); - dataSetsToLoad++; } break; } @@ -189,10 +205,15 @@ function newProductStorage(pName) { thisObject.eventHandler.raiseEvent('Market File Loaded', event); + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onMarketFileReady -> event.currentValue = " + event.currentValue); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onMarketFileReady -> event.totalValue = " + event.totalValue); } + if (event.currentValue === event.totalValue) { dataSetsLoaded++; + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onMarketFileReady -> dataSetsLoaded = " + dataSetsLoaded); } + checkInitializeComplete(); } @@ -248,10 +269,15 @@ function newProductStorage(pName) { thisObject.eventHandler.raiseEvent('Daily File Loaded', event); + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onDailyFileReady -> event.currentValue = " + event.currentValue); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onDailyFileReady -> event.totalValue = " + event.totalValue); } + if (event.currentValue === event.totalValue) { dataSetsLoaded++; + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onDailyFileReady -> dataSetsLoaded = " + dataSetsLoaded); } + checkInitializeComplete(); } @@ -311,6 +337,8 @@ function newProductStorage(pName) { dataSetsLoaded++; + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onSingleFileReady -> dataSetsLoaded = " + dataSetsLoaded); } + checkInitializeComplete(); } @@ -370,6 +398,8 @@ function newProductStorage(pName) { dataSetsLoaded++; + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileSequenceReady = " + dataSetsLoaded); } + checkInitializeComplete(); } @@ -384,8 +414,11 @@ function newProductStorage(pName) { try { - if (INFO_LOG === true) { logger.write("[INFO] checkInitializeComplete -> Entering function."); } - if (INFO_LOG === true) { logger.write("[INFO] checkInitializeComplete -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> checkInitializeComplete -> Entering function."); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> checkInitializeComplete -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> checkInitializeComplete -> dataSetsToLoad = " + dataSetsToLoad); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> checkInitializeComplete -> dataSetsLoaded = " + dataSetsLoaded); } if (dataSetsLoaded === dataSetsToLoad) { From 93bee671334e55240aad5376078f7c3c5d442e37 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 21:19:24 +0200 Subject: [PATCH 011/334] Logging and Error Handling in Floating Space Module --- FloatingSpace/FloatingLayer.js | 304 ++++++++++++++++++++------------- 1 file changed, 187 insertions(+), 117 deletions(-) diff --git a/FloatingSpace/FloatingLayer.js b/FloatingSpace/FloatingLayer.js index 4cbfa6c01..24b47ceb5 100644 --- a/FloatingSpace/FloatingLayer.js +++ b/FloatingSpace/FloatingLayer.js @@ -3,6 +3,7 @@ function newFloatingLayer() { const MODULE_NAME = "Floating Layer"; const INFO_LOG = false; + const INTENSIVE_LOG = false; const ERROR_LOG = true; const logger = newDebugLog(); logger.fileName = MODULE_NAME; @@ -28,137 +29,62 @@ function newFloatingLayer() { function initialize(callBackFunction) { - if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } + try { - callBackFunction(); + if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } + + if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err); } + if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } + } } - function addFloatingObject(pFloatingObject) { + function addFloatingObject(pFloatingObject, callBackFunction) { - if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> Entering function."); } + try { - invisibleFloatingObjects.push(pFloatingObject); + if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> Entering function."); } - if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } + invisibleFloatingObjects.push(pFloatingObject); - pFloatingObject.handle = Math.floor((Math.random() * 10000000) + 1); + if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } - if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> pFloatingObject.handle = " + pFloatingObject.handle); } - if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> pFloatingObject.type = " + pFloatingObject.type); } + pFloatingObject.handle = Math.floor((Math.random() * 10000000) + 1); + if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> pFloatingObject.handle = " + pFloatingObject.handle); } + if (INFO_LOG === true) { logger.write("[INFO] addFloatingObject -> pFloatingObject.type = " + pFloatingObject.type); } + + if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] addFloatingObject -> err = " + err); } + if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } + } } function killFloatingObject(pFloatingObjectHandle) { - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Entering function."); } + try { - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - - let floatingObject = invisibleFloatingObjects[i]; - - if (floatingObject.handle === pFloatingObjectHandle) { - invisibleFloatingObjects.splice(i, 1); // Delete item from array. - - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> floatingObject.handle = " + floatingObject.handle); } - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Removing floatingObject from invisibleFloatingObjects."); } - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } - - sendToDie(floatingObject); - return; - } - } - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - - let floatingObject = visibleFloatingObjects[i]; - - if (floatingObject.handle === pFloatingObjectHandle) { - visibleFloatingObjects.splice(i, 1); // Delete item from array. - - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> floatingObject.handle = " + floatingObject.handle); } - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Removing floatingObject from visibleFloatingObjects."); } - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> visibleFloatingObjects.length = " + visibleFloatingObjects.length); } - - sendToDie(floatingObject); - return; - } - } - - function sendToDie(pFloatingObject) { - - /* Lets mofigy the targerRadius */ - - pFloatingObject.targetRadius = 0; - - /* Lets transfer the payload to a new payload structure. */ - - let payload = {}; - - switch (pFloatingObject.type) { - - case "Profile Ball": { - - if (pFloatingObject.payload.profile.visible === false) { return;} - - payload.profile = { - position: { - x: pFloatingObject.payload.profile.position.x, - y: pFloatingObject.payload.profile.position.y - }, - visible: pFloatingObject.payload.profile.visible - } - - pFloatingObject.payload = payload; - break; - } - case "Note": { - - if (pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].visible === false) { return; } - - payload.notes = []; - let note = { - title: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].title, - body: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].body, - date: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].date, - rate: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].rate, - position: { - x: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].position.x, - y: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].position.y - }, - visible: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].visible - }; - payload.notes.push(note); - pFloatingObject.payloadNoteIndex = 0; - - pFloatingObject.payload = payload; - break; - } - default: { - - break; - } - } - - dyingFloatingObjects.push(pFloatingObject); - - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Adding floatingObject to dyingFloatingObjects."); } - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> dyingFloatingObjects.length = " + dyingFloatingObjects.length); } - } - } - - function getFloatingObject(pFloatingObjectHandle, pFloatingObjectIndex) { - - if (INFO_LOG === true) { logger.write("[INFO] getFloatingObject -> Entering function."); } - - if (pFloatingObjectHandle !== undefined) { + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Entering function."); } for (let i = 0; i < invisibleFloatingObjects.length; i++) { let floatingObject = invisibleFloatingObjects[i]; if (floatingObject.handle === pFloatingObjectHandle) { + invisibleFloatingObjects.splice(i, 1); // Delete item from array. - return floatingObject; + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> floatingObject.handle = " + floatingObject.handle); } + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Removing floatingObject from invisibleFloatingObjects."); } + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } + + sendToDie(floatingObject); + return; } } @@ -167,23 +93,146 @@ function newFloatingLayer() { let floatingObject = visibleFloatingObjects[i]; if (floatingObject.handle === pFloatingObjectHandle) { + visibleFloatingObjects.splice(i, 1); // Delete item from array. - return floatingObject; + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> floatingObject.handle = " + floatingObject.handle); } + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Removing floatingObject from visibleFloatingObjects."); } + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> visibleFloatingObjects.length = " + visibleFloatingObjects.length); } + + sendToDie(floatingObject); + return; } } + + function sendToDie(pFloatingObject) { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> sendToDie -> Entering function."); } + + /* Lets mofigy the targerRadius */ + + pFloatingObject.targetRadius = 0; + + /* Lets transfer the payload to a new payload structure. */ + + let payload = {}; + + switch (pFloatingObject.type) { + + case "Profile Ball": { + + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> sendToDie -> Profile Ball -> Entering function."); } + + if (pFloatingObject.payload.profile.visible === false) { return; } + + payload.profile = { + position: { + x: pFloatingObject.payload.profile.position.x, + y: pFloatingObject.payload.profile.position.y + }, + visible: pFloatingObject.payload.profile.visible + } + + pFloatingObject.payload = payload; + break; + } + case "Note": { + + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> sendToDie -> Note -> Entering function."); } + + if (pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].visible === false) { return; } + + payload.notes = []; + let note = { + title: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].title, + body: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].body, + date: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].date, + rate: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].rate, + position: { + x: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].position.x, + y: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].position.y + }, + visible: pFloatingObject.payload.notes[pFloatingObject.payloadNoteIndex].visible + }; + payload.notes.push(note); + pFloatingObject.payloadNoteIndex = 0; + + pFloatingObject.payload = payload; + break; + } + default: { + + break; + } + } + + dyingFloatingObjects.push(pFloatingObject); + + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Adding floatingObject to dyingFloatingObjects."); } + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> dyingFloatingObjects.length = " + dyingFloatingObjects.length); } + + if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] killFloatingObject -> err = " + err); } + if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } + } + } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] killFloatingObject -> err = " + err); } + if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } + } - if (pFloatingObjectIndex !== undefined) { + function getFloatingObject(pFloatingObjectHandle, pFloatingObjectIndex) { - for (let i = 0; i < visibleFloatingObjects.length; i++) { + try { - let floatingObject = visibleFloatingObjects[i]; + if (INFO_LOG === true) { logger.write("[INFO] getFloatingObject -> Entering function."); } - if (i === pFloatingObjectIndex) { + if (pFloatingObjectHandle !== undefined) { - return floatingObject; + for (let i = 0; i < invisibleFloatingObjects.length; i++) { + + let floatingObject = invisibleFloatingObjects[i]; + + if (floatingObject.handle === pFloatingObjectHandle) { + + return floatingObject; + } + } + + for (let i = 0; i < visibleFloatingObjects.length; i++) { + + let floatingObject = visibleFloatingObjects[i]; + + if (floatingObject.handle === pFloatingObjectHandle) { + + return floatingObject; + } } } + + if (pFloatingObjectIndex !== undefined) { + + for (let i = 0; i < visibleFloatingObjects.length; i++) { + + let floatingObject = visibleFloatingObjects[i]; + + if (i === pFloatingObjectIndex) { + + return floatingObject; + } + } + } + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] getFloatingObject -> err = " + err); } } } @@ -196,6 +245,8 @@ function newFloatingLayer() { function physicsLoop() { + if (INTENSIVE_LOG === true) { logger.write("[INFO] physicsLoop -> Entering function."); } + /* This function makes all the calculations to apply phisycs on all floatingObjects in this space. */ for (let i = 0; i < visibleFloatingObjects.length; i++) { @@ -471,6 +522,8 @@ function newFloatingLayer() { function gravityForce(floatingObject, payload) { + if (INTENSIVE_LOG === true) { logger.write("[INFO] gravityForce -> Entering function."); } + /* We simulate a kind of gravity towards the target point of each floatingObject. This force will make the floatingObject to keep pushing to reach that point. */ const coulomb = .00001; @@ -518,6 +571,8 @@ function newFloatingLayer() { function currentRepulsionForce(currentFloatingObject) { + if (INTENSIVE_LOG === true) { logger.write("[INFO] currentRepulsionForce -> Entering function."); } + /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ const coulomb = 2; @@ -578,6 +633,8 @@ function newFloatingLayer() { function targetRepulsionForce(currentFloatingObject) { + if (INTENSIVE_LOG === true) { logger.write("[INFO] targetRepulsionForce -> Entering function."); } + /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ const coulomb = 2; @@ -656,6 +713,8 @@ function newFloatingLayer() { function changeTargetRepulsion(pDelta) { + if (INTENSIVE_LOG === true) { logger.write("[INFO] changeTargetRepulsion -> Entering function."); } + if (pDelta > 0) { pDelta = 1; @@ -675,6 +734,9 @@ function newFloatingLayer() { } function colliding(floatingObject1, floatingObject2) { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] colliding -> Entering function."); } + /* This function detects weather 2 floatingObjects collide with each other. */ var r1 = floatingObject1.currentRadius; @@ -699,6 +761,8 @@ function newFloatingLayer() { function isInside(x, y) { + if (INTENSIVE_LOG === true) { logger.write("[INFO] isInside -> Entering function."); } + /* This function detects weather the point x,y is inside any of the floatingObjects. */ for (var i = 0; i < visibleFloatingObjects.length; i++) { @@ -715,8 +779,9 @@ function newFloatingLayer() { function isInsideFloatingObject(floatingObjectIndex, x, y) { - /* This function detects weather the point x,y is inside one particular floatingObjects. */ + if (INTENSIVE_LOG === true) { logger.write("[INFO] isInsideFloatingObject -> Entering function."); } + /* This function detects weather the point x,y is inside one particular floatingObjects. */ var floatingObject = visibleFloatingObjects[floatingObjectIndex]; var distance = Math.sqrt(Math.pow(floatingObject.currentPosition.x - x, 2) + Math.pow(floatingObject.currentPosition.y - y, 2)); @@ -730,11 +795,16 @@ function newFloatingLayer() { } function distance(x1, y1, x2, y2) { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] distance -> Entering function."); } + return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); } function resolveCollision(floatingObject1, floatingObject2) { + if (INTENSIVE_LOG === true) { logger.write("[INFO] resolveCollision -> Entering function."); } + /* This function changes speed and position of floatingObjects that are in collision */ var collisionision_angle = Math.atan2((floatingObject2.currentPosition.y - floatingObject1.currentPosition.y), (floatingObject2.currentPosition.x - floatingObject1.currentPosition.x)); From 3e1863387aa46a58b26eed129a2a7bbc571aaec5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 May 2018 21:31:28 +0200 Subject: [PATCH 012/334] More error handling on Floating Space --- FloatingSpace/FloatingLayer.js | 1020 +++++++++++++++++--------------- 1 file changed, 537 insertions(+), 483 deletions(-) diff --git a/FloatingSpace/FloatingLayer.js b/FloatingSpace/FloatingLayer.js index 24b47ceb5..53a45a781 100644 --- a/FloatingSpace/FloatingLayer.js +++ b/FloatingSpace/FloatingLayer.js @@ -66,7 +66,7 @@ function newFloatingLayer() { } } - function killFloatingObject(pFloatingObjectHandle) { + function killFloatingObject(pFloatingObjectHandle, callBackFunction) { try { @@ -169,8 +169,8 @@ function newFloatingLayer() { dyingFloatingObjects.push(pFloatingObject); - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> Adding floatingObject to dyingFloatingObjects."); } - if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> dyingFloatingObjects.length = " + dyingFloatingObjects.length); } + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> sendToDie -> Adding floatingObject to dyingFloatingObjects."); } + if (INFO_LOG === true) { logger.write("[INFO] killFloatingObject -> sendToDie -> dyingFloatingObjects.length = " + dyingFloatingObjects.length); } if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); } @@ -231,7 +231,6 @@ function newFloatingLayer() { } } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] getFloatingObject -> err = " + err); } } } @@ -245,354 +244,454 @@ function newFloatingLayer() { function physicsLoop() { - if (INTENSIVE_LOG === true) { logger.write("[INFO] physicsLoop -> Entering function."); } + try { - /* This function makes all the calculations to apply phisycs on all floatingObjects in this space. */ + if (INTENSIVE_LOG === true) { logger.write("[INFO] physicsLoop -> Entering function."); } - for (let i = 0; i < visibleFloatingObjects.length; i++) { + /* This function makes all the calculations to apply phisycs on all floatingObjects in this space. */ - let floatingObject = visibleFloatingObjects[i]; + for (let i = 0; i < visibleFloatingObjects.length; i++) { - /* Change position based on speed */ + let floatingObject = visibleFloatingObjects[i]; - floatingObject.currentPosition.x = floatingObject.currentPosition.x + floatingObject.currentSpeed.x; - floatingObject.currentPosition.y = floatingObject.currentPosition.y + floatingObject.currentSpeed.y; + /* Change position based on speed */ - /* Apply some friction to desacelerate */ + floatingObject.currentPosition.x = floatingObject.currentPosition.x + floatingObject.currentSpeed.x; + floatingObject.currentPosition.y = floatingObject.currentPosition.y + floatingObject.currentSpeed.y; - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x * floatingObject.friction; // Desaceleration factor. - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y * floatingObject.friction; // Desaceleration factor. + /* Apply some friction to desacelerate */ - // Gives a minimun speed towards their taget. + floatingObject.currentSpeed.x = floatingObject.currentSpeed.x * floatingObject.friction; // Desaceleration factor. + floatingObject.currentSpeed.y = floatingObject.currentSpeed.y * floatingObject.friction; // Desaceleration factor. - let payload = { - position: undefined, - visible: false - }; + // Gives a minimun speed towards their taget. - switch (floatingObject.type) { + let payload = { + position: undefined, + visible: false + }; - case "Profile Ball": { + switch (floatingObject.type) { - payload.position = floatingObject.payload.profile.position; - payload.visible = floatingObject.payload.profile.visible; - break; + case "Profile Ball": { + + payload.position = floatingObject.payload.profile.position; + payload.visible = floatingObject.payload.profile.visible; + break; + } + case "Note": { + + payload.position = floatingObject.payload.notes[floatingObject.payloadNoteIndex].position; + payload.visible = floatingObject.payload.notes[floatingObject.payloadNoteIndex].visible; + + break; + } + default: { + + break; + } } - case "Note": { - payload.position = floatingObject.payload.notes[floatingObject.payloadNoteIndex].position; - payload.visible = floatingObject.payload.notes[floatingObject.payloadNoteIndex].visible; - - break; - } - default: { - - break; - } - } - - if (floatingObject.currentPosition.x < payload.position.x) { - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x + .005; - } else { - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x - .005; - } - - if (floatingObject.currentPosition.y < payload.position.y) { - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y + .005; - } else { - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y - .005; - } - - // Lets put a maximun speed also. - - const MAX_SPEED = 50; - - if (floatingObject.currentSpeed.x > MAX_SPEED) { - floatingObject.currentSpeed.x = MAX_SPEED; - } - - if (floatingObject.currentSpeed.y > MAX_SPEED) { - floatingObject.currentSpeed.y = MAX_SPEED; - } - - if (floatingObject.currentSpeed.x < -MAX_SPEED) { - floatingObject.currentSpeed.x = -MAX_SPEED; - } - - if (floatingObject.currentSpeed.y < -MAX_SPEED) { - floatingObject.currentSpeed.y = -MAX_SPEED; - } - - // The radius also have a target. - - if (Math.abs(floatingObject.currentRadius - floatingObject.targetRadius) >= 1) { - - if (floatingObject.currentRadius < floatingObject.targetRadius) { - floatingObject.currentRadius = floatingObject.currentRadius + .5; + if (floatingObject.currentPosition.x < payload.position.x) { + floatingObject.currentSpeed.x = floatingObject.currentSpeed.x + .005; } else { - floatingObject.currentRadius = floatingObject.currentRadius - .5; + floatingObject.currentSpeed.x = floatingObject.currentSpeed.x - .005; } - } - // The imageSize also have a target. - - if (Math.abs(floatingObject.currentImageSize - floatingObject.targetImageSize) >= 1) { - - if (floatingObject.currentImageSize < floatingObject.targetImageSize) { - floatingObject.currentImageSize = floatingObject.currentImageSize + 1; + if (floatingObject.currentPosition.y < payload.position.y) { + floatingObject.currentSpeed.y = floatingObject.currentSpeed.y + .005; } else { - floatingObject.currentImageSize = floatingObject.currentImageSize - 1; + floatingObject.currentSpeed.y = floatingObject.currentSpeed.y - .005; } + + // Lets put a maximun speed also. + + const MAX_SPEED = 50; + + if (floatingObject.currentSpeed.x > MAX_SPEED) { + floatingObject.currentSpeed.x = MAX_SPEED; + } + + if (floatingObject.currentSpeed.y > MAX_SPEED) { + floatingObject.currentSpeed.y = MAX_SPEED; + } + + if (floatingObject.currentSpeed.x < -MAX_SPEED) { + floatingObject.currentSpeed.x = -MAX_SPEED; + } + + if (floatingObject.currentSpeed.y < -MAX_SPEED) { + floatingObject.currentSpeed.y = -MAX_SPEED; + } + + // The radius also have a target. + + if (Math.abs(floatingObject.currentRadius - floatingObject.targetRadius) >= 1) { + + if (floatingObject.currentRadius < floatingObject.targetRadius) { + floatingObject.currentRadius = floatingObject.currentRadius + .5; + } else { + floatingObject.currentRadius = floatingObject.currentRadius - .5; + } + } + + // The imageSize also have a target. + + if (Math.abs(floatingObject.currentImageSize - floatingObject.targetImageSize) >= 1) { + + if (floatingObject.currentImageSize < floatingObject.targetImageSize) { + floatingObject.currentImageSize = floatingObject.currentImageSize + 1; + } else { + floatingObject.currentImageSize = floatingObject.currentImageSize - 1; + } + } + + + /* Collision Control */ + + for (let k = i + 1; k < visibleFloatingObjects.length; k++) { + + if (colliding(visibleFloatingObjects[i], visibleFloatingObjects[k])) { + + resolveCollision(visibleFloatingObjects[k], visibleFloatingObjects[i]); + + } + } + + /* Calculate repulsion force produced by all other floatingObjects */ + + currentRepulsionForce(i); + + targetRepulsionForce(i); + + gravityForce(floatingObject, payload); + } + /* We draw all the visibleFloatingObjects. */ - /* Collision Control */ + for (let i = 0; i < visibleFloatingObjects.length; i++) { + let floatingObject = visibleFloatingObjects[i]; + floatingObject.drawBackground(); + } - for (let k = i + 1; k < visibleFloatingObjects.length; k++) { + for (let i = 0; i < visibleFloatingObjects.length; i++) { + let floatingObject = visibleFloatingObjects[visibleFloatingObjects.length - i - 1]; + floatingObject.drawForeground(); + } - if (colliding(visibleFloatingObjects[i], visibleFloatingObjects[k])) { + /* Now we check if any of the created FloatingObjects where enabled to run under the Physics Engine. */ - resolveCollision(visibleFloatingObjects[k], visibleFloatingObjects[i]); + for (let i = 0; i < invisibleFloatingObjects.length; i++) { + + let floatingObject = invisibleFloatingObjects[i]; + + let payload = { + position: undefined, + visible: false + }; + + switch (floatingObject.type) { + + case "Profile Ball": { + + payload.position = floatingObject.payload.profile.position; + payload.visible = floatingObject.payload.profile.visible; + break; + } + case "Note": { + + payload.position = floatingObject.payload.notes[floatingObject.payloadNoteIndex].position; + payload.visible = floatingObject.payload.notes[floatingObject.payloadNoteIndex].visible; + break; + } + default: { + + break; + } + } + + if (payload.visible === true) { + + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> payload.visible = " + payload.visible); } + + /* The first time that the floatingObject becomes visible, we need to do this. */ + + floatingObject.radomizeCurrentPosition(payload.position); + floatingObject.radomizeCurrentSpeed(); + + visibleFloatingObjects.push(floatingObject); + + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject added to visibleFloatingObjects"); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> visibleFloatingObjects.length = " + visibleFloatingObjects.length); } + + invisibleFloatingObjects.splice(i, 1); // Delete item from array. + + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject removed from invisibleFloatingObjects"); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } + + return; // Only one at the time. } } - /* Calculate repulsion force produced by all other floatingObjects */ + /* Finally we check if any of the currently visible floatingObjects has become invisible and must be removed from the Physics Engine. */ - currentRepulsionForce(i); + for (let i = 0; i < visibleFloatingObjects.length; i++) { - targetRepulsionForce(i); + let floatingObject = visibleFloatingObjects[i]; - gravityForce(floatingObject, payload); + let payload = { + position: undefined, + visible: true + }; - } + switch (floatingObject.type) { - /* We draw all the visibleFloatingObjects. */ + case "Profile Ball": { - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i]; - floatingObject.drawBackground(); - } + payload.visible = floatingObject.payload.profile.visible; + break; + } + case "Note": { - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[visibleFloatingObjects.length - i - 1]; - floatingObject.drawForeground(); - } + payload.visible = floatingObject.payload.notes[floatingObject.payloadNoteIndex].visible; + break; + } + default: { - /* Now we check if any of the created FloatingObjects where enabled to run under the Physics Engine. */ - - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - - let floatingObject = invisibleFloatingObjects[i]; - - let payload = { - position: undefined, - visible: false - }; - - switch (floatingObject.type) { - - case "Profile Ball": { - - payload.position = floatingObject.payload.profile.position; - payload.visible = floatingObject.payload.profile.visible; - break; + break; + } } - case "Note": { - payload.position = floatingObject.payload.notes[floatingObject.payloadNoteIndex].position; - payload.visible = floatingObject.payload.notes[floatingObject.payloadNoteIndex].visible; - break; - } - default: { + if (payload.visible === false) { + + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> payload.visible = " + payload.visible); } + + invisibleFloatingObjects.push(floatingObject); + + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject added to invisibleFloatingObjects"); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } + + visibleFloatingObjects.splice(i, 1); // Delete item from array. + + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject removed from visibleFloatingObjects"); } + if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> visibleFloatingObjects.length = " + visibleFloatingObjects.length); } + + return; // Only one at the time. - break; } } - if (payload.visible === true) { + /* We animate some parts of the dying objects */ - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> payload.visible = " + payload.visible); } + for (let i = 0; i < dyingFloatingObjects.length; i++) { - /* The first time that the floatingObject becomes visible, we need to do this. */ + let floatingObject = dyingFloatingObjects[i]; - floatingObject.radomizeCurrentPosition(payload.position); - floatingObject.radomizeCurrentSpeed(); + if (Math.abs(floatingObject.currentRadius - floatingObject.targetRadius) >= 5) { - visibleFloatingObjects.push(floatingObject); + let speed = Math.random(); - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject added to visibleFloatingObjects"); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> visibleFloatingObjects.length = " + visibleFloatingObjects.length); } + floatingObject.currentRadius = floatingObject.currentRadius - speed * 3; - invisibleFloatingObjects.splice(i, 1); // Delete item from array. + } else { - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject removed from invisibleFloatingObjects"); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } + /* Here is when the floatingObjects are definetelly killed. */ - return; // Only one at the time. - - } - } - - /* Finally we check if any of the currently visible floatingObjects has become invisible and must be removed from the Physics Engine. */ - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - - let floatingObject = visibleFloatingObjects[i]; - - let payload = { - position: undefined, - visible: true - }; - - switch (floatingObject.type) { - - case "Profile Ball": { - - payload.visible = floatingObject.payload.profile.visible; - break; - } - case "Note": { - - payload.visible = floatingObject.payload.notes[floatingObject.payloadNoteIndex].visible; - break; - } - default: { - - break; + dyingFloatingObjects.splice(i, 1); // Delete item from array. + break; // only one at the time. } } - if (payload.visible === false) { - - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> payload.visible = " + payload.visible); } - - invisibleFloatingObjects.push(floatingObject); - - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject added to invisibleFloatingObjects"); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> invisibleFloatingObjects.length = " + invisibleFloatingObjects.length); } - - visibleFloatingObjects.splice(i, 1); // Delete item from array. - - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject.handle = " + floatingObject.handle); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> floatingObject removed from visibleFloatingObjects"); } - if (INFO_LOG === true) { logger.write("[INFO] physicsLoop -> visibleFloatingObjects.length = " + visibleFloatingObjects.length); } - - return; // Only one at the time. + /* We also draw all the dyingFloatingObjects */ + for (let i = 0; i < dyingFloatingObjects.length; i++) { + let floatingObject = dyingFloatingObjects[i]; + floatingObject.drawBackground(); } - } - /* We animate some parts of the dying objects */ - - for (let i = 0; i < dyingFloatingObjects.length; i++) { - - let floatingObject = dyingFloatingObjects[i]; - - if (Math.abs(floatingObject.currentRadius - floatingObject.targetRadius) >= 5) { - - let speed = Math.random(); - - floatingObject.currentRadius = floatingObject.currentRadius - speed * 3; - - } else { - - /* Here is when the floatingObjects are definetelly killed. */ - - dyingFloatingObjects.splice(i, 1); // Delete item from array. - break; // only one at the time. + for (let i = 0; i < dyingFloatingObjects.length; i++) { + let floatingObject = dyingFloatingObjects[dyingFloatingObjects.length - i - 1]; + floatingObject.drawForeground(); } - } - /* We also draw all the dyingFloatingObjects */ - - for (let i = 0; i < dyingFloatingObjects.length; i++) { - let floatingObject = dyingFloatingObjects[i]; - floatingObject.drawBackground(); - } - - for (let i = 0; i < dyingFloatingObjects.length; i++) { - let floatingObject = dyingFloatingObjects[dyingFloatingObjects.length - i - 1]; - floatingObject.drawForeground(); + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] physicsLoop -> err = " + err); } } } function gravityForce(floatingObject, payload) { - if (INTENSIVE_LOG === true) { logger.write("[INFO] gravityForce -> Entering function."); } + try { - /* We simulate a kind of gravity towards the target point of each floatingObject. This force will make the floatingObject to keep pushing to reach that point. */ + if (INTENSIVE_LOG === true) { logger.write("[INFO] gravityForce -> Entering function."); } - const coulomb = .00001; - const minForce = 0.01; + /* We simulate a kind of gravity towards the target point of each floatingObject. This force will make the floatingObject to keep pushing to reach that point. */ - var d = Math.sqrt(Math.pow(payload.position.x - floatingObject.currentPosition.x, 2) + Math.pow(payload.position.y - floatingObject.currentPosition.y, 2)); // ... we calculate the distance ... + const coulomb = .00001; + const minForce = 0.01; - var force = coulomb * d * d / floatingObject.currentMass; // In this case the mass of the floatingObject affects the gravity force that it receives, that gives priority to target position to bigger floatingObjects. + var d = Math.sqrt(Math.pow(payload.position.x - floatingObject.currentPosition.x, 2) + Math.pow(payload.position.y - floatingObject.currentPosition.y, 2)); // ... we calculate the distance ... - if (force < minForce) { // We need this attraction force to overcome the friction we imposed to the system. - force = minForce; + var force = coulomb * d * d / floatingObject.currentMass; // In this case the mass of the floatingObject affects the gravity force that it receives, that gives priority to target position to bigger floatingObjects. + + if (force < minForce) { // We need this attraction force to overcome the friction we imposed to the system. + force = minForce; + } + + var pos1 = { + x: floatingObject.currentPosition.x, + y: floatingObject.currentPosition.y + }; + + var pos2 = { + x: payload.position.x, + y: payload.position.y + }; + + var posDiff = { // Next we need the vector resulting from the 2 positions. + x: pos2.x - pos1.x, + y: pos2.y - pos1.y + }; + + var unitVector = { // To find the unit vector, we divide each component by the magnitude of the vector. + x: posDiff.x / d, + y: posDiff.y / d + }; + + var forceVector = { + x: unitVector.x * force, + y: unitVector.y * force + }; + + /* We add the force vector to the speed vector */ + + floatingObject.currentSpeed.x = floatingObject.currentSpeed.x + forceVector.x; + floatingObject.currentSpeed.y = floatingObject.currentSpeed.y + forceVector.y; + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] gravityForce -> err = " + err); } } - - var pos1 = { - x: floatingObject.currentPosition.x, - y: floatingObject.currentPosition.y - }; - - var pos2 = { - x: payload.position.x, - y: payload.position.y - }; - - var posDiff = { // Next we need the vector resulting from the 2 positions. - x: pos2.x - pos1.x, - y: pos2.y - pos1.y - }; - - var unitVector = { // To find the unit vector, we divide each component by the magnitude of the vector. - x: posDiff.x / d, - y: posDiff.y / d - }; - - var forceVector = { - x: unitVector.x * force, - y: unitVector.y * force - }; - - /* We add the force vector to the speed vector */ - - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x + forceVector.x; - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y + forceVector.y; - } function currentRepulsionForce(currentFloatingObject) { - if (INTENSIVE_LOG === true) { logger.write("[INFO] currentRepulsionForce -> Entering function."); } + try { - /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ + if (INTENSIVE_LOG === true) { logger.write("[INFO] currentRepulsionForce -> Entering function."); } - const coulomb = 2; + /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ - var floatingObject1 = visibleFloatingObjects[currentFloatingObject]; + const coulomb = 2; - for (var i = 0; i < visibleFloatingObjects.length; i++) { // The force to be applied is considering all other floatingObjects... + var floatingObject1 = visibleFloatingObjects[currentFloatingObject]; - if (i !== currentFloatingObject) { // ... except for the current one. + for (var i = 0; i < visibleFloatingObjects.length; i++) { // The force to be applied is considering all other floatingObjects... + + if (i !== currentFloatingObject) { // ... except for the current one. + + var floatingObject2 = visibleFloatingObjects[i]; // So, for each floatingObject... + + var d = Math.sqrt(Math.pow(floatingObject2.currentPosition.x - floatingObject1.currentPosition.x, 2) + Math.pow(floatingObject2.currentPosition.y - floatingObject1.currentPosition.y, 2)); // ... we calculate the distance ... + + var force = coulomb * floatingObject2.currentMass / (d * d); // ... and with it the repulsion force. + + /* We need to put a hard limit to this force, in order to to eject very little floatingObjects to the infinite and beyond. */ + + if (force > 1) { + force = 1; + } + + var pos1 = { + x: floatingObject1.currentPosition.x, + y: floatingObject1.currentPosition.y + }; + + var pos2 = { + x: floatingObject2.currentPosition.x, + y: floatingObject2.currentPosition.y + }; + + var posDiff = { // Next we need the vector resulting from the 2 positions. + x: pos2.x - pos1.x, + y: pos2.y - pos1.y + }; + + var unitVector = { // To find the unit vector, we divide each component by the magnitude of the vector. + x: posDiff.x / d, + y: posDiff.y / d + }; + + var forceVector = { + x: unitVector.x * force, + y: unitVector.y * force + }; + + /* We substract the force vector to the speed vector of the current floatingObject */ + + floatingObject1.currentSpeed.x = floatingObject1.currentSpeed.x - forceVector.x; + floatingObject1.currentSpeed.y = floatingObject1.currentSpeed.y - forceVector.y; + + } + + } + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] currentRepulsionForce -> err = " + err); } + } + } + + function targetRepulsionForce(currentFloatingObject) { + + try { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] targetRepulsionForce -> Entering function."); } + + /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ + + const coulomb = 2; + + var floatingObject1 = visibleFloatingObjects[currentFloatingObject]; + + for (var i = 0; i < visibleFloatingObjects.length; i++) { // The force to be applied is considering all other floatingObjects... var floatingObject2 = visibleFloatingObjects[i]; // So, for each floatingObject... - var d = Math.sqrt(Math.pow(floatingObject2.currentPosition.x - floatingObject1.currentPosition.x, 2) + Math.pow(floatingObject2.currentPosition.y - floatingObject1.currentPosition.y, 2)); // ... we calculate the distance ... + let payload = { + position: undefined + }; + + switch (floatingObject2.type) { + + case "Profile Ball": { + + payload.position = floatingObject2.payload.profile.position; + break; + } + case "Note": { + + payload.position = floatingObject2.payload.notes[floatingObject2.payloadNoteIndex].position; + break; + } + default: { + + break; + } + } + + var d = Math.sqrt(Math.pow(payload.position.x - floatingObject1.currentPosition.x, 2) + Math.pow(payload.position.y - floatingObject1.currentPosition.y, 2)); // ... we calculate the distance ... var force = coulomb * floatingObject2.currentMass / (d * d); // ... and with it the repulsion force. /* We need to put a hard limit to this force, in order to to eject very little floatingObjects to the infinite and beyond. */ - if (force > 1) { - force = 1; + if (force > maxTargetRepulsionForce) { + force = maxTargetRepulsionForce; } var pos1 = { @@ -601,8 +700,8 @@ function newFloatingLayer() { }; var pos2 = { - x: floatingObject2.currentPosition.x, - y: floatingObject2.currentPosition.y + x: payload.position.x, + y: payload.position.y }; var posDiff = { // Next we need the vector resulting from the 2 positions. @@ -627,253 +726,208 @@ function newFloatingLayer() { } + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] targetRepulsionForce -> err = " + err); } } - } - function targetRepulsionForce(currentFloatingObject) { + function changeTargetRepulsion(pDelta) { - if (INTENSIVE_LOG === true) { logger.write("[INFO] targetRepulsionForce -> Entering function."); } + try { - /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ + if (INTENSIVE_LOG === true) { logger.write("[INFO] changeTargetRepulsion -> Entering function."); } - const coulomb = 2; + if (pDelta > 0) { - var floatingObject1 = visibleFloatingObjects[currentFloatingObject]; + pDelta = 1; - for (var i = 0; i < visibleFloatingObjects.length; i++) { // The force to be applied is considering all other floatingObjects... + } else { - var floatingObject2 = visibleFloatingObjects[i]; // So, for each floatingObject... + pDelta = -1; - let payload = { - position: undefined - }; - - switch (floatingObject2.type) { - - case "Profile Ball": { - - payload.position = floatingObject2.payload.profile.position; - break; - } - case "Note": { - - payload.position = floatingObject2.payload.notes[floatingObject2.payloadNoteIndex].position; - break; - } - default: { - - break; - } } - var d = Math.sqrt(Math.pow(payload.position.x - floatingObject1.currentPosition.x, 2) + Math.pow(payload.position.y - floatingObject1.currentPosition.y, 2)); // ... we calculate the distance ... + maxTargetRepulsionForce = maxTargetRepulsionForce + pDelta / 10000; - var force = coulomb * floatingObject2.currentMass / (d * d); // ... and with it the repulsion force. + if (maxTargetRepulsionForce < 0.0001) { - /* We need to put a hard limit to this force, in order to to eject very little floatingObjects to the infinite and beyond. */ - - if (force > maxTargetRepulsionForce) { - force = maxTargetRepulsionForce; + maxTargetRepulsionForce = 0.0001 } - + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] changeTargetRepulsion -> err = " + err); } + } + } + + function colliding(floatingObject1, floatingObject2) { + + try { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] colliding -> Entering function."); } + + /* This function detects weather 2 floatingObjects collide with each other. */ + + var r1 = floatingObject1.currentRadius; + var r2 = floatingObject2.currentRadius; + + var distance = Math.sqrt(Math.pow(floatingObject2.currentPosition.x - floatingObject1.currentPosition.x, 2) + Math.pow(floatingObject2.currentPosition.y - floatingObject1.currentPosition.y, 2)); + + if (distance > (r1 + r2)) { + // No solutions, the circles are too far apart. + return false; + } + else if (distance <= r1 + r2) { + // One circle contains the other. + return true; + } + else if ((distance === 0) && (r1 === r2)) { + // the circles coincide. + return true; + } + else return true; + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] colliding -> err = " + err); } + } + } + + function isInside(x, y) { + + try { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] isInside -> Entering function."); } + + /* This function detects weather the point x,y is inside any of the floatingObjects. */ + + for (var i = 0; i < visibleFloatingObjects.length; i++) { + var floatingObject = visibleFloatingObjects[i]; + var distance = Math.sqrt(Math.pow(floatingObject.currentPosition.x - x, 2) + Math.pow(floatingObject.currentPosition.y - y, 2)); + + if (distance < floatingObject.currentRadius) { + return i; + } + } + return -1; + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] isInside -> err = " + err); } + } + } + + function isInsideFloatingObject(floatingObjectIndex, x, y) { + + try { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] isInsideFloatingObject -> Entering function."); } + + /* This function detects weather the point x,y is inside one particular floatingObjects. */ + + var floatingObject = visibleFloatingObjects[floatingObjectIndex]; + var distance = Math.sqrt(Math.pow(floatingObject.currentPosition.x - x, 2) + Math.pow(floatingObject.currentPosition.y - y, 2)); + + if (distance < floatingObject.currentRadius) { + return true; + } + + return false; + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] isInsideFloatingObject -> err = " + err); } + } + } + + function distance(x1, y1, x2, y2) { + + try { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] distance -> Entering function."); } + + return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] distance -> err = " + err); } + } + } + + function resolveCollision(floatingObject1, floatingObject2) { + + try { + + if (INTENSIVE_LOG === true) { logger.write("[INFO] resolveCollision -> Entering function."); } + + /* This function changes speed and position of floatingObjects that are in collision */ + + var collisionision_angle = Math.atan2((floatingObject2.currentPosition.y - floatingObject1.currentPosition.y), (floatingObject2.currentPosition.x - floatingObject1.currentPosition.x)); + + var speed1 = Math.sqrt(floatingObject1.currentSpeed.x * floatingObject1.currentSpeed.x + floatingObject1.currentSpeed.y * floatingObject1.currentSpeed.y); // Magnitude of Speed Vector for floatingObject 1 + var speed2 = Math.sqrt(floatingObject2.currentSpeed.x * floatingObject2.currentSpeed.x + floatingObject2.currentSpeed.y * floatingObject2.currentSpeed.y); // Magnitude of Speed Vector for floatingObject 2 + + var direction_1 = Math.atan2(floatingObject1.currentSpeed.y, floatingObject1.currentSpeed.x); + var direction_2 = Math.atan2(floatingObject2.currentSpeed.y, floatingObject2.currentSpeed.x); + + var new_xspeed_1 = speed1 * Math.cos(direction_1 - collisionision_angle); + var new_yspeed_1 = speed1 * Math.sin(direction_1 - collisionision_angle); + var new_xspeed_2 = speed2 * Math.cos(direction_2 - collisionision_angle); + var new_yspeed_2 = speed2 * Math.sin(direction_2 - collisionision_angle); + + var final_xspeed_1 = ((floatingObject1.currentMass - floatingObject2.currentMass) * new_xspeed_1 + (floatingObject2.currentMass + floatingObject2.currentMass) * new_xspeed_2) / (floatingObject1.currentMass + floatingObject2.currentMass); + var final_xspeed_2 = ((floatingObject1.currentMass + floatingObject1.currentMass) * new_xspeed_1 + (floatingObject2.currentMass - floatingObject1.currentMass) * new_xspeed_2) / (floatingObject1.currentMass + floatingObject2.currentMass); + var final_yspeed_1 = new_yspeed_1; + var final_yspeed_2 = new_yspeed_2; + + var cosAngle = Math.cos(collisionision_angle); + var sinAngle = Math.sin(collisionision_angle); + + floatingObject1.currentSpeed.x = cosAngle * final_xspeed_1 - sinAngle * final_yspeed_1; + floatingObject1.currentSpeed.y = sinAngle * final_xspeed_1 + cosAngle * final_yspeed_1; + + floatingObject2.currentSpeed.x = cosAngle * final_xspeed_2 - sinAngle * final_yspeed_2; + floatingObject2.currentSpeed.y = sinAngle * final_xspeed_2 + cosAngle * final_yspeed_2; + var pos1 = { x: floatingObject1.currentPosition.x, y: floatingObject1.currentPosition.y }; var pos2 = { - x: payload.position.x, - y: payload.position.y + x: floatingObject2.currentPosition.x, + y: floatingObject2.currentPosition.y }; - var posDiff = { // Next we need the vector resulting from the 2 positions. - x: pos2.x - pos1.x, - y: pos2.y - pos1.y + // get the mtd + var posDiff = { + x: pos1.x - pos2.x, + y: pos1.y - pos2.y }; - var unitVector = { // To find the unit vector, we divide each component by the magnitude of the vector. - x: posDiff.x / d, - y: posDiff.y / d + var d = Math.sqrt(Math.pow(floatingObject2.currentPosition.x - floatingObject1.currentPosition.x, 2) + Math.pow(floatingObject2.currentPosition.y - floatingObject1.currentPosition.y, 2)); + + // minimum translation distance to push floatingObjects apart after intersecting + var scalar = (((floatingObject1.currentRadius + floatingObject2.currentRadius) - d) / d); + + var minTD = { + x: posDiff.x * scalar, + y: posDiff.y * scalar }; - var forceVector = { - x: unitVector.x * force, - y: unitVector.y * force - }; + // resolve intersection -- + // computing inverse mass quantities + var im1 = 1 / floatingObject1.currentMass; + var im2 = 1 / floatingObject2.currentMass; - /* We substract the force vector to the speed vector of the current floatingObject */ + // push-pull them apart based off their mass - floatingObject1.currentSpeed.x = floatingObject1.currentSpeed.x - forceVector.x; - floatingObject1.currentSpeed.y = floatingObject1.currentSpeed.y - forceVector.y; + pos1.x = pos1.x + minTD.x * (im1 / (im1 + im2)); + pos1.y = pos1.y + minTD.y * (im1 / (im1 + im2)); + pos2.x = pos2.x - minTD.x * (im2 / (im1 + im2)); + pos2.y = pos2.y - minTD.y * (im2 / (im1 + im2)); + floatingObject1.currentPosition = pos1; + floatingObject2.currentPosition = pos2; + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] resolveCollision -> err = " + err); } } - - } - - function changeTargetRepulsion(pDelta) { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] changeTargetRepulsion -> Entering function."); } - - if (pDelta > 0) { - - pDelta = 1; - - } else { - - pDelta = -1; - - } - - maxTargetRepulsionForce = maxTargetRepulsionForce + pDelta / 10000; - - if (maxTargetRepulsionForce < 0.0001) { - - maxTargetRepulsionForce = 0.0001 - } - } - - function colliding(floatingObject1, floatingObject2) { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] colliding -> Entering function."); } - - /* This function detects weather 2 floatingObjects collide with each other. */ - - var r1 = floatingObject1.currentRadius; - var r2 = floatingObject2.currentRadius; - - var distance = Math.sqrt(Math.pow(floatingObject2.currentPosition.x - floatingObject1.currentPosition.x, 2) + Math.pow(floatingObject2.currentPosition.y - floatingObject1.currentPosition.y, 2)); - - if (distance > (r1 + r2)) { - // No solutions, the circles are too far apart. - return false; - } - else if (distance <= r1 + r2) { - // One circle contains the other. - return true; - } - else if ((distance === 0) && (r1 === r2)) { - // the circles coincide. - return true; - } - else return true; - } - - function isInside(x, y) { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] isInside -> Entering function."); } - - /* This function detects weather the point x,y is inside any of the floatingObjects. */ - - for (var i = 0; i < visibleFloatingObjects.length; i++) { - var floatingObject = visibleFloatingObjects[i]; - var distance = Math.sqrt(Math.pow(floatingObject.currentPosition.x - x, 2) + Math.pow(floatingObject.currentPosition.y - y, 2)); - - if (distance < floatingObject.currentRadius) { - return i; - } - } - return -1; - - } - - function isInsideFloatingObject(floatingObjectIndex, x, y) { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] isInsideFloatingObject -> Entering function."); } - - /* This function detects weather the point x,y is inside one particular floatingObjects. */ - - var floatingObject = visibleFloatingObjects[floatingObjectIndex]; - var distance = Math.sqrt(Math.pow(floatingObject.currentPosition.x - x, 2) + Math.pow(floatingObject.currentPosition.y - y, 2)); - - if (distance < floatingObject.currentRadius) { - return true; - } - - return false; - - } - - function distance(x1, y1, x2, y2) { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] distance -> Entering function."); } - - return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); - } - - function resolveCollision(floatingObject1, floatingObject2) { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] resolveCollision -> Entering function."); } - - /* This function changes speed and position of floatingObjects that are in collision */ - - var collisionision_angle = Math.atan2((floatingObject2.currentPosition.y - floatingObject1.currentPosition.y), (floatingObject2.currentPosition.x - floatingObject1.currentPosition.x)); - - var speed1 = Math.sqrt(floatingObject1.currentSpeed.x * floatingObject1.currentSpeed.x + floatingObject1.currentSpeed.y * floatingObject1.currentSpeed.y); // Magnitude of Speed Vector for floatingObject 1 - var speed2 = Math.sqrt(floatingObject2.currentSpeed.x * floatingObject2.currentSpeed.x + floatingObject2.currentSpeed.y * floatingObject2.currentSpeed.y); // Magnitude of Speed Vector for floatingObject 2 - - var direction_1 = Math.atan2(floatingObject1.currentSpeed.y, floatingObject1.currentSpeed.x); - var direction_2 = Math.atan2(floatingObject2.currentSpeed.y, floatingObject2.currentSpeed.x); - - var new_xspeed_1 = speed1 * Math.cos(direction_1 - collisionision_angle); - var new_yspeed_1 = speed1 * Math.sin(direction_1 - collisionision_angle); - var new_xspeed_2 = speed2 * Math.cos(direction_2 - collisionision_angle); - var new_yspeed_2 = speed2 * Math.sin(direction_2 - collisionision_angle); - - var final_xspeed_1 = ((floatingObject1.currentMass - floatingObject2.currentMass) * new_xspeed_1 + (floatingObject2.currentMass + floatingObject2.currentMass) * new_xspeed_2) / (floatingObject1.currentMass + floatingObject2.currentMass); - var final_xspeed_2 = ((floatingObject1.currentMass + floatingObject1.currentMass) * new_xspeed_1 + (floatingObject2.currentMass - floatingObject1.currentMass) * new_xspeed_2) / (floatingObject1.currentMass + floatingObject2.currentMass); - var final_yspeed_1 = new_yspeed_1; - var final_yspeed_2 = new_yspeed_2; - - var cosAngle = Math.cos(collisionision_angle); - var sinAngle = Math.sin(collisionision_angle); - - floatingObject1.currentSpeed.x = cosAngle * final_xspeed_1 - sinAngle * final_yspeed_1; - floatingObject1.currentSpeed.y = sinAngle * final_xspeed_1 + cosAngle * final_yspeed_1; - - floatingObject2.currentSpeed.x = cosAngle * final_xspeed_2 - sinAngle * final_yspeed_2; - floatingObject2.currentSpeed.y = sinAngle * final_xspeed_2 + cosAngle * final_yspeed_2; - - var pos1 = { - x: floatingObject1.currentPosition.x, - y: floatingObject1.currentPosition.y - }; - - var pos2 = { - x: floatingObject2.currentPosition.x, - y: floatingObject2.currentPosition.y - }; - - // get the mtd - var posDiff = { - x: pos1.x - pos2.x, - y: pos1.y - pos2.y - }; - - var d = Math.sqrt(Math.pow(floatingObject2.currentPosition.x - floatingObject1.currentPosition.x, 2) + Math.pow(floatingObject2.currentPosition.y - floatingObject1.currentPosition.y, 2)); - - // minimum translation distance to push floatingObjects apart after intersecting - var scalar = (((floatingObject1.currentRadius + floatingObject2.currentRadius) - d) / d); - - var minTD = { - x: posDiff.x * scalar, - y: posDiff.y * scalar - }; - - // resolve intersection -- - // computing inverse mass quantities - var im1 = 1 / floatingObject1.currentMass; - var im2 = 1 / floatingObject2.currentMass; - - // push-pull them apart based off their mass - - pos1.x = pos1.x + minTD.x * (im1 / (im1 + im2)); - pos1.y = pos1.y + minTD.y * (im1 / (im1 + im2)); - pos2.x = pos2.x - minTD.x * (im2 / (im1 + im2)); - pos2.y = pos2.y - minTD.y * (im2 / (im1 + im2)); - - floatingObject1.currentPosition = pos1; - floatingObject2.currentPosition = pos2; } } From 84149cc293f068c226d6ac91b625ba1b566e4edd Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 May 2018 09:01:13 +0200 Subject: [PATCH 013/334] Implementing Automatic Updates in Sequences part 1 --- Files/FileSequence.js | 67 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/Files/FileSequence.js b/Files/FileSequence.js index 2665e0840..eca8c348e 100644 --- a/Files/FileSequence.js +++ b/Files/FileSequence.js @@ -11,19 +11,43 @@ function newFileSequence() { getFile: getFile, getExpectedFiles: getExpectedFiles, getFilesLoaded: getFilesLoaded, - initialize: initialize + initialize: initialize, + finalize: finalize } let filesLoaded = 0; - let fileCloud; - let files = new Map; - let maxSequence = -1; // This is replaced by the content of the sequence file, which contains an index that starts on zero. In the case that the sequence file is not found the default value is -1 sin when you add 1 it gives you the amount of files in the sequence, zero. + let intervalHandle; return thisObject; + function finalize() { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } + + clearInterval(intervalHandle); + + filesLoaded = undefined; + fileCloud = undefined; + files = undefined; + maxSequence = undefined; + devTeam = undefined; + bot = undefined; + product = undefined; + thisSet = undefined; + exchange = undefined; + market = undefined; + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err); } + } + } + function initialize(pDevTeam, pBot, pProduct, pSet, pExchange, pMarket, callBackFunction) { try { @@ -31,7 +55,7 @@ function newFileSequence() { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } if (INFO_LOG === true) { logger.write("[INFO] initialize -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } - let exchange = ecosystem.getExchange(pProduct, pExchange); + exchange = ecosystem.getExchange(pProduct, pExchange); if (exchange === undefined) { @@ -39,19 +63,27 @@ function newFileSequence() { } + market = pMarket; + devTeam = pDevTeam; + bot = pBot; + product = pProduct; + thisSet = pSet; + + intervalHandle = setInterval(updateFiles, _1_MINUTE_IN_MILISECONDS); + fileCloud = newFileCloud(); - fileCloud.initialize(pBot); + fileCloud.initialize(bot); /* First we will get the sequence max number */ - fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, "Sequence", undefined, onSequenceFileReceived); + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, undefined, undefined, "Sequence", undefined, onSequenceFileReceived); function onSequenceFileReceived(err, file) { try { if (INFO_LOG === true) { logger.write("[INFO] initialize -> onSequenceFileReceived -> Entering function."); } - if (INFO_LOG === true) { logger.write("[INFO] initialize -> onSequenceFileReceived -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onSequenceFileReceived -> key = " + devTeam.codeName + "-" + bot.codeName + "-" + product.codeName); } switch (err.result) { case GLOBAL.DEFAULT_OK_RESPONSE.result: { @@ -99,7 +131,7 @@ function newFileSequence() { for (let i = 0; i <= maxSequence; i++) { - fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, i, undefined, onFileReceived); + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, undefined, undefined, i, undefined, onFileReceived); function onFileReceived(err, file) { @@ -164,6 +196,23 @@ function newFileSequence() { } } + function updateFiles() { + + try { + + let updateFiles = 0; + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> Entering function."); } + + + + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> err = " + err); } + } + } + function getFile(pSequence) { if (INFO_LOG === true) { logger.write("[INFO] getFile -> Entering function."); } From 245114c91cfdc1e64872fba81de3e88d67c548ee Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 May 2018 16:42:53 +0200 Subject: [PATCH 014/334] BUG Fixed with FileSequencies --- Files/FileCursor.js | 14 +--- Files/FileSequence.js | 164 +++++++++++++++++++++++++++++++++++++++--- Files/MarketFiles.js | 7 +- ProductStorage.js | 16 +++-- 4 files changed, 169 insertions(+), 32 deletions(-) diff --git a/Files/FileCursor.js b/Files/FileCursor.js index 72d89ef8d..dde4e44f4 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -7,21 +7,18 @@ function newFileCursor() { const logger = newDebugLog(); logger.fileName = MODULE_NAME; - let files = new Map; let cursorDate; let thisObject = { reload: reload, setDatetime: setDatetime, setTimePeriod: setTimePeriod, - files: undefined, + files: new Map, getExpectedFiles: getExpectedFiles, initialize: initialize, finalize: finalize } - thisObject.files = files; - let minCursorSize = 10; let maxCursorSize = 30; @@ -48,18 +45,11 @@ function newFileCursor() { clearInterval(intervalHandle); - files = undefined; + thisObject.files = undefined; cursorDate = undefined; - market = undefined; - exchange = undefined; fileCloud = undefined; - devTeam = undefined; - bot = undefined; - thisSet = undefined; periodName = undefined; timePeriod = undefined; - beginDateRange = undefined; - endDateRange = undefined; } catch (err) { diff --git a/Files/FileSequence.js b/Files/FileSequence.js index eca8c348e..2aa3ca2c0 100644 --- a/Files/FileSequence.js +++ b/Files/FileSequence.js @@ -8,6 +8,7 @@ function newFileSequence() { logger.fileName = MODULE_NAME; let thisObject = { + eventHandler: undefined, getFile: getFile, getExpectedFiles: getExpectedFiles, getFilesLoaded: getFilesLoaded, @@ -19,6 +20,14 @@ function newFileSequence() { let fileCloud; let files = new Map; let maxSequence = -1; // This is replaced by the content of the sequence file, which contains an index that starts on zero. In the case that the sequence file is not found the default value is -1 sin when you add 1 it gives you the amount of files in the sequence, zero. + let market; + let devTeam; + let bot; + let thisSet; + let product; + + thisObject.eventHandler = newEventHandler(); + let intervalHandle; return thisObject; @@ -28,6 +37,10 @@ function newFileSequence() { try { if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } + if (INFO_LOG === true) { logger.write("[INFO] finalize -> devTeam = " + devTeam.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] finalize -> bot = " + bot.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] finalize -> thisSet = " + thisSet.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] finalize -> intervalHandle = " + intervalHandle); } clearInterval(intervalHandle); @@ -35,12 +48,6 @@ function newFileSequence() { fileCloud = undefined; files = undefined; maxSequence = undefined; - devTeam = undefined; - bot = undefined; - product = undefined; - thisSet = undefined; - exchange = undefined; - market = undefined; } catch (err) { @@ -63,13 +70,15 @@ function newFileSequence() { } + intervalHandle = setInterval(updateFiles, _1_MINUTE_IN_MILISECONDS); + + if (INFO_LOG === true) { logger.write("[INFO] initialize -> intervalHandle = " + intervalHandle); } + market = pMarket; devTeam = pDevTeam; bot = pBot; - product = pProduct; thisSet = pSet; - - intervalHandle = setInterval(updateFiles, _1_MINUTE_IN_MILISECONDS); + product = pProduct; fileCloud = newFileCloud(); fileCloud.initialize(bot); @@ -127,6 +136,8 @@ function newFileSequence() { maxSequence = Number(file); + if (INFO_LOG === true) { logger.write("[INFO] initialize -> onSequenceFileReceived -> maxSequence = " + maxSequence); } + /* Now we will get the sequence of files */ for (let i = 0; i <= maxSequence; i++) { @@ -204,11 +215,144 @@ function newFileSequence() { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> Entering function."); } + /* + To keep this data structure up-to-date we need to: + 1. Re-read the sequence file. + 2. Re-load the current last file. + 3. Re-load all new files after our last one. + + */ + + let currentMaxSequence = maxSequence; + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> currentMaxSequence = " + currentMaxSequence); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> intervalHandle = " + intervalHandle); } + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> devTeam = " + devTeam.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> bot = " + bot.codeName); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> thisSet = " + thisSet.codeName); } + + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, undefined, undefined, "Sequence", undefined, onSequenceFileReceived); + + function onSequenceFileReceived(err, file) { + + try { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> Entering function."); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> key = " + devTeam.codeName + "-" + bot.codeName + "-" + product.codeName); } + + switch (err.result) { + case GLOBAL.DEFAULT_OK_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> Received OK Response."); } + break; + } + + case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> Received FAIL Response."); } + return; + } + + case GLOBAL.CUSTOM_OK_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> Received CUSTOM OK Response."); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> err.message = " + err.message); } + return; + } + + case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> Received CUSTOM FAIL Response."); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> err.message = " + err.message); } + return; + } + + default: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> Received Unexpected Response."); } + return; + } + } + + maxSequence = Number(file); + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> maxSequence = " + maxSequence); } + + /* Now we will get the sequence of files, but in this case only from the currentMaxSequence and above. */ + + for (let i = currentMaxSequence; i <= maxSequence; i++) { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> i = " + i); } + + fileCloud.getFile(devTeam, bot, thisSet, exchange, market, undefined, undefined, i, undefined, onFileReceived); + + function onFileReceived(err, file) { + + try { + + switch (err.result) { + case GLOBAL.DEFAULT_OK_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> Received OK Response."); } + break; + } + + case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> Received FAIL Response."); } + return; + } + + case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> Received CUSTOM FAIL Response."); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> err.message = " + err.message); } + return; + } + + default: { + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> Received Unexpected Response."); } + return; + } + } + + files.set(i, file); + + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> File Updated."); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> i = " + i); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> file.length = " + file.length); } + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> filesLoaded = " + filesLoaded); } + + if (i !== currentMaxSequence) { + + filesLoaded++; + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> filesLoaded = " + filesLoaded); } + + } + + if (filesLoaded === maxSequence + 1) { + + thisObject.eventHandler.raiseEvent("Files Updated", undefined); + if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onSequenceFileReceived -> onFileReceived -> Files Updated event Raised."); } + + } + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> onSequenceFileReceived -> onFileReceived -> err = " + err); } + } + } + } + + } catch (err) { + if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> onSequenceFileReceived -> err = " + err); } + } + } } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> err = " + err); } } } diff --git a/Files/MarketFiles.js b/Files/MarketFiles.js index d3657dfbf..0caaeb34c 100644 --- a/Files/MarketFiles.js +++ b/Files/MarketFiles.js @@ -44,12 +44,7 @@ function newMarketFiles() { clearInterval(intervalHandle); filesLoaded = undefined; - market = undefined; - exchange = undefined; - devTeam = undefined; - bot = undefined; - thisSet = undefined; - periodName = undefined; + files = undefined; } catch (err) { diff --git a/ProductStorage.js b/ProductStorage.js index 6db6296be..4deaf42d6 100644 --- a/ProductStorage.js +++ b/ProductStorage.js @@ -31,7 +31,7 @@ function newProductStorage(pName) { marketFiles: [], dailyFiles: [], singleFile: [], - fileSequence: [], + fileSequences: [], setDatetime: setDatetime, setTimePeriod: setTimePeriod, @@ -75,6 +75,14 @@ function newProductStorage(pName) { thisObject.dailyFile = undefined; + for (let i = 0; i < thisObject.fileSequences.length; i++) { + + let fileSequence = thisObject.fileSequences[i]; + fileSequence.finalize(); + } + + thisObject.dailyFile = undefined; + } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err); } @@ -153,9 +161,9 @@ function newProductStorage(pName) { if (INFO_LOG === true) { logger.write("[INFO] initialize -> dataSetsToLoad = " + dataSetsToLoad); } - let fileSequence = newFileSequence(); - fileSequence.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, onFileSequenceReady); - thisObject.fileSequence.push(fileSequence); + let fileSequences = newFileSequence(); + fileSequences.initialize(pDevTeam, pBot, pProduct, thisSet, pExchange, pMarket, onFileSequenceReady); + thisObject.fileSequences.push(fileSequences); } break; } From e0ecf37edff970ff9b2625eca7dbf972ddea3d15 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 09:17:08 +0200 Subject: [PATCH 015/334] Reading Configs From Storage Part 1 - Setting the Infraestructure --- Files/FileCloud.js | 13 ++- package.json | 3 +- server.js | 256 ++++++++++++++++++++++++++++++--------------- 3 files changed, 183 insertions(+), 89 deletions(-) diff --git a/Files/FileCloud.js b/Files/FileCloud.js index 83869cc1e..e66ef83ba 100644 --- a/Files/FileCloud.js +++ b/Files/FileCloud.js @@ -24,11 +24,18 @@ function newFileCloud() { function initialize(pBot) { - if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } - if (INFO_LOG === true) { logger.write("[INFO] initialize -> pBot = " + pBot.codeName); } + try { - blobService = AzureStorage.Blob.createBlobServiceWithSas(pBot.storage.fileUri, pBot.storage.sas); + if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } + if (INFO_LOG === true) { logger.write("[INFO] initialize -> pBot = " + pBot.codeName); } + blobService = AzureStorage.Blob.createBlobServiceWithSas(pBot.storage.fileUri, pBot.storage.sas); + + } catch (err) { + + if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err); } + //callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); TODO> Handle this callback. + } } function getFile(pDevTeam, pBot, pSet, pExchange, pMarket, pPeriodName, pDatetime, pSequence, pDataRange, callBackFunction) { diff --git a/package.json b/package.json index 130f55601..f86e5979b 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "name": "Luis-Fernando-Molina" }, "dependencies": { - "@octokit/rest": "^14.0.9", + "azure-storage": "^2.8.2", + "@octokit/rest": "^14.0.9", "atob": "^2.1.1" } } diff --git a/server.js b/server.js index 9adf61dda..75262ef31 100644 --- a/server.js +++ b/server.js @@ -11,6 +11,7 @@ if (CONSOLE_LOG === true) { let serverConfig; let githubData = new Map; +let storageData = new Map; let ecosystem; let ecosystemObject; @@ -81,54 +82,90 @@ function initialize() { */ - if (serverConfig.localMode === true) { + switch (serverConfig.storage.source) { - let fs = require('fs'); - try { - let fileName = '../AAPlatform/ecosystem.json'; - fs.readFile(fileName, onFileRead); + case 'Cloud': { - function onFileRead(err, file) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } + + getStorageData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) + + function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Entering function."); } - ecosystem = file.toString(); + ecosystem = pData.toString(); ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); readCompetitionsConfig(); } catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); } - } - } - catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> File = " + fileName + " Error = " + err); + + break; } - } else { + case 'File System': { - getGithubData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) - - function onDataArrived(pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } + let fs = require('fs'); try { + let fileName = '../AAPlatform/ecosystem.json'; + fs.readFile(fileName, onFileRead); - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> onDataArrived -> Entering function."); } + function onFileRead(err, file) { - ecosystem = pData.toString(); - ecosystem = ecosystem.trim(); // remove first byte with some encoding. + try { - ecosystemObject = JSON.parse(ecosystem); - readCompetitionsConfig(); + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> onFileRead -> Entering function."); } + + ecosystem = file.toString(); + ecosystem = ecosystem.trim(); // remove first byte with some encoding. + + ecosystemObject = JSON.parse(ecosystem); + readCompetitionsConfig(); + } + catch (err) { + console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } } catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> onDataArrived -> Error = " + err); + console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> File = " + fileName + " Error = " + err); } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } + + getGithubData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Entering function."); } + + ecosystem = pData.toString(); + ecosystem = ecosystem.trim(); // remove first byte with some encoding. + + ecosystemObject = JSON.parse(ecosystem); + readCompetitionsConfig(); + } + catch (err) { + console.log("[ERROR] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); + } + } + break; } } } @@ -643,6 +680,7 @@ function onBrowserRequest(request, response) { case "clear-cache": { githubData = new Map; + storageData = new Map; respondWithContent("command acepted", response); @@ -1223,92 +1261,140 @@ function respondWithFile(fileName, response) { function getGithubData(pOrg, pRepo, pPath, callBackFunction) { - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> Entering function."); } + try { - let cacheVersion = githubData.get(pOrg + '.' + pRepo + '.' + pPath) + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> Entering function."); } - if (cacheVersion !== undefined) { + let cacheVersion = githubData.get(pOrg + '.' + pRepo + '.' + pPath) - if (CONSOLE_LOG === true) { + if (cacheVersion !== undefined) { - console.log("getGithubData - " + pOrg + '.' + pRepo + '.' + pPath + " found at cache. :-) "); + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } - } + callBackFunction(cacheVersion); - callBackFunction(cacheVersion); + } else { - } else { + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } - if (CONSOLE_LOG === true) { + const octokit = require('@octokit/rest')() + global.atob = require("atob"); - console.log("getGithubData - " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache. :-( "); + let owner = pOrg; + let repo = pRepo; + let branch = "master"; + let page = 1; + let per_page = 100; + let ref = "master"; + let path = pPath; - } + octokit.repos.getContent({ owner, repo, path, ref }, onContent); - const octokit = require('@octokit/rest')() - global.atob = require("atob"); + function onContent(error, result) { - let owner = pOrg; - let repo = pRepo; - let branch = "master"; - let page = 1; - let per_page = 100; - let ref = "master"; - let path = pPath; - - octokit.repos.getContent({ owner, repo, path, ref }, onContent); - - function onContent(error, result) { - - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> error = " + error); } - - if (CONSOLE_LOG === true) { - - console.log("[INFO] getGithubData -> onContent -> Github.com responded to request " + pOrg + '.' + pRepo + '.' + pPath + " with result = " + result.toString().substring(0,100)); - - } - - if (error !== null) { console.log("getGithubData -> onContent -> " + error);} - - let decoded = atob(result.data.content); - - /* - - This method usually brings up to 3 characters of encoding info at the begining of the JSON string which destroys the JSON format. - We will run the following code with the intention to eliminate this problem. - - */ - - let cleanString = decoded; - let jsonTest; - - try { - jsonTest = JSON.parse(cleanString); - } catch (err) { - cleanString = decoded.substring(1); try { - jsonTest = JSON.parse(cleanString); - } catch (err) { - cleanString = decoded.substring(2); + + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> error = " + error); } + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Github.com responded to request " + pOrg + '.' + pRepo + '.' + pPath + " with result = " + result.toString().substring(0, 100)); } + + if (error !== null) { console.log("[ERROR] getGithubData -> onContent -> " + error); } + + let decoded = atob(result.data.content); + + /* + + This method usually brings up to 3 characters of encoding info at the begining of the JSON string which destroys the JSON format. + We will run the following code with the intention to eliminate this problem. + + */ + + let cleanString = decoded; + let jsonTest; + try { jsonTest = JSON.parse(cleanString); } catch (err) { - cleanString = decoded.substring(3); + cleanString = decoded.substring(1); try { jsonTest = JSON.parse(cleanString); } catch (err) { - console.log("getGithubData -> onContent -> Could not clean the data received -> Data = " + decoded.substring(0, 50)); + cleanString = decoded.substring(2); + try { + jsonTest = JSON.parse(cleanString); + } catch (err) { + cleanString = decoded.substring(3); + try { + jsonTest = JSON.parse(cleanString); + } catch (err) { + console.log("[INFO] getGithubData -> onContent -> Could not clean the data received -> Data = " + decoded.substring(0, 50)); + } + } } } + + githubData.set(pOrg + '.' + pRepo + '.' + pPath, cleanString); + + callBackFunction(cleanString); + + } catch (err) { + console.log("[ERROR] getGithubData -> onContent -> err.message = " + err.message); + callBackFunction("{}"); } } - - githubData.set(pOrg + '.' + pRepo + '.' + pPath, cleanString); - - callBackFunction(cleanString); - } + + } catch (err) { + console.log("[ERROR] getGithubData -> err.message = " + err.message); + callBackFunction("{}"); } } +function getStorageData(pOrg, pRepo, pPath, callBackFunction) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> Entering function."); } + + let cacheVersion = storageData.get(pOrg + '.' + pRepo + '.' + pPath) + + if (cacheVersion !== undefined) { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } + + callBackFunction(cacheVersion); + + } else { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } + + let storage = require('azure-storage'); + let blobService = storage.createBlobService(serverConfig.storage.connectionString); + + blobService.getBlobToText('aaplatform', pOrg + "/" + pRepo + "/" + pPath, onFileReceived); + + + function onFileReceived(err, text, response) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onContent -> err = " + JSON.stringify(err)); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onContent -> response = " + JSON.stringify(response)); } + + storageData.set(pOrg + '.' + pRepo + '.' + pPath, text); + + callBackFunction(text); + + } catch (err) { + console.log("[ERROR] getStorageData -> onFileReceived -> err.message = " + err.message); + callBackFunction("{}"); + } + } + } + + } catch (err) { + console.log("[ERROR] getStorageData -> err.message = " + err.message); + callBackFunction("{}"); + } +} \ No newline at end of file From 18d41031ffc77f27e2810882779c6deab4979505 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 10:27:59 +0200 Subject: [PATCH 016/334] Clear Cache Command Fixed + some cleaning --- index.html | 1 - server.js | 41 ++++++++++++++++++++++------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/index.html b/index.html index bfe37ce1c..74d92a05a 100644 --- a/index.html +++ b/index.html @@ -30,7 +30,6 @@ - diff --git a/server.js b/server.js index 75262ef31..a0e44d03e 100644 --- a/server.js +++ b/server.js @@ -1,12 +1,6 @@ const CONSOLE_LOG = true; -if (CONSOLE_LOG === true) { - - console.log("Node Server Starting. Be happy, everything is going to be allright. :-)"); - -} - -// serverConfig.localMode // This forces the server to read files from the local drive instead of github and to use develop storage and not production. +if (CONSOLE_LOG === true) { console.log("[INFO] Node Server Starting."); } let serverConfig; @@ -16,8 +10,10 @@ let ecosystem; let ecosystemObject; //'use strict'; -var http = require('http'); -var port = process.env.PORT || 1337; +let http = require('http'); +let port = process.env.PORT || 1337; + +let isHttpServerStarted = false; initialize(); @@ -29,10 +25,12 @@ function initialize() { function readServerConfig() { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> Entering function."); } - - let fs = require('fs'); try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> Entering function."); } + + let fs = require('fs'); + let fileName = './this.server.config.json'; fs.readFile(fileName, onFileRead); @@ -660,7 +658,11 @@ function startHtttpServer() { try { - gWebServer = http.createServer(onBrowserRequest).listen(port); + if (isHttpServerStarted === false) { + + gWebServer = http.createServer(onBrowserRequest).listen(port); + isHttpServerStarted = true; + } } catch (err) { console.log("[ERROR] startHtttpServer -> Error = " + err); @@ -682,6 +684,8 @@ function onBrowserRequest(request, response) { githubData = new Map; storageData = new Map; + initialize(); + respondWithContent("command acepted", response); } @@ -762,7 +766,7 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } } @@ -855,7 +859,7 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } } @@ -896,9 +900,8 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("File Not Found: " + fileName); + console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } - } } catch (err) { @@ -1158,9 +1161,8 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } - } } catch (err) { @@ -1236,6 +1238,7 @@ function respondWithFile(fileName, response) { catch (err) { returnEmptyArray(); console.log("File Not Found: " + fileName); + console.log("[ERROR] respondWithFile -> onFileRead -> File Not Found: " + fileName + " or Error = " + err); } } From c10f61a574a7cbe8566a9883041db712fdd95031 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 10:47:43 +0200 Subject: [PATCH 017/334] Competitions added to Cloud Storage --- server.js | 167 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 118 insertions(+), 49 deletions(-) diff --git a/server.js b/server.js index a0e44d03e..6beb325fb 100644 --- a/server.js +++ b/server.js @@ -172,27 +172,40 @@ function initialize() { } } + function switchTemplate() { + + switch (serverConfig.storage.source) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } + + break; + } + } + + } + function readCompetitionsConfig() { try { if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Entering function."); } - /* - - The file previously read contains the reference to all competiotion hosts and their competitions. We use these references to load the specific - configurations and inject them to the first file. - - Lets remember that these files can come from 3 different sources, and this patter is later repeated many times down this module: - - 1.If we are in debug mode, from the filesystem. - 2.If we are in production from a cache we keep in memory at the node server. - 3.If the cache does not have the file, then we get it from github.com, put in on the cache and serve it. - - 2 and 3 are done by the getGithubData function. - - */ - let requestsSent = 0; let responsesReceived = 0; @@ -208,20 +221,23 @@ function initialize() { requestsSent++; - if (serverConfig.localMode === true) { + switch (serverConfig.storage.source) { - let fs = require('fs'); - try { - let fileName = '../Competitions/' + host.codeName + '/' + competition.repo + '/' + competition.configFile; - fs.readFile(fileName, onFileRead); + case 'Cloud': { - function onFileRead(err, pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> Entering Case."); } + + getStorageData(host.codeName, competition.repo, competition.configFile, onDataArrived) + + function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onFileRead -> fileName = " + fileName); } - + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } + responsesReceived++; pData = pData.toString(); @@ -241,53 +257,106 @@ function initialize() { readBotsAndPlottersConfig(); } + } catch (err) { - console.log("[INFO] initialize -> readCompetitionsConfig -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Error = " + err); } } - } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> File = " + fileName + " Error = " + err); + break; } - } else { - - getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived) - - function onDataArrived(pData) { + case 'File System': { try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> Entering Case."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> competition.repo = " + competition.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> pData = " + pData); } + let fs = require('fs'); + + let fileName = '../Competitions/' + host.codeName + '/' + competition.repo + '/' + competition.configFile; + fs.readFile(fileName, onFileRead); - responsesReceived++; + function onFileRead(err, pData) { - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + try { - let configObj = JSON.parse(pData); + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> fileName = " + fileName); } - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + responsesReceived++; - configObj.repo = competition.repo; - configObj.configFile = competition.configFile; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - host.competitions[j] = configObj; + let configObj = JSON.parse(pData); - if (requestsSent === responsesReceived) { + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - readBotsAndPlottersConfig(); + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readBotsAndPlottersConfig(); + + } + } + catch (err) { + console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } } - } catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> onDataArrived -> Error = " + err); + console.log("[ERROR] initialize -> readCompetitionsConfig -> File System -> File = " + fileName + " Error = " + err); } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> Entering Case."); } + + getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> competition.repo = " + competition.repo); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readBotsAndPlottersConfig(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Error = " + err); + } + } + + break; } } } From cda51a128f44b31b25317eefe285f18367ad8713 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 11:02:05 +0200 Subject: [PATCH 018/334] Competition Plotters read from Cloud Storage --- server.js | 127 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 92 insertions(+), 35 deletions(-) diff --git a/server.js b/server.js index 6beb325fb..4c1ede4ac 100644 --- a/server.js +++ b/server.js @@ -361,7 +361,7 @@ function initialize() { } } - /* In this second section we will load the plotters configurations. */ + /* In this second section we will load the competition plotters configurations. */ for (let j = 0; j < host.plotters.length; j++) { @@ -369,20 +369,23 @@ function initialize() { requestsSent++; - if (serverConfig.localMode === true) { + switch (serverConfig.storage.source) { - let fs = require('fs'); - try { - let fileName = '../Plotters/' + host.codeName + '/' + plotter.repo + '/' + plotter.configFile; - fs.readFile(fileName, onFileRead); + case 'Cloud': { - function onFileRead(err, pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> Entering Case."); } + + getStorageData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onFileRead -> fileName = " + fileName); } - + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } + responsesReceived++; pData = pData.toString(); @@ -402,54 +405,108 @@ function initialize() { readBotsAndPlottersConfig(); } + } catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Error = " + err); } - } - } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> File = " + fileName + " Error = " + err); + + break; } - } else { + case 'File System': { - getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) - - function onDataArrived(pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> Entering Case."); } try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> onDataArrived -> pData = " + pData); } + let fs = require('fs'); - responsesReceived++; + let fileName = '../Plotters/' + host.codeName + '/' + plotter.repo + '/' + plotter.configFile; + fs.readFile(fileName, onFileRead); - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + function onFileRead(err, pData) { - let configObj = JSON.parse(pData); + try { - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> fileName = " + fileName); } - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; + responsesReceived++; - host.plotters[j] = configObj; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - if (requestsSent === responsesReceived) { + let configObj = JSON.parse(pData); - readBotsAndPlottersConfig(); + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + host.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + readBotsAndPlottersConfig(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readCompetitionsConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } } - } catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> onDataArrived -> Error = " + err); + console.log("[ERROR] initialize -> readCompetitionsConfig -> File System -> File = " + fileName + " Error = " + err); } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> Entering Case."); } + + getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + host.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + readBotsAndPlottersConfig(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Error = " + err); + } + } + break; } } } From 673542f87588c4eecad22f6dfa1671d9303e2e76 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 12:15:11 +0200 Subject: [PATCH 019/334] Bots and bots plotters configurations read from storage --- Panels/ProductsPanel.js | 75 ++++---- server.js | 415 ++++++++++++++++++++++++++-------------- 2 files changed, 315 insertions(+), 175 deletions(-) diff --git a/Panels/ProductsPanel.js b/Panels/ProductsPanel.js index e02f31910..9c853cdf1 100644 --- a/Panels/ProductsPanel.js +++ b/Panels/ProductsPanel.js @@ -57,59 +57,62 @@ let bot = devTeam.bots[j]; - for (let k = 0; k < bot.products.length; k++) { + if (bot.products !== undefined) { - let product = bot.products[k]; + for (let k = 0; k < bot.products.length; k++) { - /* Now we create Product objects */ + let product = bot.products[k]; - let productCard = newProductCard(); + /* Now we create Product objects */ - productCard.devTeam = devTeam; - productCard.bot = bot; - productCard.product = product; + let productCard = newProductCard(); - productCard.code = devTeam.codeName + '-' + bot.codeName + '-' + product.codeName; + productCard.devTeam = devTeam; + productCard.bot = bot; + productCard.product = product; - /* Initialize it */ + productCard.code = devTeam.codeName + '-' + bot.codeName + '-' + product.codeName; - productCard.initialize(); + /* Initialize it */ - /* Container Stuff */ + productCard.initialize(); - productCard.container.displacement.parentDisplacement = thisObject.container.displacement; - productCard.container.frame.parentFrame = thisObject.container.frame; - productCard.container.parentContainer = thisObject.container; - productCard.container.isWheelable = true; + /* Container Stuff */ - /* Positioning within thisObject Panel */ + productCard.container.displacement.parentDisplacement = thisObject.container.displacement; + productCard.container.frame.parentFrame = thisObject.container.frame; + productCard.container.parentContainer = thisObject.container; + productCard.container.isWheelable = true; - let position = { - x: 10, - y: thisObject.container.frame.height - thisObject.container.frame.getBodyHeight() - }; - productCard.container.frame.position.x = position.x; - productCard.container.frame.position.y = position.y + lastY; + /* Positioning within thisObject Panel */ - lastY = lastY + productCard.container.frame.height; + let position = { + x: 10, + y: thisObject.container.frame.height - thisObject.container.frame.getBodyHeight() + }; + productCard.container.frame.position.x = position.x; + productCard.container.frame.position.y = position.y + lastY; - /* Add to Visible Product Array */ + lastY = lastY + productCard.container.frame.height; - if (lastY < thisObject.container.frame.height) { + /* Add to Visible Product Array */ - visibleProductCards.push(productCard); + if (lastY < thisObject.container.frame.height) { + + visibleProductCards.push(productCard); + + } + + /* Add to the Product Array */ + + productCards.push(productCard); + + /* Listen to Status Changes Events */ + + productCard.container.eventHandler.listenToEvent('Status Changed', onProductCardStatusChanged); + productCard.container.eventHandler.listenToEvent('Mouse Wheel', onMouseWheel); } - - /* Add to the Product Array */ - - productCards.push(productCard); - - /* Listen to Status Changes Events */ - - productCard.container.eventHandler.listenToEvent('Status Changed', onProductCardStatusChanged); - productCard.container.eventHandler.listenToEvent('Mouse Wheel', onMouseWheel); - } } } diff --git a/server.js b/server.js index 4c1ede4ac..ffa9c0bc5 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,5 @@ const CONSOLE_LOG = true; +const LOG_FILE_CONTENT = false; if (CONSOLE_LOG === true) { console.log("[INFO] Node Server Starting."); } @@ -172,34 +173,6 @@ function initialize() { } } - function switchTemplate() { - - switch (serverConfig.storage.source) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } - - break; - } - - case 'File System': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } - - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } - - break; - } - } - - } - function readCompetitionsConfig() { try { @@ -236,7 +209,7 @@ function initialize() { if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Entering function."); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -328,7 +301,7 @@ function initialize() { if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Entering function."); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> host.codeName = " + host.codeName); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> competition.repo = " + competition.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -384,7 +357,7 @@ function initialize() { if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Entering function."); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -479,7 +452,7 @@ function initialize() { if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Entering function."); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> host.codeName = " + host.codeName); } if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -517,6 +490,34 @@ function initialize() { } } + function switchTemplate() { + + switch (serverConfig.storage.source) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } + + break; + } + } + + } + function readBotsAndPlottersConfig() { try { @@ -548,19 +549,123 @@ function initialize() { requestsSent++; - if (serverConfig.localMode === true) { + switch (serverConfig.storage.source) { - let fs = require('fs'); - try { - let fileName = '../Bots/' + devTeam.codeName + '/' + bot.repo + '/' + bot.configFile; - fs.readFile(fileName, onFileRead); + case 'Cloud': { - function onFileRead(err, pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> Entering Case."); } + + getStorageData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + + function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onFileRead -> fileName = " + fileName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; + + addStoragePermissions(configObj); + + devTeam.bots[j] = configObj; + + } + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Error = " + err); + } + } + break; + } + + case 'File System': { + + try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> Entering Case."); } + + let fs = require('fs'); + + let fileName = '../Bots/' + devTeam.codeName + '/' + bot.repo + '/' + bot.configFile; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> fileName = " + fileName); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; + + addStoragePermissions(configObj); + + devTeam.bots[j] = configObj; + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File System -> File = " + fileName + " Error = " + err); + } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> Entering Case."); } + + getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -583,56 +688,13 @@ function initialize() { startHtttpServer(); } + } catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Error = " + err); } - - } - } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File = " + fileName + " Error = " + err); - } - - } else { - - getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> bot.repo = " + bot.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = bot.repo; - configObj.configFile = bot.configFile; - - addStoragePermissions(configObj); - - devTeam.bots[j] = configObj; - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> onDataArrived -> Error = " + err); } + break; } } } @@ -645,19 +707,117 @@ function initialize() { requestsSent++; - if (serverConfig.localMode === true) { + switch (serverConfig.storage.source) { - let fs = require('fs'); - try { - let fileName = '../Plotters/' + devTeam.codeName + '/' + plotter.repo + '/' + plotter.configFile; - fs.readFile(fileName, onFileRead); + case 'Cloud': { - function onFileRead(err, pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> Entering Case."); } + + getStorageData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onFileRead -> fileName = " + fileName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + } + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Error = " + err); + } + } + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> Entering Case."); } + + try { + + let fs = require('fs'); + + let fileName = '../Plotters/' + devTeam.codeName + '/' + plotter.repo + '/' + plotter.configFile; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> fileName = " + fileName); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + } + } + catch (err) { + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> Entering Case."); } + + getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -678,53 +838,13 @@ function initialize() { startHtttpServer(); } + } catch (err) { - console.log("[ERROR] initialize -> readPlottersConfig -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Error = " + err); } } - } - catch (err) { - console.log("[ERROR] initialize -> readPlottersConfig -> File = " + fileName + " Error = " + err); - } - - } else { - - getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - devTeam.plotters[j] = configObj; - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> onDataArrived -> Error = " + err); - } + break; } } } @@ -1484,6 +1604,9 @@ function getStorageData(pOrg, pRepo, pPath, callBackFunction) { try { if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pOrg = " + pOrg); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pRepo = " + pRepo); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pPath = " + pPath); } let cacheVersion = storageData.get(pOrg + '.' + pRepo + '.' + pPath) @@ -1508,11 +1631,25 @@ function getStorageData(pOrg, pRepo, pPath, callBackFunction) { try { if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onContent -> err = " + JSON.stringify(err)); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onContent -> response = " + JSON.stringify(response)); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] getStorageData -> onFileReceived -> response = " + JSON.stringify(response)); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pOrg = " + pOrg); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pRepo = " + pRepo); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pPath = " + pPath); } storageData.set(pOrg + '.' + pRepo + '.' + pPath, text); + if (err !== null || text === null) { + + console.log("[ERROR] getStorageData -> onFileReceived -> Error Received from Storage Library. "); + console.log("[ERROR] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); + console.log("[ERROR] getStorageData -> onFileReceived -> Returning an empty JSON object string. "); + + callBackFunction("{}"); + return; + + } + callBackFunction(text); } catch (err) { From 034582a1e9c2688e199c44ddc7f95e82bf9e32cb Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 12:54:11 +0200 Subject: [PATCH 020/334] Error Handling and code tidyness improvements --- server.js | 872 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 448 insertions(+), 424 deletions(-) diff --git a/server.js b/server.js index ffa9c0bc5..716190067 100644 --- a/server.js +++ b/server.js @@ -99,7 +99,7 @@ function initialize() { ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readCompetitionsConfig(); + readHostsConfigs(); } catch (err) { console.log("[ERROR] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); @@ -128,7 +128,7 @@ function initialize() { ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readCompetitionsConfig(); + readHostsConfigs(); } catch (err) { console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); @@ -158,7 +158,7 @@ function initialize() { ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readCompetitionsConfig(); + readHostsConfigs(); } catch (err) { console.log("[ERROR] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); @@ -173,11 +173,11 @@ function initialize() { } } - function readCompetitionsConfig() { + function readHostsConfigs() { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> Entering function."); } let requestsSent = 0; let responsesReceived = 0; @@ -186,343 +186,340 @@ function initialize() { let host = ecosystemObject.hosts[i]; - /* In this first section we will load the competitions configurations. */ + getCompetitions(); + getPlotters(); - for (let j = 0; j < host.competitions.length; j++) { + function getCompetitions() { - let competition = host.competitions[j]; + try { - requestsSent++; + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Entering function."); } - switch (serverConfig.storage.source) { + /* In this first section we will load the competitions configurations. */ - case 'Cloud': { + for (let j = 0; j < host.competitions.length; j++) { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> Entering Case."); } + let competition = host.competitions[j]; - getStorageData(host.codeName, competition.repo, competition.configFile, onDataArrived) + requestsSent++; - function onDataArrived(pData) { + switch (serverConfig.storage.source) { - try { + case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> Entering Case."); } - responsesReceived++; + getStorageData(host.codeName, competition.repo, competition.configFile, onDataArrived) - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + function onDataArrived(pData) { - let configObj = JSON.parse(pData); + try { - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> pData = " + pData); } - configObj.repo = competition.repo; - configObj.configFile = competition.configFile; + responsesReceived++; - host.competitions[j] = configObj; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - if (requestsSent === responsesReceived) { + let configObj = JSON.parse(pData); - readBotsAndPlottersConfig(); + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Error = " + err); + } } - + break; } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Error = " + err); - } - } - break; - } - case 'File System': { - - try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> Entering Case."); } - - let fs = require('fs'); - - let fileName = '../Competitions/' + host.codeName + '/' + competition.repo + '/' + competition.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { + case 'File System': { try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> Entering Case."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> fileName = " + fileName); } + let fs = require('fs'); - responsesReceived++; + let fileName = '../Competitions/' + host.codeName + '/' + competition.repo + '/' + competition.configFile; + fs.readFile(fileName, onFileRead); - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + function onFileRead(err, pData) { - let configObj = JSON.parse(pData); + try { - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> fileName = " + fileName); } - configObj.repo = competition.repo; - configObj.configFile = competition.configFile; + responsesReceived++; - host.competitions[j] = configObj; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - if (requestsSent === responsesReceived) { + let configObj = JSON.parse(pData); - readBotsAndPlottersConfig(); + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + } + catch (err) { + console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } } } catch (err) { - console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); - } - } - } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> File System -> File = " + fileName + " Error = " + err); - } - - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> Entering Case."); } - - getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> competition.repo = " + competition.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = competition.repo; - configObj.configFile = competition.configFile; - - host.competitions[j] = configObj; - - if (requestsSent === responsesReceived) { - - readBotsAndPlottersConfig(); - + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> File System -> File = " + fileName + " Error = " + err); } + break; } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Error = " + err); + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> Entering Case."); } + + getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> competition.repo = " + competition.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Error = " + err); + } + } + + break; } } - - break; } } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> getCompetitions -> Error = " + err); + } } - /* In this second section we will load the competition plotters configurations. */ + function getPlotters() { - for (let j = 0; j < host.plotters.length; j++) { + try { - let plotter = host.plotters[j]; + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> getPlotters -> Entering function."); } - requestsSent++; + /* In this second section we will load the competition plotters configurations. */ - switch (serverConfig.storage.source) { + for (let j = 0; j < host.plotters.length; j++) { - case 'Cloud': { + let plotter = host.plotters[j]; - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> Entering Case."); } + requestsSent++; - getStorageData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + switch (serverConfig.storage.source) { - function onDataArrived(pData) { + case 'Cloud': { - try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> Entering Case."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> pData = " + pData); } + getStorageData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) - responsesReceived++; + function onDataArrived(pData) { - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + try { - let configObj = JSON.parse(pData); + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + responsesReceived++; - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - host.plotters[j] = configObj; + let configObj = JSON.parse(pData); - if (requestsSent === responsesReceived) { + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - readBotsAndPlottersConfig(); + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + host.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); + } } + break; } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> Cloud -> onDataArrived -> Error = " + err); - } - } - break; - } + case 'File System': { - case 'File System': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> Entering Case."); } - - try { - - let fs = require('fs'); - - let fileName = '../Plotters/' + host.codeName + '/' + plotter.repo + '/' + plotter.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> Entering Case."); } try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> File System -> onFileRead -> fileName = " + fileName); } + let fs = require('fs'); - responsesReceived++; + let fileName = '../Plotters/' + host.codeName + '/' + plotter.repo + '/' + plotter.configFile; + fs.readFile(fileName, onFileRead); - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + function onFileRead(err, pData) { - let configObj = JSON.parse(pData); + try { - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; + responsesReceived++; - host.plotters[j] = configObj; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - if (requestsSent === responsesReceived) { + let configObj = JSON.parse(pData); - readBotsAndPlottersConfig(); + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + host.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } } } catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> File = " + fileName + " Error = " + err); } + break; } - } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> File System -> File = " + fileName + " Error = " + err); - } - break; - } + case 'Github': { - case 'Github': { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> Entering Case."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> Entering Case."); } + getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) - getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + function onDataArrived(pData) { - function onDataArrived(pData) { + try { - try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> pData = " + pData); } + responsesReceived++; - responsesReceived++; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + let configObj = JSON.parse(pData); - let configObj = JSON.parse(pData); + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; + host.plotters[j] = configObj; - host.plotters[j] = configObj; + if (requestsSent === responsesReceived) { - if (requestsSent === responsesReceived) { + readDevTeamsConfigs(); - readBotsAndPlottersConfig(); + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); + } } - - } - catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> Github -> onDataArrived -> Error = " + err); + break; } } - break; } } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> getCompetitions -> Error = " + err); + } } } } catch (err) { - console.log("[ERROR] initialize -> readCompetitionsConfig -> Error = " + err); + console.log("[ERROR] initialize -> readHostsConfigs -> Error = " + err); } } - function switchTemplate() { - - switch (serverConfig.storage.source) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } - - break; - } - - case 'File System': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } - - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } - - break; - } - } - - } - - function readBotsAndPlottersConfig() { + function readDevTeamsConfigs() { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> Entering function."); } /* @@ -541,311 +538,338 @@ function initialize() { let devTeam = ecosystemObject.devTeams[i]; - /* In the next section we are loading the bots configurations. */ + getBots(); + getPlotters(); - for (let j = 0; j < devTeam.bots.length; j++) { + function getBots() { - let bot = devTeam.bots[j]; + try { - requestsSent++; + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Entering function."); } - switch (serverConfig.storage.source) { + /* In the next section we are loading the bots configurations. */ - case 'Cloud': { + for (let j = 0; j < devTeam.bots.length; j++) { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> Entering Case."); } + let bot = devTeam.bots[j]; - getStorageData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + requestsSent++; - function onDataArrived(pData) { + switch (serverConfig.storage.source) { - try { + case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> bot.repo = " + bot.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> Entering Case."); } - responsesReceived++; + getStorageData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) - if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. + function onDataArrived(pData) { - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + try { - let configObj = JSON.parse(pData); + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> pData = " + pData); } - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + responsesReceived++; - configObj.repo = bot.repo; - configObj.configFile = bot.configFile; + if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. - addStoragePermissions(configObj); + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - devTeam.bots[j] = configObj; + let configObj = JSON.parse(pData); + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; + + addStoragePermissions(configObj); + + devTeam.bots[j] = configObj; + + } + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Error = " + err); + } } - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - + break; } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Error = " + err); - } - } - break; - } - case 'File System': { - - try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> Entering Case."); } - - let fs = require('fs'); - - let fileName = '../Bots/' + devTeam.codeName + '/' + bot.repo + '/' + bot.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { + case 'File System': { try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> Entering Case."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> fileName = " + fileName); } + let fs = require('fs'); - responsesReceived++; + let fileName = '../Bots/' + devTeam.codeName + '/' + bot.repo + '/' + bot.configFile; + fs.readFile(fileName, onFileRead); - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + function onFileRead(err, pData) { - let configObj = JSON.parse(pData); + try { - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> fileName = " + fileName); } - configObj.repo = bot.repo; - configObj.configFile = bot.configFile; + responsesReceived++; - addStoragePermissions(configObj); + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - devTeam.bots[j] = configObj; + let configObj = JSON.parse(pData); - if (requestsSent === responsesReceived) { + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - startHtttpServer(); + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; + + addStoragePermissions(configObj); + + devTeam.bots[j] = configObj; + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } } } catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> File = " + fileName + " Error = " + err); } + break; } - } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File System -> File = " + fileName + " Error = " + err); - } - break; - } + case 'Github': { - case 'Github': { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> Entering Case."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> Entering Case."); } + getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) - getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + function onDataArrived(pData) { - function onDataArrived(pData) { + try { - try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> pData = " + pData); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> bot.repo = " + bot.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> pData = " + pData); } + responsesReceived++; - responsesReceived++; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + let configObj = JSON.parse(pData); - let configObj = JSON.parse(pData); + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; - configObj.repo = bot.repo; - configObj.configFile = bot.configFile; + addStoragePermissions(configObj); - addStoragePermissions(configObj); + devTeam.bots[j] = configObj; - devTeam.bots[j] = configObj; + if (requestsSent === responsesReceived) { - if (requestsSent === responsesReceived) { + startHtttpServer(); - startHtttpServer(); + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Error = " + err); + } } - - } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Error = " + err); + break; } } - break; } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Error = " + err); } } - /* In the next section we are loading the plotters configurations. */ + function getPlotters() { - for (let j = 0; j < devTeam.plotters.length; j++) { + try { - let plotter = devTeam.plotters[j]; + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Entering Function."); } - requestsSent++; + /* In the next section we are loading the plotters configurations. */ - switch (serverConfig.storage.source) { + for (let j = 0; j < devTeam.plotters.length; j++) { - case 'Cloud': { + let plotter = devTeam.plotters[j]; - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> Entering Case."); } + requestsSent++; - getStorageData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + switch (serverConfig.storage.source) { - function onDataArrived(pData) { + case 'Cloud': { - try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> Entering Case."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> pData = " + pData); } + getStorageData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) - responsesReceived++; + function onDataArrived(pData) { - if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. + try { - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } - let configObj = JSON.parse(pData); + responsesReceived++; - /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - devTeam.plotters[j] = configObj; - - } - - if (requestsSent === responsesReceived) { - - startHtttpServer(); + let configObj = JSON.parse(pData); + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + } + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); + } } + break; } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Cloud -> onDataArrived -> Error = " + err); - } - } - break; - } - case 'File System': { + case 'File System': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> Entering Case."); } - - try { - - let fs = require('fs'); - - let fileName = '../Plotters/' + devTeam.codeName + '/' + plotter.repo + '/' + plotter.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> Entering Case."); } try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> fileName = " + fileName); } + let fs = require('fs'); - responsesReceived++; + let fileName = '../Plotters/' + devTeam.codeName + '/' + plotter.repo + '/' + plotter.configFile; + fs.readFile(fileName, onFileRead); - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. + function onFileRead(err, pData) { - let configObj = JSON.parse(pData); + try { - /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; + responsesReceived++; - devTeam.plotters[j] = configObj; + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. - if (requestsSent === responsesReceived) { + let configObj = JSON.parse(pData); - startHtttpServer(); + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } } } catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File = " + fileName + " Error = " + err); } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> Entering Case."); } + + getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + startHtttpServer(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); + } + } + break; } } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> File = " + fileName + " Error = " + err); - } - break; } - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> Entering Case."); } - - getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - devTeam.plotters[j] = configObj; - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Github -> onDataArrived -> Error = " + err); - } - } - break; - } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Error = " + err); } } } @@ -854,7 +878,7 @@ function initialize() { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readBotsAndPlottersConfig -> addStoragePermissions -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Entering function."); } if (pConfigObj.storage !== undefined) { return; } // If this information is at the config file, then we take it, otherwise, we define it here. @@ -887,13 +911,13 @@ function initialize() { } catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> addStoragePermissions -> Error = " + err); + console.log("[ERROR] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readBotsAndPlottersConfig -> Error = " + err); + console.log("[ERROR] initialize -> readDevTeamsConfigs -> Error = " + err); } } } From cb8515f806bd34c53d37d5cf8967b2cdcc9f6a78 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 13:56:15 +0200 Subject: [PATCH 021/334] sas moved to config file --- server.js | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/server.js b/server.js index 716190067..3d79359b6 100644 --- a/server.js +++ b/server.js @@ -1,5 +1,5 @@ -const CONSOLE_LOG = true; -const LOG_FILE_CONTENT = false; +let CONSOLE_LOG = false; +let LOG_FILE_CONTENT = false; if (CONSOLE_LOG === true) { console.log("[INFO] Node Server Starting."); } @@ -22,6 +22,11 @@ function initialize() { if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> Entering function."); } + /* Clear all cached information. */ + + githubData = new Map; + storageData = new Map; + readServerConfig(); function readServerConfig() { @@ -48,6 +53,9 @@ function initialize() { serverConfig = JSON.parse(fileText); + CONSOLE_LOG = serverConfig.webServerLog.console; + LOG_FILE_CONTENT = serverConfig.webServerLog.fileContent; + readEcosystemConfig(); } catch (err) { @@ -67,12 +75,6 @@ function initialize() { if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Entering function."); } - if (CONSOLE_LOG === true && serverConfig.localMode === true) { - - console.log("Hey! if you expect this to run at the web server I have some bad news for you son, serverConfig.localMode is true, that means the server wont find your local files. "); - - } - /* This configuration file is the backbone of the system. The first file we are going to get is a template where other configurations are @@ -81,7 +83,7 @@ function initialize() { */ - switch (serverConfig.storage.source) { + switch (serverConfig.configurationStorage.source) { case 'Cloud': { @@ -203,7 +205,7 @@ function initialize() { requestsSent++; - switch (serverConfig.storage.source) { + switch (serverConfig.configurationStorage.source) { case 'Cloud': { @@ -362,7 +364,7 @@ function initialize() { requestsSent++; - switch (serverConfig.storage.source) { + switch (serverConfig.configurationStorage.source) { case 'Cloud': { @@ -555,7 +557,7 @@ function initialize() { requestsSent++; - switch (serverConfig.storage.source) { + switch (serverConfig.configurationStorage.source) { case 'Cloud': { @@ -725,7 +727,7 @@ function initialize() { requestsSent++; - switch (serverConfig.storage.source) { + switch (serverConfig.configurationStorage.source) { case 'Cloud': { @@ -889,16 +891,16 @@ function initialize() { case "Develop": { - fileUri = "https://aadevelop.blob.core.windows.net"; - sas = "?sv=2017-07-29&ss=b&srt=sco&sp=rl&se=2019-01-01T17:39:27Z&st=2018-05-01T08:39:27Z&spr=https,http&sig=9atUljJam0E8zMg1VWQ0bGj2FqGYwtPIbImy5xyBMhE%3D" + fileUri = serverConfig.productsStorage.Develop.fileUri; + sas = serverConfig.productsStorage.Develop.sas; break; } case "Production": { - fileUri = "https://aaproduction.blob.core.windows.net"; - sas = "?sv=2017-07-29&ss=b&srt=sco&sp=rl&se=2019-01-01T03:17:16Z&st=2018-05-01T18:17:16Z&spr=https,http&sig=Ok4l7YxZlduPJrX31Y%2FHyajzxCHRnfEnTkoiRsYDXhk%3D" + fileUri = serverConfig.productsStorage.Production.fileUri; + sas = serverConfig.productsStorage.Production.sas; break; } @@ -949,14 +951,11 @@ function onBrowserRequest(request, response) { switch (requestParameters[1]) { - case "clear-cache": { - - githubData = new Map; - storageData = new Map; + case serverConfig.reinitializeCommand: { initialize(); - respondWithContent("command acepted", response); + respondWithContent("Node JS Server Reinitilized.", response); } break; @@ -1645,7 +1644,7 @@ function getStorageData(pOrg, pRepo, pPath, callBackFunction) { if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } let storage = require('azure-storage'); - let blobService = storage.createBlobService(serverConfig.storage.connectionString); + let blobService = storage.createBlobService(serverConfig.configurationStorage.connectionString); blobService.getBlobToText('aaplatform', pOrg + "/" + pRepo + "/" + pPath, onFileReceived); From 136d8cab53814ef4df705af46328a56a9bd424e6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 14:16:33 +0200 Subject: [PATCH 022/334] localMode depreceted --- server.js | 79 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 12 deletions(-) diff --git a/server.js b/server.js index 3d79359b6..75e2bcc1c 100644 --- a/server.js +++ b/server.js @@ -959,6 +959,7 @@ function onBrowserRequest(request, response) { } break; + case "Plotter.js": { /* @@ -1183,18 +1184,45 @@ function onBrowserRequest(request, response) { case "Plotters": // This means the plotter folder, not to be confused with the Plotters script! { - if (serverConfig.localMode === true) { + switch (serverConfig.configurationStorage.source) { - respondWithFile('../Plotters/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response); + case 'Cloud': { - } else { + if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } - getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) - function onDataArrived(pData) { + function onDataArrived(pData) { - respondWithContent(pData, response); + respondWithContent(pData, response); + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } + + respondWithFile('../Plotters/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response); + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } + + getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + + function onDataArrived(pData) { + + respondWithContent(pData, response); + + } + + break; } } } @@ -1203,18 +1231,45 @@ function onBrowserRequest(request, response) { case "PlotterPanels": // This means the PlotterPanels folder, not to be confused with the Plotter Panels scripts! { - if (serverConfig.localMode === true) { + switch (serverConfig.configurationStorage.source) { - respondWithFile('../Plotters/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response); + case 'Cloud': { - } else { + if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } - getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) - function onDataArrived(pData) { + function onDataArrived(pData) { - respondWithContent(pData, response); + respondWithContent(pData, response); + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } + + respondWithFile('../Plotters/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response); + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } + + getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + + function onDataArrived(pData) { + + respondWithContent(pData, response); + + } + + break; } } } From c864505217fd8cc052670c4ba95dc965ae6aff4f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 14:51:21 +0200 Subject: [PATCH 023/334] Final Touches to the Server --- server.js | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/server.js b/server.js index 75e2bcc1c..41366bee4 100644 --- a/server.js +++ b/server.js @@ -83,7 +83,7 @@ function initialize() { */ - switch (serverConfig.configurationStorage.source) { + switch (serverConfig.configAndPlugins.Location) { case 'Cloud': { @@ -205,7 +205,7 @@ function initialize() { requestsSent++; - switch (serverConfig.configurationStorage.source) { + switch (serverConfig.configAndPlugins.Location) { case 'Cloud': { @@ -364,7 +364,7 @@ function initialize() { requestsSent++; - switch (serverConfig.configurationStorage.source) { + switch (serverConfig.configAndPlugins.Location) { case 'Cloud': { @@ -557,7 +557,7 @@ function initialize() { requestsSent++; - switch (serverConfig.configurationStorage.source) { + switch (serverConfig.configAndPlugins.Location) { case 'Cloud': { @@ -727,7 +727,7 @@ function initialize() { requestsSent++; - switch (serverConfig.configurationStorage.source) { + switch (serverConfig.configAndPlugins.Location) { case 'Cloud': { @@ -1184,7 +1184,7 @@ function onBrowserRequest(request, response) { case "Plotters": // This means the plotter folder, not to be confused with the Plotters script! { - switch (serverConfig.configurationStorage.source) { + switch (serverConfig.configAndPlugins.Location) { case 'Cloud': { @@ -1231,7 +1231,7 @@ function onBrowserRequest(request, response) { case "PlotterPanels": // This means the PlotterPanels folder, not to be confused with the Plotter Panels scripts! { - switch (serverConfig.configurationStorage.source) { + switch (serverConfig.configAndPlugins.Location) { case 'Cloud': { @@ -1699,7 +1699,24 @@ function getStorageData(pOrg, pRepo, pPath, callBackFunction) { if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } let storage = require('azure-storage'); - let blobService = storage.createBlobService(serverConfig.configurationStorage.connectionString); + let connectionString; + + switch (serverConfig.environment) { + + case "Develop": { + + connectionString = serverConfig.configAndPlugins.Develop.connectionString; + break; + } + + case "Production": { + + connectionString = serverConfig.configAndPlugins.Production.connectionString; + break; + } + } + + let blobService = storage.createBlobService(connectionString); blobService.getBlobToText('aaplatform', pOrg + "/" + pRepo + "/" + pPath, onFileReceived); From 41d794fe763b45470d9f5d19ca4223a7e8421a24 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 19:32:00 +0200 Subject: [PATCH 024/334] Debug de server --- server.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index 41366bee4..e234ae18c 100644 --- a/server.js +++ b/server.js @@ -1,5 +1,5 @@ -let CONSOLE_LOG = false; -let LOG_FILE_CONTENT = false; +let CONSOLE_LOG = true; +let LOG_FILE_CONTENT = true; if (CONSOLE_LOG === true) { console.log("[INFO] Node Server Starting."); } @@ -53,6 +53,8 @@ function initialize() { serverConfig = JSON.parse(fileText); + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readServerConfig -> onFileRead -> fileText = " + fileText); } + CONSOLE_LOG = serverConfig.webServerLog.console; LOG_FILE_CONTENT = serverConfig.webServerLog.fileContent; From ff1a3679d9e97ad093c6b03de12e435828731bae Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 May 2018 19:46:17 +0200 Subject: [PATCH 025/334] Default logging to false --- server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index e234ae18c..26c3c9067 100644 --- a/server.js +++ b/server.js @@ -1,5 +1,5 @@ -let CONSOLE_LOG = true; -let LOG_FILE_CONTENT = true; +let CONSOLE_LOG = false; +let LOG_FILE_CONTENT = false; if (CONSOLE_LOG === true) { console.log("[INFO] Node Server Starting."); } From 8e07dd2ef41fa65ad857c5afe4793b8e50ec53c9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 May 2018 10:35:06 +0200 Subject: [PATCH 026/334] New Plotters appear OFF by default. Correction on mouse wheel direction. --- Panels/ProductsPanel.js | 5 +++-- ProductCard.js | 2 +- server.js | 48 +++++++++++++++++++++++------------------ 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/Panels/ProductsPanel.js b/Panels/ProductsPanel.js index 9c853cdf1..736e1c254 100644 --- a/Panels/ProductsPanel.js +++ b/Panels/ProductsPanel.js @@ -90,6 +90,7 @@ x: 10, y: thisObject.container.frame.height - thisObject.container.frame.getBodyHeight() }; + productCard.container.frame.position.x = position.x; productCard.container.frame.position.y = position.y + lastY; @@ -125,9 +126,9 @@ function onMouseWheel(pDelta) { if (pDelta > 0) { - pDelta = 1; - } else { pDelta = -1; + } else { + pDelta = 1; } firstVisibleCard = firstVisibleCard + pDelta; diff --git a/ProductCard.js b/ProductCard.js index b4de94894..c385eff40 100644 --- a/ProductCard.js +++ b/ProductCard.js @@ -115,7 +115,7 @@ } else { - changeStatusTo(PRODUCT_CARD_STATUS.LOADING); // This happens the first time the app is run on a new browser. + changeStatusTo(PRODUCT_CARD_STATUS.OFF); // This happens the first time the app is run on a new browser. } diff --git a/server.js b/server.js index 26c3c9067..d4a941aa9 100644 --- a/server.js +++ b/server.js @@ -1360,37 +1360,43 @@ function onBrowserRequest(request, response) { let plotter = devTeam.plotters[j]; - for (let k = 0; k < plotter.modules.length; k++) { + if (plotter.modules !== undefined) { - let module = plotter.modules[k]; + for (let k = 0; k < plotter.modules.length; k++) { - let htmlLineCopy = htmlLinePlotter; + let module = plotter.modules[k]; - let stringToInsert; - stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); - stringToInsert = stringToInsert.replace('@repo@', plotter.repo); - stringToInsert = stringToInsert.replace('@module@', module.moduleName); - - let firstPart = fileContent.substring(0, fileContent.indexOf('') + 15); - let secondPart = fileContent.substring(fileContent.indexOf('') + 15); - - fileContent = firstPart + stringToInsert + secondPart; - - for (let l = 0; l < module.panels.length; l++) { - - let panel = module.panels[l]; - - let htmlLineCopy = htmlLinePlotterPanel; + let htmlLineCopy = htmlLinePlotter; let stringToInsert; stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); stringToInsert = stringToInsert.replace('@repo@', plotter.repo); - stringToInsert = stringToInsert.replace('@module@', panel.moduleName); + stringToInsert = stringToInsert.replace('@module@', module.moduleName); - let firstPart = fileContent.substring(0, fileContent.indexOf('') + 20); - let secondPart = fileContent.substring(fileContent.indexOf('') + 20); + let firstPart = fileContent.substring(0, fileContent.indexOf('') + 15); + let secondPart = fileContent.substring(fileContent.indexOf('') + 15); fileContent = firstPart + stringToInsert + secondPart; + + if (module.panels !== undefined) { + + for (let l = 0; l < module.panels.length; l++) { + + let panel = module.panels[l]; + + let htmlLineCopy = htmlLinePlotterPanel; + + let stringToInsert; + stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); + stringToInsert = stringToInsert.replace('@repo@', plotter.repo); + stringToInsert = stringToInsert.replace('@module@', panel.moduleName); + + let firstPart = fileContent.substring(0, fileContent.indexOf('') + 20); + let secondPart = fileContent.substring(fileContent.indexOf('') + 20); + + fileContent = firstPart + stringToInsert + secondPart; + } + } } } } From 395383e6302aa29b840ee0a10dfded611c86d446 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 May 2018 10:54:33 +0200 Subject: [PATCH 027/334] BUG with images not found of bots in CHROME --- ProductCard.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ProductCard.js b/ProductCard.js index c385eff40..6d8ed4d89 100644 --- a/ProductCard.js +++ b/ProductCard.js @@ -344,8 +344,11 @@ teamImagePoint = thisObject.container.frame.frameThisPoint(teamImagePoint); let teamImage = document.getElementById(thisObject.bot.devTeam + ".png"); - browserCanvasContext.drawImage(teamImage, teamImagePoint.x, teamImagePoint.y, devTeamImageSize, devTeamImageSize); + if (teamImage.naturalHeight !== 0) { + browserCanvasContext.drawImage(teamImage, teamImagePoint.x, teamImagePoint.y, devTeamImageSize, devTeamImageSize); + } + /* Second the Bot's Profile Picture. */ if (thisObject.bot.profilePicture !== undefined) { @@ -359,8 +362,10 @@ let imageId = thisObject.bot.devTeam + "." + thisObject.bot.profilePicture; let botImage = document.getElementById(imageId); - browserCanvasContext.drawImage(botImage, botImagePoint.x, botImagePoint.y, botImageSize, botImageSize); + if (botImage.naturalHeight !== 0) { + browserCanvasContext.drawImage(botImage, botImagePoint.x, botImagePoint.y, botImageSize, botImageSize); + } } /* Third the Plotter's Profile Picture. */ @@ -376,8 +381,10 @@ let imageId = thisObject.product.plotter.devTeam + "." + thisObject.product.plotter.codeName + "." + thisObject.product.plotter.moduleName + "." + thisObject.product.plotter.profilePicture; let plotterImage = document.getElementById(imageId); - browserCanvasContext.drawImage(plotterImage, plotterImagePoint.x, plotterImagePoint.y, plotterImageSize.width, plotterImageSize.height); + if (plotterImage.naturalHeight !== 0) { + browserCanvasContext.drawImage(plotterImage, plotterImagePoint.x, plotterImagePoint.y, plotterImageSize.width, plotterImageSize.height); + } } From 50678bc119b6aa48c051f10e7337ef070854fba7 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 May 2018 17:52:37 +0200 Subject: [PATCH 028/334] Re Implemented Mechanism to remember user position --- Canvas.js | 4 -- ChartGrid.js | 2 +- Dashboard.js | 4 +- Panels/TimeControlPanel.js | 16 ------ TimelineChart.js | 41 ++++++------- Utilities.js | 66 ++++++++++++++++++++- ViewPort.js | 115 +++++++++++++------------------------ 7 files changed, 125 insertions(+), 123 deletions(-) diff --git a/Canvas.js b/Canvas.js index 8138525d0..7bc23b8ce 100644 --- a/Canvas.js +++ b/Canvas.js @@ -100,10 +100,6 @@ function newCanvas() { function onCharSpaceInitialized(err) { viewPort.raiseEvents(); // These events will impacts on objects just initialized. - - /* We will store the last used this screen resolution. This will help us know if we can remember the las viewPort offset or not, since they depends on the screen resolution. */ - - window.localStorage.setItem('webApp.lastRun.screenResolution', browserCanvas.width + '.' + browserCanvas.height); } /* Splash Screen */ diff --git a/ChartGrid.js b/ChartGrid.js index 42323b289..11332b6c9 100644 --- a/ChartGrid.js +++ b/ChartGrid.js @@ -500,7 +500,7 @@ let fontSize = 10; - let label = ' ' + Math.round(j * 1000000) / 1000000 / 4; // TODO This 4 is to be removed. + let label = ' ' + Math.round(j * 1000000) / 1000000; let labelPoint = { x: viewPort.visibleArea.bottomRight.x + 1, diff --git a/Dashboard.js b/Dashboard.js index 2e039b20b..e1924efa4 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -128,7 +128,7 @@ const EARLIEST_DATE = new Date(2014, 0, 18, 4, 26, 8); const FONT_ASPECT_RATIO = 0.60; const CHART_ASPECT_RATIO = 1 / 10; -const INITIAL_ZOOM_LEVEL = -22; // This is the zoom level at the view port in which the APP starts. +let INITIAL_ZOOM_LEVEL = -26; // This is the zoom level at the view port in which the APP starts. let INITIAL_TIME_PERIOD = recalculatePeriod(INITIAL_ZOOM_LEVEL); // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser. var viewPort = newViewPort(); @@ -153,7 +153,7 @@ const PERIOD_10_MIN = "10-min"; const PERIOD_05_MIN = "05-min"; const PERIOD_01_MIN = "01-min"; -const INITIAL_DATE = new Date(); // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser. +let INITIAL_DATE = new Date(); // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser. var maxDate = new Date(); maxDate.setMilliseconds(0); diff --git a/Panels/TimeControlPanel.js b/Panels/TimeControlPanel.js index f6b3e98a5..a80248771 100644 --- a/Panels/TimeControlPanel.js +++ b/Panels/TimeControlPanel.js @@ -88,20 +88,6 @@ function newTimeControlPanel() { let datetime = INITIAL_DATE; - /* There is a chance that we could resume the last session at the place we left it. */ - - let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); - - if (lastRun !== null && lastRun === browserCanvas.width + '.' + browserCanvas.height) { - - let savedCurrentDatetime = window.localStorage.getItem('timeControlPanel.currentDatetime'); - - if (savedCurrentDatetime !== null) { - datetime = new Date(savedCurrentDatetime); - - } - } - var datetimeDisplay = { currentDatetime: datetime, addTime: addTime, @@ -166,8 +152,6 @@ function newTimeControlPanel() { thisObject.datetimeDisplay.currentDatetime = newDatetime; - window.localStorage.setItem('timeControlPanel.currentDatetime', newDatetime); - } diff --git a/TimelineChart.js b/TimelineChart.js index 7e317abab..8359a93a2 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -65,15 +65,11 @@ chartGrid = newChartGrid(); recalculateScale(); - - /* When the Web App has never run, we need to position the viewPort at the current Date. This in turn will set the current date as the date for loading the data. */ - - let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); - - if (lastRun === null || lastRun !== browserCanvas.width + '.' + browserCanvas.height) { - - moveViewPortToCurrentDatetime(); - } + + //moveViewPortToCurrentDatetime(); + moveToUserPosition(container, timeLineCoordinateSystem); + timePeriod = INITIAL_TIME_PERIOD; + datetime = INITIAL_DATE; /* Event Subscriptions - we need this events to be fired first here and then in active Plotters. */ @@ -504,18 +500,11 @@ if (INFO_LOG === true) { logger.write("[INFO] initializeProductPlotter -> onProductStorageInitialized -> onPlotterInizialized -> Entering function."); } if (INFO_LOG === true) { logger.write("[INFO] initializeProductPlotter -> onProductStorageInitialized -> onPlotterInizialized -> key = " + pProductCard.product.plotter.devTeam + "-" + pProductCard.product.plotter.codeName + "-" + pProductCard.product.plotter.moduleName); } - /* When the Web App has never run, we need to position the viewPort at the current Date. Otherwise it will get automatically positioned at the last thing the user was browsing. */ - - let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); - - if (lastRun === null || lastRun !== browserCanvas.width + '.' + browserCanvas.height) { - - try { - plotter.positionAtDatetime(INITIAL_DATE); - } catch (err) { - // If the plotter does not implement this function its ok. - } - } + try { + //plotter.positionAtDatetime(INITIAL_DATE); + } catch (err) { + // If the plotter does not implement this function its ok. + } let productPlotter = { productCard: pProductCard, @@ -724,6 +713,8 @@ recalculateCurrentDatetime(); + saveUserPosition(thisObject.container, timeLineCoordinateSystem); + } } @@ -733,6 +724,12 @@ if (initializationReady === true) { + if (thisObject.container.frame.isInViewPort()) { + + saveUserPosition(thisObject.container, timeLineCoordinateSystem); + + } + if (thisObject.container.frame.isInViewPort() && tooSmall() === false) { @@ -869,7 +866,7 @@ let maxValue = { x: MAX_PLOTABLE_DATE.valueOf(), - y: nextPorwerOf10(USDT_BTC_HTH) + y: nextPorwerOf10(USDT_BTC_HTH) / 4 }; diff --git a/Utilities.js b/Utilities.js index 910e8ccc8..d8f5fe355 100644 --- a/Utilities.js +++ b/Utilities.js @@ -50,7 +50,6 @@ function getDateFromPoint(point, container, timeLineCoordinateSystem) { return date; } - function getRateFromPoint(point, container, timeLineCoordinateSystem) { point = unTransformThisPoint(point, container); @@ -59,7 +58,6 @@ function getRateFromPoint(point, container, timeLineCoordinateSystem) { return point.y; } - function getMilisecondsFromPoint(point, container, timeLineCoordinateSystem) { point = unTransformThisPoint(point, container); @@ -68,6 +66,70 @@ function getMilisecondsFromPoint(point, container, timeLineCoordinateSystem) { return point.x; } +function saveUserPosition(container, timeLineCoordinateSystem) { + + let centerPoint = { + x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2, + y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2 + }; + + let userPosition = { + date: getDateFromPoint(centerPoint, container, timeLineCoordinateSystem), + rate: getRateFromPoint(centerPoint, container, timeLineCoordinateSystem), + market: DEFAULT_MARKET, + zoom: viewPort.zoomTargetLevel + }; + + window.localStorage.setItem('userPosition', JSON.stringify(userPosition)); +} + +function moveToUserPosition(container, timeLineCoordinateSystem) { + + let savedPosition = window.localStorage.getItem('userPosition'); + let userPosition; + + if (savedPosition === null) { + + userPosition = { + date: (new Date()).toString(), + rate: timeLineCoordinateSystem.max.y / 2, + market: DEFAULT_MARKET, + zoom: INITIAL_ZOOM_LEVEL + }; + + } else { + + userPosition = JSON.parse(savedPosition); + } + + let centerPoint = { + x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2, + y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2 + }; + + viewPort.newZoomLevel(userPosition.zoom); + INITIAL_TIME_PERIOD = recalculatePeriod(userPosition.zoom); + INITIAL_DATE = new Date (userPosition.date); + + let targetPoint = { + x: (new Date(userPosition.date)).valueOf(), + y: userPosition.rate + }; + + /* Put this point in the coordinate system of the viewPort */ + + targetPoint = timeLineCoordinateSystem.transformThisPoint(targetPoint); + targetPoint = transformThisPoint(targetPoint, container); + + /* Lets calculate the displace vector, from the point we want at the center, to the current center. */ + + let displaceVector = { + x: centerPoint.x - targetPoint.x, + y: centerPoint.y - targetPoint.y + }; + + viewPort.displace(displaceVector); +} function removeTime(datetime) { diff --git a/ViewPort.js b/ViewPort.js index 9c5d7f18d..f30d0aae3 100644 --- a/ViewPort.js +++ b/ViewPort.js @@ -12,8 +12,10 @@ function newViewPort() { let thisObject = { visibleArea: undefined, eventHandler: undefined, + zoomTargetLevel:undefined, zoomLevel: undefined, mousePosition: undefined, + newZoomLevel: newZoomLevel, applyZoom: applyZoom, zoomFontSize: zoomFontSize, zoomThisPoint: zoomThisPoint, @@ -52,8 +54,6 @@ function newViewPort() { thisObject.eventHandler = newEventHandler(); - let zoomTargetLevel; - return thisObject; function initialize() { @@ -64,46 +64,6 @@ function newViewPort() { bottomRight: { x: browserCanvas.width - RIGHT_MARGIN, y: browserCanvas.height - BOTTOM_MARGIN}, bottomLeft: { x: LEFT_MARGIN, y: browserCanvas.height - BOTTOM_MARGIN} }; - - /* There is a chance that we could resume the last session at the place we left it. */ - - let lastRun = window.localStorage.getItem('webApp.lastRun.screenResolution'); - - if (lastRun !== null && lastRun === browserCanvas.width + '.' + browserCanvas.height) { - - /* We get from the local storage the recored values of Zoom and OffSet during the last session using this app with this browser */ - - let savedZoomTargetLevel = window.localStorage.getItem('viewPort.zoomTargetLevel'); - - if (savedZoomTargetLevel !== null) { - - thisObject.zoomLevel = Number(savedZoomTargetLevel); - zoomTargetLevel = Number(savedZoomTargetLevel); - - INITIAL_TIME_PERIOD = recalculatePeriod(thisObject.zoomLevel); - } - - let savedOffset = window.localStorage.getItem('viewPort.offset'); - - if (savedOffset !== null) { - - offset = JSON.parse(savedOffset); - } - - let savedTargetOffset = window.localStorage.getItem('viewPort.targetOffset'); - - if (savedTargetOffset !== null) { - - targetOffset = JSON.parse(savedTargetOffset); - } - - } else { - - thisObject.zoomLevel = INITIAL_ZOOM_LEVEL; - zoomTargetLevel = INITIAL_ZOOM_LEVEL; - - INITIAL_TIME_PERIOD = recalculatePeriod(thisObject.zoomLevel); - } } function raiseEvents() { @@ -118,17 +78,17 @@ function newViewPort() { function animate() { - if (thisObject.zoomLevel < zoomTargetLevel) { - if (zoomTargetLevel - thisObject.zoomLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - thisObject.zoomLevel); + if (thisObject.zoomLevel < thisObject.zoomTargetLevel) { + if (thisObject.zoomTargetLevel - thisObject.zoomLevel < ANIMATION_INCREMENT) { + ANIMATION_INCREMENT = Math.abs(thisObject.zoomTargetLevel - thisObject.zoomLevel); } thisObject.zoomLevel = thisObject.zoomLevel + ANIMATION_INCREMENT; changeZoom(thisObject.zoomLevel - ANIMATION_INCREMENT, thisObject.zoomLevel); } - if (thisObject.zoomLevel > zoomTargetLevel) { - if (thisObject.zoomLevel - zoomTargetLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - thisObject.zoomLevel); + if (thisObject.zoomLevel > thisObject.zoomTargetLevel) { + if (thisObject.zoomLevel - thisObject.zoomTargetLevel < ANIMATION_INCREMENT) { + ANIMATION_INCREMENT = Math.abs(thisObject.zoomTargetLevel - thisObject.zoomLevel); } thisObject.zoomLevel = thisObject.zoomLevel - ANIMATION_INCREMENT; changeZoom(thisObject.zoomLevel + ANIMATION_INCREMENT, thisObject.zoomLevel); @@ -171,8 +131,6 @@ function newViewPort() { thisObject.eventHandler.raiseEvent("Offset Changed", event); - window.localStorage.setItem('viewPort.offset', JSON.stringify(offset)); - //console.log("displace produced new Offset x = " + offset.x + " y = " + offset.y); } @@ -189,12 +147,27 @@ function newViewPort() { y: (targetOffset.y - offset.y) / 10 }; - window.localStorage.setItem('viewPort.targetOffset', JSON.stringify(targetOffset)); - //console.log("displaceTarget x = " + targetOffset.x + " y = " + targetOffset.y); } - + + function newZoomLevel(level) { + + thisObject.zoomTargetLevel = level; + thisObject.zoomLevel = level; + + ANIMATION_INCREMENT = Math.abs(thisObject.zoomTargetLevel - thisObject.zoomLevel) / 3; + + let event = { + newLevel: thisObject.zoomTargetLevel, + newOffset: offset, + type: undefined + }; + + thisObject.eventHandler.raiseEvent("Zoom Changed", event); + + return true; + } function applyZoom(amount) { @@ -203,56 +176,56 @@ function newViewPort() { if (amount > 0) { - if (zoomTargetLevel > -5) { + if (thisObject.zoomTargetLevel > -5) { amount = amount * 2; } - if (zoomTargetLevel > 10) { + if (thisObject.zoomTargetLevel > 10) { amount = amount * 3; } - if (zoomTargetLevel > 15) { + if (thisObject.zoomTargetLevel > 15) { amount = amount * 4; } } if (amount < 0) { - if (zoomTargetLevel > -4) { + if (thisObject.zoomTargetLevel > -4) { amount = amount * 2; } - if (zoomTargetLevel > 13) { + if (thisObject.zoomTargetLevel > 13) { amount = amount * 3; } - if (zoomTargetLevel > 19) { + if (thisObject.zoomTargetLevel > 19) { amount = amount * 4; } } - if (zoomTargetLevel + amount > 1000) { + if (thisObject.zoomTargetLevel + amount > 1000) { return false; } - if (zoomTargetLevel <= -27 && amount < 0) { + if (thisObject.zoomTargetLevel <= -27 && amount < 0) { amount = amount / 4; } - if (zoomTargetLevel < -27 && amount > 0) { + if (thisObject.zoomTargetLevel < -27 && amount > 0) { amount = amount / 4; } - if (zoomTargetLevel + amount < -28.25) { + if (thisObject.zoomTargetLevel + amount < -28.25) { return false; } - zoomTargetLevel = zoomTargetLevel + amount; + thisObject.zoomTargetLevel = thisObject.zoomTargetLevel + amount; - ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - thisObject.zoomLevel) / 3; + ANIMATION_INCREMENT = Math.abs(thisObject.zoomTargetLevel - thisObject.zoomLevel) / 3; let event = { - newLevel: zoomTargetLevel, + newLevel: thisObject.zoomTargetLevel, newOffset: offset, type: undefined }; @@ -263,12 +236,8 @@ function newViewPort() { event.type = "Zoom Out"; } - //console.log("Zoom Changed > " + event.newLevel); - thisObject.eventHandler.raiseEvent("Zoom Changed", event); - window.localStorage.setItem('viewPort.zoomTargetLevel', zoomTargetLevel); - return true; } @@ -281,15 +250,9 @@ function newViewPort() { offset.x = offset.x - newMouse.x + thisObject.mousePosition.x; offset.y = offset.y - newMouse.y + thisObject.mousePosition.y; - window.localStorage.setItem('viewPort.offset', JSON.stringify(offset)); - - //console.log("changeZoom produced new Offset x = " + offset.x + " y = " + offset.y); - targetOffset.x = offset.x targetOffset.y = offset.y ; - window.localStorage.setItem('viewPort.targetOffset', JSON.stringify(targetOffset)); - offsetIncrement = { x: 0, y: 0 From ac18c984b27df072b152ba8522a865c514218e3d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 May 2018 19:57:50 +0200 Subject: [PATCH 029/334] BUG #4 fixed Dates are objects, be caurfull when copying them! --- ProductStorage.js | 7 +++-- TimelineChart.js | 70 +++++++++++++++++------------------------------ 2 files changed, 30 insertions(+), 47 deletions(-) diff --git a/ProductStorage.js b/ProductStorage.js index 4deaf42d6..826c68f4c 100644 --- a/ProductStorage.js +++ b/ProductStorage.js @@ -2,7 +2,7 @@ function newProductStorage(pName) { const MODULE_NAME = "Product Storage"; - const INFO_LOG = false; + const INFO_LOG = true; const ERROR_LOG = true; const logger = newDebugLog(); logger.fileName = MODULE_NAME; @@ -451,6 +451,9 @@ function newProductStorage(pName) { function setDatetime(pDatetime) { + console.log("recibi= " + pDatetime); + console.log("tenia = " + datetime); + if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> Entering function."); } /* If there is a change in the day, then we take some actions, otherwise, we dont. */ @@ -458,7 +461,7 @@ function newProductStorage(pName) { let currentDate = Math.trunc(datetime.valueOf() / ONE_DAY_IN_MILISECONDS); let newDate = Math.trunc(pDatetime.valueOf() / ONE_DAY_IN_MILISECONDS); - datetime = pDatetime; + datetime = new Date(pDatetime); if (currentDate !== newDate) { diff --git a/TimelineChart.js b/TimelineChart.js index 8359a93a2..6cffff6d0 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -1,7 +1,7 @@ function newTimelineChart() { const MODULE_NAME = "Timeline Chart"; - const INFO_LOG = false; + const INFO_LOG = true; const INTENSIVE_LOG = false; const ERROR_LOG = true; const logger = newDebugLog(); @@ -75,7 +75,6 @@ viewPort.eventHandler.listenToEvent("Offset Changed", onOffsetChanged); viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); - canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); initializeCompetitionPlotters(onCompetitionPlottersInitialized); @@ -718,21 +717,35 @@ } } - function onDragFinished() { + function setDatetime(pDatetime) { - if (INFO_LOG === true) { logger.write("[INFO] onDragFinished -> Entering function."); } + if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> Entering function."); } - if (initializationReady === true) { + /* This function is used when the time is changed through the user interface, but without zooming or panning. */ + /* No matter if the day changed or not, we need to inform all visible Plotters. */ - if (thisObject.container.frame.isInViewPort()) { + if (thisObject.container.frame.isInViewPort()) { - saveUserPosition(thisObject.container, timeLineCoordinateSystem); + for (let i = 0; i < productPlotters.length; i++) { + + let productPlotter = productPlotters[i]; + + productPlotter.productCard.setDatetime(pDatetime); + productPlotter.plotter.setDatetime(pDatetime); + + /* The time has changed, but the viewPort is still on the same place, so we request any of the plotters to reposition it. */ + + if (productPlotter.plotter.positionAtDatetime !== undefined) { + productPlotter.plotter.positionAtDatetime(pDatetime); + } } - if (thisObject.container.frame.isInViewPort() && tooSmall() === false) { + for (let i = 0; i < competitionPlotters.length; i++) { + let competitionPlotter = competitionPlotters[i]; + competitionPlotter.plotter.setDatetime(datetime); } } @@ -747,7 +760,7 @@ if (thisObject.container.frame.isInViewPort()) { recalculateCurrentDatetime(); - + saveUserPosition(thisObject.container, timeLineCoordinateSystem); } } @@ -759,7 +772,7 @@ /* - The view port was moved or the view port zoom level was changed and the center of the screen points to a different datetime that me + The view port was moved or the view port zoom level was changed and the center of the screen points to a different datetime that we must calculate. */ @@ -777,6 +790,8 @@ datetime = newDate; + console.log("nueva = " + datetime); + for (let i = 0; i < productPlotters.length; i++) { let productPlotter = productPlotters[i]; @@ -820,41 +835,6 @@ } - function setDatetime(pDatetime) { - - if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> Entering function."); } - - /* This function is used when the time is changed through the user interface, but without zooming or panning. */ - /* No matter if the day changed or not, we need to inform all visible Plotters. */ - - if (thisObject.container.frame.isInViewPort()) { - - for (let i = 0; i < productPlotters.length; i++) { - - let productPlotter = productPlotters[i]; - - productPlotter.productCard.setDatetime(pDatetime); - productPlotter.storage.setDatetime(pDatetime); - productPlotter.plotter.setDatetime(pDatetime); - - /* The time has changed, but the viewPort is still on the same place, so we request any of the plotters to reposition it. */ - - if (productPlotter.plotter.positionAtDatetime !== undefined) { - productPlotter.plotter.positionAtDatetime(pDatetime); - } - - } - - for (let i = 0; i < competitionPlotters.length; i++) { - - let competitionPlotter = competitionPlotters[i]; - - competitionPlotter.plotter.setDatetime(datetime); - - } - } - } - function recalculateScale() { if (INFO_LOG === true) { logger.write("[INFO] recalculateScale -> Entering function."); } From 9d5c893de5bd80aac131a47872eb38fdb1b60371 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 May 2018 20:31:18 +0200 Subject: [PATCH 030/334] Fast Forward Bug Fix --- ProductStorage.js | 5 +---- TimelineChart.js | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/ProductStorage.js b/ProductStorage.js index 826c68f4c..c449ebc3c 100644 --- a/ProductStorage.js +++ b/ProductStorage.js @@ -2,7 +2,7 @@ function newProductStorage(pName) { const MODULE_NAME = "Product Storage"; - const INFO_LOG = true; + const INFO_LOG = false; const ERROR_LOG = true; const logger = newDebugLog(); logger.fileName = MODULE_NAME; @@ -451,9 +451,6 @@ function newProductStorage(pName) { function setDatetime(pDatetime) { - console.log("recibi= " + pDatetime); - console.log("tenia = " + datetime); - if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> Entering function."); } /* If there is a change in the day, then we take some actions, otherwise, we dont. */ diff --git a/TimelineChart.js b/TimelineChart.js index 6cffff6d0..3af09dddd 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -1,7 +1,7 @@ function newTimelineChart() { const MODULE_NAME = "Timeline Chart"; - const INFO_LOG = true; + const INFO_LOG = false; const INTENSIVE_LOG = false; const ERROR_LOG = true; const logger = newDebugLog(); @@ -790,8 +790,6 @@ datetime = newDate; - console.log("nueva = " + datetime); - for (let i = 0; i < productPlotters.length; i++) { let productPlotter = productPlotters[i]; From 2a8f29b3ec58aae48a44616510e4e76513564111 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 20 May 2018 22:50:01 +0200 Subject: [PATCH 031/334] Server Side Code Reorganized --- Dashboard.js | 1 - NewBot.js | 5 + Project.njsproj | 13 + Server/ConfigReader.js | 940 ++++++++++++++++++++++++++++++++++ Server/Github.js | 108 ++++ Server/Storage.js | 102 ++++ index.html | 2 +- server.js | 1093 ++-------------------------------------- 8 files changed, 1198 insertions(+), 1066 deletions(-) create mode 100644 NewBot.js create mode 100644 Server/ConfigReader.js create mode 100644 Server/Github.js create mode 100644 Server/Storage.js diff --git a/Dashboard.js b/Dashboard.js index e1924efa4..5b388adde 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -33,7 +33,6 @@ let canvas; let markets; let ecosystem = newEcosystem(); - let marketFilesPeriods = '[' + '[' + 24 * 60 * 60 * 1000 + ',' + '"24-hs"' + ']' + ',' + diff --git a/NewBot.js b/NewBot.js new file mode 100644 index 000000000..a532ecbe6 --- /dev/null +++ b/NewBot.js @@ -0,0 +1,5 @@ +function newBot() { + + console.log("Hello World"); + +} diff --git a/Project.njsproj b/Project.njsproj index 220a41955..0295f4eb0 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -60,6 +60,18 @@ Code + + Code + + + Code + + + Code + + + Code + Code @@ -129,6 +141,7 @@ + diff --git a/Server/ConfigReader.js b/Server/ConfigReader.js new file mode 100644 index 000000000..3bf5339cb --- /dev/null +++ b/Server/ConfigReader.js @@ -0,0 +1,940 @@ +exports.newConfigReader = function newConfigReader() { + + let thisObject = { + loadConfigs: loadConfigs, + initialize: initialize + } + + const GITHUB = require('../Server/Github'); + let github = GITHUB.newGithub(); + + const STORAGE = require('../Server/Storage'); + let storage = STORAGE.newStorage(); + + let serverConfig; + let githubData; + let storageData; + let ecosystem; + let ecosystemObject; + + return thisObject; + + function initialize(pEcosystem, pEcosystemObject, pServerConfig, pGithubData, pStorageData, callBackFunction) { + + serverConfig = pServerConfig; + githubData = pGithubData; + storageData = pStorageData; + ecosystem = pEcosystem; + ecosystemObject = pEcosystemObject; + + readServerConfig(); + + function readServerConfig() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> Entering function."); } + + let fs = require('fs'); + + let fileName = './this.server.config.json'; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, file) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> onFileRead -> Entering function."); } + + let fileText; + + fileText = file.toString(); + fileText = fileText.trim(); // remove first byte with some encoding. + + serverConfig = JSON.parse(fileText); + + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readServerConfig -> onFileRead -> fileText = " + fileText); } + + CONSOLE_LOG = serverConfig.webServerLog.console; + LOG_FILE_CONTENT = serverConfig.webServerLog.fileContent; + + /* Finalize initializations. */ + + github.initialize(githubData); + storage.initialize(storageData, serverConfig); + + callBackFunction(serverConfig); + } + catch (err) { + console.log("[ERROR] initialize -> readServerConfig -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] initialize -> readServerConfig -> Error = " + err); + } + } + } + + function loadConfigs(callBackFunction) { + + readEcosystemConfig(); + + function readEcosystemConfig() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Entering function."); } + + /* + + This configuration file is the backbone of the system. The first file we are going to get is a template where other configurations are + injected and the files ends up inflated with all these configs in one single JSON object that in turn is later injected into a + javascript module with an object that is going to instantiate it at run-time. + + */ + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } + + storage.getStorageData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Entering function."); } + + ecosystem = pData.toString(); + ecosystem = ecosystem.trim(); // remove first byte with some encoding. + + ecosystemObject = JSON.parse(ecosystem); + readHostsConfigs(); + } + catch (err) { + console.log("[ERROR] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); + } + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } + + let fs = require('fs'); + try { + let fileName = '../AAPlatform/ecosystem.json'; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, file) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> onFileRead -> Entering function."); } + + ecosystem = file.toString(); + ecosystem = ecosystem.trim(); // remove first byte with some encoding. + + ecosystemObject = JSON.parse(ecosystem); + readHostsConfigs(); + } + catch (err) { + console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } + + github.getGithubData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Entering function."); } + + ecosystem = pData.toString(); + ecosystem = ecosystem.trim(); // remove first byte with some encoding. + + ecosystemObject = JSON.parse(ecosystem); + readHostsConfigs(); + } + catch (err) { + console.log("[ERROR] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + catch (err) { + console.log("[ERROR] initialize -> readEcosystemConfig -> Error = " + err); + } + } + + function readHostsConfigs() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> Entering function."); } + + let requestsSent = 0; + let responsesReceived = 0; + + for (let i = 0; i < ecosystemObject.hosts.length; i++) { + + let host = ecosystemObject.hosts[i]; + + getCompetitions(); + getPlotters(); + + function getCompetitions() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Entering function."); } + + /* In this first section we will load the competitions configurations. */ + + for (let j = 0; j < host.competitions.length; j++) { + + let competition = host.competitions[j]; + + requestsSent++; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> Entering Case."); } + + storage.getStorageData(host.codeName, competition.repo, competition.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Error = " + err); + } + } + break; + } + + case 'File System': { + + try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> Entering Case."); } + + let fs = require('fs'); + + let fileName = '../Competitions/' + host.codeName + '/' + competition.repo + '/' + competition.configFile; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> fileName = " + fileName); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + } + catch (err) { + console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> File System -> File = " + fileName + " Error = " + err); + } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> Entering Case."); } + + github.getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> competition.repo = " + competition.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = competition.repo; + configObj.configFile = competition.configFile; + + host.competitions[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Error = " + err); + } + } + + break; + } + } + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> getCompetitions -> Error = " + err); + } + } + + function getPlotters() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> getPlotters -> Entering function."); } + + /* In this second section we will load the competition plotters configurations. */ + + for (let j = 0; j < host.plotters.length; j++) { + + let plotter = host.plotters[j]; + + requestsSent++; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> Entering Case."); } + + storage.getStorageData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + host.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); + } + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> Entering Case."); } + + try { + + let fs = require('fs'); + + let fileName = '../Plotters/' + host.codeName + '/' + plotter.repo + '/' + plotter.configFile; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + host.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> File = " + fileName + " Error = " + err); + } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> Entering Case."); } + + github.getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + host.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + readDevTeamsConfigs(); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> getCompetitions -> Error = " + err); + } + } + } + } + catch (err) { + console.log("[ERROR] initialize -> readHostsConfigs -> Error = " + err); + } + } + + function readDevTeamsConfigs() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> Entering function."); } + + /* + + Each bot has its configuration at its own repo since each team must be able to change it at will. + So what we do here is to use the master config at the AAPlatform repo that we already have on + memory and inject into it the config of each bot. + + Inmediatelly after that, we also load the Plotters configs using the same technique. + + */ + + let requestsSent = 0; + let responsesReceived = 0; + + for (let i = 0; i < ecosystemObject.devTeams.length; i++) { + + let devTeam = ecosystemObject.devTeams[i]; + + getBots(); + getPlotters(); + + function getBots() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Entering function."); } + + /* In the next section we are loading the bots configurations. */ + + for (let j = 0; j < devTeam.bots.length; j++) { + + let bot = devTeam.bots[j]; + + requestsSent++; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> Entering Case."); } + + storage.getStorageData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; + + addStoragePermissions(configObj); + + devTeam.bots[j] = configObj; + + } + + if (requestsSent === responsesReceived) { + + callBackFunction(ecosystem, ecosystemObject); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Error = " + err); + } + } + break; + } + + case 'File System': { + + try { + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> Entering Case."); } + + let fs = require('fs'); + + let fileName = '../Bots/' + devTeam.codeName + '/' + bot.repo + '/' + bot.configFile; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> fileName = " + fileName); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; + + addStoragePermissions(configObj); + + devTeam.bots[j] = configObj; + + if (requestsSent === responsesReceived) { + + callBackFunction(ecosystem, ecosystemObject); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> File = " + fileName + " Error = " + err); + } + + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> Entering Case."); } + + github.getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ + + configObj.repo = bot.repo; + configObj.configFile = bot.configFile; + + addStoragePermissions(configObj); + + devTeam.bots[j] = configObj; + + if (requestsSent === responsesReceived) { + + callBackFunction(ecosystem, ecosystemObject); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Error = " + err); + } + } + + function getPlotters() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Entering Function."); } + + /* In the next section we are loading the plotters configurations. */ + + for (let j = 0; j < devTeam.plotters.length; j++) { + + let plotter = devTeam.plotters[j]; + + requestsSent++; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> Entering Case."); } + + storage.getStorageData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + } + + if (requestsSent === responsesReceived) { + + callBackFunction(ecosystem, ecosystemObject); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); + } + } + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> Entering Case."); } + + try { + + let fs = require('fs'); + + let fileName = '../Plotters/' + devTeam.codeName + '/' + plotter.repo + '/' + plotter.configFile; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + callBackFunction(ecosystem, ecosystemObject); + + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + } + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> Entering Case."); } + + github.getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } + + responsesReceived++; + + pData = pData.toString(); + pData = pData.trim(); // remove first byte with some encoding. + + let configObj = JSON.parse(pData); + + /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ + + configObj.repo = plotter.repo; + configObj.configFile = plotter.configFile; + + devTeam.plotters[j] = configObj; + + if (requestsSent === responsesReceived) { + + callBackFunction(ecosystem, ecosystemObject); + + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Error = " + err); + } + } + } + + function addStoragePermissions(pConfigObj) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Entering function."); } + + if (pConfigObj.storage !== undefined) { return; } // If this information is at the config file, then we take it, otherwise, we define it here. + + let fileUri; + let sas; + + switch (serverConfig.environment) { + + case "Develop": { + + fileUri = serverConfig.productsStorage.Develop.fileUri; + sas = serverConfig.productsStorage.Develop.sas; + + break; + } + + case "Production": { + + fileUri = serverConfig.productsStorage.Production.fileUri; + sas = serverConfig.productsStorage.Production.sas; + + break; + } + } + + pConfigObj.storage = { + sas: sas, + fileUri: fileUri + }; + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Error = " + err); + } + } + + } + catch (err) { + console.log("[ERROR] initialize -> readDevTeamsConfigs -> Error = " + err); + } + } + } + + +} \ No newline at end of file diff --git a/Server/Github.js b/Server/Github.js new file mode 100644 index 000000000..063abcc55 --- /dev/null +++ b/Server/Github.js @@ -0,0 +1,108 @@ +exports.newGithub = function newGithub() { + + let thisObject = { + getGithubData: getGithubData, + initialize: initialize + } + + let githubData; + + return thisObject; + + function initialize(pGithubData) { + + githubData = pGithubData; + + } + + function getGithubData(pOrg, pRepo, pPath, callBackFunction) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> Entering function."); } + + let cacheVersion = githubData.get(pOrg + '.' + pRepo + '.' + pPath) + + if (cacheVersion !== undefined) { + + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } + + callBackFunction(cacheVersion); + + } else { + + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } + + const octokit = require('@octokit/rest')() + global.atob = require("atob"); + + let owner = pOrg; + let repo = pRepo; + let branch = "master"; + let page = 1; + let per_page = 100; + let ref = "master"; + let path = pPath; + + octokit.repos.getContent({ owner, repo, path, ref }, onContent); + + function onContent(error, result) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> error = " + error); } + if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Github.com responded to request " + pOrg + '.' + pRepo + '.' + pPath + " with result = " + result.toString().substring(0, 100)); } + + if (error !== null) { console.log("[ERROR] getGithubData -> onContent -> " + error); } + + let decoded = atob(result.data.content); + + /* + + This method usually brings up to 3 characters of encoding info at the begining of the JSON string which destroys the JSON format. + We will run the following code with the intention to eliminate this problem. + + */ + + let cleanString = decoded; + let jsonTest; + + try { + jsonTest = JSON.parse(cleanString); + } catch (err) { + cleanString = decoded.substring(1); + try { + jsonTest = JSON.parse(cleanString); + } catch (err) { + cleanString = decoded.substring(2); + try { + jsonTest = JSON.parse(cleanString); + } catch (err) { + cleanString = decoded.substring(3); + try { + jsonTest = JSON.parse(cleanString); + } catch (err) { + console.log("[INFO] getGithubData -> onContent -> Could not clean the data received -> Data = " + decoded.substring(0, 50)); + } + } + } + } + + githubData.set(pOrg + '.' + pRepo + '.' + pPath, cleanString); + + callBackFunction(cleanString); + + } catch (err) { + console.log("[ERROR] getGithubData -> onContent -> err.message = " + err.message); + callBackFunction("{}"); + } + } + } + + } catch (err) { + console.log("[ERROR] getGithubData -> err.message = " + err.message); + callBackFunction("{}"); + } + } +} \ No newline at end of file diff --git a/Server/Storage.js b/Server/Storage.js new file mode 100644 index 000000000..eda2a80ef --- /dev/null +++ b/Server/Storage.js @@ -0,0 +1,102 @@ +exports.newStorage = function newStorage() { + + let thisObject = { + getStorageData: getStorageData, + initialize: initialize + } + + let storageData; + let serverConfig; + + return thisObject; + + function initialize(pStorageData, pServerConfig) { + + storageData = pStorageData; + serverConfig = pServerConfig; + + } + + function getStorageData(pOrg, pRepo, pPath, callBackFunction) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pOrg = " + pOrg); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pRepo = " + pRepo); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pPath = " + pPath); } + + let cacheVersion = storageData.get(pOrg + '.' + pRepo + '.' + pPath) + + if (cacheVersion !== undefined) { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } + + callBackFunction(cacheVersion); + + } else { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } + + let storage = require('azure-storage'); + let connectionString; + + switch (serverConfig.environment) { + + case "Develop": { + + connectionString = serverConfig.configAndPlugins.Develop.connectionString; + break; + } + + case "Production": { + + connectionString = serverConfig.configAndPlugins.Production.connectionString; + break; + } + } + + let blobService = storage.createBlobService(connectionString); + + blobService.getBlobToText('aaplatform', pOrg + "/" + pRepo + "/" + pPath, onFileReceived); + + + function onFileReceived(err, text, response) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] getStorageData -> onFileReceived -> response = " + JSON.stringify(response)); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pOrg = " + pOrg); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pRepo = " + pRepo); } + if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pPath = " + pPath); } + + storageData.set(pOrg + '.' + pRepo + '.' + pPath, text); + + if (err !== null || text === null) { + + console.log("[ERROR] getStorageData -> onFileReceived -> Error Received from Storage Library. "); + console.log("[ERROR] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); + console.log("[ERROR] getStorageData -> onFileReceived -> Returning an empty JSON object string. "); + + callBackFunction("{}"); + return; + + } + + callBackFunction(text); + + } catch (err) { + console.log("[ERROR] getStorageData -> onFileReceived -> err.message = " + err.message); + callBackFunction("{}"); + } + } + } + + } catch (err) { + console.log("[ERROR] getStorageData -> err.message = " + err.message); + callBackFunction("{}"); + } + } +} \ No newline at end of file diff --git a/index.html b/index.html index 74d92a05a..4e6b1e70b 100644 --- a/index.html +++ b/index.html @@ -9,7 +9,7 @@ - + diff --git a/server.js b/server.js index d4a941aa9..594b24b01 100644 --- a/server.js +++ b/server.js @@ -1,5 +1,7 @@ -let CONSOLE_LOG = false; -let LOG_FILE_CONTENT = false; +/* These 2 are global variables, that is why they do not have a let or var */ + +CONSOLE_LOG = false; +LOG_FILE_CONTENT = false; if (CONSOLE_LOG === true) { console.log("[INFO] Node Server Starting."); } @@ -16,6 +18,12 @@ let port = process.env.PORT || 1337; let isHttpServerStarted = false; +const GITHUB = require('./Server/Github'); +let github = GITHUB.newGithub(); + +const STORAGE = require('./Server/Storage'); +let storage = STORAGE.newStorage(); + initialize(); function initialize() { @@ -27,905 +35,33 @@ function initialize() { githubData = new Map; storageData = new Map; - readServerConfig(); + const CONFIG_READER = require('./Server/ConfigReader'); + let configReader = CONFIG_READER.newConfigReader(); - function readServerConfig() { + configReader.initialize(ecosystem, ecosystemObject, serverConfig, githubData, storageData, onInitialized); - try { + function onInitialized(pServerConfig) { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> Entering function."); } + serverConfig = pServerConfig; - let fs = require('fs'); - - let fileName = './this.server.config.json'; - fs.readFile(fileName, onFileRead); + configReader.loadConfigs(onConfigsLoaded); - function onFileRead(err, file) { + function onConfigsLoaded(pEcosystem, pEcosystemObject) { - try { + ecosystem = pEcosystem; + ecosystemObject = pEcosystemObject; + + github.initialize(githubData); + storage.initialize(storageData, serverConfig) - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> onFileRead -> Entering function."); } + startHtttpServer(); - let fileText; - - fileText = file.toString(); - fileText = fileText.trim(); // remove first byte with some encoding. - - serverConfig = JSON.parse(fileText); - - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readServerConfig -> onFileRead -> fileText = " + fileText); } - - CONSOLE_LOG = serverConfig.webServerLog.console; - LOG_FILE_CONTENT = serverConfig.webServerLog.fileContent; - - readEcosystemConfig(); - } - catch (err) { - console.log("[ERROR] initialize -> readServerConfig -> onFileRead -> File = " + fileName + " Error = " + err); - } - - } - } - catch (err) { - console.log("[ERROR] initialize -> readServerConfig -> Error = " + err); - } - } - - function readEcosystemConfig() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Entering function."); } - - /* - - This configuration file is the backbone of the system. The first file we are going to get is a template where other configurations are - injected and the files ends up inflated with all these configs in one single JSON object that in turn is later injected into a - javascript module with an object that is going to instantiate it at run-time. - - */ - - switch (serverConfig.configAndPlugins.Location) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } - - getStorageData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Entering function."); } - - ecosystem = pData.toString(); - ecosystem = ecosystem.trim(); // remove first byte with some encoding. - - ecosystemObject = JSON.parse(ecosystem); - readHostsConfigs(); - } - catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); - } - } - - break; - } - - case 'File System': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } - - let fs = require('fs'); - try { - let fileName = '../AAPlatform/ecosystem.json'; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, file) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> onFileRead -> Entering function."); } - - ecosystem = file.toString(); - ecosystem = ecosystem.trim(); // remove first byte with some encoding. - - ecosystemObject = JSON.parse(ecosystem); - readHostsConfigs(); - } - catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); - } - - } - } - catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> File = " + fileName + " Error = " + err); - } - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } - - getGithubData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Entering function."); } - - ecosystem = pData.toString(); - ecosystem = ecosystem.trim(); // remove first byte with some encoding. - - ecosystemObject = JSON.parse(ecosystem); - readHostsConfigs(); - } - catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); - } - } - break; - } - } - } - catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> Error = " + err); - } - } - - function readHostsConfigs() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> Entering function."); } - - let requestsSent = 0; - let responsesReceived = 0; - - for (let i = 0; i < ecosystemObject.hosts.length; i++) { - - let host = ecosystemObject.hosts[i]; - - getCompetitions(); - getPlotters(); - - function getCompetitions() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Entering function."); } - - /* In this first section we will load the competitions configurations. */ - - for (let j = 0; j < host.competitions.length; j++) { - - let competition = host.competitions[j]; - - requestsSent++; - - switch (serverConfig.configAndPlugins.Location) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> Entering Case."); } - - getStorageData(host.codeName, competition.repo, competition.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = competition.repo; - configObj.configFile = competition.configFile; - - host.competitions[j] = configObj; - - if (requestsSent === responsesReceived) { - - readDevTeamsConfigs(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Error = " + err); - } - } - break; - } - - case 'File System': { - - try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> Entering Case."); } - - let fs = require('fs'); - - let fileName = '../Competitions/' + host.codeName + '/' + competition.repo + '/' + competition.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> fileName = " + fileName); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = competition.repo; - configObj.configFile = competition.configFile; - - host.competitions[j] = configObj; - - if (requestsSent === responsesReceived) { - - readDevTeamsConfigs(); - - } - } - catch (err) { - console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> File = " + fileName + " Error = " + err); - } - } - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> File System -> File = " + fileName + " Error = " + err); - } - - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> Entering Case."); } - - getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> competition.repo = " + competition.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = competition.repo; - configObj.configFile = competition.configFile; - - host.competitions[j] = configObj; - - if (requestsSent === responsesReceived) { - - readDevTeamsConfigs(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Error = " + err); - } - } - - break; - } - } - } - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> getCompetitions -> Error = " + err); - } - } - - function getPlotters() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> getPlotters -> Entering function."); } - - /* In this second section we will load the competition plotters configurations. */ - - for (let j = 0; j < host.plotters.length; j++) { - - let plotter = host.plotters[j]; - - requestsSent++; - - switch (serverConfig.configAndPlugins.Location) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> Entering Case."); } - - getStorageData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - host.plotters[j] = configObj; - - if (requestsSent === responsesReceived) { - - readDevTeamsConfigs(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); - } - } - - break; - } - - case 'File System': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> Entering Case."); } - - try { - - let fs = require('fs'); - - let fileName = '../Plotters/' + host.codeName + '/' + plotter.repo + '/' + plotter.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - host.plotters[j] = configObj; - - if (requestsSent === responsesReceived) { - - readDevTeamsConfigs(); - - } - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); - } - - } - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> File = " + fileName + " Error = " + err); - } - - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> Entering Case."); } - - getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - host.plotters[j] = configObj; - - if (requestsSent === responsesReceived) { - - readDevTeamsConfigs(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); - } - } - break; - } - } - } - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> getCompetitions -> Error = " + err); - } - } - } - } - catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> Error = " + err); - } - } - - function readDevTeamsConfigs() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> Entering function."); } - - /* - - Each bot has its configuration at its own repo since each team must be able to change it at will. - So what we do here is to use the master config at the AAPlatform repo that we already have on - memory and inject into it the config of each bot. - - Inmediatelly after that, we also load the Plotters configs using the same technique. - - */ - - let requestsSent = 0; - let responsesReceived = 0; - - for (let i = 0; i < ecosystemObject.devTeams.length; i++) { - - let devTeam = ecosystemObject.devTeams[i]; - - getBots(); - getPlotters(); - - function getBots() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Entering function."); } - - /* In the next section we are loading the bots configurations. */ - - for (let j = 0; j < devTeam.bots.length; j++) { - - let bot = devTeam.bots[j]; - - requestsSent++; - - switch (serverConfig.configAndPlugins.Location) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> Entering Case."); } - - getStorageData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> bot.repo = " + bot.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = bot.repo; - configObj.configFile = bot.configFile; - - addStoragePermissions(configObj); - - devTeam.bots[j] = configObj; - - } - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Error = " + err); - } - } - break; - } - - case 'File System': { - - try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> Entering Case."); } - - let fs = require('fs'); - - let fileName = '../Bots/' + devTeam.codeName + '/' + bot.repo + '/' + bot.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> fileName = " + fileName); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = bot.repo; - configObj.configFile = bot.configFile; - - addStoragePermissions(configObj); - - devTeam.bots[j] = configObj; - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> File = " + fileName + " Error = " + err); - } - - } - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> File = " + fileName + " Error = " + err); - } - - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> Entering Case."); } - - getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> bot.repo = " + bot.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full bot object and we dont want to lose these two properties, we do this: */ - - configObj.repo = bot.repo; - configObj.configFile = bot.configFile; - - addStoragePermissions(configObj); - - devTeam.bots[j] = configObj; - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Error = " + err); - } - } - break; - } - } - } - - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Error = " + err); - } - } - - function getPlotters() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Entering Function."); } - - /* In the next section we are loading the plotters configurations. */ - - for (let j = 0; j < devTeam.plotters.length; j++) { - - let plotter = devTeam.plotters[j]; - - requestsSent++; - - switch (serverConfig.configAndPlugins.Location) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> Entering Case."); } - - getStorageData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - if (pData !== "{}") { // If for any reason we could not tet this config, then we just exclude this bot to improve resiliency. - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - devTeam.plotters[j] = configObj; - - } - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); - } - } - break; - } - - case 'File System': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> Entering Case."); } - - try { - - let fs = require('fs'); - - let fileName = '../Plotters/' + devTeam.codeName + '/' + plotter.repo + '/' + plotter.configFile; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - devTeam.plotters[j] = configObj; - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); - } - } - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File = " + fileName + " Error = " + err); - } - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> Entering Case."); } - - getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } - - responsesReceived++; - - pData = pData.toString(); - pData = pData.trim(); // remove first byte with some encoding. - - let configObj = JSON.parse(pData); - - /* Since we are going to replace the full plotter object and we dont want to lose these two properties, we do this: */ - - configObj.repo = plotter.repo; - configObj.configFile = plotter.configFile; - - devTeam.plotters[j] = configObj; - - if (requestsSent === responsesReceived) { - - startHtttpServer(); - - } - - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); - } - } - break; - } - } - } - - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Error = " + err); - } - } - } - - function addStoragePermissions(pConfigObj) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Entering function."); } - - if (pConfigObj.storage !== undefined) { return; } // If this information is at the config file, then we take it, otherwise, we define it here. - - let fileUri; - let sas; - - switch (serverConfig.environment) { - - case "Develop": { - - fileUri = serverConfig.productsStorage.Develop.fileUri; - sas = serverConfig.productsStorage.Develop.sas; - - break; - } - - case "Production": { - - fileUri = serverConfig.productsStorage.Production.fileUri; - sas = serverConfig.productsStorage.Production.sas; - - break; - } - } - - pConfigObj.storage = { - sas: sas, - fileUri: fileUri - }; - - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Error = " + err); - } - } - - } - catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> Error = " + err); } } } + + function startHtttpServer() { if (CONSOLE_LOG === true) { console.log("[INFO] startHtttpServer -> Entering function."); } @@ -1192,7 +328,7 @@ function onBrowserRequest(request, response) { if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } - getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + storage.getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) function onDataArrived(pData) { @@ -1216,7 +352,7 @@ function onBrowserRequest(request, response) { if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } - getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) function onDataArrived(pData) { @@ -1239,7 +375,7 @@ function onBrowserRequest(request, response) { if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } - getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + storage.getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) function onDataArrived(pData) { @@ -1263,7 +399,7 @@ function onBrowserRequest(request, response) { if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } - getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) function onDataArrived(pData) { @@ -1594,176 +730,5 @@ function respondWithFile(fileName, response) { } } -function getGithubData(pOrg, pRepo, pPath, callBackFunction) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> Entering function."); } - - let cacheVersion = githubData.get(pOrg + '.' + pRepo + '.' + pPath) - - if (cacheVersion !== undefined) { - - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } - - callBackFunction(cacheVersion); - - } else { - - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } - - const octokit = require('@octokit/rest')() - global.atob = require("atob"); - - let owner = pOrg; - let repo = pRepo; - let branch = "master"; - let page = 1; - let per_page = 100; - let ref = "master"; - let path = pPath; - - octokit.repos.getContent({ owner, repo, path, ref }, onContent); - - function onContent(error, result) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> error = " + error); } - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Github.com responded to request " + pOrg + '.' + pRepo + '.' + pPath + " with result = " + result.toString().substring(0, 100)); } - - if (error !== null) { console.log("[ERROR] getGithubData -> onContent -> " + error); } - - let decoded = atob(result.data.content); - - /* - - This method usually brings up to 3 characters of encoding info at the begining of the JSON string which destroys the JSON format. - We will run the following code with the intention to eliminate this problem. - - */ - - let cleanString = decoded; - let jsonTest; - - try { - jsonTest = JSON.parse(cleanString); - } catch (err) { - cleanString = decoded.substring(1); - try { - jsonTest = JSON.parse(cleanString); - } catch (err) { - cleanString = decoded.substring(2); - try { - jsonTest = JSON.parse(cleanString); - } catch (err) { - cleanString = decoded.substring(3); - try { - jsonTest = JSON.parse(cleanString); - } catch (err) { - console.log("[INFO] getGithubData -> onContent -> Could not clean the data received -> Data = " + decoded.substring(0, 50)); - } - } - } - } - - githubData.set(pOrg + '.' + pRepo + '.' + pPath, cleanString); - - callBackFunction(cleanString); - - } catch (err) { - console.log("[ERROR] getGithubData -> onContent -> err.message = " + err.message); - callBackFunction("{}"); - } - } - } - - } catch (err) { - console.log("[ERROR] getGithubData -> err.message = " + err.message); - callBackFunction("{}"); - } -} - -function getStorageData(pOrg, pRepo, pPath, callBackFunction) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pOrg = " + pOrg); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pRepo = " + pRepo); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pPath = " + pPath); } - - let cacheVersion = storageData.get(pOrg + '.' + pRepo + '.' + pPath) - - if (cacheVersion !== undefined) { - - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } - - callBackFunction(cacheVersion); - - } else { - - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } - - let storage = require('azure-storage'); - let connectionString; - - switch (serverConfig.environment) { - - case "Develop": { - - connectionString = serverConfig.configAndPlugins.Develop.connectionString; - break; - } - - case "Production": { - - connectionString = serverConfig.configAndPlugins.Production.connectionString; - break; - } - } - - let blobService = storage.createBlobService(connectionString); - - blobService.getBlobToText('aaplatform', pOrg + "/" + pRepo + "/" + pPath, onFileReceived); - function onFileReceived(err, text, response) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] getStorageData -> onFileReceived -> response = " + JSON.stringify(response)); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pOrg = " + pOrg); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pRepo = " + pRepo); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pPath = " + pPath); } - - storageData.set(pOrg + '.' + pRepo + '.' + pPath, text); - - if (err !== null || text === null) { - - console.log("[ERROR] getStorageData -> onFileReceived -> Error Received from Storage Library. "); - console.log("[ERROR] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); - console.log("[ERROR] getStorageData -> onFileReceived -> Returning an empty JSON object string. "); - - callBackFunction("{}"); - return; - - } - - callBackFunction(text); - - } catch (err) { - console.log("[ERROR] getStorageData -> onFileReceived -> err.message = " + err.message); - callBackFunction("{}"); - } - } - } - - } catch (err) { - console.log("[ERROR] getStorageData -> err.message = " + err.message); - callBackFunction("{}"); - } -} \ No newline at end of file From eb2a147c7ddf90e00de130fdeaf1e37775b19961 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 May 2018 09:04:53 +0200 Subject: [PATCH 032/334] Code Cleaning --- Project.njsproj | 3 + Server/CloudScripts.js | 136 +++++++++++++++++++++++++ Server/ConfigReader.js | 220 ++++++++++++++++++++--------------------- Server/Github.js | 20 ++-- Server/Storage.js | 34 +++---- server.js | 72 +++++++------- 6 files changed, 311 insertions(+), 174 deletions(-) create mode 100644 Server/CloudScripts.js diff --git a/Project.njsproj b/Project.njsproj index 0295f4eb0..ba464d3a2 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -63,6 +63,9 @@ Code + + Code + Code diff --git a/Server/CloudScripts.js b/Server/CloudScripts.js new file mode 100644 index 000000000..1ea8ae236 --- /dev/null +++ b/Server/CloudScripts.js @@ -0,0 +1,136 @@ +exports.newConfigReader = function newConfigReader() { + + let thisObject = { + loadCloudScripts: loadCloudScripts, + initialize: initialize + } + + const GITHUB = require('../Server/Github'); + let github = GITHUB.newGithub(); + + const STORAGE = require('../Server/Storage'); + let storage = STORAGE.newStorage(); + + let serverConfig; + let githubData; + let storageData; + let ecosystem; + let ecosystemObject; + + return thisObject; + + function initialize(pEcosystem, pEcosystemObject, pServerConfig, pGithubData, pStorageData, callBackFunction) { + + serverConfig = pServerConfig; + githubData = pGithubData; + storageData = pStorageData; + ecosystem = pEcosystem; + ecosystemObject = pEcosystemObject; + + } + + function loadCloudScripts(callBackfunction) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> loadCloudScripts -> Entering function."); } + + /* + + First we will get a list of the scripts to be loaded, and then we will load them into the cache. + + */ + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> loadCloudScripts -> Cloud -> Entering Case."); } + + storage.getStorageData('AdvancedAlgos', 'AACloud', 'web.config.json', onDataArrived); + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> loadCloudScripts -> Cloud -> onDataArrived -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + dataObject = JSON.parse(data); + retrieveScripts(); + } + catch (err) { + console.log("[ERROR] CloudScripts -> loadCloudScripts -> Cloud -> onDataArrived -> Error = " + err); + } + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> loadCloudScripts -> File System -> Entering Case."); } + + let fs = require('fs'); + try { + let fileName = '../AACloud/web.config.json'; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, file) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> loadCloudScripts -> File System -> onFileRead -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + dataObject = JSON.parse(data); + retrieveScripts(); + } + catch (err) { + console.log("[ERROR] CloudScripts -> loadCloudScripts -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] CloudScripts -> loadCloudScripts -> File System -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> loadCloudScripts -> Github -> Entering Case."); } + + github.getGithubData('AdvancedAlgos', 'AACloud', 'web.config.json', onDataArrived); + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> loadCloudScripts -> Github -> onDataArrived -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + dataObject = JSON.parse(data); + retrieveScripts(); + } + catch (err) { + console.log("[ERROR] CloudScripts -> loadCloudScripts -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + catch (err) { + console.log("[ERROR] CloudScripts -> loadCloudScripts -> Error = " + err); + } + } + +} \ No newline at end of file diff --git a/Server/ConfigReader.js b/Server/ConfigReader.js index 3bf5339cb..21c605894 100644 --- a/Server/ConfigReader.js +++ b/Server/ConfigReader.js @@ -33,7 +33,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readServerConfig -> Entering function."); } let fs = require('fs'); @@ -44,7 +44,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readServerConfig -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readServerConfig -> onFileRead -> Entering function."); } let fileText; @@ -53,7 +53,7 @@ serverConfig = JSON.parse(fileText); - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readServerConfig -> onFileRead -> fileText = " + fileText); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readServerConfig -> onFileRead -> fileText = " + fileText); } CONSOLE_LOG = serverConfig.webServerLog.console; LOG_FILE_CONTENT = serverConfig.webServerLog.fileContent; @@ -66,13 +66,13 @@ callBackFunction(serverConfig); } catch (err) { - console.log("[ERROR] initialize -> readServerConfig -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readServerConfig -> onFileRead -> File = " + fileName + " Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readServerConfig -> Error = " + err); + console.log("[ERROR] ConfigReader -> readServerConfig -> Error = " + err); } } } @@ -85,7 +85,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readEcosystemConfig -> Entering function."); } /* @@ -99,15 +99,15 @@ case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readEcosystemConfig -> Cloud -> Entering Case."); } - storage.getStorageData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) + storage.getStorageData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readEcosystemConfig -> Cloud -> onDataArrived -> Entering function."); } ecosystem = pData.toString(); ecosystem = ecosystem.trim(); // remove first byte with some encoding. @@ -116,7 +116,7 @@ readHostsConfigs(); } catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); } } @@ -125,7 +125,7 @@ case 'File System': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readEcosystemConfig -> File System -> Entering Case."); } let fs = require('fs'); try { @@ -136,7 +136,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readEcosystemConfig -> File System -> onFileRead -> Entering function."); } ecosystem = file.toString(); ecosystem = ecosystem.trim(); // remove first byte with some encoding. @@ -145,28 +145,28 @@ readHostsConfigs(); } catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> File System -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readEcosystemConfig -> File System -> File = " + fileName + " Error = " + err); } break; } case 'Github': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readEcosystemConfig -> Github -> Entering Case."); } - github.getGithubData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived) + github.getGithubData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readEcosystemConfig -> Github -> onDataArrived -> Entering function."); } ecosystem = pData.toString(); ecosystem = ecosystem.trim(); // remove first byte with some encoding. @@ -175,7 +175,7 @@ readHostsConfigs(); } catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); } } break; @@ -183,7 +183,7 @@ } } catch (err) { - console.log("[ERROR] initialize -> readEcosystemConfig -> Error = " + err); + console.log("[ERROR] ConfigReader -> readEcosystemConfig -> Error = " + err); } } @@ -191,7 +191,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> Entering function."); } let requestsSent = 0; let responsesReceived = 0; @@ -207,7 +207,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Entering function."); } /* In this first section we will load the competitions configurations. */ @@ -221,18 +221,18 @@ case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Cloud -> Entering Case."); } - storage.getStorageData(host.codeName, competition.repo, competition.configFile, onDataArrived) + storage.getStorageData(host.codeName, competition.repo, competition.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> competition.repo = " + competition.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -256,7 +256,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getCompetitions -> Cloud -> onDataArrived -> Error = " + err); } } break; @@ -265,7 +265,7 @@ case 'File System': { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> File System -> Entering Case."); } let fs = require('fs'); @@ -276,8 +276,8 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> fileName = " + fileName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> fileName = " + fileName); } responsesReceived++; @@ -300,12 +300,12 @@ } } catch (err) { - console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> File System -> onFileRead -> File = " + fileName + " Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> File System -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getCompetitions -> File System -> File = " + fileName + " Error = " + err); } break; @@ -313,18 +313,18 @@ case 'Github': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Github -> Entering Case."); } - github.getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived) + github.getGithubData(host.codeName, competition.repo, competition.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> competition.repo = " + competition.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> competition.repo = " + competition.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -348,7 +348,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getCompetitions -> Github -> onDataArrived -> Error = " + err); } } @@ -358,7 +358,7 @@ } } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getCompetitions -> getCompetitions -> Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getCompetitions -> getCompetitions -> Error = " + err); } } @@ -366,7 +366,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> getPlotters -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> getPlotters -> Entering function."); } /* In this second section we will load the competition plotters configurations. */ @@ -380,18 +380,18 @@ case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Cloud -> Entering Case."); } - storage.getStorageData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + storage.getStorageData(host.codeName, plotter.repo, plotter.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -415,7 +415,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); } } @@ -424,7 +424,7 @@ case 'File System': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> File System -> Entering Case."); } try { @@ -437,8 +437,8 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } responsesReceived++; @@ -461,13 +461,13 @@ } } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> File System -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getPlotters -> File System -> File = " + fileName + " Error = " + err); } break; @@ -475,18 +475,18 @@ case 'Github': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Github -> Entering Case."); } - github.getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived) + github.getGithubData(host.codeName, plotter.repo, plotter.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> host.codeName = " + host.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> host.codeName = " + host.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -510,7 +510,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); } } break; @@ -519,13 +519,13 @@ } } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> getPlotters -> getCompetitions -> Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> getPlotters -> getCompetitions -> Error = " + err); } } } } catch (err) { - console.log("[ERROR] initialize -> readHostsConfigs -> Error = " + err); + console.log("[ERROR] ConfigReader -> readHostsConfigs -> Error = " + err); } } @@ -533,7 +533,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> Entering function."); } /* @@ -559,7 +559,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Entering function."); } /* In the next section we are loading the bots configurations. */ @@ -573,18 +573,18 @@ case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Cloud -> Entering Case."); } - storage.getStorageData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + storage.getStorageData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> bot.repo = " + bot.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -614,7 +614,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getBots -> Cloud -> onDataArrived -> Error = " + err); } } break; @@ -623,7 +623,7 @@ case 'File System': { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> File System -> Entering Case."); } let fs = require('fs'); @@ -634,8 +634,8 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> fileName = " + fileName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> fileName = " + fileName); } responsesReceived++; @@ -660,13 +660,13 @@ } } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getBots -> File System -> onFileRead -> File = " + fileName + " Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> File System -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getBots -> File System -> File = " + fileName + " Error = " + err); } break; @@ -674,18 +674,18 @@ case 'Github': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Github -> Entering Case."); } - github.getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived) + github.getGithubData(devTeam.codeName, bot.repo, bot.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> bot.repo = " + bot.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> bot.repo = " + bot.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -711,7 +711,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getBots -> Github -> onDataArrived -> Error = " + err); } } break; @@ -721,7 +721,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getBots -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getBots -> Error = " + err); } } @@ -729,7 +729,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Entering Function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Entering Function."); } /* In the next section we are loading the plotters configurations. */ @@ -743,18 +743,18 @@ case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Cloud -> Entering Case."); } - storage.getStorageData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + storage.getStorageData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -781,7 +781,7 @@ } } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Cloud -> onDataArrived -> Error = " + err); } } break; @@ -789,7 +789,7 @@ case 'File System': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> File System -> Entering Case."); } try { @@ -802,8 +802,8 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> fileName = " + fileName); } responsesReceived++; @@ -826,30 +826,30 @@ } } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getPlotters -> File System -> onFileRead -> File = " + fileName + " Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getPlotters -> File = " + fileName + " Error = " + err); } break; } case 'Github': { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Github -> Entering Case."); } - github.getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived) + github.getGithubData(devTeam.codeName, plotter.repo, plotter.configFile, onDataArrived); function onDataArrived(pData) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> devTeam.codeName = " + devTeam.codeName); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> plotter.repo = " + plotter.repo); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> pData = " + pData); } responsesReceived++; @@ -873,7 +873,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Github -> onDataArrived -> Error = " + err); } } break; @@ -883,7 +883,7 @@ } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> getPlotters -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> getPlotters -> Error = " + err); } } } @@ -892,7 +892,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readDevTeamsConfigs -> addStoragePermissions -> Entering function."); } if (pConfigObj.storage !== undefined) { return; } // If this information is at the config file, then we take it, otherwise, we define it here. @@ -925,16 +925,14 @@ } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> addStoragePermissions -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> addStoragePermissions -> Error = " + err); } } } catch (err) { - console.log("[ERROR] initialize -> readDevTeamsConfigs -> Error = " + err); + console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> Error = " + err); } } } - - } \ No newline at end of file diff --git a/Server/Github.js b/Server/Github.js index 063abcc55..af9dac3b7 100644 --- a/Server/Github.js +++ b/Server/Github.js @@ -19,19 +19,19 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Github -> getGithubData -> Entering function."); } let cacheVersion = githubData.get(pOrg + '.' + pRepo + '.' + pPath) if (cacheVersion !== undefined) { - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Github -> getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } callBackFunction(cacheVersion); } else { - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Github -> getGithubData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } const octokit = require('@octokit/rest')() global.atob = require("atob"); @@ -50,11 +50,11 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> error = " + error); } - if (CONSOLE_LOG === true) { console.log("[INFO] getGithubData -> onContent -> Github.com responded to request " + pOrg + '.' + pRepo + '.' + pPath + " with result = " + result.toString().substring(0, 100)); } + if (CONSOLE_LOG === true) { console.log("[INFO] Github -> getGithubData -> onContent -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Github -> getGithubData -> onContent -> error = " + error); } + if (CONSOLE_LOG === true) { console.log("[INFO] Github -> getGithubData -> onContent -> Github.com responded to request " + pOrg + '.' + pRepo + '.' + pPath + " with result = " + result.toString().substring(0, 100)); } - if (error !== null) { console.log("[ERROR] getGithubData -> onContent -> " + error); } + if (error !== null) { console.log("[ERROR] Github -> getGithubData -> onContent -> " + error); } let decoded = atob(result.data.content); @@ -83,7 +83,7 @@ try { jsonTest = JSON.parse(cleanString); } catch (err) { - console.log("[INFO] getGithubData -> onContent -> Could not clean the data received -> Data = " + decoded.substring(0, 50)); + console.log("[INFO] Github -> getGithubData -> onContent -> Could not clean the data received -> Data = " + decoded.substring(0, 50)); } } } @@ -94,14 +94,14 @@ callBackFunction(cleanString); } catch (err) { - console.log("[ERROR] getGithubData -> onContent -> err.message = " + err.message); + console.log("[ERROR] Github -> getGithubData -> onContent -> err.message = " + err.message); callBackFunction("{}"); } } } } catch (err) { - console.log("[ERROR] getGithubData -> err.message = " + err.message); + console.log("[ERROR] Github -> getGithubData -> err.message = " + err.message); callBackFunction("{}"); } } diff --git a/Server/Storage.js b/Server/Storage.js index eda2a80ef..1c242fcb1 100644 --- a/Server/Storage.js +++ b/Server/Storage.js @@ -21,22 +21,22 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pOrg = " + pOrg); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pRepo = " + pRepo); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> pPath = " + pPath); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> pOrg = " + pOrg); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> pRepo = " + pRepo); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> pPath = " + pPath); } let cacheVersion = storageData.get(pOrg + '.' + pRepo + '.' + pPath) if (cacheVersion !== undefined) { - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " found at cache."); } callBackFunction(cacheVersion); } else { - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> " + pOrg + '.' + pRepo + '.' + pPath + " NOT found at cache."); } let storage = require('azure-storage'); let connectionString; @@ -65,20 +65,20 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] getStorageData -> onFileReceived -> response = " + JSON.stringify(response)); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pOrg = " + pOrg); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pRepo = " + pRepo); } - if (CONSOLE_LOG === true) { console.log("[INFO] getStorageData -> onFileReceived -> pPath = " + pPath); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> response = " + JSON.stringify(response)); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> pOrg = " + pOrg); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> pRepo = " + pRepo); } + if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> pPath = " + pPath); } storageData.set(pOrg + '.' + pRepo + '.' + pPath, text); if (err !== null || text === null) { - console.log("[ERROR] getStorageData -> onFileReceived -> Error Received from Storage Library. "); - console.log("[ERROR] getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); - console.log("[ERROR] getStorageData -> onFileReceived -> Returning an empty JSON object string. "); + console.log("[ERROR] Storage -> getStorageData -> onFileReceived -> Error Received from Storage Library. "); + console.log("[ERROR] Storage -> getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); + console.log("[ERROR] Storage -> getStorageData -> onFileReceived -> Returning an empty JSON object string. "); callBackFunction("{}"); return; @@ -88,14 +88,14 @@ callBackFunction(text); } catch (err) { - console.log("[ERROR] getStorageData -> onFileReceived -> err.message = " + err.message); + console.log("[ERROR] Storage -> getStorageData -> onFileReceived -> err.message = " + err.message); callBackFunction("{}"); } } } } catch (err) { - console.log("[ERROR] getStorageData -> err.message = " + err.message); + console.log("[ERROR] Storage -> getStorageData -> err.message = " + err.message); callBackFunction("{}"); } } diff --git a/server.js b/server.js index 594b24b01..accd59105 100644 --- a/server.js +++ b/server.js @@ -3,7 +3,7 @@ CONSOLE_LOG = false; LOG_FILE_CONTENT = false; -if (CONSOLE_LOG === true) { console.log("[INFO] Node Server Starting."); } +if (CONSOLE_LOG === true) { console.log("[INFO] server -> Node Server Starting."); } let serverConfig; @@ -28,7 +28,7 @@ initialize(); function initialize() { - if (CONSOLE_LOG === true) { console.log("[INFO] initialize -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> initialize -> Entering function."); } /* Clear all cached information. */ @@ -64,7 +64,7 @@ function initialize() { function startHtttpServer() { - if (CONSOLE_LOG === true) { console.log("[INFO] startHtttpServer -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> startHtttpServer -> Entering function."); } try { @@ -75,14 +75,14 @@ function startHtttpServer() { } } catch (err) { - console.log("[ERROR] startHtttpServer -> Error = " + err); + console.log("[ERROR] server -> startHtttpServer -> Error = " + err); } } function onBrowserRequest(request, response) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> request.url = " + request.url); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> request.url = " + request.url); } var htmlResponse; var requestParameters = request.url.split("/"); @@ -115,7 +115,7 @@ function onBrowserRequest(request, response) { function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> Entering function."); } try { @@ -138,7 +138,7 @@ function onBrowserRequest(request, response) { function addToFileContent(pDevTeamsOrHosts) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> addToFileContent -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addToFileContent -> Entering function."); } for (let i = 0; i < pDevTeamsOrHosts.length; i++) { @@ -174,7 +174,7 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] server -> onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } } @@ -203,7 +203,7 @@ function onBrowserRequest(request, response) { function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> Entering function."); } try { @@ -226,7 +226,7 @@ function onBrowserRequest(request, response) { function addToFileContent(pDevTeamsOrHosts) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> addToFileContent -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addToFileContent -> Entering function."); } for (let i = 0; i < pDevTeamsOrHosts.length; i++) { @@ -267,7 +267,7 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] server -> onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } } @@ -295,7 +295,7 @@ function onBrowserRequest(request, response) { function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> Entering function."); } try { @@ -308,7 +308,7 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] server -> onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } } } @@ -326,9 +326,9 @@ function onBrowserRequest(request, response) { case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } - storage.getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + storage.getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived); function onDataArrived(pData) { @@ -341,7 +341,7 @@ function onBrowserRequest(request, response) { case 'File System': { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } respondWithFile('../Plotters/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response); @@ -350,9 +350,9 @@ function onBrowserRequest(request, response) { case 'Github': { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } - github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived); function onDataArrived(pData) { @@ -373,9 +373,9 @@ function onBrowserRequest(request, response) { case 'Cloud': { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } - storage.getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + storage.getStorageData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived); function onDataArrived(pData) { @@ -388,7 +388,7 @@ function onBrowserRequest(request, response) { case 'File System': { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } respondWithFile('../Plotters/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response); @@ -397,9 +397,9 @@ function onBrowserRequest(request, response) { case 'Github': { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } - github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived) + github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived); function onDataArrived(pData) { @@ -459,7 +459,7 @@ function onBrowserRequest(request, response) { function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> Entering function."); } try { @@ -470,7 +470,7 @@ function onBrowserRequest(request, response) { function addPlotters() { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> addPlotters -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addPlotters -> Entering function."); } let htmlLinePlotter = '' + '\n' + ' ' @@ -486,7 +486,7 @@ function onBrowserRequest(request, response) { function addScript(pDevTeamsOrHosts) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> addPlotters -> addScript -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addPlotters -> addScript -> Entering function."); } for (let i = 0; i < pDevTeamsOrHosts.length; i++) { @@ -542,7 +542,7 @@ function onBrowserRequest(request, response) { function addImages() { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> addImages -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addImages -> Entering function."); } const htmlLine = '' + '\n' + ' ' @@ -553,7 +553,7 @@ function onBrowserRequest(request, response) { function addScript(pDevTeams) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> onFileRead -> addImages -> addScript -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addImages -> addScript -> Entering function."); } for (let i = 0; i < pDevTeams.length; i++) { @@ -629,7 +629,7 @@ function onBrowserRequest(request, response) { } catch (err) { - console.log("[ERROR] onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] server -> onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } } } @@ -645,7 +645,7 @@ function onBrowserRequest(request, response) { function sendResponseToBrowser(htmlResponse) { - if (CONSOLE_LOG === true) { console.log("[INFO] onBrowserRequest -> sendResponseToBrowser -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> sendResponseToBrowser -> Entering function."); } response.writeHead(200, { 'Content-Type': 'text/html' }); response.write(htmlResponse); @@ -656,7 +656,7 @@ function onBrowserRequest(request, response) { function respondWithContent(content, response) { - if (CONSOLE_LOG === true) { console.log("[INFO] respondWithContent -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> respondWithContent -> Entering function."); } try { @@ -678,7 +678,7 @@ function respondWithContent(content, response) { function respondWithFile(fileName, response) { - if (CONSOLE_LOG === true) { console.log("[INFO] respondWithFile -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> respondWithFile -> Entering function."); } let fs = require('fs'); try { @@ -687,7 +687,7 @@ function respondWithFile(fileName, response) { function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log("[INFO] respondWithFile -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> respondWithFile -> onFileRead -> Entering function."); } try { let htmlResponse = file.toString(); @@ -706,7 +706,7 @@ function respondWithFile(fileName, response) { catch (err) { returnEmptyArray(); console.log("File Not Found: " + fileName); - console.log("[ERROR] respondWithFile -> onFileRead -> File Not Found: " + fileName + " or Error = " + err); + console.log("[ERROR] server -> respondWithFile -> onFileRead -> File Not Found: " + fileName + " or Error = " + err); } } @@ -717,7 +717,7 @@ function respondWithFile(fileName, response) { function returnEmptyArray() { - if (CONSOLE_LOG === true) { console.log("[INFO] respondWithFile -> returnEmptyArray -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] server -> respondWithFile -> returnEmptyArray -> Entering function."); } response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. response.setHeader("Pragma", "no-cache"); // HTTP 1.0. From c8d1e26abd695be7ae825ce653d054de19b303c5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 May 2018 12:31:02 +0200 Subject: [PATCH 033/334] Cloud Web Scripts downloaded to the browser --- Scripts/require.js | 2145 ++++++++++++++++++++++++++++++++++++++++ Server/CloudScripts.js | 170 +++- index.html | 1 + server.js | 83 +- 4 files changed, 2390 insertions(+), 9 deletions(-) create mode 100644 Scripts/require.js diff --git a/Scripts/require.js b/Scripts/require.js new file mode 100644 index 000000000..051e284b0 --- /dev/null +++ b/Scripts/require.js @@ -0,0 +1,2145 @@ +/** vim: et:ts=4:sw=4:sts=4 + * @license RequireJS 2.3.5 Copyright jQuery Foundation and other contributors. + * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE + */ +//Not using strict: uneven strict support in browsers, #392, and causes +//problems with requirejs.exec()/transpiler plugins that may not be strict. +/*jslint regexp: true, nomen: true, sloppy: true */ +/*global window, navigator, document, importScripts, setTimeout, opera */ + +var requirejs, require, define; +(function (global, setTimeout) { + var req, s, head, baseElement, dataMain, src, + interactiveScript, currentlyAddingScript, mainScript, subPath, + version = '2.3.5', + commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg, + cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, + jsSuffixRegExp = /\.js$/, + currDirRegExp = /^\.\//, + op = Object.prototype, + ostring = op.toString, + hasOwn = op.hasOwnProperty, + isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), + isWebWorker = !isBrowser && typeof importScripts !== 'undefined', + //PS3 indicates loaded and complete, but need to wait for complete + //specifically. Sequence is 'loading', 'loaded', execution, + // then 'complete'. The UA check is unfortunate, but not sure how + //to feature test w/o causing perf issues. + readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? + /^complete$/ : /^(complete|loaded)$/, + defContextName = '_', + //Oh the tragedy, detecting opera. See the usage of isOpera for reason. + isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', + contexts = {}, + cfg = {}, + globalDefQueue = [], + useInteractive = false; + + //Could match something like ')//comment', do not lose the prefix to comment. + function commentReplace(match, singlePrefix) { + return singlePrefix || ''; + } + + function isFunction(it) { + return ostring.call(it) === '[object Function]'; + } + + function isArray(it) { + return ostring.call(it) === '[object Array]'; + } + + /** + * Helper function for iterating over an array. If the func returns + * a true value, it will break out of the loop. + */ + function each(ary, func) { + if (ary) { + var i; + for (i = 0; i < ary.length; i += 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + /** + * Helper function for iterating over an array backwards. If the func + * returns a true value, it will break out of the loop. + */ + function eachReverse(ary, func) { + if (ary) { + var i; + for (i = ary.length - 1; i > -1; i -= 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + function getOwn(obj, prop) { + return hasProp(obj, prop) && obj[prop]; + } + + /** + * Cycles over properties in an object and calls a function for each + * property value. If the function returns a truthy value, then the + * iteration is stopped. + */ + function eachProp(obj, func) { + var prop; + for (prop in obj) { + if (hasProp(obj, prop)) { + if (func(obj[prop], prop)) { + break; + } + } + } + } + + /** + * Simple function to mix in properties from source into target, + * but only if target does not already have a property of the same name. + */ + function mixin(target, source, force, deepStringMixin) { + if (source) { + eachProp(source, function (value, prop) { + if (force || !hasProp(target, prop)) { + if (deepStringMixin && typeof value === 'object' && value && + !isArray(value) && !isFunction(value) && + !(value instanceof RegExp)) { + + if (!target[prop]) { + target[prop] = {}; + } + mixin(target[prop], value, force, deepStringMixin); + } else { + target[prop] = value; + } + } + }); + } + return target; + } + + //Similar to Function.prototype.bind, but the 'this' object is specified + //first, since it is easier to read/figure out what 'this' will be. + function bind(obj, fn) { + return function () { + return fn.apply(obj, arguments); + }; + } + + function scripts() { + return document.getElementsByTagName('script'); + } + + function defaultOnError(err) { + throw err; + } + + //Allow getting a global that is expressed in + //dot notation, like 'a.b.c'. + function getGlobal(value) { + if (!value) { + return value; + } + var g = global; + each(value.split('.'), function (part) { + g = g[part]; + }); + return g; + } + + /** + * Constructs an error with a pointer to an URL with more information. + * @param {String} id the error ID that maps to an ID on a web page. + * @param {String} message human readable error. + * @param {Error} [err] the original error, if there is one. + * + * @returns {Error} + */ + function makeError(id, msg, err, requireModules) { + var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); + e.requireType = id; + e.requireModules = requireModules; + if (err) { + e.originalError = err; + } + return e; + } + + if (typeof define !== 'undefined') { + //If a define is already in play via another AMD loader, + //do not overwrite. + return; + } + + if (typeof requirejs !== 'undefined') { + if (isFunction(requirejs)) { + //Do not overwrite an existing requirejs instance. + return; + } + cfg = requirejs; + requirejs = undefined; + } + + //Allow for a require config object + if (typeof require !== 'undefined' && !isFunction(require)) { + //assume it is a config object. + cfg = require; + require = undefined; + } + + function newContext(contextName) { + var inCheckLoaded, Module, context, handlers, + checkLoadedTimeoutId, + config = { + //Defaults. Do not set a default for map + //config to speed up normalize(), which + //will run faster if there is no default. + waitSeconds: 7, + baseUrl: './', + paths: {}, + bundles: {}, + pkgs: {}, + shim: {}, + config: {} + }, + registry = {}, + //registry of just enabled modules, to speed + //cycle breaking code when lots of modules + //are registered, but not activated. + enabledRegistry = {}, + undefEvents = {}, + defQueue = [], + defined = {}, + urlFetched = {}, + bundlesMap = {}, + requireCounter = 1, + unnormalizedCounter = 1; + + /** + * Trims the . and .. from an array of path segments. + * It will keep a leading path segment if a .. will become + * the first path segment, to help with module name lookups, + * which act like paths, but can be remapped. But the end result, + * all paths that use this function should look normalized. + * NOTE: this method MODIFIES the input array. + * @param {Array} ary the array of path segments. + */ + function trimDots(ary) { + var i, part; + for (i = 0; i < ary.length; i++) { + part = ary[i]; + if (part === '.') { + ary.splice(i, 1); + i -= 1; + } else if (part === '..') { + // If at the start, or previous value is still .., + // keep them so that when converted to a path it may + // still work when converted to a path, even though + // as an ID it is less than ideal. In larger point + // releases, may be better to just kick out an error. + if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') { + continue; + } else if (i > 0) { + ary.splice(i - 1, 2); + i -= 2; + } + } + } + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @param {Boolean} applyMap apply the map config to the value. Should + * only be done if this normalization is for a dependency ID. + * @returns {String} normalized name + */ + function normalize(name, baseName, applyMap) { + var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, + foundMap, foundI, foundStarMap, starI, normalizedBaseParts, + baseParts = (baseName && baseName.split('/')), + map = config.map, + starMap = map && map['*']; + + //Adjust any relative paths. + if (name) { + name = name.split('/'); + lastIndex = name.length - 1; + + // If wanting node ID compatibility, strip .js from end + // of IDs. Have to do this here, and not in nameToUrl + // because node allows either .js or non .js to map + // to same file. + if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { + name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); + } + + // Starts with a '.' so need the baseName + if (name[0].charAt(0) === '.' && baseParts) { + //Convert baseName to array, and lop off the last part, + //so that . matches that 'directory' and not name of the baseName's + //module. For instance, baseName of 'one/two/three', maps to + //'one/two/three.js', but we want the directory, 'one/two' for + //this normalization. + normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); + name = normalizedBaseParts.concat(name); + } + + trimDots(name); + name = name.join('/'); + } + + //Apply map config if available. + if (applyMap && map && (baseParts || starMap)) { + nameParts = name.split('/'); + + outerLoop: for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join('/'); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = getOwn(map, baseParts.slice(0, j).join('/')); + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = getOwn(mapValue, nameSegment); + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break outerLoop; + } + } + } + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { + foundStarMap = getOwn(starMap, nameSegment); + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + // If the name points to a package's name, use + // the package main instead. + pkgMain = getOwn(config.pkgs, name); + + return pkgMain ? pkgMain : name; + } + + function removeScript(name) { + if (isBrowser) { + each(scripts(), function (scriptNode) { + if (scriptNode.getAttribute('data-requiremodule') === name && + scriptNode.getAttribute('data-requirecontext') === context.contextName) { + scriptNode.parentNode.removeChild(scriptNode); + return true; + } + }); + } + } + + function hasPathFallback(id) { + var pathConfig = getOwn(config.paths, id); + if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { + //Pop off the first array value, since it failed, and + //retry + pathConfig.shift(); + context.require.undef(id); + + //Custom require that does not do map translation, since + //ID is "absolute", already mapped/resolved. + context.makeRequire(null, { + skipMap: true + })([id]); + + return true; + } + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + /** + * Creates a module mapping that includes plugin prefix, module + * name, and path. If parentModuleMap is provided it will + * also normalize the name via require.normalize() + * + * @param {String} name the module name + * @param {String} [parentModuleMap] parent module map + * for the module name, used to resolve relative names. + * @param {Boolean} isNormalized: is the ID already normalized. + * This is true if this call is done for a define() module ID. + * @param {Boolean} applyMap: apply the map config to the ID. + * Should only be true if this map is for a dependency. + * + * @returns {Object} + */ + function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { + var url, pluginModule, suffix, nameParts, + prefix = null, + parentName = parentModuleMap ? parentModuleMap.name : null, + originalName = name, + isDefine = true, + normalizedName = ''; + + //If no name, then it means it is a require call, generate an + //internal name. + if (!name) { + isDefine = false; + name = '_@r' + (requireCounter += 1); + } + + nameParts = splitPrefix(name); + prefix = nameParts[0]; + name = nameParts[1]; + + if (prefix) { + prefix = normalize(prefix, parentName, applyMap); + pluginModule = getOwn(defined, prefix); + } + + //Account for relative paths if there is a base name. + if (name) { + if (prefix) { + if (isNormalized) { + normalizedName = name; + } else if (pluginModule && pluginModule.normalize) { + //Plugin is loaded, use its normalize method. + normalizedName = pluginModule.normalize(name, function (name) { + return normalize(name, parentName, applyMap); + }); + } else { + // If nested plugin references, then do not try to + // normalize, as it will not normalize correctly. This + // places a restriction on resourceIds, and the longer + // term solution is not to normalize until plugins are + // loaded and all normalizations to allow for async + // loading of a loader plugin. But for now, fixes the + // common uses. Details in #1131 + normalizedName = name.indexOf('!') === -1 ? + normalize(name, parentName, applyMap) : + name; + } + } else { + //A regular module. + normalizedName = normalize(name, parentName, applyMap); + + //Normalized name may be a plugin ID due to map config + //application in normalize. The map config values must + //already be normalized, so do not need to redo that part. + nameParts = splitPrefix(normalizedName); + prefix = nameParts[0]; + normalizedName = nameParts[1]; + isNormalized = true; + + url = context.nameToUrl(normalizedName); + } + } + + //If the id is a plugin id that cannot be determined if it needs + //normalization, stamp it with a unique ID so two matching relative + //ids that may conflict can be separate. + suffix = prefix && !pluginModule && !isNormalized ? + '_unnormalized' + (unnormalizedCounter += 1) : + ''; + + return { + prefix: prefix, + name: normalizedName, + parentMap: parentModuleMap, + unnormalized: !!suffix, + url: url, + originalName: originalName, + isDefine: isDefine, + id: (prefix ? + prefix + '!' + normalizedName : + normalizedName) + suffix + }; + } + + function getModule(depMap) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (!mod) { + mod = registry[id] = new context.Module(depMap); + } + + return mod; + } + + function on(depMap, name, fn) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (hasProp(defined, id) && + (!mod || mod.defineEmitComplete)) { + if (name === 'defined') { + fn(defined[id]); + } + } else { + mod = getModule(depMap); + if (mod.error && name === 'error') { + fn(mod.error); + } else { + mod.on(name, fn); + } + } + } + + function onError(err, errback) { + var ids = err.requireModules, + notified = false; + + if (errback) { + errback(err); + } else { + each(ids, function (id) { + var mod = getOwn(registry, id); + if (mod) { + //Set error on module, so it skips timeout checks. + mod.error = err; + if (mod.events.error) { + notified = true; + mod.emit('error', err); + } + } + }); + + if (!notified) { + req.onError(err); + } + } + } + + /** + * Internal method to transfer globalQueue items to this context's + * defQueue. + */ + function takeGlobalQueue() { + //Push all the globalDefQueue items into the context's defQueue + if (globalDefQueue.length) { + each(globalDefQueue, function(queueItem) { + var id = queueItem[0]; + if (typeof id === 'string') { + context.defQueueMap[id] = true; + } + defQueue.push(queueItem); + }); + globalDefQueue = []; + } + } + + handlers = { + 'require': function (mod) { + if (mod.require) { + return mod.require; + } else { + return (mod.require = context.makeRequire(mod.map)); + } + }, + 'exports': function (mod) { + mod.usingExports = true; + if (mod.map.isDefine) { + if (mod.exports) { + return (defined[mod.map.id] = mod.exports); + } else { + return (mod.exports = defined[mod.map.id] = {}); + } + } + }, + 'module': function (mod) { + if (mod.module) { + return mod.module; + } else { + return (mod.module = { + id: mod.map.id, + uri: mod.map.url, + config: function () { + return getOwn(config.config, mod.map.id) || {}; + }, + exports: mod.exports || (mod.exports = {}) + }); + } + } + }; + + function cleanRegistry(id) { + //Clean up machinery used for waiting modules. + delete registry[id]; + delete enabledRegistry[id]; + } + + function breakCycle(mod, traced, processed) { + var id = mod.map.id; + + if (mod.error) { + mod.emit('error', mod.error); + } else { + traced[id] = true; + each(mod.depMaps, function (depMap, i) { + var depId = depMap.id, + dep = getOwn(registry, depId); + + //Only force things that have not completed + //being defined, so still in the registry, + //and only if it has not been matched up + //in the module already. + if (dep && !mod.depMatched[i] && !processed[depId]) { + if (getOwn(traced, depId)) { + mod.defineDep(i, defined[depId]); + mod.check(); //pass false? + } else { + breakCycle(dep, traced, processed); + } + } + }); + processed[id] = true; + } + } + + function checkLoaded() { + var err, usingPathFallback, + waitInterval = config.waitSeconds * 1000, + //It is possible to disable the wait interval by using waitSeconds of 0. + expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), + noLoads = [], + reqCalls = [], + stillLoading = false, + needCycleCheck = true; + + //Do not bother if this call was a result of a cycle break. + if (inCheckLoaded) { + return; + } + + inCheckLoaded = true; + + //Figure out the state of all the modules. + eachProp(enabledRegistry, function (mod) { + var map = mod.map, + modId = map.id; + + //Skip things that are not enabled or in error state. + if (!mod.enabled) { + return; + } + + if (!map.isDefine) { + reqCalls.push(mod); + } + + if (!mod.error) { + //If the module should be executed, and it has not + //been inited and time is up, remember it. + if (!mod.inited && expired) { + if (hasPathFallback(modId)) { + usingPathFallback = true; + stillLoading = true; + } else { + noLoads.push(modId); + removeScript(modId); + } + } else if (!mod.inited && mod.fetched && map.isDefine) { + stillLoading = true; + if (!map.prefix) { + //No reason to keep looking for unfinished + //loading. If the only stillLoading is a + //plugin resource though, keep going, + //because it may be that a plugin resource + //is waiting on a non-plugin cycle. + return (needCycleCheck = false); + } + } + } + }); + + if (expired && noLoads.length) { + //If wait time expired, throw error of unloaded modules. + err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); + err.contextName = context.contextName; + return onError(err); + } + + //Not expired, check for a cycle. + if (needCycleCheck) { + each(reqCalls, function (mod) { + breakCycle(mod, {}, {}); + }); + } + + //If still waiting on loads, and the waiting load is something + //other than a plugin resource, or there are still outstanding + //scripts, then just try back later. + if ((!expired || usingPathFallback) && stillLoading) { + //Something is still waiting to load. Wait for it, but only + //if a timeout is not already in effect. + if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { + checkLoadedTimeoutId = setTimeout(function () { + checkLoadedTimeoutId = 0; + checkLoaded(); + }, 50); + } + } + + inCheckLoaded = false; + } + + Module = function (map) { + this.events = getOwn(undefEvents, map.id) || {}; + this.map = map; + this.shim = getOwn(config.shim, map.id); + this.depExports = []; + this.depMaps = []; + this.depMatched = []; + this.pluginMaps = {}; + this.depCount = 0; + + /* this.exports this.factory + this.depMaps = [], + this.enabled, this.fetched + */ + }; + + Module.prototype = { + init: function (depMaps, factory, errback, options) { + options = options || {}; + + //Do not do more inits if already done. Can happen if there + //are multiple define calls for the same module. That is not + //a normal, common case, but it is also not unexpected. + if (this.inited) { + return; + } + + this.factory = factory; + + if (errback) { + //Register for errors on this module. + this.on('error', errback); + } else if (this.events.error) { + //If no errback already, but there are error listeners + //on this module, set up an errback to pass to the deps. + errback = bind(this, function (err) { + this.emit('error', err); + }); + } + + //Do a copy of the dependency array, so that + //source inputs are not modified. For example + //"shim" deps are passed in here directly, and + //doing a direct modification of the depMaps array + //would affect that config. + this.depMaps = depMaps && depMaps.slice(0); + + this.errback = errback; + + //Indicate this module has be initialized + this.inited = true; + + this.ignore = options.ignore; + + //Could have option to init this module in enabled mode, + //or could have been previously marked as enabled. However, + //the dependencies are not known until init is called. So + //if enabled previously, now trigger dependencies as enabled. + if (options.enabled || this.enabled) { + //Enable this module and dependencies. + //Will call this.check() + this.enable(); + } else { + this.check(); + } + }, + + defineDep: function (i, depExports) { + //Because of cycles, defined callback for a given + //export can be called more than once. + if (!this.depMatched[i]) { + this.depMatched[i] = true; + this.depCount -= 1; + this.depExports[i] = depExports; + } + }, + + fetch: function () { + if (this.fetched) { + return; + } + this.fetched = true; + + context.startTime = (new Date()).getTime(); + + var map = this.map; + + //If the manager is for a plugin managed resource, + //ask the plugin to load it now. + if (this.shim) { + context.makeRequire(this.map, { + enableBuildCallback: true + })(this.shim.deps || [], bind(this, function () { + return map.prefix ? this.callPlugin() : this.load(); + })); + } else { + //Regular dependency. + return map.prefix ? this.callPlugin() : this.load(); + } + }, + + load: function () { + var url = this.map.url; + + //Regular dependency. + if (!urlFetched[url]) { + urlFetched[url] = true; + context.load(this.map.id, url); + } + }, + + /** + * Checks if the module is ready to define itself, and if so, + * define it. + */ + check: function () { + if (!this.enabled || this.enabling) { + return; + } + + var err, cjsModule, + id = this.map.id, + depExports = this.depExports, + exports = this.exports, + factory = this.factory; + + if (!this.inited) { + // Only fetch if not already in the defQueue. + if (!hasProp(context.defQueueMap, id)) { + this.fetch(); + } + } else if (this.error) { + this.emit('error', this.error); + } else if (!this.defining) { + //The factory could trigger another require call + //that would result in checking this module to + //define itself again. If already in the process + //of doing that, skip this work. + this.defining = true; + + if (this.depCount < 1 && !this.defined) { + if (isFunction(factory)) { + //If there is an error listener, favor passing + //to that instead of throwing an error. However, + //only do it for define()'d modules. require + //errbacks should not be called for failures in + //their callbacks (#699). However if a global + //onError is set, use that. + if ((this.events.error && this.map.isDefine) || + req.onError !== defaultOnError) { + try { + exports = context.execCb(id, factory, depExports, exports); + } catch (e) { + err = e; + } + } else { + exports = context.execCb(id, factory, depExports, exports); + } + + // Favor return value over exports. If node/cjs in play, + // then will not have a return value anyway. Favor + // module.exports assignment over exports object. + if (this.map.isDefine && exports === undefined) { + cjsModule = this.module; + if (cjsModule) { + exports = cjsModule.exports; + } else if (this.usingExports) { + //exports already set the defined value. + exports = this.exports; + } + } + + if (err) { + err.requireMap = this.map; + err.requireModules = this.map.isDefine ? [this.map.id] : null; + err.requireType = this.map.isDefine ? 'define' : 'require'; + return onError((this.error = err)); + } + + } else { + //Just a literal value + exports = factory; + } + + this.exports = exports; + + if (this.map.isDefine && !this.ignore) { + defined[id] = exports; + + if (req.onResourceLoad) { + var resLoadMaps = []; + each(this.depMaps, function (depMap) { + resLoadMaps.push(depMap.normalizedMap || depMap); + }); + req.onResourceLoad(context, this.map, resLoadMaps); + } + } + + //Clean up + cleanRegistry(id); + + this.defined = true; + } + + //Finished the define stage. Allow calling check again + //to allow define notifications below in the case of a + //cycle. + this.defining = false; + + if (this.defined && !this.defineEmitted) { + this.defineEmitted = true; + this.emit('defined', this.exports); + this.defineEmitComplete = true; + } + + } + }, + + callPlugin: function () { + var map = this.map, + id = map.id, + //Map already normalized the prefix. + pluginMap = makeModuleMap(map.prefix); + + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(pluginMap); + + on(pluginMap, 'defined', bind(this, function (plugin) { + var load, normalizedMap, normalizedMod, + bundleId = getOwn(bundlesMap, this.map.id), + name = this.map.name, + parentName = this.map.parentMap ? this.map.parentMap.name : null, + localRequire = context.makeRequire(map.parentMap, { + enableBuildCallback: true + }); + + //If current map is not normalized, wait for that + //normalized name to load instead of continuing. + if (this.map.unnormalized) { + //Normalize the ID if the plugin allows it. + if (plugin.normalize) { + name = plugin.normalize(name, function (name) { + return normalize(name, parentName, true); + }) || ''; + } + + //prefix and name should already be normalized, no need + //for applying map config again either. + normalizedMap = makeModuleMap(map.prefix + '!' + name, + this.map.parentMap, + true); + on(normalizedMap, + 'defined', bind(this, function (value) { + this.map.normalizedMap = normalizedMap; + this.init([], function () { return value; }, null, { + enabled: true, + ignore: true + }); + })); + + normalizedMod = getOwn(registry, normalizedMap.id); + if (normalizedMod) { + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(normalizedMap); + + if (this.events.error) { + normalizedMod.on('error', bind(this, function (err) { + this.emit('error', err); + })); + } + normalizedMod.enable(); + } + + return; + } + + //If a paths config, then just load that file instead to + //resolve the plugin, as it is built into that paths layer. + if (bundleId) { + this.map.url = context.nameToUrl(bundleId); + this.load(); + return; + } + + load = bind(this, function (value) { + this.init([], function () { return value; }, null, { + enabled: true + }); + }); + + load.error = bind(this, function (err) { + this.inited = true; + this.error = err; + err.requireModules = [id]; + + //Remove temp unnormalized modules for this module, + //since they will never be resolved otherwise now. + eachProp(registry, function (mod) { + if (mod.map.id.indexOf(id + '_unnormalized') === 0) { + cleanRegistry(mod.map.id); + } + }); + + onError(err); + }); + + //Allow plugins to load other code without having to know the + //context or how to 'complete' the load. + load.fromText = bind(this, function (text, textAlt) { + /*jslint evil: true */ + var moduleName = map.name, + moduleMap = makeModuleMap(moduleName), + hasInteractive = useInteractive; + + //As of 2.1.0, support just passing the text, to reinforce + //fromText only being called once per resource. Still + //support old style of passing moduleName but discard + //that moduleName in favor of the internal ref. + if (textAlt) { + text = textAlt; + } + + //Turn off interactive script matching for IE for any define + //calls in the text, then turn it back on at the end. + if (hasInteractive) { + useInteractive = false; + } + + //Prime the system by creating a module instance for + //it. + getModule(moduleMap); + + //Transfer any config to this other module. + if (hasProp(config.config, id)) { + config.config[moduleName] = config.config[id]; + } + + try { + req.exec(text); + } catch (e) { + return onError(makeError('fromtexteval', + 'fromText eval for ' + id + + ' failed: ' + e, + e, + [id])); + } + + if (hasInteractive) { + useInteractive = true; + } + + //Mark this as a dependency for the plugin + //resource + this.depMaps.push(moduleMap); + + //Support anonymous modules. + context.completeLoad(moduleName); + + //Bind the value of that module to the value for this + //resource ID. + localRequire([moduleName], load); + }); + + //Use parentName here since the plugin's name is not reliable, + //could be some weird string with no path that actually wants to + //reference the parentName's path. + plugin.load(map.name, localRequire, load, config); + })); + + context.enable(pluginMap, this); + this.pluginMaps[pluginMap.id] = pluginMap; + }, + + enable: function () { + enabledRegistry[this.map.id] = this; + this.enabled = true; + + //Set flag mentioning that the module is enabling, + //so that immediate calls to the defined callbacks + //for dependencies do not trigger inadvertent load + //with the depCount still being zero. + this.enabling = true; + + //Enable each dependency + each(this.depMaps, bind(this, function (depMap, i) { + var id, mod, handler; + + if (typeof depMap === 'string') { + //Dependency needs to be converted to a depMap + //and wired up to this module. + depMap = makeModuleMap(depMap, + (this.map.isDefine ? this.map : this.map.parentMap), + false, + !this.skipMap); + this.depMaps[i] = depMap; + + handler = getOwn(handlers, depMap.id); + + if (handler) { + this.depExports[i] = handler(this); + return; + } + + this.depCount += 1; + + on(depMap, 'defined', bind(this, function (depExports) { + if (this.undefed) { + return; + } + this.defineDep(i, depExports); + this.check(); + })); + + if (this.errback) { + on(depMap, 'error', bind(this, this.errback)); + } else if (this.events.error) { + // No direct errback on this module, but something + // else is listening for errors, so be sure to + // propagate the error correctly. + on(depMap, 'error', bind(this, function(err) { + this.emit('error', err); + })); + } + } + + id = depMap.id; + mod = registry[id]; + + //Skip special modules like 'require', 'exports', 'module' + //Also, don't call enable if it is already enabled, + //important in circular dependency cases. + if (!hasProp(handlers, id) && mod && !mod.enabled) { + context.enable(depMap, this); + } + })); + + //Enable each plugin that is used in + //a dependency + eachProp(this.pluginMaps, bind(this, function (pluginMap) { + var mod = getOwn(registry, pluginMap.id); + if (mod && !mod.enabled) { + context.enable(pluginMap, this); + } + })); + + this.enabling = false; + + this.check(); + }, + + on: function (name, cb) { + var cbs = this.events[name]; + if (!cbs) { + cbs = this.events[name] = []; + } + cbs.push(cb); + }, + + emit: function (name, evt) { + each(this.events[name], function (cb) { + cb(evt); + }); + if (name === 'error') { + //Now that the error handler was triggered, remove + //the listeners, since this broken Module instance + //can stay around for a while in the registry. + delete this.events[name]; + } + } + }; + + function callGetModule(args) { + //Skip modules already defined. + if (!hasProp(defined, args[0])) { + getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); + } + } + + function removeListener(node, func, name, ieName) { + //Favor detachEvent because of IE9 + //issue, see attachEvent/addEventListener comment elsewhere + //in this file. + if (node.detachEvent && !isOpera) { + //Probably IE. If not it will throw an error, which will be + //useful to know. + if (ieName) { + node.detachEvent(ieName, func); + } + } else { + node.removeEventListener(name, func, false); + } + } + + /** + * Given an event from a script node, get the requirejs info from it, + * and then removes the event listeners on the node. + * @param {Event} evt + * @returns {Object} + */ + function getScriptData(evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + var node = evt.currentTarget || evt.srcElement; + + //Remove the listeners once here. + removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); + removeListener(node, context.onScriptError, 'error'); + + return { + node: node, + id: node && node.getAttribute('data-requiremodule') + }; + } + + function intakeDefines() { + var args; + + //Any defined modules in the global queue, intake them now. + takeGlobalQueue(); + + //Make sure any remaining defQueue items get properly processed. + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + + args[args.length - 1])); + } else { + //args are id, deps, factory. Should be normalized by the + //define() function. + callGetModule(args); + } + } + context.defQueueMap = {}; + } + + context = { + config: config, + contextName: contextName, + registry: registry, + defined: defined, + urlFetched: urlFetched, + defQueue: defQueue, + defQueueMap: {}, + Module: Module, + makeModuleMap: makeModuleMap, + nextTick: req.nextTick, + onError: onError, + + /** + * Set a configuration for the context. + * @param {Object} cfg config object to integrate. + */ + configure: function (cfg) { + //Make sure the baseUrl ends in a slash. + if (cfg.baseUrl) { + if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { + cfg.baseUrl += '/'; + } + } + + // Convert old style urlArgs string to a function. + if (typeof cfg.urlArgs === 'string') { + var urlArgs = cfg.urlArgs; + cfg.urlArgs = function(id, url) { + return (url.indexOf('?') === -1 ? '?' : '&') + urlArgs; + }; + } + + //Save off the paths since they require special processing, + //they are additive. + var shim = config.shim, + objs = { + paths: true, + bundles: true, + config: true, + map: true + }; + + eachProp(cfg, function (value, prop) { + if (objs[prop]) { + if (!config[prop]) { + config[prop] = {}; + } + mixin(config[prop], value, true, true); + } else { + config[prop] = value; + } + }); + + //Reverse map the bundles + if (cfg.bundles) { + eachProp(cfg.bundles, function (value, prop) { + each(value, function (v) { + if (v !== prop) { + bundlesMap[v] = prop; + } + }); + }); + } + + //Merge shim + if (cfg.shim) { + eachProp(cfg.shim, function (value, id) { + //Normalize the structure + if (isArray(value)) { + value = { + deps: value + }; + } + if ((value.exports || value.init) && !value.exportsFn) { + value.exportsFn = context.makeShimExports(value); + } + shim[id] = value; + }); + config.shim = shim; + } + + //Adjust packages if necessary. + if (cfg.packages) { + each(cfg.packages, function (pkgObj) { + var location, name; + + pkgObj = typeof pkgObj === 'string' ? {name: pkgObj} : pkgObj; + + name = pkgObj.name; + location = pkgObj.location; + if (location) { + config.paths[name] = pkgObj.location; + } + + //Save pointer to main module ID for pkg name. + //Remove leading dot in main, so main paths are normalized, + //and remove any trailing .js, since different package + //envs have different conventions: some use a module name, + //some use a file name. + config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main') + .replace(currDirRegExp, '') + .replace(jsSuffixRegExp, ''); + }); + } + + //If there are any "waiting to execute" modules in the registry, + //update the maps for them, since their info, like URLs to load, + //may have changed. + eachProp(registry, function (mod, id) { + //If module already has init called, since it is too + //late to modify them, and ignore unnormalized ones + //since they are transient. + if (!mod.inited && !mod.map.unnormalized) { + mod.map = makeModuleMap(id, null, true); + } + }); + + //If a deps array or a config callback is specified, then call + //require with those args. This is useful when require is defined as a + //config object before require.js is loaded. + if (cfg.deps || cfg.callback) { + context.require(cfg.deps || [], cfg.callback); + } + }, + + makeShimExports: function (value) { + function fn() { + var ret; + if (value.init) { + ret = value.init.apply(global, arguments); + } + return ret || (value.exports && getGlobal(value.exports)); + } + return fn; + }, + + makeRequire: function (relMap, options) { + options = options || {}; + + function localRequire(deps, callback, errback) { + var id, map, requireMod; + + if (options.enableBuildCallback && callback && isFunction(callback)) { + callback.__requireJsBuild = true; + } + + if (typeof deps === 'string') { + if (isFunction(callback)) { + //Invalid call + return onError(makeError('requireargs', 'Invalid require call'), errback); + } + + //If require|exports|module are requested, get the + //value for them from the special handlers. Caveat: + //this only works while module is being defined. + if (relMap && hasProp(handlers, deps)) { + return handlers[deps](registry[relMap.id]); + } + + //Synchronous access to one module. If require.get is + //available (as in the Node adapter), prefer that. + if (req.get) { + return req.get(context, deps, relMap, localRequire); + } + + //Normalize module name, if it contains . or .. + map = makeModuleMap(deps, relMap, false, true); + id = map.id; + + if (!hasProp(defined, id)) { + return onError(makeError('notloaded', 'Module name "' + + id + + '" has not been loaded yet for context: ' + + contextName + + (relMap ? '' : '. Use require([])'))); + } + return defined[id]; + } + + //Grab defines waiting in the global queue. + intakeDefines(); + + //Mark all the dependencies as needing to be loaded. + context.nextTick(function () { + //Some defines could have been added since the + //require call, collect them. + intakeDefines(); + + requireMod = getModule(makeModuleMap(null, relMap)); + + //Store if map config should be applied to this require + //call for dependencies. + requireMod.skipMap = options.skipMap; + + requireMod.init(deps, callback, errback, { + enabled: true + }); + + checkLoaded(); + }); + + return localRequire; + } + + mixin(localRequire, { + isBrowser: isBrowser, + + /** + * Converts a module name + .extension into an URL path. + * *Requires* the use of a module name. It does not support using + * plain URLs like nameToUrl. + */ + toUrl: function (moduleNamePlusExt) { + var ext, + index = moduleNamePlusExt.lastIndexOf('.'), + segment = moduleNamePlusExt.split('/')[0], + isRelative = segment === '.' || segment === '..'; + + //Have a file extension alias, and it is not the + //dots from a relative path. + if (index !== -1 && (!isRelative || index > 1)) { + ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); + moduleNamePlusExt = moduleNamePlusExt.substring(0, index); + } + + return context.nameToUrl(normalize(moduleNamePlusExt, + relMap && relMap.id, true), ext, true); + }, + + defined: function (id) { + return hasProp(defined, makeModuleMap(id, relMap, false, true).id); + }, + + specified: function (id) { + id = makeModuleMap(id, relMap, false, true).id; + return hasProp(defined, id) || hasProp(registry, id); + } + }); + + //Only allow undef on top level require calls + if (!relMap) { + localRequire.undef = function (id) { + //Bind any waiting define() calls to this context, + //fix for #408 + takeGlobalQueue(); + + var map = makeModuleMap(id, relMap, true), + mod = getOwn(registry, id); + + mod.undefed = true; + removeScript(id); + + delete defined[id]; + delete urlFetched[map.url]; + delete undefEvents[id]; + + //Clean queued defines too. Go backwards + //in array so that the splices do not + //mess up the iteration. + eachReverse(defQueue, function(args, i) { + if (args[0] === id) { + defQueue.splice(i, 1); + } + }); + delete context.defQueueMap[id]; + + if (mod) { + //Hold on to listeners in case the + //module will be attempted to be reloaded + //using a different config. + if (mod.events.defined) { + undefEvents[id] = mod.events; + } + + cleanRegistry(id); + } + }; + } + + return localRequire; + }, + + /** + * Called to enable a module if it is still in the registry + * awaiting enablement. A second arg, parent, the parent module, + * is passed in for context, when this method is overridden by + * the optimizer. Not shown here to keep code compact. + */ + enable: function (depMap) { + var mod = getOwn(registry, depMap.id); + if (mod) { + getModule(depMap).enable(); + } + }, + + /** + * Internal method used by environment adapters to complete a load event. + * A load event could be a script load or just a load pass from a synchronous + * load call. + * @param {String} moduleName the name of the module to potentially complete. + */ + completeLoad: function (moduleName) { + var found, args, mod, + shim = getOwn(config.shim, moduleName) || {}, + shExports = shim.exports; + + takeGlobalQueue(); + + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + args[0] = moduleName; + //If already found an anonymous module and bound it + //to this name, then this is some other anon module + //waiting for its completeLoad to fire. + if (found) { + break; + } + found = true; + } else if (args[0] === moduleName) { + //Found matching define call for this script! + found = true; + } + + callGetModule(args); + } + context.defQueueMap = {}; + + //Do this after the cycle of callGetModule in case the result + //of those calls/init calls changes the registry. + mod = getOwn(registry, moduleName); + + if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { + if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { + if (hasPathFallback(moduleName)) { + return; + } else { + return onError(makeError('nodefine', + 'No define call for ' + moduleName, + null, + [moduleName])); + } + } else { + //A script that does not call define(), so just simulate + //the call for it. + callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); + } + } + + checkLoaded(); + }, + + /** + * Converts a module name to a file path. Supports cases where + * moduleName may actually be just an URL. + * Note that it **does not** call normalize on the moduleName, + * it is assumed to have already been normalized. This is an + * internal API, not a public one. Use toUrl for the public API. + */ + nameToUrl: function (moduleName, ext, skipExt) { + var paths, syms, i, parentModule, url, + parentPath, bundleId, + pkgMain = getOwn(config.pkgs, moduleName); + + if (pkgMain) { + moduleName = pkgMain; + } + + bundleId = getOwn(bundlesMap, moduleName); + + if (bundleId) { + return context.nameToUrl(bundleId, ext, skipExt); + } + + //If a colon is in the URL, it indicates a protocol is used and it is just + //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) + //or ends with .js, then assume the user meant to use an url and not a module id. + //The slash is important for protocol-less URLs as well as full paths. + if (req.jsExtRegExp.test(moduleName)) { + //Just a plain path, not module name lookup, so just return it. + //Add extension if it is included. This is a bit wonky, only non-.js things pass + //an extension, this method probably needs to be reworked. + url = moduleName + (ext || ''); + } else { + //A module that needs to be converted to a path. + paths = config.paths; + + syms = moduleName.split('/'); + //For each module name segment, see if there is a path + //registered for it. Start with most specific name + //and work up from it. + for (i = syms.length; i > 0; i -= 1) { + parentModule = syms.slice(0, i).join('/'); + + parentPath = getOwn(paths, parentModule); + if (parentPath) { + //If an array, it means there are a few choices, + //Choose the one that is desired + if (isArray(parentPath)) { + parentPath = parentPath[0]; + } + syms.splice(0, i, parentPath); + break; + } + } + + //Join the path parts together, then figure out if baseUrl is needed. + url = syms.join('/'); + url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js')); + url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; + } + + return config.urlArgs && !/^blob\:/.test(url) ? + url + config.urlArgs(moduleName, url) : url; + }, + + //Delegates to req.load. Broken out as a separate function to + //allow overriding in the optimizer. + load: function (id, url) { + req.load(context, id, url); + }, + + /** + * Executes a module callback function. Broken out as a separate function + * solely to allow the build system to sequence the files in the built + * layer in the right sequence. + * + * @private + */ + execCb: function (name, callback, args, exports) { + return callback.apply(exports, args); + }, + + /** + * callback for script loads, used to check status of loading. + * + * @param {Event} evt the event from the browser for the script + * that was loaded. + */ + onScriptLoad: function (evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + if (evt.type === 'load' || + (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { + //Reset interactive script so a script node is not held onto for + //to long. + interactiveScript = null; + + //Pull out the name of the module and the context. + var data = getScriptData(evt); + context.completeLoad(data.id); + } + }, + + /** + * Callback for script errors. + */ + onScriptError: function (evt) { + var data = getScriptData(evt); + if (!hasPathFallback(data.id)) { + var parents = []; + eachProp(registry, function(value, key) { + if (key.indexOf('_@r') !== 0) { + each(value.depMaps, function(depMap) { + if (depMap.id === data.id) { + parents.push(key); + return true; + } + }); + } + }); + return onError(makeError('scripterror', 'Script error for "' + data.id + + (parents.length ? + '", needed by: ' + parents.join(', ') : + '"'), evt, [data.id])); + } + } + }; + + context.require = context.makeRequire(); + return context; + } + + /** + * Main entry point. + * + * If the only argument to require is a string, then the module that + * is represented by that string is fetched for the appropriate context. + * + * If the first argument is an array, then it will be treated as an array + * of dependency string names to fetch. An optional function callback can + * be specified to execute when all of those dependencies are available. + * + * Make a local req variable to help Caja compliance (it assumes things + * on a require that are not standardized), and to give a short + * name for minification/local scope use. + */ + req = requirejs = function (deps, callback, errback, optional) { + + //Find the right context, use default + var context, config, + contextName = defContextName; + + // Determine if have config object in the call. + if (!isArray(deps) && typeof deps !== 'string') { + // deps is a config object + config = deps; + if (isArray(callback)) { + // Adjust args if there are dependencies + deps = callback; + callback = errback; + errback = optional; + } else { + deps = []; + } + } + + if (config && config.context) { + contextName = config.context; + } + + context = getOwn(contexts, contextName); + if (!context) { + context = contexts[contextName] = req.s.newContext(contextName); + } + + if (config) { + context.configure(config); + } + + return context.require(deps, callback, errback); + }; + + /** + * Support require.config() to make it easier to cooperate with other + * AMD loaders on globally agreed names. + */ + req.config = function (config) { + return req(config); + }; + + /** + * Execute something after the current tick + * of the event loop. Override for other envs + * that have a better solution than setTimeout. + * @param {Function} fn function to execute later. + */ + req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { + setTimeout(fn, 4); + } : function (fn) { fn(); }; + + /** + * Export require as a global, but only if it does not already exist. + */ + if (!require) { + require = req; + } + + req.version = version; + + //Used to filter out dependencies that are already paths. + req.jsExtRegExp = /^\/|:|\?|\.js$/; + req.isBrowser = isBrowser; + s = req.s = { + contexts: contexts, + newContext: newContext + }; + + //Create default context. + req({}); + + //Exports some context-sensitive methods on global require. + each([ + 'toUrl', + 'undef', + 'defined', + 'specified' + ], function (prop) { + //Reference from contexts instead of early binding to default context, + //so that during builds, the latest instance of the default context + //with its config gets used. + req[prop] = function () { + var ctx = contexts[defContextName]; + return ctx.require[prop].apply(ctx, arguments); + }; + }); + + if (isBrowser) { + head = s.head = document.getElementsByTagName('head')[0]; + //If BASE tag is in play, using appendChild is a problem for IE6. + //When that browser dies, this can be removed. Details in this jQuery bug: + //http://dev.jquery.com/ticket/2709 + baseElement = document.getElementsByTagName('base')[0]; + if (baseElement) { + head = s.head = baseElement.parentNode; + } + } + + /** + * Any errors that require explicitly generates will be passed to this + * function. Intercept/override it if you want custom error handling. + * @param {Error} err the error object. + */ + req.onError = defaultOnError; + + /** + * Creates the node for the load command. Only used in browser envs. + */ + req.createNode = function (config, moduleName, url) { + var node = config.xhtml ? + document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : + document.createElement('script'); + node.type = config.scriptType || 'text/javascript'; + node.charset = 'utf-8'; + node.async = true; + return node; + }; + + /** + * Does the request to load a module for the browser case. + * Make this a separate function to allow other environments + * to override it. + * + * @param {Object} context the require context to find state. + * @param {String} moduleName the name of the module. + * @param {Object} url the URL to the module. + */ + req.load = function (context, moduleName, url) { + var config = (context && context.config) || {}, + node; + if (isBrowser) { + //In the browser so use a script tag + node = req.createNode(config, moduleName, url); + + node.setAttribute('data-requirecontext', context.contextName); + node.setAttribute('data-requiremodule', moduleName); + + //Set up load listener. Test attachEvent first because IE9 has + //a subtle issue in its addEventListener and script onload firings + //that do not match the behavior of all other browsers with + //addEventListener support, which fire the onload event for a + //script right after the script execution. See: + //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution + //UNFORTUNATELY Opera implements attachEvent but does not follow the script + //script execution mode. + if (node.attachEvent && + //Check if node.attachEvent is artificially added by custom script or + //natively supported by browser + //read https://github.com/requirejs/requirejs/issues/187 + //if we can NOT find [native code] then it must NOT natively supported. + //in IE8, node.attachEvent does not have toString() + //Note the test for "[native code" with no closing brace, see: + //https://github.com/requirejs/requirejs/issues/273 + !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && + !isOpera) { + //Probably IE. IE (at least 6-8) do not fire + //script onload right after executing the script, so + //we cannot tie the anonymous define call to a name. + //However, IE reports the script as being in 'interactive' + //readyState at the time of the define call. + useInteractive = true; + + node.attachEvent('onreadystatechange', context.onScriptLoad); + //It would be great to add an error handler here to catch + //404s in IE9+. However, onreadystatechange will fire before + //the error handler, so that does not help. If addEventListener + //is used, then IE will fire error before load, but we cannot + //use that pathway given the connect.microsoft.com issue + //mentioned above about not doing the 'script execute, + //then fire the script load event listener before execute + //next script' that other browsers do. + //Best hope: IE10 fixes the issues, + //and then destroys all installs of IE 6-9. + //node.attachEvent('onerror', context.onScriptError); + } else { + node.addEventListener('load', context.onScriptLoad, false); + node.addEventListener('error', context.onScriptError, false); + } + node.src = url; + + //Calling onNodeCreated after all properties on the node have been + //set, but before it is placed in the DOM. + if (config.onNodeCreated) { + config.onNodeCreated(node, config, moduleName, url); + } + + //For some cache cases in IE 6-8, the script executes before the end + //of the appendChild execution, so to tie an anonymous define + //call to the module name (which is stored on the node), hold on + //to a reference to this node, but clear after the DOM insertion. + currentlyAddingScript = node; + if (baseElement) { + head.insertBefore(node, baseElement); + } else { + head.appendChild(node); + } + currentlyAddingScript = null; + + return node; + } else if (isWebWorker) { + try { + //In a web worker, use importScripts. This is not a very + //efficient use of importScripts, importScripts will block until + //its script is downloaded and evaluated. However, if web workers + //are in play, the expectation is that a build has been done so + //that only one script needs to be loaded anyway. This may need + //to be reevaluated if other use cases become common. + + // Post a task to the event loop to work around a bug in WebKit + // where the worker gets garbage-collected after calling + // importScripts(): https://webkit.org/b/153317 + setTimeout(function() {}, 0); + importScripts(url); + + //Account for anonymous modules + context.completeLoad(moduleName); + } catch (e) { + context.onError(makeError('importscripts', + 'importScripts failed for ' + + moduleName + ' at ' + url, + e, + [moduleName])); + } + } + }; + + function getInteractiveScript() { + if (interactiveScript && interactiveScript.readyState === 'interactive') { + return interactiveScript; + } + + eachReverse(scripts(), function (script) { + if (script.readyState === 'interactive') { + return (interactiveScript = script); + } + }); + return interactiveScript; + } + + //Look for a data-main script attribute, which could also adjust the baseUrl. + if (isBrowser && !cfg.skipDataMain) { + //Figure out baseUrl. Get it from the script tag with require.js in it. + eachReverse(scripts(), function (script) { + //Set the 'head' where we can append children by + //using the script's parent. + if (!head) { + head = script.parentNode; + } + + //Look for a data-main attribute to set main script for the page + //to load. If it is there, the path to data main becomes the + //baseUrl, if it is not already set. + dataMain = script.getAttribute('data-main'); + if (dataMain) { + //Preserve dataMain in case it is a path (i.e. contains '?') + mainScript = dataMain; + + //Set final baseUrl if there is not already an explicit one, + //but only do so if the data-main value is not a loader plugin + //module ID. + if (!cfg.baseUrl && mainScript.indexOf('!') === -1) { + //Pull off the directory of data-main for use as the + //baseUrl. + src = mainScript.split('/'); + mainScript = src.pop(); + subPath = src.length ? src.join('/') + '/' : './'; + + cfg.baseUrl = subPath; + } + + //Strip off any trailing .js since mainScript is now + //like a module name. + mainScript = mainScript.replace(jsSuffixRegExp, ''); + + //If mainScript is still a path, fall back to dataMain + if (req.jsExtRegExp.test(mainScript)) { + mainScript = dataMain; + } + + //Put the data-main script in the files to load. + cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; + + return true; + } + }); + } + + /** + * The function that handles definitions of modules. Differs from + * require() in that a string for the module should be the first argument, + * and the function to execute after dependencies are loaded should + * return a value to define the module corresponding to the first argument's + * name. + */ + define = function (name, deps, callback) { + var node, context; + + //Allow for anonymous modules + if (typeof name !== 'string') { + //Adjust args appropriately + callback = deps; + deps = name; + name = null; + } + + //This module may not have dependencies + if (!isArray(deps)) { + callback = deps; + deps = null; + } + + //If no name, and callback is a function, then figure out if it a + //CommonJS thing with dependencies. + if (!deps && isFunction(callback)) { + deps = []; + //Remove comments from the callback string, + //look for require calls, and pull them into the dependencies, + //but only if there are function args. + if (callback.length) { + callback + .toString() + .replace(commentRegExp, commentReplace) + .replace(cjsRequireRegExp, function (match, dep) { + deps.push(dep); + }); + + //May be a CommonJS thing even without require calls, but still + //could use exports, and module. Avoid doing exports and module + //work though if it just needs require. + //REQUIRES the function to expect the CommonJS variables in the + //order listed below. + deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); + } + } + + //If in IE 6-8 and hit an anonymous define() call, do the interactive + //work. + if (useInteractive) { + node = currentlyAddingScript || getInteractiveScript(); + if (node) { + if (!name) { + name = node.getAttribute('data-requiremodule'); + } + context = contexts[node.getAttribute('data-requirecontext')]; + } + } + + //Always save off evaluating the def call until the script onload handler. + //This allows multiple modules to be in a file without prematurely + //tracing dependencies, and allows for anonymous module support, + //where the module name is not known until the script onload event + //occurs. If no context, use the global queue, and get it processed + //in the onscript load callback. + if (context) { + context.defQueue.push([name, deps, callback]); + context.defQueueMap[name] = true; + } else { + globalDefQueue.push([name, deps, callback]); + } + }; + + define.amd = { + jQuery: true + }; + + /** + * Executes the text. Normally just uses eval, but can be modified + * to use a better, environment-specific call. Only used for transpiling + * loader plugins, not for plain JS modules. + * @param {String} text the text to execute/evaluate. + */ + req.exec = function (text) { + /*jslint evil: true */ + return eval(text); + }; + + //Set up with config info. + req(cfg); +}(this, (typeof setTimeout === 'undefined' ? undefined : setTimeout))); diff --git a/Server/CloudScripts.js b/Server/CloudScripts.js index 1ea8ae236..7a36af537 100644 --- a/Server/CloudScripts.js +++ b/Server/CloudScripts.js @@ -1,5 +1,5 @@ -exports.newConfigReader = function newConfigReader() { - +exports.newCloudScripts = function newCloudScripts() { + let thisObject = { loadCloudScripts: loadCloudScripts, initialize: initialize @@ -14,19 +14,22 @@ let serverConfig; let githubData; let storageData; + let fileSystemData; let ecosystem; let ecosystemObject; return thisObject; - function initialize(pEcosystem, pEcosystemObject, pServerConfig, pGithubData, pStorageData, callBackFunction) { + function initialize(pEcosystem, pEcosystemObject, pServerConfig, pGithubData, pStorageData, pFileSystemData, callBackFunction) { serverConfig = pServerConfig; githubData = pGithubData; + fileSystemData = pFileSystemData; storageData = pStorageData; ecosystem = pEcosystem; ecosystemObject = pEcosystemObject; + callBackFunction(); } function loadCloudScripts(callBackfunction) { @@ -59,7 +62,7 @@ data = data.trim(); // remove first byte with some encoding. dataObject = JSON.parse(data); - retrieveScripts(); + retrieveScripts(dataObject, callBackfunction); } catch (err) { console.log("[ERROR] CloudScripts -> loadCloudScripts -> Cloud -> onDataArrived -> Error = " + err); @@ -78,7 +81,7 @@ let fileName = '../AACloud/web.config.json'; fs.readFile(fileName, onFileRead); - function onFileRead(err, file) { + function onFileRead(err, pData) { try { @@ -88,7 +91,7 @@ data = data.trim(); // remove first byte with some encoding. dataObject = JSON.parse(data); - retrieveScripts(); + retrieveScripts(dataObject, callBackfunction); } catch (err) { console.log("[ERROR] CloudScripts -> loadCloudScripts -> File System -> onFileRead -> File = " + fileName + " Error = " + err); @@ -118,7 +121,7 @@ data = data.trim(); // remove first byte with some encoding. dataObject = JSON.parse(data); - retrieveScripts(); + retrieveScripts(dataObject, callBackfunction); } catch (err) { console.log("[ERROR] CloudScripts -> loadCloudScripts -> Github -> onDataArrived -> Error = " + err); @@ -133,4 +136,157 @@ } } + function retrieveScripts(pCloudWebConfig, callBackfunction) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> retrieveScripts -> Entering function."); } + + /* + + Here we go through the webModules Array and bring them all. + + */ + + let modulesRetrieved = 0; + + for (let i = 0; i < pCloudWebConfig.webModules.length; i++) { + + let webModule = pCloudWebConfig.webModules[i].name + '.js'; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> retrieveScripts -> Cloud -> Entering Case."); } + + storage.getStorageData('AdvancedAlgos', 'AACloud', webModule, onDataArrived); + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> retrieveScripts -> Cloud -> onDataArrived -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + storageData.set(webModule, data); + + modulesRetrieved++; + if (modulesRetrieved === pCloudWebConfig.webModules.length) { + createHTML(callBackfunction); + } + + } + catch (err) { + console.log("[ERROR] CloudScripts -> retrieveScripts -> Cloud -> onDataArrived -> Error = " + err); + } + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> retrieveScripts -> File System -> Entering Case."); } + + let fs = require('fs'); + try { + let fileName = '../AACloud/' + webModule; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> retrieveScripts -> File System -> onFileRead -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + fileSystemData.set(webModule, data); + + modulesRetrieved++; + if (modulesRetrieved === pCloudWebConfig.webModules.length) { + createHTML(callBackfunction); + } + } + catch (err) { + console.log("[ERROR] CloudScripts -> retrieveScripts -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] CloudScripts -> retrieveScripts -> File System -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] CloudScripts -> retrieveScripts -> Github -> Entering Case."); } + + github.getGithubData('AdvancedAlgos', 'AACloud', 'web.config.json', onDataArrived); + + function onDataArrived(pData) { + + try { + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + githubData.set(webModule, data); + + modulesRetrieved++; + if (modulesRetrieved === pCloudWebConfig.webModules.length) { + createHTML(callBackfunction); + } + } + catch (err) { + console.log("[ERROR] CloudScripts -> retrieveScripts -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + + function browserify(pData) { + + let result = pData.substring(pData.indexOf('=') + 1); + + return result; + + } + + function createHTML(callBackfunction) { + + let links = ""; + let htmlLine = '' + '\n' + ' ' + + for (let i = 0; i < pCloudWebConfig.webModules.length; i++) { + + let webModule = pCloudWebConfig.webModules[i].name + '.js'; + let htmlLineCopy = htmlLine; + let newLink = htmlLineCopy.replace('@module@', webModule); + + links = links + newLink; + } + + callBackfunction(links); + } + + } + catch (err) { + console.log("[ERROR] CloudScripts -> retrieveScripts -> Error = " + err); + } + } } \ No newline at end of file diff --git a/index.html b/index.html index 4e6b1e70b..931278ab2 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,7 @@ + diff --git a/server.js b/server.js index accd59105..364b9349b 100644 --- a/server.js +++ b/server.js @@ -9,6 +9,10 @@ let serverConfig; let githubData = new Map; let storageData = new Map; +let fileSystemData = new Map; + +let HTMLCloudScripts; // This are the html script tags needed to download the cloud web scripts. + let ecosystem; let ecosystemObject; @@ -34,6 +38,7 @@ function initialize() { githubData = new Map; storageData = new Map; + fileSystemData = new Map; const CONFIG_READER = require('./Server/ConfigReader'); let configReader = CONFIG_READER.newConfigReader(); @@ -54,8 +59,22 @@ function initialize() { github.initialize(githubData); storage.initialize(storageData, serverConfig) - startHtttpServer(); + const CLOUD_SCRIPTS = require('./Server/CloudScripts'); + let cloudScripts = CLOUD_SCRIPTS.newCloudScripts(); + cloudScripts.initialize(ecosystem, ecosystemObject, serverConfig, githubData, storageData, fileSystemData, onInitialized); + + function onInitialized() { + + cloudScripts.loadCloudScripts(onLoadCompeted); + + function onLoadCompeted(pHTMLCloudScripts) { + + HTMLCloudScripts = pHTMLCloudScripts; + startHtttpServer(); + + } + } } } } @@ -319,6 +338,56 @@ function onBrowserRequest(request, response) { } break; + case "Cloud": // This means the cloud folder. + { + + let map; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } + + map = storageData; + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } + + map = fileSystemData; + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } + + github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived); + + map = githubData; + break; + } + } + + let script = map.get(requestParameters[2]); + + if (script !== undefined) { + + respondWithContent(script, response); + + } else { + + if (CONSOLE_LOG === true) { console.log("[WARN] server -> onBrowserRequest -> readEcosystemConfig -> Script Not Found."); } + if (CONSOLE_LOG === true) { console.log("[WARN] server -> onBrowserRequest -> readEcosystemConfig -> requestParameters[2] = " + requestParameters[2]); } + + respondWithContent("", response); + } + } + break; + case "Plotters": // This means the plotter folder, not to be confused with the Plotters script! { @@ -465,9 +534,20 @@ function onBrowserRequest(request, response) { let fileContent = file.toString(); + addCloudWebScripts(); addPlotters(); addImages(); + function addCloudWebScripts() { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addCloudWebScripts -> Entering function."); } + + let firstPart = fileContent.substring(0, fileContent.indexOf('') + 22); + let secondPart = fileContent.substring(fileContent.indexOf('') + 22); + + fileContent = firstPart + HTMLCloudScripts + secondPart; + } + function addPlotters() { if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addPlotters -> Entering function."); } @@ -624,7 +704,6 @@ function onBrowserRequest(request, response) { } } - respondWithContent(fileContent, response); } From 5a93b19655780badad1cb02a80f299511af579bd Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 May 2018 17:20:23 +0200 Subject: [PATCH 034/334] Bringing AACloud to the browser PART 1 --- CloudSupport.js | 28 +++++++ Dashboard.js | 4 +- Project.njsproj | 6 ++ Scripts/DummyWeb.js | 5 ++ Scripts/require.js | 164 ++++++++++++++++++++--------------------- Server/CloudScripts.js | 5 +- index.html | 6 +- server.js | 8 ++ 8 files changed, 140 insertions(+), 86 deletions(-) create mode 100644 CloudSupport.js create mode 100644 Scripts/DummyWeb.js diff --git a/CloudSupport.js b/CloudSupport.js new file mode 100644 index 000000000..4a0f3edea --- /dev/null +++ b/CloudSupport.js @@ -0,0 +1,28 @@ + +/* + +This module is for enabling the AACloud to run at the browser. + +When running at the clode on NodeJS some things work diffently that at the browser. That gap will be fixed by the functions at this module. + +*/ + +function webRequire(pModulePath) { + + + if (pModulePath === '') { + + + } + +} + +function downloadModule(pPath) { + + /* We will need this to load individual bots modules. */ + + Requirejs(["Scripts/DummyWeb"], function (DummyWeb) { + console.log("Dummy Web Loaded"); + }); + +} \ No newline at end of file diff --git a/Dashboard.js b/Dashboard.js index 5b388adde..82d8e3ab1 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -1,4 +1,6 @@ -/* Callbacks default responses. */ + + +/* Callbacks default responses. */ let GLOBAL = {}; diff --git a/Project.njsproj b/Project.njsproj index ba464d3a2..8f4bd1d4a 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -32,6 +32,9 @@ + + Code + Code @@ -63,6 +66,8 @@ Code + + Code @@ -144,6 +149,7 @@ + diff --git a/Scripts/DummyWeb.js b/Scripts/DummyWeb.js new file mode 100644 index 000000000..99b0f4b8f --- /dev/null +++ b/Scripts/DummyWeb.js @@ -0,0 +1,5 @@ +function newDummyWeb() { + + + +} \ No newline at end of file diff --git a/Scripts/require.js b/Scripts/require.js index 051e284b0..612d0ee77 100644 --- a/Scripts/require.js +++ b/Scripts/require.js @@ -1,19 +1,19 @@ /** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.3.5 Copyright jQuery Foundation and other contributors. - * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE + * Released under MIT license, https://github.com/Requirejs/Requirejs/blob/master/LICENSE */ //Not using strict: uneven strict support in browsers, #392, and causes -//problems with requirejs.exec()/transpiler plugins that may not be strict. +//problems with Requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, setTimeout, opera */ -var requirejs, require, define; +var Requirejs, Require, Define; (function (global, setTimeout) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.3.5', commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg, - cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, + cjsRequireRegExp = /[^.]\s*Require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, @@ -165,7 +165,7 @@ var requirejs, require, define; * @returns {Error} */ function makeError(id, msg, err, requireModules) { - var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); + var e = new Error(msg + '\nhttp://Requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { @@ -174,26 +174,26 @@ var requirejs, require, define; return e; } - if (typeof define !== 'undefined') { - //If a define is already in play via another AMD loader, + if (typeof Define !== 'undefined') { + //If a Define is already in play via another AMD loader, //do not overwrite. return; } - if (typeof requirejs !== 'undefined') { - if (isFunction(requirejs)) { - //Do not overwrite an existing requirejs instance. + if (typeof Requirejs !== 'undefined') { + if (isFunction(Requirejs)) { + //Do not overwrite an existing Requirejs instance. return; } - cfg = requirejs; - requirejs = undefined; + cfg = Requirejs; + Requirejs = undefined; } - //Allow for a require config object - if (typeof require !== 'undefined' && !isFunction(require)) { + //Allow for a Require config object + if (typeof Require !== 'undefined' && !isFunction(Require)) { //assume it is a config object. - cfg = require; - require = undefined; + cfg = Require; + Require = undefined; } function newContext(contextName) { @@ -373,9 +373,9 @@ var requirejs, require, define; //Pop off the first array value, since it failed, and //retry pathConfig.shift(); - context.require.undef(id); + context.Require.undef(id); - //Custom require that does not do map translation, since + //Custom Require that does not do map translation, since //ID is "absolute", already mapped/resolved. context.makeRequire(null, { skipMap: true @@ -401,13 +401,13 @@ var requirejs, require, define; /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will - * also normalize the name via require.normalize() + * also normalize the name via Require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. - * This is true if this call is done for a define() module ID. + * This is true if this call is done for a Define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * @@ -421,7 +421,7 @@ var requirejs, require, define; isDefine = true, normalizedName = ''; - //If no name, then it means it is a require call, generate an + //If no name, then it means it is a Require call, generate an //internal name. if (!name) { isDefine = false; @@ -570,11 +570,11 @@ var requirejs, require, define; } handlers = { - 'require': function (mod) { - if (mod.require) { - return mod.require; + 'Require': function (mod) { + if (mod.Require) { + return mod.Require; } else { - return (mod.require = context.makeRequire(mod.map)); + return (mod.Require = context.makeRequire(mod.map)); } }, 'exports': function (mod) { @@ -745,7 +745,7 @@ var requirejs, require, define; options = options || {}; //Do not do more inits if already done. Can happen if there - //are multiple define calls for the same module. That is not + //are multiple Define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; @@ -836,8 +836,8 @@ var requirejs, require, define; }, /** - * Checks if the module is ready to define itself, and if so, - * define it. + * Checks if the module is ready to Define itself, and if so, + * Define it. */ check: function () { if (!this.enabled || this.enabling) { @@ -858,9 +858,9 @@ var requirejs, require, define; } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { - //The factory could trigger another require call + //The factory could trigger another Require call //that would result in checking this module to - //define itself again. If already in the process + //Define itself again. If already in the process //of doing that, skip this work. this.defining = true; @@ -868,7 +868,7 @@ var requirejs, require, define; if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. However, - //only do it for define()'d modules. require + //only do it for Define()'d modules. Require //errbacks should not be called for failures in //their callbacks (#699). However if a global //onError is set, use that. @@ -899,7 +899,7 @@ var requirejs, require, define; if (err) { err.requireMap = this.map; err.requireModules = this.map.isDefine ? [this.map.id] : null; - err.requireType = this.map.isDefine ? 'define' : 'require'; + err.requireType = this.map.isDefine ? 'Define' : 'Require'; return onError((this.error = err)); } @@ -928,8 +928,8 @@ var requirejs, require, define; this.defined = true; } - //Finished the define stage. Allow calling check again - //to allow define notifications below in the case of a + //Finished the Define stage. Allow calling check again + //to allow Define notifications below in the case of a //cycle. this.defining = false; @@ -1048,7 +1048,7 @@ var requirejs, require, define; text = textAlt; } - //Turn off interactive script matching for IE for any define + //Turn off interactive script matching for IE for any Define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; @@ -1154,7 +1154,7 @@ var requirejs, require, define; id = depMap.id; mod = registry[id]; - //Skip special modules like 'require', 'exports', 'module' + //Skip special modules like 'Require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!hasProp(handlers, id) && mod && !mod.enabled) { @@ -1220,7 +1220,7 @@ var requirejs, require, define; } /** - * Given an event from a script node, get the requirejs info from it, + * Given an event from a script node, get the Requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} @@ -1251,11 +1251,11 @@ var requirejs, require, define; while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { - return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + + return onError(makeError('mismatch', 'Mismatched anonymous Define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the - //define() function. + //Define() function. callGetModule(args); } } @@ -1295,7 +1295,7 @@ var requirejs, require, define; }; } - //Save off the paths since they require special processing, + //Save off the paths since they Require special processing, //they are additive. var shim = config.shim, objs = { @@ -1381,10 +1381,10 @@ var requirejs, require, define; }); //If a deps array or a config callback is specified, then call - //require with those args. This is useful when require is defined as a - //config object before require.js is loaded. + //Require with those args. This is useful when Require is defined as a + //config object before Require.js is loaded. if (cfg.deps || cfg.callback) { - context.require(cfg.deps || [], cfg.callback); + context.Require(cfg.deps || [], cfg.callback); } }, @@ -1412,17 +1412,17 @@ var requirejs, require, define; if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call - return onError(makeError('requireargs', 'Invalid require call'), errback); + return onError(makeError('requireargs', 'Invalid Require call'), errback); } - //If require|exports|module are requested, get the + //If Require|exports|module are requested, get the //value for them from the special handlers. Caveat: //this only works while module is being defined. if (relMap && hasProp(handlers, deps)) { return handlers[deps](registry[relMap.id]); } - //Synchronous access to one module. If require.get is + //Synchronous access to one module. If Require.get is //available (as in the Node adapter), prefer that. if (req.get) { return req.get(context, deps, relMap, localRequire); @@ -1437,7 +1437,7 @@ var requirejs, require, define; id + '" has not been loaded yet for context: ' + contextName + - (relMap ? '' : '. Use require([])'))); + (relMap ? '' : '. Use Require([])'))); } return defined[id]; } @@ -1448,12 +1448,12 @@ var requirejs, require, define; //Mark all the dependencies as needing to be loaded. context.nextTick(function () { //Some defines could have been added since the - //require call, collect them. + //Require call, collect them. intakeDefines(); requireMod = getModule(makeModuleMap(null, relMap)); - //Store if map config should be applied to this require + //Store if map config should be applied to this Require //call for dependencies. requireMod.skipMap = options.skipMap; @@ -1502,10 +1502,10 @@ var requirejs, require, define; } }); - //Only allow undef on top level require calls + //Only allow undef on top level Require calls if (!relMap) { localRequire.undef = function (id) { - //Bind any waiting define() calls to this context, + //Bind any waiting Define() calls to this context, //fix for #408 takeGlobalQueue(); @@ -1583,7 +1583,7 @@ var requirejs, require, define; } found = true; } else if (args[0] === moduleName) { - //Found matching define call for this script! + //Found matching Define call for this script! found = true; } @@ -1601,12 +1601,12 @@ var requirejs, require, define; return; } else { return onError(makeError('nodefine', - 'No define call for ' + moduleName, + 'No Define call for ' + moduleName, null, [moduleName])); } } else { - //A script that does not call define(), so just simulate + //A script that does not call Define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); } @@ -1743,14 +1743,14 @@ var requirejs, require, define; } }; - context.require = context.makeRequire(); + context.Require = context.makeRequire(); return context; } /** * Main entry point. * - * If the only argument to require is a string, then the module that + * If the only argument to Require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array @@ -1758,10 +1758,10 @@ var requirejs, require, define; * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things - * on a require that are not standardized), and to give a short + * on a Require that are not standardized), and to give a short * name for minification/local scope use. */ - req = requirejs = function (deps, callback, errback, optional) { + req = Requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, @@ -1794,11 +1794,11 @@ var requirejs, require, define; context.configure(config); } - return context.require(deps, callback, errback); + return context.Require(deps, callback, errback); }; /** - * Support require.config() to make it easier to cooperate with other + * Support Require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { @@ -1816,10 +1816,10 @@ var requirejs, require, define; } : function (fn) { fn(); }; /** - * Export require as a global, but only if it does not already exist. + * Export Require as a global, but only if it does not already exist. */ - if (!require) { - require = req; + if (!Require) { + Require = req; } req.version = version; @@ -1835,7 +1835,7 @@ var requirejs, require, define; //Create default context. req({}); - //Exports some context-sensitive methods on global require. + //Exports some context-sensitive methods on global Require. each([ 'toUrl', 'undef', @@ -1847,7 +1847,7 @@ var requirejs, require, define; //with its config gets used. req[prop] = function () { var ctx = contexts[defContextName]; - return ctx.require[prop].apply(ctx, arguments); + return ctx.Require[prop].apply(ctx, arguments); }; }); @@ -1863,7 +1863,7 @@ var requirejs, require, define; } /** - * Any errors that require explicitly generates will be passed to this + * Any errors that Require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ @@ -1887,7 +1887,7 @@ var requirejs, require, define; * Make this a separate function to allow other environments * to override it. * - * @param {Object} context the require context to find state. + * @param {Object} context the Require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ @@ -1912,18 +1912,18 @@ var requirejs, require, define; if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser - //read https://github.com/requirejs/requirejs/issues/187 + //read https://github.com/Requirejs/Requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: - //https://github.com/requirejs/requirejs/issues/273 + //https://github.com/Requirejs/Requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so - //we cannot tie the anonymous define call to a name. + //we cannot tie the anonymous Define call to a name. //However, IE reports the script as being in 'interactive' - //readyState at the time of the define call. + //readyState at the time of the Define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); @@ -1951,7 +1951,7 @@ var requirejs, require, define; } //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous define + //of the appendChild execution, so to tie an anonymous Define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; @@ -2005,7 +2005,7 @@ var requirejs, require, define; //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser && !cfg.skipDataMain) { - //Figure out baseUrl. Get it from the script tag with require.js in it. + //Figure out baseUrl. Get it from the script tag with Require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. @@ -2053,12 +2053,12 @@ var requirejs, require, define; /** * The function that handles definitions of modules. Differs from - * require() in that a string for the module should be the first argument, + * Require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should - * return a value to define the module corresponding to the first argument's + * return a value to Define the module corresponding to the first argument's * name. */ - define = function (name, deps, callback) { + Define = function (name, deps, callback) { var node, context; //Allow for anonymous modules @@ -2080,7 +2080,7 @@ var requirejs, require, define; if (!deps && isFunction(callback)) { deps = []; //Remove comments from the callback string, - //look for require calls, and pull them into the dependencies, + //look for Require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback @@ -2090,16 +2090,16 @@ var requirejs, require, define; deps.push(dep); }); - //May be a CommonJS thing even without require calls, but still + //May be a CommonJS thing even without Require calls, but still //could use exports, and module. Avoid doing exports and module - //work though if it just needs require. + //work though if it just needs Require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. - deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); + deps = (callback.length === 1 ? ['Require'] : ['Require', 'exports', 'module']).concat(deps); } } - //If in IE 6-8 and hit an anonymous define() call, do the interactive + //If in IE 6-8 and hit an anonymous Define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); @@ -2125,7 +2125,7 @@ var requirejs, require, define; } }; - define.amd = { + Define.amd = { jQuery: true }; diff --git a/Server/CloudScripts.js b/Server/CloudScripts.js index 7a36af537..b7f86697c 100644 --- a/Server/CloudScripts.js +++ b/Server/CloudScripts.js @@ -261,7 +261,10 @@ function browserify(pData) { - let result = pData.substring(pData.indexOf('=') + 1); + let result = pData.substring(pData.indexOf('=') + 2); + + result = result.replace("require", "webRequire"); + result = result.replace("global", "window"); return result; diff --git a/index.html b/index.html index 931278ab2..3a73e380a 100644 --- a/index.html +++ b/index.html @@ -4,12 +4,14 @@ Advanced Algos - - + + + + diff --git a/server.js b/server.js index 364b9349b..b5adfee5f 100644 --- a/server.js +++ b/server.js @@ -338,6 +338,14 @@ function onBrowserRequest(request, response) { } break; + case "Scripts": // This means the Scripts folder. + { + + respondWithFile('./Scripts/' + requestParameters[2], response); + + } + break; + case "Cloud": // This means the cloud folder. { From a89e4b49526fcdd86bcc377f79057528368e434c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 May 2018 18:54:27 +0200 Subject: [PATCH 035/334] Global for Windows --- CloudSupport.js | 9 +++++++++ Panels/TimeControlPanel.js | 3 ++- Server/CloudScripts.js | 7 +++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CloudSupport.js b/CloudSupport.js index 4a0f3edea..7fea049cf 100644 --- a/CloudSupport.js +++ b/CloudSupport.js @@ -7,6 +7,15 @@ When running at the clode on NodeJS some things work diffently that at the brows */ +function runBot() { + + let root = newRoot(); + + root.initialize(); + root.start(); + +} + function webRequire(pModulePath) { diff --git a/Panels/TimeControlPanel.js b/Panels/TimeControlPanel.js index a80248771..5c913bcb3 100644 --- a/Panels/TimeControlPanel.js +++ b/Panels/TimeControlPanel.js @@ -214,7 +214,8 @@ function newTimeControlPanel() { case "Play Forward": - pressPlayForward(); + runBot(); + //pressPlayForward(); break; case "Fast Forward": diff --git a/Server/CloudScripts.js b/Server/CloudScripts.js index b7f86697c..ef3a4b266 100644 --- a/Server/CloudScripts.js +++ b/Server/CloudScripts.js @@ -263,11 +263,14 @@ let result = pData.substring(pData.indexOf('=') + 2); - result = result.replace("require", "webRequire"); - result = result.replace("global", "window"); + result = replaceAll(result, "require", "webRequire"); + result = replaceAll(result, "global", "window"); return result; + function replaceAll(text, search, replacement) { + return text.replace(new RegExp(search, 'g'), replacement); + } } function createHTML(callBackfunction) { From 988049e54abfee19430fc18837fe51734fd32cab Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 May 2018 20:05:48 +0200 Subject: [PATCH 036/334] AACloud Config obstacle passed --- Ecosystem.js | 6 ++ Project.njsproj | 6 +- Server/ConfigReader.js | 123 +++++++++++++++++++++-- CloudSupport.js => WebVM/CloudSupport.js | 11 +- WebVM/WebFS.js | 75 ++++++++++++++ index.html | 6 +- server.js | 8 ++ 7 files changed, 218 insertions(+), 17 deletions(-) rename CloudSupport.js => WebVM/CloudSupport.js (86%) create mode 100644 WebVM/WebFS.js diff --git a/Ecosystem.js b/Ecosystem.js index 11a633278..f9825c192 100644 --- a/Ecosystem.js +++ b/Ecosystem.js @@ -12,6 +12,7 @@ function newEcosystem() { getExchange: getExchange, getPlotter: getPlotter, getPlotterModule: getPlotterModule, + getAACloudConfig: getAACloudConfig, initialize: initialize } @@ -25,6 +26,11 @@ function newEcosystem() { } + function getAACloudConfig() { + + return ECOSYSTEM.AACloud; + } + function getHost(pHostCodeName) { for (let i = 0; i < ECOSYSTEM.hosts.length; i++) { diff --git a/Project.njsproj b/Project.njsproj index 8f4bd1d4a..1c0978988 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -32,7 +32,10 @@ - + + Code + + Code @@ -147,6 +150,7 @@ + diff --git a/Server/ConfigReader.js b/Server/ConfigReader.js index 21c605894..03aa390df 100644 --- a/Server/ConfigReader.js +++ b/Server/ConfigReader.js @@ -27,13 +27,13 @@ ecosystem = pEcosystem; ecosystemObject = pEcosystemObject; - readServerConfig(); + readAAWebConfig(); - function readServerConfig() { + function readAAWebConfig() { try { - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readServerConfig -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAAWebConfig -> Entering function."); } let fs = require('fs'); @@ -44,7 +44,7 @@ try { - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readServerConfig -> onFileRead -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAAWebConfig -> onFileRead -> Entering function."); } let fileText; @@ -53,7 +53,7 @@ serverConfig = JSON.parse(fileText); - if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readServerConfig -> onFileRead -> fileText = " + fileText); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] ConfigReader -> readAAWebConfig -> onFileRead -> fileText = " + fileText); } CONSOLE_LOG = serverConfig.webServerLog.console; LOG_FILE_CONTENT = serverConfig.webServerLog.fileContent; @@ -66,13 +66,13 @@ callBackFunction(serverConfig); } catch (err) { - console.log("[ERROR] ConfigReader -> readServerConfig -> onFileRead -> File = " + fileName + " Error = " + err); + console.log("[ERROR] ConfigReader -> readAAWebConfig -> onFileRead -> File = " + fileName + " Error = " + err); } } } catch (err) { - console.log("[ERROR] ConfigReader -> readServerConfig -> Error = " + err); + console.log("[ERROR] ConfigReader -> readAAWebConfig -> Error = " + err); } } } @@ -113,7 +113,7 @@ ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readHostsConfigs(); + readAACloudConfig(); } catch (err) { console.log("[ERROR] ConfigReader -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); @@ -142,7 +142,7 @@ ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readHostsConfigs(); + readAACloudConfig(); } catch (err) { console.log("[ERROR] ConfigReader -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); @@ -172,7 +172,7 @@ ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readHostsConfigs(); + readAACloudConfig(); } catch (err) { console.log("[ERROR] ConfigReader -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); @@ -187,6 +187,107 @@ } } + function readAACloudConfig() { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Entering function."); } + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Cloud -> Entering Case."); } + + storage.getStorageData('AdvancedAlgos', 'AACloud', 'this.config.json', onDataArrived); + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Cloud -> onDataArrived -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + let dataObject = JSON.parse(data); + ecosystemObject.AACloud = dataObject; + readHostsConfigs(); + } + catch (err) { + console.log("[ERROR] ConfigReader -> readAACloudConfig -> Cloud -> onDataArrived -> Error = " + err); + } + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> File System -> Entering Case."); } + + let fs = require('fs'); + try { + let fileName = '../AACloud/this.config.json'; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> File System -> onFileRead -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + let dataObject = JSON.parse(data); + ecosystemObject.AACloud = dataObject; + readHostsConfigs(); + } + catch (err) { + console.log("[ERROR] ConfigReader -> readAACloudConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] ConfigReader -> readAACloudConfig -> File System -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Github -> Entering Case."); } + + github.getGithubData('AdvancedAlgos', 'AAWeb', 'this.config.json', onDataArrived); + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Github -> onDataArrived -> Entering function."); } + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + let dataObject = JSON.parse(data); + ecosystemObject.AACloud = dataObject; + readHostsConfigs(); + } + catch (err) { + console.log("[ERROR] ConfigReader -> readAACloudConfig -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + catch (err) { + console.log("[ERROR] ConfigReader -> readAACloudConfig -> Error = " + err); + } + } + function readHostsConfigs() { try { @@ -934,5 +1035,7 @@ console.log("[ERROR] ConfigReader -> readDevTeamsConfigs -> Error = " + err); } } + + } } \ No newline at end of file diff --git a/CloudSupport.js b/WebVM/CloudSupport.js similarity index 86% rename from CloudSupport.js rename to WebVM/CloudSupport.js index 7fea049cf..b3f55a4dc 100644 --- a/CloudSupport.js +++ b/WebVM/CloudSupport.js @@ -18,12 +18,13 @@ function runBot() { function webRequire(pModulePath) { + switch (pModulePath) { - if (pModulePath === '') { - + case 'fs': { + return newWebFS(); + } } - } function downloadModule(pPath) { @@ -34,4 +35,6 @@ function downloadModule(pPath) { console.log("Dummy Web Loaded"); }); -} \ No newline at end of file +} + + diff --git a/WebVM/WebFS.js b/WebVM/WebFS.js new file mode 100644 index 000000000..c4d0178c4 --- /dev/null +++ b/WebVM/WebFS.js @@ -0,0 +1,75 @@ +function newWebFS() { + + const MODULE_NAME = "Web FS"; + const INFO_LOG = false; + const ERROR_LOG = true; + const logger = newDebugLog(); + logger.fileName = MODULE_NAME; + + /* + + This is the module emulates the NodeJS 'fs'. + + */ + + var thisObject = { + readFileSync: readFileSync, + appendFileSync: appendFileSync, + mkdirSync: mkdirSync, + statSync: statSync, + readdir: readdir, + readdirSync: readdirSync, + readFile: readFile + }; + + + return thisObject; + + function readFileSync(pPath, pEncoding) { + + switch (pPath) { + + case 'this.config.json': { + + /* This is AAWeb Config File. */ + + return JSON.stringify(ecosystem.getAACloudConfig()); + + break; + } + } + } + + function appendFileSync(pPath, pText) { + + /* We will ignore this since we can not and dont want to really write something on disk while we are at the browser. */ + } + + function readdir(pPath, callBackFunction) { + + /* We will return an empty array of files. */ + callBackFunction([]); + } + + function readdirSync(pPath, callBackFunction) { + + + } + + function mkdirSync(pPath) { + + /* Again we do nothing. */ + } + + function readFile(pPath) { + + /* Again we do nothing. */ + } + + function statSync(pPath) { + + let stats + stats.size = 0; + return stats + } +} \ No newline at end of file diff --git a/index.html b/index.html index 3a73e380a..e91d56c6b 100644 --- a/index.html +++ b/index.html @@ -9,9 +9,11 @@ - - + + + + diff --git a/server.js b/server.js index b5adfee5f..a9ea1fe9f 100644 --- a/server.js +++ b/server.js @@ -338,6 +338,14 @@ function onBrowserRequest(request, response) { } break; + case "WebVM": // This means the Scripts folder. + { + + respondWithFile('./WebVM/' + requestParameters[2], response); + + } + break; + case "Scripts": // This means the Scripts folder. { From 3f022d0653c77ff9d7e93eef944c9bd8211dd6b9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 22 May 2018 16:52:33 +0200 Subject: [PATCH 037/334] Removed AACloud configuration sent through web broser --- Ecosystem.js | 6 --- Server/ConfigReader.js | 107 ++--------------------------------------- WebVM/CloudSupport.js | 2 + WebVM/WebFS.js | 6 +-- 4 files changed, 6 insertions(+), 115 deletions(-) diff --git a/Ecosystem.js b/Ecosystem.js index f9825c192..11a633278 100644 --- a/Ecosystem.js +++ b/Ecosystem.js @@ -12,7 +12,6 @@ function newEcosystem() { getExchange: getExchange, getPlotter: getPlotter, getPlotterModule: getPlotterModule, - getAACloudConfig: getAACloudConfig, initialize: initialize } @@ -26,11 +25,6 @@ function newEcosystem() { } - function getAACloudConfig() { - - return ECOSYSTEM.AACloud; - } - function getHost(pHostCodeName) { for (let i = 0; i < ECOSYSTEM.hosts.length; i++) { diff --git a/Server/ConfigReader.js b/Server/ConfigReader.js index 03aa390df..a06cf2607 100644 --- a/Server/ConfigReader.js +++ b/Server/ConfigReader.js @@ -113,7 +113,7 @@ ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readAACloudConfig(); + readHostsConfigs(); } catch (err) { console.log("[ERROR] ConfigReader -> readEcosystemConfig -> Cloud -> onDataArrived -> Error = " + err); @@ -142,7 +142,7 @@ ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readAACloudConfig(); + readHostsConfigs(); } catch (err) { console.log("[ERROR] ConfigReader -> readEcosystemConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); @@ -172,7 +172,7 @@ ecosystem = ecosystem.trim(); // remove first byte with some encoding. ecosystemObject = JSON.parse(ecosystem); - readAACloudConfig(); + readHostsConfigs(); } catch (err) { console.log("[ERROR] ConfigReader -> readEcosystemConfig -> Github -> onDataArrived -> Error = " + err); @@ -187,107 +187,6 @@ } } - function readAACloudConfig() { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Entering function."); } - - switch (serverConfig.configAndPlugins.Location) { - - case 'Cloud': { - - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Cloud -> Entering Case."); } - - storage.getStorageData('AdvancedAlgos', 'AACloud', 'this.config.json', onDataArrived); - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Cloud -> onDataArrived -> Entering function."); } - - let data = pData.toString(); - data = data.trim(); // remove first byte with some encoding. - - let dataObject = JSON.parse(data); - ecosystemObject.AACloud = dataObject; - readHostsConfigs(); - } - catch (err) { - console.log("[ERROR] ConfigReader -> readAACloudConfig -> Cloud -> onDataArrived -> Error = " + err); - } - } - - break; - } - - case 'File System': { - - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> File System -> Entering Case."); } - - let fs = require('fs'); - try { - let fileName = '../AACloud/this.config.json'; - fs.readFile(fileName, onFileRead); - - function onFileRead(err, pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> File System -> onFileRead -> Entering function."); } - - let data = pData.toString(); - data = data.trim(); // remove first byte with some encoding. - - let dataObject = JSON.parse(data); - ecosystemObject.AACloud = dataObject; - readHostsConfigs(); - } - catch (err) { - console.log("[ERROR] ConfigReader -> readAACloudConfig -> File System -> onFileRead -> File = " + fileName + " Error = " + err); - } - - } - } - catch (err) { - console.log("[ERROR] ConfigReader -> readAACloudConfig -> File System -> File = " + fileName + " Error = " + err); - } - break; - } - - case 'Github': { - - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Github -> Entering Case."); } - - github.getGithubData('AdvancedAlgos', 'AAWeb', 'this.config.json', onDataArrived); - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] ConfigReader -> readAACloudConfig -> Github -> onDataArrived -> Entering function."); } - - let data = pData.toString(); - data = data.trim(); // remove first byte with some encoding. - - let dataObject = JSON.parse(data); - ecosystemObject.AACloud = dataObject; - readHostsConfigs(); - } - catch (err) { - console.log("[ERROR] ConfigReader -> readAACloudConfig -> Github -> onDataArrived -> Error = " + err); - } - } - break; - } - } - } - catch (err) { - console.log("[ERROR] ConfigReader -> readAACloudConfig -> Error = " + err); - } - } - function readHostsConfigs() { try { diff --git a/WebVM/CloudSupport.js b/WebVM/CloudSupport.js index b3f55a4dc..6a9382982 100644 --- a/WebVM/CloudSupport.js +++ b/WebVM/CloudSupport.js @@ -7,6 +7,8 @@ When running at the clode on NodeJS some things work diffently that at the brows */ +window.CURRENT_ENVIRONMENT = "Develop"; + function runBot() { let root = newRoot(); diff --git a/WebVM/WebFS.js b/WebVM/WebFS.js index c4d0178c4..04f078eaf 100644 --- a/WebVM/WebFS.js +++ b/WebVM/WebFS.js @@ -29,11 +29,7 @@ switch (pPath) { - case 'this.config.json': { - - /* This is AAWeb Config File. */ - - return JSON.stringify(ecosystem.getAACloudConfig()); + case '': { break; } From 3873d8b14c0e3a82f07faeed8697ba2ba38f6fb4 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 22 May 2018 17:48:34 +0200 Subject: [PATCH 038/334] Got Cloud Permissions and Exchange Keys at the Browser VM --- Ecosystem.js | 19 ++++++++++++--- Project.njsproj | 3 +++ Server/Permissions.js | 54 +++++++++++++++++++++++++++++++++++++++++++ WebVM/CloudSupport.js | 6 ++++- server.js | 12 ++++++++-- 5 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 Server/Permissions.js diff --git a/Ecosystem.js b/Ecosystem.js index 11a633278..19e8eaaba 100644 --- a/Ecosystem.js +++ b/Ecosystem.js @@ -1,7 +1,7 @@  function newEcosystem() { - let ecosystem = { + let thisObject = { getHost: getHost, getCompetition: getCompetition, getTeam: getTeam, @@ -12,17 +12,30 @@ function newEcosystem() { getExchange: getExchange, getPlotter: getPlotter, getPlotterModule: getPlotterModule, + getStoragePermissions: getStoragePermissions, + getExchangeKeys: getExchangeKeys, initialize: initialize } const ECOSYSTEM = "@ecosystem.json@"; - return ecosystem; - + return thisObject; function initialize() { + } + + function getStoragePermissions() { + + return ECOSYSTEM.STORAGE_PERMISSIONS; + + } + + function getExchangeKeys() { + + return ECOSYSTEM.EXCHANGE_KEYS; + } function getHost(pHostCodeName) { diff --git a/Project.njsproj b/Project.njsproj index 1c0978988..0731d3a4a 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -32,6 +32,9 @@ + + Code + Code diff --git a/Server/Permissions.js b/Server/Permissions.js new file mode 100644 index 000000000..c7c0c2e25 --- /dev/null +++ b/Server/Permissions.js @@ -0,0 +1,54 @@ +exports.newPermissions = function newPermissions() { + + let thisObject = { + initialize: initialize + } + + return thisObject; + + function initialize(pEcosystemObject, callBackFunction) { + + readStoragePermissions(); + + function readStoragePermissions() { + + let filePath; + + try { + let fs = require('fs'); + filePath = '../' + 'Connection-Strings' + '/' + 'Storage.Permissions.json'; + pEcosystemObject.STORAGE_PERMISSIONS = JSON.parse(fs.readFileSync(filePath, 'utf8')); + + readExchangeAPIKey(); + } + catch (err) { + console.log("[ERROR] readStoragePermissions -> err = " + err.message); + console.log("[HINT] readStoragePermissions -> You need to have a file at this path -> " + filePath); + } + } + + function readExchangeAPIKey() { + + try { + let fs = require('fs'); + let filePath = '../' + 'Exchange-Keys' + '/' + 'Secret.Keys' + '.json'; + + pEcosystemObject.EXCHANGE_KEYS = JSON.parse(fs.readFileSync(filePath, 'utf8')); + callBackFunction(); + } + catch (err) { + console.log("[ERROR] readExchangeAPIKey -> err = " + err.message); + console.log("[HINT] You need to have a file at this path -> " + filePath); + + pEcosystemObject.EXCHANGE_KEYS = { + Poloniex: { + Key: "", + Secret: "" + } + } + + callBackFunction(); + } + } + } +} \ No newline at end of file diff --git a/WebVM/CloudSupport.js b/WebVM/CloudSupport.js index 6a9382982..43ba3adb5 100644 --- a/WebVM/CloudSupport.js +++ b/WebVM/CloudSupport.js @@ -7,10 +7,14 @@ When running at the clode on NodeJS some things work diffently that at the brows */ -window.CURRENT_ENVIRONMENT = "Develop"; + function runBot() { + window.CURRENT_ENVIRONMENT = "Develop"; + window.STORAGE_PERMISSIONS = ecosystem.getStoragePermissions(); + window.EXCHANGE_KEYS = ecosystem.getExchangeKeys(); + let root = newRoot(); root.initialize(); diff --git a/server.js b/server.js index a9ea1fe9f..a3cbde240 100644 --- a/server.js +++ b/server.js @@ -70,9 +70,17 @@ function initialize() { function onLoadCompeted(pHTMLCloudScripts) { - HTMLCloudScripts = pHTMLCloudScripts; - startHtttpServer(); + const PERMISSIONS = require('./Server/Permissions'); + let permissions = PERMISSIONS.newPermissions(); + permissions.initialize(ecosystemObject, onInitialized); + + function onInitialized() { + + HTMLCloudScripts = pHTMLCloudScripts; + startHtttpServer(); + + } } } } From 24d72f4a9af15eddc73db35c196a5d56659205ba Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 22 May 2018 18:30:44 +0200 Subject: [PATCH 039/334] Few webRequires implemented --- WebVM/CloudSupport.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/WebVM/CloudSupport.js b/WebVM/CloudSupport.js index 43ba3adb5..236be1b45 100644 --- a/WebVM/CloudSupport.js +++ b/WebVM/CloudSupport.js @@ -17,8 +17,12 @@ function runBot() { let root = newRoot(); - root.initialize(); - root.start(); + root.initialize(onInitialized); + + function onInitialized() { + + root.start(); + } } @@ -30,6 +34,19 @@ function webRequire(pModulePath) { return newWebFS(); } + case './BlobStorage': { + + return newBlobStorage(); + } + case 'azure-storage': { + + return AzureStorage.Blob; + } + case './DebugLog': { + + return newDebugLog(); + + } } } From 600c79506b85066f078e69b65bb3dee25b2d4f07 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 22 May 2018 18:33:15 +0200 Subject: [PATCH 040/334] Refacotring webDebugLog --- Animation.js | 2 +- Canvas.js | 2 +- CompetitionStorage.js | 2 +- Files/DailyFiles.js | 2 +- Files/FileCloud.js | 2 +- Files/FileCursor.js | 2 +- Files/FileSequence.js | 2 +- Files/MarketFiles.js | 2 +- Files/SingleFile.js | 2 +- FloatingSpace/FloatingLayer.js | 2 +- FloatingSpace/NoteSets.js | 2 +- FloatingSpace/ProfileBalls.js | 2 +- ProductStorage.js | 2 +- Project.njsproj | 2 +- Spaces/ChartSpace.js | 2 +- TimeMachine.js | 2 +- TimelineChart.js | 2 +- DebugLog.js => WebDebugLog.js | 2 +- WebVM/WebFS.js | 2 +- index.html | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) rename DebugLog.js => WebDebugLog.js (87%) diff --git a/Animation.js b/Animation.js index 377c49395..91917f959 100644 --- a/Animation.js +++ b/Animation.js @@ -4,7 +4,7 @@ function newAnimation() { const MODULE_NAME = "Animation"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; /* diff --git a/Canvas.js b/Canvas.js index 7bc23b8ce..76dcbe853 100644 --- a/Canvas.js +++ b/Canvas.js @@ -38,7 +38,7 @@ function newCanvas() { const MODULE_NAME = "Canvas"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; /* Mouse event related variables. */ diff --git a/CompetitionStorage.js b/CompetitionStorage.js index 4ccc18017..637efde9b 100644 --- a/CompetitionStorage.js +++ b/CompetitionStorage.js @@ -4,7 +4,7 @@ function newCompetitionStorage(pName) { const MODULE_NAME = "Competition Storage"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/Files/DailyFiles.js b/Files/DailyFiles.js index 7d5337a7f..c7cbf8314 100644 --- a/Files/DailyFiles.js +++ b/Files/DailyFiles.js @@ -4,7 +4,7 @@ function newDailyFiles() { const MODULE_NAME = "Daily Files"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/Files/FileCloud.js b/Files/FileCloud.js index e66ef83ba..eb35104be 100644 --- a/Files/FileCloud.js +++ b/Files/FileCloud.js @@ -4,7 +4,7 @@ function newFileCloud() { const MODULE_NAME = "File Cloud"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; /* diff --git a/Files/FileCursor.js b/Files/FileCursor.js index dde4e44f4..f996cff5d 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -4,7 +4,7 @@ function newFileCursor() { const MODULE_NAME = "File Cursor"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let cursorDate; diff --git a/Files/FileSequence.js b/Files/FileSequence.js index 2aa3ca2c0..200385790 100644 --- a/Files/FileSequence.js +++ b/Files/FileSequence.js @@ -4,7 +4,7 @@ function newFileSequence() { const MODULE_NAME = "File Sequence"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/Files/MarketFiles.js b/Files/MarketFiles.js index 0caaeb34c..0bbf6d116 100644 --- a/Files/MarketFiles.js +++ b/Files/MarketFiles.js @@ -4,7 +4,7 @@ function newMarketFiles() { const MODULE_NAME = "Market Files"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/Files/SingleFile.js b/Files/SingleFile.js index 38e4602c4..65c8d8472 100644 --- a/Files/SingleFile.js +++ b/Files/SingleFile.js @@ -4,7 +4,7 @@ function newSingleFile() { const MODULE_NAME = "Single File"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/FloatingSpace/FloatingLayer.js b/FloatingSpace/FloatingLayer.js index 53a45a781..ae29ed11c 100644 --- a/FloatingSpace/FloatingLayer.js +++ b/FloatingSpace/FloatingLayer.js @@ -5,7 +5,7 @@ function newFloatingLayer() { const INFO_LOG = false; const INTENSIVE_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/FloatingSpace/NoteSets.js b/FloatingSpace/NoteSets.js index 75c051611..673874e4f 100644 --- a/FloatingSpace/NoteSets.js +++ b/FloatingSpace/NoteSets.js @@ -4,7 +4,7 @@ function newNoteSets() { const MODULE_NAME = "Note Sets"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/FloatingSpace/ProfileBalls.js b/FloatingSpace/ProfileBalls.js index 47c2e8761..c0d190ca4 100644 --- a/FloatingSpace/ProfileBalls.js +++ b/FloatingSpace/ProfileBalls.js @@ -4,7 +4,7 @@ function newProfileBalls() { const MODULE_NAME = "Profile Balls"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; /* diff --git a/ProductStorage.js b/ProductStorage.js index c449ebc3c..5986ff494 100644 --- a/ProductStorage.js +++ b/ProductStorage.js @@ -4,7 +4,7 @@ function newProductStorage(pName) { const MODULE_NAME = "Product Storage"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; /* diff --git a/Project.njsproj b/Project.njsproj index 0731d3a4a..ec5d65b6f 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -60,7 +60,7 @@ Code - + Code diff --git a/Spaces/ChartSpace.js b/Spaces/ChartSpace.js index 16c0f3e10..57119f61a 100644 --- a/Spaces/ChartSpace.js +++ b/Spaces/ChartSpace.js @@ -10,7 +10,7 @@ function newChartSpace() { const MODULE_NAME = "Chart Space"; const INFO_LOG = false; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; var thisObject = { diff --git a/TimeMachine.js b/TimeMachine.js index 1345ff66f..68c83eb8c 100644 --- a/TimeMachine.js +++ b/TimeMachine.js @@ -13,7 +13,7 @@ function newTimeMachine() { const MODULE_NAME = "Time Machine"; const INFO_LOG = false; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { diff --git a/TimelineChart.js b/TimelineChart.js index 3af09dddd..b3160f64c 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -4,7 +4,7 @@ const INFO_LOG = false; const INTENSIVE_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let productPlotters = []; diff --git a/DebugLog.js b/WebDebugLog.js similarity index 87% rename from DebugLog.js rename to WebDebugLog.js index 34ef99a0c..44af92f0e 100644 --- a/DebugLog.js +++ b/WebDebugLog.js @@ -1,5 +1,5 @@  -function newDebugLog() { +function newWebDebugLog() { let thisObject = { write: write, diff --git a/WebVM/WebFS.js b/WebVM/WebFS.js index 04f078eaf..347d69892 100644 --- a/WebVM/WebFS.js +++ b/WebVM/WebFS.js @@ -3,7 +3,7 @@ const MODULE_NAME = "Web FS"; const INFO_LOG = false; const ERROR_LOG = true; - const logger = newDebugLog(); + const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; /* diff --git a/index.html b/index.html index e91d56c6b..b94bb77a9 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,7 @@ - + From 3295e91d5f96d3471d992c63fbcd6db701b37151 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 23 May 2018 08:31:12 +0200 Subject: [PATCH 041/334] Writting to the storage --- CloudVM/CloudSupport.js | 147 ++++++++++++++++++++++++++++++++++++ {WebVM => CloudVM}/WebFS.js | 0 Project.njsproj | 6 +- WebVM/CloudSupport.js | 63 ---------------- index.html | 4 +- server.js | 4 +- 6 files changed, 154 insertions(+), 70 deletions(-) create mode 100644 CloudVM/CloudSupport.js rename {WebVM => CloudVM}/WebFS.js (100%) delete mode 100644 WebVM/CloudSupport.js diff --git a/CloudVM/CloudSupport.js b/CloudVM/CloudSupport.js new file mode 100644 index 000000000..abd9f3f5c --- /dev/null +++ b/CloudVM/CloudSupport.js @@ -0,0 +1,147 @@ + +/* + +This module is for enabling the AACloud to run at the browser. + +When running at the clode on NodeJS some things work diffently that at the browser. That gap will be fixed by the functions at this module. + +*/ + + + +function runBot() { + + window.CURRENT_ENVIRONMENT = "Develop"; + window.STORAGE_PERMISSIONS = ecosystem.getStoragePermissions(); + window.EXCHANGE_KEYS = ecosystem.getExchangeKeys(); + + let root = newRoot(); + + root.initialize(onInitialized); + + function onInitialized() { + + root.start(); + } + +} + +function webRequire(pModulePath) { + + switch (pModulePath) { + + case 'fs': { + + return newWebFS(); + } + case 'azure-storage': { + + return AzureStorage.Blob; + } + case './EventHandler': { + + let MODULE = {}; + MODULE.newEventHandler = newEventHandler; + return MODULE; + } + case './BlobStorage': { + + let MODULE = {}; + MODULE.newBlobStorage = newBlobStorage; + return MODULE; + } + case './DebugLog': { + + let MODULE = {}; + MODULE.newDebugLog = newDebugLog; + return MODULE; + } + case './TradingBotProcessMainLoop': { + + let MODULE = {}; + MODULE.newTradingBotProcessMainLoop = newTradingBotProcessMainLoop; + return MODULE; + } + case './ExtractionBotProcessMainLoop': { + + let MODULE = {}; + MODULE.newExtractionBotProcessMainLoop = newExtractionBotProcessMainLoop; + return MODULE; + } + case './IndicatorBotProcessMainLoop': { + + let MODULE = {}; + MODULE.newIndicatorBotProcessMainLoop = newIndicatorBotProcessMainLoop; + return MODULE; + } + case './CloudUtilities': { + + let MODULE = {}; + MODULE.newCloudUtilities = newCloudUtilities; + return MODULE; + } + case './PoloniexAPIClient': { + + let MODULE = {}; + MODULE.newPoloniexAPIClient = newPoloniexAPIClient; + return MODULE; + } + case './ExchangeAPI': { + + let MODULE = {}; + MODULE.newExchangeAPI = newExchangeAPI; + return MODULE; + } + case './Context': { + + let MODULE = {}; + MODULE.newContext = newContext; + return MODULE; + } + case './Assistant': { + + let MODULE = {}; + MODULE.newAssistant = newAssistant; + return MODULE; + } + case './StatusReport': { + + let MODULE = {}; + MODULE.newStatusReport = newStatusReport; + return MODULE; + } + case './DataSet': { + + let MODULE = {}; + MODULE.newDataSet = newDataSet; + return MODULE; + } + case './StatusDependencies': { + + let MODULE = {}; + MODULE.newStatusDependencies = newStatusDependencies; + return MODULE; + } + case './DataDependencies': { + + let MODULE = {}; + MODULE.newDataDependencies = newDataDependencies; + return MODULE; + } + default: { + console.log(pModulePath + " not found. "); + } + } +} + +function downloadModule(pPath) { + + /* We will need this to load individual bots modules. */ + + Requirejs(["Scripts/DummyWeb"], function (DummyWeb) { + console.log("Dummy Web Loaded"); + }); + +} + + diff --git a/WebVM/WebFS.js b/CloudVM/WebFS.js similarity index 100% rename from WebVM/WebFS.js rename to CloudVM/WebFS.js diff --git a/Project.njsproj b/Project.njsproj index ec5d65b6f..00558fbec 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -35,10 +35,10 @@ Code - + Code - + Code @@ -153,7 +153,7 @@ - + diff --git a/WebVM/CloudSupport.js b/WebVM/CloudSupport.js deleted file mode 100644 index 236be1b45..000000000 --- a/WebVM/CloudSupport.js +++ /dev/null @@ -1,63 +0,0 @@ - -/* - -This module is for enabling the AACloud to run at the browser. - -When running at the clode on NodeJS some things work diffently that at the browser. That gap will be fixed by the functions at this module. - -*/ - - - -function runBot() { - - window.CURRENT_ENVIRONMENT = "Develop"; - window.STORAGE_PERMISSIONS = ecosystem.getStoragePermissions(); - window.EXCHANGE_KEYS = ecosystem.getExchangeKeys(); - - let root = newRoot(); - - root.initialize(onInitialized); - - function onInitialized() { - - root.start(); - } - -} - -function webRequire(pModulePath) { - - switch (pModulePath) { - - case 'fs': { - - return newWebFS(); - } - case './BlobStorage': { - - return newBlobStorage(); - } - case 'azure-storage': { - - return AzureStorage.Blob; - } - case './DebugLog': { - - return newDebugLog(); - - } - } -} - -function downloadModule(pPath) { - - /* We will need this to load individual bots modules. */ - - Requirejs(["Scripts/DummyWeb"], function (DummyWeb) { - console.log("Dummy Web Loaded"); - }); - -} - - diff --git a/index.html b/index.html index b94bb77a9..47131e3f8 100644 --- a/index.html +++ b/index.html @@ -10,8 +10,8 @@ - - + + diff --git a/server.js b/server.js index a3cbde240..3604855b3 100644 --- a/server.js +++ b/server.js @@ -346,10 +346,10 @@ function onBrowserRequest(request, response) { } break; - case "WebVM": // This means the Scripts folder. + case "CloudVM": // This means the Scripts folder. { - respondWithFile('./WebVM/' + requestParameters[2], response); + respondWithFile('./CloudVM/' + requestParameters[2], response); } break; From a14a7f655fbbe22c01488e47b77b8f43f18a815b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 23 May 2018 10:09:11 +0200 Subject: [PATCH 042/334] Cloud Require Implemented --- CloudVM/CloudRequire.js | 68 +++++++++++++++++++++++++++++++++++++++++ CloudVM/CloudSupport.js | 18 ++++++++--- Project.njsproj | 3 ++ 3 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 CloudVM/CloudRequire.js diff --git a/CloudVM/CloudRequire.js b/CloudVM/CloudRequire.js new file mode 100644 index 000000000..871c0adee --- /dev/null +++ b/CloudVM/CloudRequire.js @@ -0,0 +1,68 @@ +function newCloudRequire(BOT, DEBUG_MODULE) { + + const FULL_LOG = true; + const LOG_FILE_CONTENT = false; + + const MODULE_NAME = "Cloud Require"; + + let bot = BOT; + + const logger = DEBUG_MODULE.newDebugLog(); + logger.bot = bot; + logger.fileName = MODULE_NAME; + logger.initialize(); + + let thisObject = { + requireBot: requireBot, + requireCommons: requireCommons + }; + + return thisObject; + + function requireBot(pCloudStorage, pProcessConfig, callBackFunction) { + + try { + + if (FULL_LOG === true) { logger.write("[INFO] requireBot -> Entering function."); } + + let filePath = "Bots" + "/" + bot.devTeam + "/" + bot.repo + "/" + pProcessConfig.name + "/" + "User.Bot.js"; + + downloadModule(filePath, onDownloaded) + + function onDownloaded(pModule) { + + callBackFunction(global.DEFAULT_OK_RESPONSE, pModule); + return; + + } + + } catch (err) { + logger.write("[ERROR] requireBot -> err = " + err.message); + callBackFunction(global.DEFAULT_FAIL_RESPONSE); + } + } + + function requireCommons(pCloudStorage, callBackFunction) { + + try { + + if (FULL_LOG === true) { logger.write("[INFO] requireCommons -> Entering function."); } + + let filePath = bot.devTeam + "/" + bot.repo + "/" + "Commons.js"; + + downloadModule(filePath, onDownloaded) + + function onDownloaded(pModule) { + + callBackFunction(global.DEFAULT_OK_RESPONSE, pModule); + return; + + } + + } catch (err) { + logger.write("[ERROR] requireCommons -> err = " + err.message); + callBackFunction(global.DEFAULT_FAIL_RESPONSE); + } + } + +}; \ No newline at end of file diff --git a/CloudVM/CloudSupport.js b/CloudVM/CloudSupport.js index abd9f3f5c..c5953fce5 100644 --- a/CloudVM/CloudSupport.js +++ b/CloudVM/CloudSupport.js @@ -128,20 +128,30 @@ function webRequire(pModulePath) { MODULE.newDataDependencies = newDataDependencies; return MODULE; } + case './CloudRequire': { + + let MODULE = {}; + MODULE.newCloudRequire = newCloudRequire; + return MODULE; + } default: { console.log(pModulePath + " not found. "); } } } -function downloadModule(pPath) { +function downloadModule(pPath, callBackFunction) { /* We will need this to load individual bots modules. */ - Requirejs(["Scripts/DummyWeb"], function (DummyWeb) { - console.log("Dummy Web Loaded"); - }); + Requirejs([pPath], onRequired); + function onRequired(pModule) { + + console.log(pPath + " downloaded."); + + callBackFunction(pModule); + } } diff --git a/Project.njsproj b/Project.njsproj index 00558fbec..7c8d10615 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -32,6 +32,9 @@ + + Code + Code From dbae3aeb1e93a11aac562764da8d090aca7e686d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 23 May 2018 12:47:55 +0200 Subject: [PATCH 043/334] Trading Loop Inizialized Complete at the Browser --- CloudVM/CloudRequire.js | 26 ++-- Project.njsproj | 4 +- Scripts/DummyWeb.js | 5 - Server/BotsScripts.js | 334 ++++++++++++++++++++++++++++++++++++++++ index.html | 1 + server.js | 78 +++++++++- 6 files changed, 427 insertions(+), 21 deletions(-) delete mode 100644 Scripts/DummyWeb.js create mode 100644 Server/BotsScripts.js diff --git a/CloudVM/CloudRequire.js b/CloudVM/CloudRequire.js index 871c0adee..110911036 100644 --- a/CloudVM/CloudRequire.js +++ b/CloudVM/CloudRequire.js @@ -13,17 +13,17 @@ logger.initialize(); let thisObject = { - requireBot: requireBot, - requireCommons: requireCommons + downloadBot: downloadBot, + downloadCommons: downloadCommons }; return thisObject; - function requireBot(pCloudStorage, pProcessConfig, callBackFunction) { + function downloadBot(pCloudStorage, pProcessConfig, callBackFunction) { try { - if (FULL_LOG === true) { logger.write("[INFO] requireBot -> Entering function."); } + if (FULL_LOG === true) { logger.write("[INFO] downloadBot -> Entering function."); } let filePath = "Bots" + "/" + bot.devTeam + "/" + bot.repo + "/" + pProcessConfig.name + "/" + "User.Bot.js"; @@ -31,37 +31,37 @@ function onDownloaded(pModule) { - callBackFunction(global.DEFAULT_OK_RESPONSE, pModule); + callBackFunction(window.DEFAULT_OK_RESPONSE, pModule); return; } } catch (err) { - logger.write("[ERROR] requireBot -> err = " + err.message); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); + logger.write("[ERROR] downloadBot -> err = " + err.message); + callBackFunction(window.DEFAULT_FAIL_RESPONSE); } } - function requireCommons(pCloudStorage, callBackFunction) { + function downloadCommons(pCloudStorage, callBackFunction) { try { - if (FULL_LOG === true) { logger.write("[INFO] requireCommons -> Entering function."); } + if (FULL_LOG === true) { logger.write("[INFO] downloadCommons -> Entering function."); } - let filePath = bot.devTeam + "/" + bot.repo + "/" + "Commons.js"; + let filePath = "Bots" + "/" + bot.devTeam + "/" + bot.repo + "/" + "Commons.js"; downloadModule(filePath, onDownloaded) function onDownloaded(pModule) { - callBackFunction(global.DEFAULT_OK_RESPONSE, pModule); + callBackFunction(window.DEFAULT_OK_RESPONSE, pModule); return; } } catch (err) { - logger.write("[ERROR] requireCommons -> err = " + err.message); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); + logger.write("[ERROR] downloadCommons -> err = " + err.message); + callBackFunction(window.DEFAULT_FAIL_RESPONSE); } } diff --git a/Project.njsproj b/Project.njsproj index 7c8d10615..94074807e 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -35,6 +35,9 @@ Code + + Code + Code @@ -75,7 +78,6 @@ Code - Code diff --git a/Scripts/DummyWeb.js b/Scripts/DummyWeb.js deleted file mode 100644 index 99b0f4b8f..000000000 --- a/Scripts/DummyWeb.js +++ /dev/null @@ -1,5 +0,0 @@ -function newDummyWeb() { - - - -} \ No newline at end of file diff --git a/Server/BotsScripts.js b/Server/BotsScripts.js new file mode 100644 index 000000000..3a9f521b6 --- /dev/null +++ b/Server/BotsScripts.js @@ -0,0 +1,334 @@ +exports.newBotScripts = function newBotScripts() { + + let thisObject = { + loadBotScripts: loadBotScripts, + initialize: initialize + } + + const GITHUB = require('../Server/Github'); + let github = GITHUB.newGithub(); + + const STORAGE = require('../Server/Storage'); + let storage = STORAGE.newStorage(); + + let serverConfig; + let githubData; + let storageData; + let fileSystemData; + let ecosystem; + let ecosystemObject; + + return thisObject; + + function initialize(pEcosystem, pEcosystemObject, pServerConfig, pGithubData, pStorageData, pFileSystemData, callBackFunction) { + + serverConfig = pServerConfig; + githubData = pGithubData; + fileSystemData = pFileSystemData; + storageData = pStorageData; + ecosystem = pEcosystem; + ecosystemObject = pEcosystemObject; + + callBackFunction(); + } + + function loadBotScripts(callBackfunction) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Entering function."); } + + /* + + Here we go through the webModules Array and bring them all. + + */ + + let modulesToBeRetrieved = 0; + let modulesRetrieved = 0; + + for (let i = 0; i < ecosystemObject.devTeams.length; i++) { + + let devTeam = ecosystemObject.devTeams[i]; + + for (let j = 0; j < devTeam.bots.length; j++) { + + let bot = devTeam.bots[j]; + + getCommons(devTeam.codeName, bot.repo, onCommons); + + function onCommons() { + + for (let k = 0; k < bot.processes.length; k++) { + + let process = bot.processes[k]; + + modulesToBeRetrieved++; + getUserBot(devTeam.codeName, bot.repo, process.name, onUserBot); + + function onUserBot() { + + modulesRetrieved++; + + if (modulesRetrieved === modulesToBeRetrieved) { + + callBackfunction(); + } + } + } + } + } + } + + function getCommons(pDevTeam, pBot, callBack) { + + let moduleName = "Commons.js"; + let key = pDevTeam + "." + pBot; + let path = pDevTeam + "/" + pBot; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Cloud -> Entering Case."); } + + storage.getStorageData(path, moduleName, onDataArrived); + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Entering function."); } + + if (pData !== undefined) { + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + fileSystemData.set(key, data); + + } + + callBack(); + + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Error = " + err); + } + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> File System -> Entering Case."); } + + let fs = require('fs'); + try { + let fileName = '../Bots/' + path + "/" + moduleName; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> File System -> onFileRead -> Entering function."); } + + if (pData !== undefined) { + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + fileSystemData.set(key, data); + + } + + callBack(); + + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> File System -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Github -> Entering Case."); } + + github.getGithubData(path, moduleName, onDataArrived); + + function onDataArrived(pData) { + + try { + + if (pData !== undefined) { + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + fileSystemData.set(key, data); + + } + + callBack(); + + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + + function getUserBot(pDevTeam, pBot, pProcess, callBack) { + + let moduleName = "User.Bot.js"; + let key = pDevTeam + "." + pBot + "." + pProcess; + let path = pDevTeam + "/" + pBot + "/" + pProcess; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Cloud -> Entering Case."); } + + storage.getStorageData(path, moduleName, onDataArrived); + + function onDataArrived(pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Entering function."); } + + if (pData !== undefined) { + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + fileSystemData.set(key, data); + + } + + callBack(); + + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Error = " + err); + } + } + + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> File System -> Entering Case."); } + + let fs = require('fs'); + try { + let fileName = '../Bots/' + path + "/" + moduleName; + fs.readFile(fileName, onFileRead); + + function onFileRead(err, pData) { + + try { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> File System -> onFileRead -> Entering function."); } + + if (pData !== undefined) { + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + fileSystemData.set(key, data); + + } + + callBack(); + + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> File System -> onFileRead -> File = " + fileName + " Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> File System -> File = " + fileName + " Error = " + err); + } + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Github -> Entering Case."); } + + github.getGithubData(path, moduleName, onDataArrived); + + function onDataArrived(pData) { + + try { + + if (pData !== undefined) { + + let data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. + + data = browserify(data); + + fileSystemData.set(key, data); + + } + + callBack(); + + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> Github -> onDataArrived -> Error = " + err); + } + } + break; + } + } + } + + function browserify(pData) { + + let result = pData.substring(pData.indexOf('=') + 2); + + result = replaceAll(result, "require", "webRequire"); + result = replaceAll(result, "global", "window"); + + return result; + + function replaceAll(text, search, replacement) { + return text.replace(new RegExp(search, 'g'), replacement); + } + } + + } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> Error = " + err); + } + } +} \ No newline at end of file diff --git a/index.html b/index.html index 47131e3f8..cfe6bb6bc 100644 --- a/index.html +++ b/index.html @@ -10,6 +10,7 @@ + diff --git a/server.js b/server.js index 3604855b3..4fa543eec 100644 --- a/server.js +++ b/server.js @@ -77,9 +77,21 @@ function initialize() { function onInitialized() { - HTMLCloudScripts = pHTMLCloudScripts; - startHtttpServer(); + const BOT_SCRIPTS = require('./Server/BotsScripts'); + let botScripts = BOT_SCRIPTS.newBotScripts(); + botScripts.initialize(ecosystem, ecosystemObject, serverConfig, githubData, storageData, fileSystemData, onInitialized); + + function onInitialized() { + + botScripts.loadBotScripts(onScriptsLoaded); + + function onScriptsLoaded(){ + + HTMLCloudScripts = pHTMLCloudScripts; + startHtttpServer(); + } + } } } } @@ -412,6 +424,68 @@ function onBrowserRequest(request, response) { } break; + case "Bots": // This means the cloud folder. + { + + let map; + + switch (serverConfig.configAndPlugins.Location) { + + case 'Cloud': { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Cloud -> Entering Case."); } + + map = storageData; + break; + } + + case 'File System': { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> File System -> Entering Case."); } + + map = fileSystemData; + break; + } + + case 'Github': { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> readEcosystemConfig -> Github -> Entering Case."); } + + github.getGithubData(requestParameters[2], requestParameters[3], requestParameters[4], onDataArrived); + + map = githubData; + break; + } + } + + let key; + + if (requestParameters[4] !== undefined) { + + key = requestParameters[2] + "." + requestParameters[3] + "." + requestParameters[4]; + + } else { + + key = requestParameters[2] + "." + requestParameters[3]; + + } + + let script = map.get(key); + + if (script !== undefined) { + + respondWithContent(script, response); + + } else { + + if (CONSOLE_LOG === true) { console.log("[WARN] server -> onBrowserRequest -> readEcosystemConfig -> Script Not Found."); } + if (CONSOLE_LOG === true) { console.log("[WARN] server -> onBrowserRequest -> readEcosystemConfig -> key = " + key); } + + respondWithContent("", response); + } + } + break; + case "Plotters": // This means the plotter folder, not to be confused with the Plotters script! { From 40193bbbd518de553126db2fa61c9c00318658fa Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 24 May 2018 09:54:40 +0200 Subject: [PATCH 044/334] PoloniexAPIClient browser part implemented --- CloudVM/CloudSupport.js | 18 +++- CloudVM/PoloniexAPIClient.js | 154 ++++++++++++++++++++++++++++++++ Project.njsproj | 1 + Scripts/require.js | 164 +++++++++++++++++------------------ index.html | 19 ++-- 5 files changed, 264 insertions(+), 92 deletions(-) create mode 100644 CloudVM/PoloniexAPIClient.js diff --git a/CloudVM/CloudSupport.js b/CloudVM/CloudSupport.js index c5953fce5..956b5207e 100644 --- a/CloudVM/CloudSupport.js +++ b/CloudVM/CloudSupport.js @@ -144,7 +144,7 @@ function downloadModule(pPath, callBackFunction) { /* We will need this to load individual bots modules. */ - Requirejs([pPath], onRequired); + REQUIREJS([pPath], onRequired); function onRequired(pModule) { @@ -154,4 +154,20 @@ function downloadModule(pPath, callBackFunction) { } } +function callServer(pPath, callBackFunction) { + + let xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + + callBackFunction(xhttp.responseText); + + } + }; + xhttp.open("GET", pPath, true); + xhttp.send(); + +} + + diff --git a/CloudVM/PoloniexAPIClient.js b/CloudVM/PoloniexAPIClient.js new file mode 100644 index 000000000..4267f0eb6 --- /dev/null +++ b/CloudVM/PoloniexAPIClient.js @@ -0,0 +1,154 @@ +function newPoloniexAPIClient() { + + let newFunction = new API(global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key, global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret); + + let thisObject = { + API: { + analizeResponse: analizeResponse, + returnOpenOrders: returnOpenOrders, + returnOrderTrades: returnOrderTrades, + buy: buy, + sell: sell, + moveOrder: moveOrder, + returnTicker: returnTicker + } + }; + + return thisObject; + + function analizeResponse(logger, exchangeErr, exchangeResponse, notOkCallBack, okCallBack) { + + /* This function analizes the different situations we might encounter trying to access Poloniex and returns appropiate standard errors. */ + + try { + + let stringExchangeResponse = JSON.stringify(exchangeResponse); + let stringExchangeErr = JSON.stringify(exchangeErr); + + logger.write("[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr); + logger.write("[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); + + if (stringExchangeErr.indexOf("ETIMEDOUT") > 0 || + stringExchangeErr.indexOf("ENOTFOUND") > 0 || + stringExchangeErr.indexOf("ECONNREFUSED") > 0 || + stringExchangeErr.indexOf("ESOCKETTIMEDOUT") > 0 || + stringExchangeErr.indexOf("ECONNRESET") > 0 || + (stringExchangeResponse !== undefined && ( + stringExchangeResponse.indexOf("Connection timed out") > 0 || + stringExchangeResponse.indexOf("Connection Error") > 0 || + stringExchangeResponse.indexOf("Bad gateway") > 0 || + stringExchangeResponse.indexOf("Internal error. Please try again") > 0))) { + + logger.write("[WARN] analizeResponse -> Timeout reached or connection problem while trying to access the Exchange API. Requesting new execution later."); + notOkCallBack(global.DEFAULT_RETRY_RESPONSE); + return; + + } else { + + if (JSON.stringify(exchangeResponse).indexOf("error") > 0) { + + logger.write("[ERROR] analizeResponse -> Unexpected response from the Exchange."); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); + return; + } + + if (exchangeErr) { + + logger.write("[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange."); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); + return; + + } else { + + logger.write("[INFO] analizeResponse -> No problem found."); + okCallBack(); + return; + } + } + + } catch (err) { + logger.write("[ERROR] analizeResponse -> err.message = " + err.message); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); + return; + } + } + + function returnOpenOrders(pMarketAssetA, pMarketAssetB, callBackFunction) { + + let path = "PloniexAPIClinet" + "/" + + "returnOpenOrders" + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + pMarketAssetA + "/" + + pMarketAssetB + ; + callServer(callBackFunction); + + } + + function returnOrderTrades(pPositionId, callBackFunction) { + + let path = "PloniexAPIClinet" + "/" + + "returnOrderTrades" + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + pPositionId + ; + callServer(callBackFunction); + + } + + function buy(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) { + + let path = "PloniexAPIClinet" + "/" + + "buy" + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + pMarketAssetB + "/" + + pRate + "/" + + pAmountB + ; + callServer(callBackFunction); + + } + + function sell(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) { + + let path = "PloniexAPIClinet" + "/" + + "sell" + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + pMarketAssetB + "/" + + pRate + "/" + + pAmountB + ; + callServer(callBackFunction); + + } + + function moveOrder(pPositionId, pNewRate, pPositionAmountB, callBackFunction) { + + let path = "PloniexAPIClinet" + "/" + + "moveOrder" + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + pPositionId + "/" + + pNewRate + "/" + + pPositionAmountB + ; + callServer(callBackFunction); + + } + + function returnTicker(callBackFunction) { + + let path = "PloniexAPIClinet" + "/" + + "returnTicker" + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" + + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + ; + callServer(callBackFunction); + + } + +} diff --git a/Project.njsproj b/Project.njsproj index 94074807e..a2e6eef4f 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -35,6 +35,7 @@ Code + Code diff --git a/Scripts/require.js b/Scripts/require.js index 612d0ee77..31a06544e 100644 --- a/Scripts/require.js +++ b/Scripts/require.js @@ -1,19 +1,19 @@ /** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.3.5 Copyright jQuery Foundation and other contributors. - * Released under MIT license, https://github.com/Requirejs/Requirejs/blob/master/LICENSE + * Released under MIT license, https://github.com/REQUIREJS/REQUIREJS/blob/master/LICENSE */ //Not using strict: uneven strict support in browsers, #392, and causes -//problems with Requirejs.exec()/transpiler plugins that may not be strict. +//problems with REQUIREJS.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, setTimeout, opera */ -var Requirejs, Require, Define; +var REQUIREJS, REQUIRE, DEFINE; (function (global, setTimeout) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.3.5', commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg, - cjsRequireRegExp = /[^.]\s*Require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, + cjsRequireRegExp = /[^.]\s*REQUIRE\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, @@ -165,7 +165,7 @@ var Requirejs, Require, Define; * @returns {Error} */ function makeError(id, msg, err, requireModules) { - var e = new Error(msg + '\nhttp://Requirejs.org/docs/errors.html#' + id); + var e = new Error(msg + '\nhttp://REQUIREJS.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { @@ -174,26 +174,26 @@ var Requirejs, Require, Define; return e; } - if (typeof Define !== 'undefined') { - //If a Define is already in play via another AMD loader, + if (typeof DEFINE !== 'undefined') { + //If a DEFINE is already in play via another AMD loader, //do not overwrite. return; } - if (typeof Requirejs !== 'undefined') { - if (isFunction(Requirejs)) { - //Do not overwrite an existing Requirejs instance. + if (typeof REQUIREJS !== 'undefined') { + if (isFunction(REQUIREJS)) { + //Do not overwrite an existing REQUIREJS instance. return; } - cfg = Requirejs; - Requirejs = undefined; + cfg = REQUIREJS; + REQUIREJS = undefined; } - //Allow for a Require config object - if (typeof Require !== 'undefined' && !isFunction(Require)) { + //Allow for a REQUIRE config object + if (typeof REQUIRE !== 'undefined' && !isFunction(REQUIRE)) { //assume it is a config object. - cfg = Require; - Require = undefined; + cfg = REQUIRE; + REQUIRE = undefined; } function newContext(contextName) { @@ -373,9 +373,9 @@ var Requirejs, Require, Define; //Pop off the first array value, since it failed, and //retry pathConfig.shift(); - context.Require.undef(id); + context.REQUIRE.undef(id); - //Custom Require that does not do map translation, since + //Custom REQUIRE that does not do map translation, since //ID is "absolute", already mapped/resolved. context.makeRequire(null, { skipMap: true @@ -401,13 +401,13 @@ var Requirejs, Require, Define; /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will - * also normalize the name via Require.normalize() + * also normalize the name via REQUIRE.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. - * This is true if this call is done for a Define() module ID. + * This is true if this call is done for a DEFINE() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * @@ -421,7 +421,7 @@ var Requirejs, Require, Define; isDefine = true, normalizedName = ''; - //If no name, then it means it is a Require call, generate an + //If no name, then it means it is a REQUIRE call, generate an //internal name. if (!name) { isDefine = false; @@ -570,11 +570,11 @@ var Requirejs, Require, Define; } handlers = { - 'Require': function (mod) { - if (mod.Require) { - return mod.Require; + 'REQUIRE': function (mod) { + if (mod.REQUIRE) { + return mod.REQUIRE; } else { - return (mod.Require = context.makeRequire(mod.map)); + return (mod.REQUIRE = context.makeRequire(mod.map)); } }, 'exports': function (mod) { @@ -745,7 +745,7 @@ var Requirejs, Require, Define; options = options || {}; //Do not do more inits if already done. Can happen if there - //are multiple Define calls for the same module. That is not + //are multiple DEFINE calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; @@ -836,8 +836,8 @@ var Requirejs, Require, Define; }, /** - * Checks if the module is ready to Define itself, and if so, - * Define it. + * Checks if the module is ready to DEFINE itself, and if so, + * DEFINE it. */ check: function () { if (!this.enabled || this.enabling) { @@ -858,9 +858,9 @@ var Requirejs, Require, Define; } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { - //The factory could trigger another Require call + //The factory could trigger another REQUIRE call //that would result in checking this module to - //Define itself again. If already in the process + //DEFINE itself again. If already in the process //of doing that, skip this work. this.defining = true; @@ -868,7 +868,7 @@ var Requirejs, Require, Define; if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. However, - //only do it for Define()'d modules. Require + //only do it for DEFINE()'d modules. REQUIRE //errbacks should not be called for failures in //their callbacks (#699). However if a global //onError is set, use that. @@ -899,7 +899,7 @@ var Requirejs, Require, Define; if (err) { err.requireMap = this.map; err.requireModules = this.map.isDefine ? [this.map.id] : null; - err.requireType = this.map.isDefine ? 'Define' : 'Require'; + err.requireType = this.map.isDefine ? 'DEFINE' : 'REQUIRE'; return onError((this.error = err)); } @@ -928,8 +928,8 @@ var Requirejs, Require, Define; this.defined = true; } - //Finished the Define stage. Allow calling check again - //to allow Define notifications below in the case of a + //Finished the DEFINE stage. Allow calling check again + //to allow DEFINE notifications below in the case of a //cycle. this.defining = false; @@ -1048,7 +1048,7 @@ var Requirejs, Require, Define; text = textAlt; } - //Turn off interactive script matching for IE for any Define + //Turn off interactive script matching for IE for any DEFINE //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; @@ -1154,7 +1154,7 @@ var Requirejs, Require, Define; id = depMap.id; mod = registry[id]; - //Skip special modules like 'Require', 'exports', 'module' + //Skip special modules like 'REQUIRE', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!hasProp(handlers, id) && mod && !mod.enabled) { @@ -1220,7 +1220,7 @@ var Requirejs, Require, Define; } /** - * Given an event from a script node, get the Requirejs info from it, + * Given an event from a script node, get the REQUIREJS info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} @@ -1251,11 +1251,11 @@ var Requirejs, Require, Define; while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { - return onError(makeError('mismatch', 'Mismatched anonymous Define() module: ' + + return onError(makeError('mismatch', 'Mismatched anonymous DEFINE() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the - //Define() function. + //DEFINE() function. callGetModule(args); } } @@ -1295,7 +1295,7 @@ var Requirejs, Require, Define; }; } - //Save off the paths since they Require special processing, + //Save off the paths since they REQUIRE special processing, //they are additive. var shim = config.shim, objs = { @@ -1381,10 +1381,10 @@ var Requirejs, Require, Define; }); //If a deps array or a config callback is specified, then call - //Require with those args. This is useful when Require is defined as a - //config object before Require.js is loaded. + //REQUIRE with those args. This is useful when REQUIRE is defined as a + //config object before REQUIRE.js is loaded. if (cfg.deps || cfg.callback) { - context.Require(cfg.deps || [], cfg.callback); + context.REQUIRE(cfg.deps || [], cfg.callback); } }, @@ -1412,17 +1412,17 @@ var Requirejs, Require, Define; if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call - return onError(makeError('requireargs', 'Invalid Require call'), errback); + return onError(makeError('requireargs', 'Invalid REQUIRE call'), errback); } - //If Require|exports|module are requested, get the + //If REQUIRE|exports|module are requested, get the //value for them from the special handlers. Caveat: //this only works while module is being defined. if (relMap && hasProp(handlers, deps)) { return handlers[deps](registry[relMap.id]); } - //Synchronous access to one module. If Require.get is + //Synchronous access to one module. If REQUIRE.get is //available (as in the Node adapter), prefer that. if (req.get) { return req.get(context, deps, relMap, localRequire); @@ -1437,7 +1437,7 @@ var Requirejs, Require, Define; id + '" has not been loaded yet for context: ' + contextName + - (relMap ? '' : '. Use Require([])'))); + (relMap ? '' : '. Use REQUIRE([])'))); } return defined[id]; } @@ -1448,12 +1448,12 @@ var Requirejs, Require, Define; //Mark all the dependencies as needing to be loaded. context.nextTick(function () { //Some defines could have been added since the - //Require call, collect them. + //REQUIRE call, collect them. intakeDefines(); requireMod = getModule(makeModuleMap(null, relMap)); - //Store if map config should be applied to this Require + //Store if map config should be applied to this REQUIRE //call for dependencies. requireMod.skipMap = options.skipMap; @@ -1502,10 +1502,10 @@ var Requirejs, Require, Define; } }); - //Only allow undef on top level Require calls + //Only allow undef on top level REQUIRE calls if (!relMap) { localRequire.undef = function (id) { - //Bind any waiting Define() calls to this context, + //Bind any waiting DEFINE() calls to this context, //fix for #408 takeGlobalQueue(); @@ -1583,7 +1583,7 @@ var Requirejs, Require, Define; } found = true; } else if (args[0] === moduleName) { - //Found matching Define call for this script! + //Found matching DEFINE call for this script! found = true; } @@ -1601,12 +1601,12 @@ var Requirejs, Require, Define; return; } else { return onError(makeError('nodefine', - 'No Define call for ' + moduleName, + 'No DEFINE call for ' + moduleName, null, [moduleName])); } } else { - //A script that does not call Define(), so just simulate + //A script that does not call DEFINE(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); } @@ -1743,14 +1743,14 @@ var Requirejs, Require, Define; } }; - context.Require = context.makeRequire(); + context.REQUIRE = context.makeRequire(); return context; } /** * Main entry point. * - * If the only argument to Require is a string, then the module that + * If the only argument to REQUIRE is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array @@ -1758,10 +1758,10 @@ var Requirejs, Require, Define; * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things - * on a Require that are not standardized), and to give a short + * on a REQUIRE that are not standardized), and to give a short * name for minification/local scope use. */ - req = Requirejs = function (deps, callback, errback, optional) { + req = REQUIREJS = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, @@ -1794,11 +1794,11 @@ var Requirejs, Require, Define; context.configure(config); } - return context.Require(deps, callback, errback); + return context.REQUIRE(deps, callback, errback); }; /** - * Support Require.config() to make it easier to cooperate with other + * Support REQUIRE.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { @@ -1816,10 +1816,10 @@ var Requirejs, Require, Define; } : function (fn) { fn(); }; /** - * Export Require as a global, but only if it does not already exist. + * Export REQUIRE as a global, but only if it does not already exist. */ - if (!Require) { - Require = req; + if (!REQUIRE) { + REQUIRE = req; } req.version = version; @@ -1835,7 +1835,7 @@ var Requirejs, Require, Define; //Create default context. req({}); - //Exports some context-sensitive methods on global Require. + //Exports some context-sensitive methods on global REQUIRE. each([ 'toUrl', 'undef', @@ -1847,7 +1847,7 @@ var Requirejs, Require, Define; //with its config gets used. req[prop] = function () { var ctx = contexts[defContextName]; - return ctx.Require[prop].apply(ctx, arguments); + return ctx.REQUIRE[prop].apply(ctx, arguments); }; }); @@ -1863,7 +1863,7 @@ var Requirejs, Require, Define; } /** - * Any errors that Require explicitly generates will be passed to this + * Any errors that REQUIRE explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ @@ -1887,7 +1887,7 @@ var Requirejs, Require, Define; * Make this a separate function to allow other environments * to override it. * - * @param {Object} context the Require context to find state. + * @param {Object} context the REQUIRE context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ @@ -1912,18 +1912,18 @@ var Requirejs, Require, Define; if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser - //read https://github.com/Requirejs/Requirejs/issues/187 + //read https://github.com/REQUIREJS/REQUIREJS/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: - //https://github.com/Requirejs/Requirejs/issues/273 + //https://github.com/REQUIREJS/REQUIREJS/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so - //we cannot tie the anonymous Define call to a name. + //we cannot tie the anonymous DEFINE call to a name. //However, IE reports the script as being in 'interactive' - //readyState at the time of the Define call. + //readyState at the time of the DEFINE call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); @@ -1951,7 +1951,7 @@ var Requirejs, Require, Define; } //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous Define + //of the appendChild execution, so to tie an anonymous DEFINE //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; @@ -2005,7 +2005,7 @@ var Requirejs, Require, Define; //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser && !cfg.skipDataMain) { - //Figure out baseUrl. Get it from the script tag with Require.js in it. + //Figure out baseUrl. Get it from the script tag with REQUIRE.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. @@ -2053,12 +2053,12 @@ var Requirejs, Require, Define; /** * The function that handles definitions of modules. Differs from - * Require() in that a string for the module should be the first argument, + * REQUIRE() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should - * return a value to Define the module corresponding to the first argument's + * return a value to DEFINE the module corresponding to the first argument's * name. */ - Define = function (name, deps, callback) { + DEFINE = function (name, deps, callback) { var node, context; //Allow for anonymous modules @@ -2080,7 +2080,7 @@ var Requirejs, Require, Define; if (!deps && isFunction(callback)) { deps = []; //Remove comments from the callback string, - //look for Require calls, and pull them into the dependencies, + //look for REQUIRE calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback @@ -2090,16 +2090,16 @@ var Requirejs, Require, Define; deps.push(dep); }); - //May be a CommonJS thing even without Require calls, but still + //May be a CommonJS thing even without REQUIRE calls, but still //could use exports, and module. Avoid doing exports and module - //work though if it just needs Require. + //work though if it just needs REQUIRE. //REQUIRES the function to expect the CommonJS variables in the //order listed below. - deps = (callback.length === 1 ? ['Require'] : ['Require', 'exports', 'module']).concat(deps); + deps = (callback.length === 1 ? ['REQUIRE'] : ['REQUIRE', 'exports', 'module']).concat(deps); } } - //If in IE 6-8 and hit an anonymous Define() call, do the interactive + //If in IE 6-8 and hit an anonymous DEFINE() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); @@ -2125,7 +2125,7 @@ var Requirejs, Require, Define; } }; - Define.amd = { + DEFINE.amd = { jQuery: true }; diff --git a/index.html b/index.html index cfe6bb6bc..798eb16ef 100644 --- a/index.html +++ b/index.html @@ -4,13 +4,14 @@ Advanced Algos + + - - - + + @@ -69,17 +70,17 @@ + --> - - - + + + - - - + + \ No newline at end of file From 4d87dd3a1863e49ada0077f7ad288aa62129f1c5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 24 May 2018 10:34:49 +0200 Subject: [PATCH 045/334] Poloniex Client API implemented server side --- CloudVM/PoloniexAPIClient.js | 49 +++- Exchanges/PoloniexAPIClient.js | 480 +++++++++++++++++++++++++++++++ Project.njsproj | 2 + package-lock.json | 500 +++++++++++++++++++++++++++++++++ package.json | 4 +- server.js | 50 ++++ 6 files changed, 1076 insertions(+), 9 deletions(-) create mode 100644 Exchanges/PoloniexAPIClient.js diff --git a/CloudVM/PoloniexAPIClient.js b/CloudVM/PoloniexAPIClient.js index 4267f0eb6..2a1aecfc3 100644 --- a/CloudVM/PoloniexAPIClient.js +++ b/CloudVM/PoloniexAPIClient.js @@ -82,8 +82,14 @@ + pMarketAssetA + "/" + pMarketAssetB ; - callServer(callBackFunction); + callServer(path, onServerResponse); + + function onServerResponse(pServerResponse) { + + callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse); + + } } function returnOrderTrades(pPositionId, callBackFunction) { @@ -94,8 +100,14 @@ + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + pPositionId ; - callServer(callBackFunction); + callServer(path, onServerResponse); + + function onServerResponse(pServerResponse) { + + callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse); + + } } function buy(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) { @@ -108,8 +120,14 @@ + pRate + "/" + pAmountB ; - callServer(callBackFunction); + callServer(path, onServerResponse); + + function onServerResponse(pServerResponse) { + + callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse); + + } } function sell(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) { @@ -122,8 +140,14 @@ + pRate + "/" + pAmountB ; - callServer(callBackFunction); + callServer(path, onServerResponse); + + function onServerResponse(pServerResponse) { + + callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse); + + } } function moveOrder(pPositionId, pNewRate, pPositionAmountB, callBackFunction) { @@ -136,8 +160,14 @@ + pNewRate + "/" + pPositionAmountB ; - callServer(callBackFunction); + callServer(path, onServerResponse); + + function onServerResponse(pServerResponse) { + + callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse); + + } } function returnTicker(callBackFunction) { @@ -147,8 +177,13 @@ + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret ; - callServer(callBackFunction); + callServer(path, onServerResponse); + + function onServerResponse(pServerResponse) { + + callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse); + + } } - } diff --git a/Exchanges/PoloniexAPIClient.js b/Exchanges/PoloniexAPIClient.js new file mode 100644 index 000000000..bae3cc1df --- /dev/null +++ b/Exchanges/PoloniexAPIClient.js @@ -0,0 +1,480 @@ +exports.newPoloniexAPIClient = function newPoloniexAPIClient(pKey, pSecret) { + + /* + /* ATENTION: This Library is used both a the cloud (AACloud) and also at the AAWeb on the server side without any modifications. + /* There is a second version, stripped of all the inner functionality that runs at AAWeb browser side, which channels the requests to the server side one. + */ + + let newFunction = new API(pKey, pSecret); + + let thisObject = { + API: newFunction.prototype + }; + + return thisObject; + + function API () { + 'use strict'; + + // Module dependencies + var crypto = require('crypto'), + request = require('request'), + nonce = require('nonce')(); + + // Constants + var version = '0.0.8', + PUBLIC_API_URL = 'https://poloniex.com/public', + PRIVATE_API_URL = 'https://poloniex.com/tradingApi', + USER_AGENT = 'poloniex.js ' + version; + //USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0' + + // Helper methods + function joinCurrencies(currencyA, currencyB) { + // If only one arg, then return the first + if (typeof currencyB !== 'string') { + return currencyA; + } + + return currencyA + '_' + currencyB; + } + + // Constructor + function Poloniex(key, secret) { + // Generate headers signed by this user's key and secret. + // The secret is encapsulated and never exposed + this._getPrivateHeaders = function (parameters) { + var paramString, signature; + + if (!key || !secret) { + throw 'Poloniex: Error. API key and secret required'; + } + + // Convert to `arg1=foo&arg2=bar` + paramString = Object.keys(parameters).map(function (param) { + return encodeURIComponent(param) + '=' + encodeURIComponent(parameters[param]); + }).join('&'); + + signature = crypto.createHmac('sha512', secret).update(paramString).digest('hex'); + + return { + Key: key, + Sign: signature + }; + }; + } + + // Currently, this fails with `Error: CERT_UNTRUSTED` + // Poloniex.STRICT_SSL can be set to `false` to avoid this. Use with caution. + // Will be removed in future, once this is resolved. + Poloniex.STRICT_SSL = true; + + // Customisable user agent string + Poloniex.USER_AGENT = USER_AGENT; + + // Prototype + Poloniex.prototype = { + constructor: Poloniex, + + // Make an API request + _request: function (options, callback) { + if (!('headers' in options)) { + options.headers = {}; + } + + options.json = true; + options.headers['User-Agent'] = Poloniex.USER_AGENT; + options.strictSSL = Poloniex.STRICT_SSL; + + request(options, function (err, response, body) { + // Empty response + if (!err && (typeof body === 'undefined' || body === null)) { + err = 'Empty response'; + } + + callback(err, body); + }); + + return this; + }, + + // Make a public API request + _public: function (command, parameters, callback) { + var options; + + if (typeof parameters === 'function') { + callback = parameters; + parameters = {}; + } + + parameters || (parameters = {}); + parameters.command = command; + options = { + method: 'GET', + url: PUBLIC_API_URL, + qs: parameters + }; + + options.qs.command = command; + return this._request(options, callback); + }, + + // Make a private API request + _private: function (command, parameters, callback) { + var options; + + if (typeof parameters === 'function') { + callback = parameters; + parameters = {}; + } + + parameters || (parameters = {}); + parameters.command = command; + parameters.nonce = nonce(); + + options = { + method: 'POST', + url: PRIVATE_API_URL, + form: parameters, + headers: this._getPrivateHeaders(parameters) + }; + + return this._request(options, callback); + }, + + ///// + // PUBLIC METHODS + + returnTicker: function (callback) { + return this._public('returnTicker', callback); + }, + + return24hVolume: function (callback) { + return this._public('return24hVolume', callback); + }, + + returnOrderBook: function (currencyA, currencyB, depth, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + depth: depth + }; + + return this._public('returnOrderBook', parameters, callback); + }, + + returnOrderBooks: function (depth, callback) { + var parameters = { + currencyPair: 'all', + depth: depth + }; + + return this._public('returnOrderBook', parameters, callback); + }, + + returnPublicTradeHistory: function (currencyA, currencyB, start, end, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + start: start, + end: end + }; + + return this._public('returnTradeHistory', parameters, callback); + }, + + returnChartData: function (currencyA, currencyB, period, start, end, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + period: period, + start: start, + end: end + }; + + return this._public('returnChartData', parameters, callback); + }, + + returnCurrencies: function (callback) { + return this._public('returnCurrencies', callback); + }, + + returnLoanOrders: function (currency, callback) { + return this._public('returnLoanOrders', { currency: currency }, callback); + }, + + ///// + // PRIVATE METHODS + + returnBalances: function (callback) { + return this._private('returnBalances', {}, callback); + }, + + returnCompleteBalances: function (callback) { + return this._private('returnCompleteBalances', {}, callback); + }, + + returnDepositAddresses: function (callback) { + return this._private('returnDepositAddresses', {}, callback); + }, + + generateNewAddress: function (currency, callback) { + return this._private('returnDepositsWithdrawals', { currency: currency }, callback); + }, + + returnDepositsWithdrawals: function (start, end, callback) { + return this._private('returnDepositsWithdrawals', { start: start, end: end }, callback); + }, + + returnOpenOrders: function (currencyA, currencyB, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB) + }; + + return this._private('returnOpenOrders', parameters, callback); + }, + + returnTradeHistory: function (currencyA, currencyB, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB) + }; + + return this._private('returnTradeHistory', parameters, callback); + }, + + returnOrderTrades: function (orderNumber, callback) { + var parameters = { + orderNumber: orderNumber + }; + + return this._private('returnOrderTrades', parameters, callback); + }, + + buy: function (currencyA, currencyB, rate, amount, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + rate: rate, + amount: amount + }; + + return this._private('buy', parameters, callback); + }, + + sell: function (currencyA, currencyB, rate, amount, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + rate: rate, + amount: amount + }; + + return this._private('sell', parameters, callback); + }, + + cancelOrder: function (currencyA, currencyB, orderNumber, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + orderNumber: orderNumber + }; + + return this._private('cancelOrder', parameters, callback); + }, + + moveOrder: function (orderNumber, rate, amount, callback) { + var parameters = { + orderNumber: orderNumber, + rate: rate, + amount: amount ? amount : null + }; + + return this._private('moveOrder', parameters, callback); + }, + + withdraw: function (currency, amount, address, callback) { + var parameters = { + currency: currency, + amount: amount, + address: address + }; + + return this._private('withdraw', parameters, callback); + }, + + returnFeeInfo: function (callback) { + return this._private('returnFeeInfo', {}, callback); + }, + + returnAvailableAccountBalances: function (account, callback) { + var options = {}; + if (account) { + options.account = account; + } + return this._private('returnAvailableAccountBalances', options, callback); + }, + + returnTradableBalances: function (callback) { + return this._private('returnTradableBalances', {}, callback); + }, + + transferBalance: function (currency, amount, fromAccount, toAccount, callback) { + var parameters = { + currency: currency, + amount: amount, + fromAccount: fromAccount, + toAccount: toAccount + }; + + return this._private('transferBalance', parameters, callback); + }, + + returnMarginAccountSummary: function (callback) { + return this._private('returnMarginAccountSummary', {}, callback); + }, + + marginBuy: function (currencyA, currencyB, rate, amount, lendingRate, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + rate: rate, + amount: amount, + lendingRate: lendingRate ? lendingRate : null + }; + + return this._private('marginBuy', parameters, callback); + }, + + marginSell: function (currencyA, currencyB, rate, amount, lendingRate, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB), + rate: rate, + amount: amount, + lendingRate: lendingRate ? lendingRate : null + }; + + return this._private('marginSell', parameters, callback); + }, + + getMarginPosition: function (currencyA, currencyB, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB) + }; + + return this._private('getMarginPosition', parameters, callback); + }, + + closeMarginPosition: function (currencyA, currencyB, callback) { + var parameters = { + currencyPair: joinCurrencies(currencyA, currencyB) + }; + + return this._private('closeMarginPosition', parameters, callback); + }, + + createLoanOffer: function (currency, amount, duration, autoRenew, lendingRate, callback) { + var parameters = { + currency: currency, + amount: amount, + duration: duration, + autoRenew: autoRenew, + lendingRate: lendingRate + }; + + return this._private('createLoanOffer', parameters, callback); + }, + + cancelLoanOffer: function (orderNumber, callback) { + var parameters = { + orderNumber: orderNumber + }; + + return this._private('cancelLoanOffer', parameters, callback); + }, + + returnOpenLoanOffers: function (callback) { + return this._private('returnOpenLoanOffers', {}, callback); + }, + + returnActiveLoans: function (callback) { + return this._private('returnActiveLoans', {}, callback); + }, + + returnLendingHistory: function (start, end, limit, callback) { + var parameters = { + start: start, + end: end, + limit: limit + }; + + return this._private('returnLendingHistory', parameters, callback); + }, + + toggleAutoRenew: function (orderNumber, callback) { + return this._private('toggleAutoRenew', { orderNumber: orderNumber }, callback); + }, + + analizeResponse: function (logger, exchangeErr, exchangeResponse, notOkCallBack, okCallBack) { + + /* This function analizes the different situations we might encounter trying to access Poloniex and returns appropiate standard errors. */ + + try { + + let stringExchangeResponse = JSON.stringify(exchangeResponse); + let stringExchangeErr = JSON.stringify(exchangeErr); + + logger.write("[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr); + logger.write("[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); + + if (stringExchangeErr.indexOf("ETIMEDOUT") > 0 || + stringExchangeErr.indexOf("ENOTFOUND") > 0 || + stringExchangeErr.indexOf("ECONNREFUSED") > 0 || + stringExchangeErr.indexOf("ESOCKETTIMEDOUT") > 0 || + stringExchangeErr.indexOf("ECONNRESET") > 0 || + (stringExchangeResponse !== undefined && ( + stringExchangeResponse.indexOf("Connection timed out") > 0 || + stringExchangeResponse.indexOf("Connection Error") > 0 || + stringExchangeResponse.indexOf("Bad gateway") > 0 || + stringExchangeResponse.indexOf("Internal error. Please try again") > 0))) { + + logger.write("[WARN] analizeResponse -> Timeout reached or connection problem while trying to access the Exchange API. Requesting new execution later."); + notOkCallBack(global.DEFAULT_RETRY_RESPONSE); + return; + + } else { + + if (JSON.stringify(exchangeResponse).indexOf("error") > 0) { + + logger.write("[ERROR] analizeResponse -> Unexpected response from the Exchange."); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); + return; + } + + if (exchangeErr) { + + logger.write("[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange."); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); + return; + + } else { + + logger.write("[INFO] analizeResponse -> No problem found."); + okCallBack(); + return; + } + } + + } catch (err) { + logger.write("[ERROR] analizeResponse -> err.message = " + err.message); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); + return; + } + } + }; + + // Backwards Compatibility + Poloniex.prototype.getTicker = Poloniex.prototype.returnTicker; + Poloniex.prototype.get24hVolume = Poloniex.prototype.return24hVolume; + Poloniex.prototype.getOrderBook = Poloniex.prototype.returnOrderBook; + Poloniex.prototype.getTradeHistory = Poloniex.prototype.returnChartData; + Poloniex.prototype.myBalances = Poloniex.prototype.returnBalances; + Poloniex.prototype.myOpenOrders = Poloniex.prototype.returnOpenOrders; + Poloniex.prototype.myTradeHistory = Poloniex.prototype.returnTradeHistory; + + return Poloniex; + } + + +} diff --git a/Project.njsproj b/Project.njsproj index a2e6eef4f..d64639f83 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -36,6 +36,7 @@ Code + Code @@ -160,6 +161,7 @@ + diff --git a/package-lock.json b/package-lock.json index b523a6286..a8cf7b442 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,16 +17,141 @@ "url-template": "2.0.8" } }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, "atob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + }, + "azure-storage": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.8.2.tgz", + "integrity": "sha1-GctjKx5WMK6uVEUaZNrBYLFlyEg=", + "requires": { + "browserify-mime": "1.2.9", + "extend": "1.2.1", + "json-edm-parser": "0.1.2", + "md5.js": "1.3.4", + "readable-stream": "2.0.6", + "request": "2.83.0", + "underscore": "1.8.3", + "uuid": "3.2.1", + "validator": "9.4.1", + "xml2js": "0.2.8", + "xmlbuilder": "0.4.3" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, "before-after-hook": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.1.0.tgz", "integrity": "sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA==" }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.1" + } + }, + "browserify-mime": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz", + "integrity": "sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.1" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -35,6 +160,117 @@ "ms": "2.0.0" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", + "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, "is-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-1.0.0.tgz", @@ -45,20 +281,284 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-edm-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz", + "integrity": "sha1-HmCw/vG8CvZ7wNFG393lSGzWFbQ=", + "requires": { + "jsonparse": "1.2.0" + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonparse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz", + "integrity": "sha1-XAxWhRBxYOcv50ib3eoLRMK8Z70=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "lodash": { "version": "4.17.5", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + }, + "dependencies": { + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=" + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.2.1" + } + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + }, + "validator": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", + "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "xml2js": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz", + "integrity": "sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=", + "requires": { + "sax": "0.5.8" + } + }, + "xmlbuilder": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.3.tgz", + "integrity": "sha1-xGFLp04K0ZbmCcknLNnh3bKKilg=" } } } diff --git a/package.json b/package.json index f86e5979b..5ada2673c 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "name": "Luis-Fernando-Molina" }, "dependencies": { - "azure-storage": "^2.8.2", - "@octokit/rest": "^14.0.9", + "azure-storage": "^2.8.2", + "@octokit/rest": "^14.0.9", "atob": "^2.1.1" } } diff --git a/server.js b/server.js index 4fa543eec..f216c30b8 100644 --- a/server.js +++ b/server.js @@ -374,6 +374,56 @@ function onBrowserRequest(request, response) { } break; + case "PoloniexAPIClient": // This is trying to access this library functionality from the broser. + { + const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient'); + let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(requestParameters[3], requestParameters[4]); + + switch (requestParameters[2]) { + + case "returnOpenOrders": { + poloniexApiClient.returnOpenOrders(requestParameters[5], requestParameters[6], onExchangeResponse) + break; + } + + case "returnOrderTrades": { + poloniexApiClient.returnOrderTrades(requestParameters[5], onExchangeResponse) + break; + } + + case "buy": { + poloniexApiClient.buy(requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse) + break; + } + + case "sell": { + poloniexApiClient.buy(requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse) + break; + } + + case "moveOrder": { + poloniexApiClient.buy(requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse) + break; + } + + case "returnTicker": { + poloniexApiClient.returnTicker(onExchangeResponse) + break; + } + } + + function onExchangeResponse(err, exchangeResponse) { + + let serverResponse = { + err: err, + exchangeResponse: exchangeResponse + } + + respondWithContent(serverResponse, response); + } + } + break; + case "Cloud": // This means the cloud folder. { From a54f96628027ff361336b18d6de4af44d283ff73 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 24 May 2018 12:46:14 +0200 Subject: [PATCH 046/334] Cleaning console debug stuff --- CloudVM/PoloniexAPIClient.js | 29 +++++++++++++++-------------- Server/CloudScripts.js | 2 +- index.html | 2 +- server.js | 2 +- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/CloudVM/PoloniexAPIClient.js b/CloudVM/PoloniexAPIClient.js index 2a1aecfc3..be3be340d 100644 --- a/CloudVM/PoloniexAPIClient.js +++ b/CloudVM/PoloniexAPIClient.js @@ -1,6 +1,7 @@ -function newPoloniexAPIClient() { +function newPoloniexAPIClient(pKey, pSecret) { - let newFunction = new API(global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key, global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret); + let key = pKey; + let secret = pSecret; let thisObject = { API: { @@ -77,8 +78,8 @@ let path = "PloniexAPIClinet" + "/" + "returnOpenOrders" + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + key + "/" + + secret + "/" + pMarketAssetA + "/" + pMarketAssetB ; @@ -96,8 +97,8 @@ let path = "PloniexAPIClinet" + "/" + "returnOrderTrades" + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + key + "/" + + secret + "/" + pPositionId ; @@ -114,8 +115,8 @@ let path = "PloniexAPIClinet" + "/" + "buy" + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + key + "/" + + secret + "/" + pMarketAssetB + "/" + pRate + "/" + pAmountB @@ -134,8 +135,8 @@ let path = "PloniexAPIClinet" + "/" + "sell" + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + key + "/" + + secret + "/" + pMarketAssetB + "/" + pRate + "/" + pAmountB @@ -154,8 +155,8 @@ let path = "PloniexAPIClinet" + "/" + "moveOrder" + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/" + + key + "/" + + secret + "/" + pPositionId + "/" + pNewRate + "/" + pPositionAmountB @@ -174,8 +175,8 @@ let path = "PloniexAPIClinet" + "/" + "returnTicker" + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/" - + global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + + key + "/" + + secret ; callServer(path, onServerResponse); diff --git a/Server/CloudScripts.js b/Server/CloudScripts.js index ef3a4b266..4b12c50cd 100644 --- a/Server/CloudScripts.js +++ b/Server/CloudScripts.js @@ -276,7 +276,7 @@ function createHTML(callBackfunction) { let links = ""; - let htmlLine = '' + '\n' + ' ' + let htmlLine = '' + '\n' + ' ' for (let i = 0; i < pCloudWebConfig.webModules.length; i++) { diff --git a/index.html b/index.html index 798eb16ef..60264c42b 100644 --- a/index.html +++ b/index.html @@ -70,7 +70,7 @@ - --> + - + From afea7478a5c0d7c49f2a6d0a75e087fd9e4365f2 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 29 May 2018 18:17:16 +0200 Subject: [PATCH 069/334] More modules loades by webRequire --- NewBot.js | 5 ----- Project.njsproj | 3 --- Scripts/AppLoader.js | 24 ++++++++++++++++++++---- index.html | 16 ---------------- 4 files changed, 20 insertions(+), 28 deletions(-) delete mode 100644 NewBot.js diff --git a/NewBot.js b/NewBot.js deleted file mode 100644 index a532ecbe6..000000000 --- a/NewBot.js +++ /dev/null @@ -1,5 +0,0 @@ -function newBot() { - - console.log("Hello World"); - -} diff --git a/Project.njsproj b/Project.njsproj index 49201a4b3..8ab56164d 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -88,9 +88,6 @@ Code - - Code - Code diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 393581f5a..2302d4056 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -5,9 +5,6 @@ const MODULE_NAME = "App Loader"; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - let thisObject = { loadModules: loadModules }; @@ -16,8 +13,27 @@ function loadModules() { + + let modulesArray = [ + "WebDebugLog.js", + "Plotter.js", + "PlotterPanel.js", + + "ProductStorage.js", + "CompetitionStorage.js", + "ProductCard.js", + "Ecosystem.js", + + "SplashScreen.js", + "Canvas.js", + "Button.js", + "TextButton.js", + "ImageButton.js", + "EventHandler.js", + "Frame.js", + "ViewPort.js", "TimeMachine.js", "Candle.js", @@ -46,7 +62,7 @@ function onRequired(pModule) { - console.log(path + " downloaded."); + console.log(MODULE_NAME + ": " + path + " downloaded."); downloadedCounter++; if (downloadedCounter === modulesArray.length) { diff --git a/index.html b/index.html index 247040538..3fcf579c0 100644 --- a/index.html +++ b/index.html @@ -17,23 +17,7 @@ - - - - - - - - - - - - - - - - From 430397ad215b864893147fcdadb5a715410df593 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 29 May 2018 18:24:51 +0200 Subject: [PATCH 070/334] All static modules loaded dinamically --- Scripts/AppLoader.js | 28 +++++++++++++++++++++++++++- index.html | 33 --------------------------------- 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 2302d4056..6bf3fb59e 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -14,9 +14,35 @@ function loadModules() { - let modulesArray = [ + "Panels/TimeControlPanel.js", + "Panels/ProductsPanel.js", + + "Spaces/PanelsSpace.js", + "Spaces/ChartSpace.js", + "Spaces/FloatingSpace.js", + + "Files/SingleFile.js", + "Files/FileCloud.js", + "Files/MarketFiles.js", + "Files/DailyFiles.js", + "Files/FileCursor.js", + "Files/FileSequence.js", + + "FloatingSpace/NoteSets.js", + "FloatingSpace/Note.js", + "FloatingSpace/ProfileBalls.js", + "FloatingSpace/ProfileBall.js", + "FloatingSpace/FloatingObject.js", + "FloatingSpace/FloatingLayer.js", + + "CloudVM/PoloniexAPIClient.js", + "CloudVM/CloudSupport.js", + "CloudVM/CloudRequire.js", + "CloudVM/WebFS.js", + "CloudVM/CloudVM.js", + "WebDebugLog.js", "Plotter.js", "PlotterPanel.js", diff --git a/index.html b/index.html index 3fcf579c0..5f6fcc4a7 100644 --- a/index.html +++ b/index.html @@ -11,39 +11,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + From 38fe8dfa2b660c8e095c46b71b0c059739c0a886 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 29 May 2018 19:07:11 +0200 Subject: [PATCH 072/334] PreLoading functionality complete. --- Scripts/AppLoader.js | 6 ++ Server/CloudScripts.js | 14 +-- index.html | 4 - server.js | 200 +++++++++++++++++++++++------------------ 4 files changed, 128 insertions(+), 96 deletions(-) diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 02ee1f8de..8c904a74a 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -15,6 +15,12 @@ let modulesArray = [ + /* CloudWebScripts */ + + /* Plotters */ + + /* PlotterPanels */ + "Panels/TimeControlPanel.js", "Panels/ProductsPanel.js", diff --git a/Server/CloudScripts.js b/Server/CloudScripts.js index d8554a9c8..ecd9976ce 100644 --- a/Server/CloudScripts.js +++ b/Server/CloudScripts.js @@ -101,7 +101,7 @@ modulesRetrieved++; if (modulesRetrieved === pCloudWebConfig.webModules.length) { - createHTML(callBackfunction); + createJS(callBackfunction); } } @@ -125,21 +125,21 @@ } } - function createHTML(callBackfunction) { + function createJS(callBackfunction) { - let links = ""; - let htmlLine = '' + '\n' + ' ' + let lines = ""; + let jsLine = '' + '\n' + ' "AACloud/@module@",' for (let i = 0; i < pCloudWebConfig.webModules.length; i++) { let webModule = pCloudWebConfig.webModules[i].name + '.js'; - let htmlLineCopy = htmlLine; + let htmlLineCopy = jsLine; let newLink = htmlLineCopy.replace('@module@', webModule); - links = links + newLink; + lines = lines + newLink; } - callBackfunction(links); + callBackfunction(lines); } } diff --git a/index.html b/index.html index c91eb2dba..894ba6760 100644 --- a/index.html +++ b/index.html @@ -7,10 +7,6 @@ - - - - - - - - - + + + + \ No newline at end of file diff --git a/server.js b/server.js index 6ccb14dd0..47f82da44 100644 --- a/server.js +++ b/server.js @@ -383,6 +383,13 @@ function onBrowserRequest(request, response) { } break; + case "Images": // This means the Scripts folder. + { + + respondWithImage('./Images/' + requestParameters[2], response); + + } + break; case "TopSpace": // This means the TopSpace folder. { @@ -886,7 +893,7 @@ function respondWithFile(fileName, response) { response.setHeader("Expires", "0"); // Proxies. response.setHeader("Access-Control-Allow-Origin", "*"); // Allows to access data from other domains. - response.writeHead(200, { 'Content-Type': 'text/html' }); + //response.writeHead(200, { 'Content-Type': 'text/html' }); response.write(htmlResponse); response.end("\n"); //console.log("File Sent: " + fileName); @@ -894,7 +901,6 @@ function respondWithFile(fileName, response) { } catch (err) { returnEmptyArray(); - console.log("File Not Found: " + fileName); console.log("[ERROR] server -> respondWithFile -> onFileRead -> File Not Found: " + fileName + " or Error = " + err); } @@ -905,6 +911,42 @@ function respondWithFile(fileName, response) { } } +function respondWithImage(fileName, response) { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> respondWithImage -> Entering function."); } + + let fs = require('fs'); + try { + + fs.readFile(fileName, onFileRead); + + function onFileRead(err, file) { + + if (CONSOLE_LOG === true) { console.log("[INFO] server -> respondWithImage -> onFileRead -> Entering function."); } + + try { + + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. + response.setHeader("Pragma", "no-cache"); // HTTP 1.0. + response.setHeader("Expires", "0"); // Proxies. + response.setHeader("Access-Control-Allow-Origin", "*"); // Allows to access data from other domains. + + response.writeHead(200, { 'Content-Type': 'image/png' }); + response.end(file, 'binary'); + + } + catch (err) { + + console.log("[ERROR] server -> respondWithImage -> onFileRead -> File Not Found: " + fileName + " or Error = " + err); + } + + } + } + catch (err) { + console.log("[ERROR] server -> respondWithImage -> err = " + err); + } +} + function returnEmptyArray() { try { From bc0b35732f65c55af360e2a16684fdc7c7dd0a15 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 31 May 2018 13:47:36 +0200 Subject: [PATCH 087/334] Favicon Ready --- Images/Play.png | Bin 0 -> 68226 bytes Images/Stop.png | Bin 0 -> 65395 bytes Images/favicon.ico | Bin 0 -> 15086 bytes server.js | 8 ++++++++ 4 files changed, 8 insertions(+) create mode 100644 Images/Play.png create mode 100644 Images/Stop.png create mode 100644 Images/favicon.ico diff --git a/Images/Play.png b/Images/Play.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1e60dd2725b215b7e18ba9e9562fda7db91675 GIT binary patch literal 68226 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 literal 0 HcmV?d00001 diff --git a/server.js b/server.js index 47f82da44..78aaf6726 100644 --- a/server.js +++ b/server.js @@ -391,6 +391,14 @@ function onBrowserRequest(request, response) { } break; + case "favicon.ico": // This means the Scripts folder. + { + + respondWithImage('./Images/' + 'favicon.ico', response); + + } + break; + case "TopSpace": // This means the TopSpace folder. { From fee5f31befb5b14146d98215f26329bc21e98d63 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 31 May 2018 17:57:42 +0200 Subject: [PATCH 088/334] Working from the PlayStop Button --- Canvas.js | 6 +- Images/Stop.png | Bin 65395 -> 49934 bytes Panels/TimeControlPanel.js | 17 ++++- Project.njsproj | 3 + Scripts/AppLoader.js | 1 + Spaces/TopSpace.js | 69 +++++++++-------- TopSpace/CompanyLogo.js | 2 +- TopSpace/CurrentStartMode.js | 4 +- TopSpace/PlayStopButton.js | 139 +++++++++++++++++++++++++++++++++++ 9 files changed, 201 insertions(+), 40 deletions(-) create mode 100644 TopSpace/PlayStopButton.js diff --git a/Canvas.js b/Canvas.js index 5ed30c33b..3c1b50996 100644 --- a/Canvas.js +++ b/Canvas.js @@ -89,6 +89,9 @@ function newCanvas() { /* Instantiate all the children of Canvas object */ + thisObject.topSpace = newTopSpace(); + thisObject.topSpace.initialize(); + thisObject.panelsSpace = newPanelsSpace(); thisObject.panelsSpace.initialize(); @@ -102,9 +105,6 @@ function newCanvas() { viewPort.raiseEvents(); // These events will impacts on objects just initialized. } - thisObject.topSpace = newTopSpace(); - thisObject.topSpace.initialize(); - /* Splash Screen */ splashScreen = newSplashScreen(); diff --git a/Images/Stop.png b/Images/Stop.png index 7a18479fd642152a60dab2619da9f52e01194e03..69e524545609403f903bdfe68721ad5932a0daa7 100644 GIT binary patch literal 49934 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

~~8uuP;$ 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 Code + + Code + Code diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 809b2d07b..84d5e483d 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -21,6 +21,7 @@ /* PlotterPanels */ + "TopSpace/PlayStopButton.js", "TopSpace/CompanyLogo.js", "TopSpace/CurrentStartMode.js", "TopSpace/CurrentProcess.js", diff --git a/Spaces/TopSpace.js b/Spaces/TopSpace.js index 8e06cebd6..945b739fd 100644 --- a/Spaces/TopSpace.js +++ b/Spaces/TopSpace.js @@ -5,6 +5,13 @@ function newTopSpace() { container: undefined, draw: draw, getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + companyLogo: undefined, + endUser: undefined, + devTeam: undefined, + currentBot: undefined, + currentProcess: undefined, + currentStartMode: undefined, + playStopButton: undefined, initialize: initialize }; @@ -23,34 +30,30 @@ function newTopSpace() { container.isDraggeable = false; - let companyLogo; - let endUser; - let devTeam; - let currentBot; - let currentProcess; - let currentStartMode; - return thisObject; function initialize() { - companyLogo = newCompanyLogo(); - companyLogo.initialize(); + thisObject.companyLogo = newCompanyLogo(); + thisObject.companyLogo.initialize(); - endUser = newEndUser(); - endUser.initialize(); + thisObject.endUser = newEndUser(); + thisObject.endUser.initialize(); - devTeam = newDevTeam(); - devTeam.initialize(); + thisObject.devTeam = newDevTeam(); + thisObject.devTeam.initialize(); - currentBot = newCurrentBot(); - currentBot.initialize(); + thisObject.currentBot = newCurrentBot(); + thisObject.currentBot.initialize(); - currentProcess = newCurrentProcess(); - currentProcess.initialize(); + thisObject.currentProcess = newCurrentProcess(); + thisObject.currentProcess.initialize(); - currentStartMode = newCurrentStartMode(); - currentStartMode.initialize(); + thisObject.currentStartMode = newCurrentStartMode(); + thisObject.currentStartMode.initialize(); + + thisObject.playStopButton = newPlayStopButton(); + thisObject.playStopButton.initialize(); } @@ -58,22 +61,25 @@ function newTopSpace() { let container; - container = companyLogo.getContainer(point); + container = thisObject.companyLogo.getContainer(point); if (container !== undefined) { return container; } - container = endUser.getContainer(point); + container = thisObject.endUser.getContainer(point); if (container !== undefined) { return container; } - container = devTeam.getContainer(point); + container = thisObject.devTeam.getContainer(point); if (container !== undefined) { return container; } - container = currentBot.getContainer(point); + container = thisObject.currentBot.getContainer(point); if (container !== undefined) { return container; } - container = currentProcess.getContainer(point); + container = thisObject.currentProcess.getContainer(point); if (container !== undefined) { return container; } - container = currentStartMode.getContainer(point); + container = thisObject.currentStartMode.getContainer(point); + if (container !== undefined) { return container; } + + container = thisObject.playStopButton.getContainer(point); if (container !== undefined) { return container; } /* The point does not belong to any inner container, so we return the current container. */ @@ -87,12 +93,13 @@ function newTopSpace() { thisObject.container.frame.draw(false, false); drawBackground(); - companyLogo.draw(); - endUser.draw(); - devTeam.draw(); - currentBot.draw(); - currentProcess.draw(); - currentStartMode.draw(); + thisObject.companyLogo.draw(); + thisObject.endUser.draw(); + thisObject.devTeam.draw(); + thisObject.currentBot.draw(); + thisObject.currentProcess.draw(); + thisObject.currentStartMode.draw(); + thisObject.playStopButton.draw(); } diff --git a/TopSpace/CompanyLogo.js b/TopSpace/CompanyLogo.js index e71b6ba70..88a65bc7a 100644 --- a/TopSpace/CompanyLogo.js +++ b/TopSpace/CompanyLogo.js @@ -36,7 +36,7 @@ function newCompanyLogo() { } logo.src = "Images/aa-logo-dark-8.png"; - document.body.append(logo); + } function getContainer(point) { diff --git a/TopSpace/CurrentStartMode.js b/TopSpace/CurrentStartMode.js index 4a376e0a8..70b57944f 100644 --- a/TopSpace/CurrentStartMode.js +++ b/TopSpace/CurrentStartMode.js @@ -77,10 +77,10 @@ function newCurrentStartMode() { thisObject.container.frame.draw(false, false); let fontSize = 12; - let label = window.CURRENT_START_MODE; + let label = window.CURRENT_START_MODE + " Mode"; let point = { - x: thisObject.container.frame.width * 1 / 3, + x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize / 3, y: (thisObject.container.frame.height / 2) + 4 }; diff --git a/TopSpace/PlayStopButton.js b/TopSpace/PlayStopButton.js new file mode 100644 index 000000000..3d3e18c1c --- /dev/null +++ b/TopSpace/PlayStopButton.js @@ -0,0 +1,139 @@ + +function newPlayStopButton() { + + var thisObject = { + container: undefined, + setDatetime: setDatetime, + draw: draw, + getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + initialize: initialize + }; + + var container = newContainer(); + container.initialize(); + thisObject.container = container; + + thisObject.container.frame.width = 50; + thisObject.container.frame.height = TOP_SPACE_HEIGHT; + + container.frame.position.x = viewPort.visibleArea.topRight.x; + container.frame.position.y = 0; + + container.isDraggeable = false; + container.isClickeable = true; + + let play; + let stop; + let canDraw = false; + let showing = "Play"; + let image; + + let datetime; + let timePeriod; + + return thisObject; + + function initialize() { + + play = new Image(); + + play.onload = onImageLoad; + + function onImageLoad() { + image = play; + canDraw = true; + } + + play.src = "Images/Play.png"; + + stop = new Image(); + + stop.src = "Images/Stop.png"; + + thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick); + + viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); + timePeriod = INITIAL_TIME_PERIOD; + + } + + function onClick() { + + switch (showing) { + + case "Play": { + image = stop; + showing = "Stop"; + + let UI_COMMANDS = { + beginDatetime: datetime, + endDatetime: undefined, + timePeriod: timePeriod, + startMode: window.CURRENT_START_MODE, + eventHandler: thisObject.container.eventHandler + }; + + cloudVM.onBotPlayPressed(UI_COMMANDS); + + break; + } + case "Stop": { + image = play; + showing = "Play"; + + cloudVM.onBotStopPressed(); + + break; + } + } + } + + function onZoomChanged(event) { + + timePeriod = recalculatePeriod(event.newLevel); + + } + + function setDatetime(pDatetime) { + + datetime = new Date(pDatetime); + } + + function getContainer(point) { + + let container; + + /* First we check if this point is inside this object UI. */ + + if (thisObject.container.frame.isThisPointHere(point, true) === true) { + + return this.container; + + } else { + + /* This point does not belong to this space. */ + + return undefined; + } + + } + + function draw() { + + thisObject.container.frame.draw(false, false); + + if (canDraw === false) { return; } + + let imageHeight = 272 / 6; + let imageWidth = 229 / 6; + + let imagePoint = { + x: thisObject.container.frame.width / 2 - imageWidth / 2, + y: thisObject.container.frame.height / 2 - imageHeight / 2 + }; + + imagePoint = thisObject.container.frame.frameThisPoint(imagePoint); + + browserCanvasContext.drawImage(image, imagePoint.x, imagePoint.y, imageWidth, imageHeight); + } +} \ No newline at end of file From d64d09064af4e1518a020b881f9219008cc47bd3 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 31 May 2018 18:16:04 +0200 Subject: [PATCH 089/334] Time Control Panel , removed buttons --- Button.js | 677 ------------------------------------- Panels/TimeControlPanel.js | 268 ++------------- Project.njsproj | 1 - Scripts/AppLoader.js | 1 - 4 files changed, 32 insertions(+), 915 deletions(-) delete mode 100644 Button.js diff --git a/Button.js b/Button.js deleted file mode 100644 index 4a94a1d5f..000000000 --- a/Button.js +++ /dev/null @@ -1,677 +0,0 @@ -function newButton() { - - var button = { - container: undefined, - press: press, - draw: draw, - offFillStyle: 'rgba(150, 150, 250, 1)', - onFillStyle: 'rgba(250, 150, 150, 1)', - status: 'off', - type: undefined, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize - }; - - var container = newContainer(); - container.initialize(); - container.isDraggeable = false; - container.isClickeable = true; - button.container = container; - - const REDUCTION_FACTOR = 3; - - return button; - - function initialize() { - - /* Lets set the basic dimensions of this button. */ - - var position = { - x: 0, - y: 0 - }; - - this.container.frame.position = position; - this.container.frame.width = 50 / REDUCTION_FACTOR; - this.container.frame.height = 50 / REDUCTION_FACTOR; - - /* Now we start listening to the onClick event from the mouse, so that we can allow users operate this button. */ - - this.container.eventHandler.listenToEvent('onMouseClick', press, undefined); - - } - - function getContainer(point) { - - var container; - - /* First we check if this point is inside this space. */ - - if (this.container.frame.isThisPointHere(point, true) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } - - function press(event, extraData) { - - button.status = 'on'; - - } - - function draw() { - - switch (this.type) { - - case "Fast Backwards": - - drawFastBackwards(); - break; - - case "Play Backwards": - - drawPlayBackwards(); - break; - - case "Step Backwards": - - drawStepBackwards(); - break; - - case "Pause": - - drawPause(); - break; - - case "Step Forward": - - drawStepForward(); - break; - - case "Play Forward": - - drawPlayForward(); - break; - - case "Fast Forward": - - drawFastForward(); - break; - - default: - - - } - - } - - - function drawFastBackwards() { - - point1 = { - x: 40 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point2 = { - x: 25 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point3 = { - x: 40 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - - - - point5 = { - x: 25 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point6 = { - x: 10 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point7 = { - x: 25 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - - /* Now the transformations. */ - - point1 = button.container.frame.frameThisPoint(point1); - point2 = button.container.frame.frameThisPoint(point2); - point3 = button.container.frame.frameThisPoint(point3); - - point5 = button.container.frame.frameThisPoint(point5); - point6 = button.container.frame.frameThisPoint(point6); - point7 = button.container.frame.frameThisPoint(point7); - - point1 = button.container.displacement.displaceThisPoint(point1); - point2 = button.container.displacement.displaceThisPoint(point2); - point3 = button.container.displacement.displaceThisPoint(point3); - - point5 = button.container.displacement.displaceThisPoint(point5); - point6 = button.container.displacement.displaceThisPoint(point6); - point7 = button.container.displacement.displaceThisPoint(point7); - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath(); - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.moveTo(point5.x, point5.y); - browserCanvasContext.lineTo(point6.x, point6.y); - browserCanvasContext.lineTo(point7.x, point7.y); - browserCanvasContext.lineTo(point5.x, point5.y); - browserCanvasContext.closePath(); - - if (button.status === "on") { - browserCanvasContext.fillStyle = button.onFillStyle; - } else { - browserCanvasContext.fillStyle = button.offFillStyle; - } - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.5)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - } - - function drawPlayBackwards() { - - point1 = { - x: 40 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point2 = { - x: 10 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point3 = { - x: 40 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - /* Now the transformations. */ - - point1 = button.container.frame.frameThisPoint(point1); - point2 = button.container.frame.frameThisPoint(point2); - point3 = button.container.frame.frameThisPoint(point3); - - point1 = button.container.displacement.displaceThisPoint(point1); - point2 = button.container.displacement.displaceThisPoint(point2); - point3 = button.container.displacement.displaceThisPoint(point3); - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath(); - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (button.status === "on") { - browserCanvasContext.fillStyle = button.onFillStyle; - } else { - browserCanvasContext.fillStyle = button.offFillStyle; - } - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.5)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - } - - function drawStepBackwards() { - - point1 = { - x: 40 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point2 = { - x: 20 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point3 = { - x: 40 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - - - - point5 = { - x: 10 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point6 = { - x: 20 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point7 = { - x: 20 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - point8 = { - x: 10 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - /* Now the transformations. */ - - point1 = button.container.frame.frameThisPoint(point1); - point2 = button.container.frame.frameThisPoint(point2); - point3 = button.container.frame.frameThisPoint(point3); - - point5 = button.container.frame.frameThisPoint(point5); - point6 = button.container.frame.frameThisPoint(point6); - point7 = button.container.frame.frameThisPoint(point7); - point8 = button.container.frame.frameThisPoint(point8); - - point1 = button.container.displacement.displaceThisPoint(point1); - point2 = button.container.displacement.displaceThisPoint(point2); - point3 = button.container.displacement.displaceThisPoint(point3); - - point5 = button.container.displacement.displaceThisPoint(point5); - point6 = button.container.displacement.displaceThisPoint(point6); - point7 = button.container.displacement.displaceThisPoint(point7); - point8 = button.container.displacement.displaceThisPoint(point8); - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath(); - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.moveTo(point5.x, point5.y); - browserCanvasContext.lineTo(point6.x, point6.y); - browserCanvasContext.lineTo(point7.x, point7.y); - browserCanvasContext.lineTo(point8.x, point8.y); - browserCanvasContext.lineTo(point5.x, point5.y); - browserCanvasContext.closePath(); - - if (button.status === "on") { - browserCanvasContext.fillStyle = button.onFillStyle; - } else { - browserCanvasContext.fillStyle = button.offFillStyle; - } - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.5)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - } - - function drawPause() { - - point1 = { - x: 10 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point2 = { - x: 20 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point3 = { - x: 20 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - point4 = { - x: 10 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - point5 = { - x: 30 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point6 = { - x: 40 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point7 = { - x: 40 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - point8 = { - x: 30 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - /* Now the transformations. */ - - point1 = button.container.frame.frameThisPoint(point1); - point2 = button.container.frame.frameThisPoint(point2); - point3 = button.container.frame.frameThisPoint(point3); - point4 = button.container.frame.frameThisPoint(point4); - point5 = button.container.frame.frameThisPoint(point5); - point6 = button.container.frame.frameThisPoint(point6); - point7 = button.container.frame.frameThisPoint(point7); - point8 = button.container.frame.frameThisPoint(point8); - - point1 = button.container.displacement.displaceThisPoint(point1); - point2 = button.container.displacement.displaceThisPoint(point2); - point3 = button.container.displacement.displaceThisPoint(point3); - point4 = button.container.displacement.displaceThisPoint(point4); - point5 = button.container.displacement.displaceThisPoint(point5); - point6 = button.container.displacement.displaceThisPoint(point6); - point7 = button.container.displacement.displaceThisPoint(point7); - point8 = button.container.displacement.displaceThisPoint(point8); - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath(); - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point4.x, point4.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.moveTo(point5.x, point5.y); - browserCanvasContext.lineTo(point6.x, point6.y); - browserCanvasContext.lineTo(point7.x, point7.y); - browserCanvasContext.lineTo(point8.x, point8.y); - browserCanvasContext.lineTo(point5.x, point5.y); - browserCanvasContext.closePath(); - - if (button.status === "on") { - browserCanvasContext.fillStyle = button.onFillStyle; - } else { - browserCanvasContext.fillStyle = button.offFillStyle; - } - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.5)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - } - - function drawStepForward() { - - point1 = { - x: 10 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point2 = { - x: 30 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point3 = { - x: 10 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - - - - point5 = { - x: 30 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point6 = { - x: 40 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point7 = { - x: 40 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - point8 = { - x: 30 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - /* Now the transformations. */ - - point1 = button.container.frame.frameThisPoint(point1); - point2 = button.container.frame.frameThisPoint(point2); - point3 = button.container.frame.frameThisPoint(point3); - - point5 = button.container.frame.frameThisPoint(point5); - point6 = button.container.frame.frameThisPoint(point6); - point7 = button.container.frame.frameThisPoint(point7); - point8 = button.container.frame.frameThisPoint(point8); - - point1 = button.container.displacement.displaceThisPoint(point1); - point2 = button.container.displacement.displaceThisPoint(point2); - point3 = button.container.displacement.displaceThisPoint(point3); - - point5 = button.container.displacement.displaceThisPoint(point5); - point6 = button.container.displacement.displaceThisPoint(point6); - point7 = button.container.displacement.displaceThisPoint(point7); - point8 = button.container.displacement.displaceThisPoint(point8); - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath(); - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.moveTo(point5.x, point5.y); - browserCanvasContext.lineTo(point6.x, point6.y); - browserCanvasContext.lineTo(point7.x, point7.y); - browserCanvasContext.lineTo(point8.x, point8.y); - browserCanvasContext.lineTo(point5.x, point5.y); - browserCanvasContext.closePath(); - - if (button.status === "on") { - browserCanvasContext.fillStyle = button.onFillStyle; - } else { - browserCanvasContext.fillStyle = button.offFillStyle; - } - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.5)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - } - - function drawPlayForward() { - - point1 = { - x: 10 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point2 = { - x: 40 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point3 = { - x: 10 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - /* Now the transformations. */ - - point1 = button.container.frame.frameThisPoint(point1); - point2 = button.container.frame.frameThisPoint(point2); - point3 = button.container.frame.frameThisPoint(point3); - - point1 = button.container.displacement.displaceThisPoint(point1); - point2 = button.container.displacement.displaceThisPoint(point2); - point3 = button.container.displacement.displaceThisPoint(point3); - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath(); - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (button.status === "on") { - browserCanvasContext.fillStyle = button.onFillStyle; - } else { - browserCanvasContext.fillStyle = button.offFillStyle; - } - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.5)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - } - - - function drawFastForward() { - - point1 = { - x: 10 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point2 = { - x: 25 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point3 = { - x: 10 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - - - - point5 = { - x: 25 / REDUCTION_FACTOR, - y: 10 / REDUCTION_FACTOR - }; - - point6 = { - x: 40 / REDUCTION_FACTOR, - y: 25 / REDUCTION_FACTOR - }; - - point7 = { - x: 25 / REDUCTION_FACTOR, - y: 40 / REDUCTION_FACTOR - }; - - - - /* Now the transformations. */ - - point1 = button.container.frame.frameThisPoint(point1); - point2 = button.container.frame.frameThisPoint(point2); - point3 = button.container.frame.frameThisPoint(point3); - - point5 = button.container.frame.frameThisPoint(point5); - point6 = button.container.frame.frameThisPoint(point6); - point7 = button.container.frame.frameThisPoint(point7); - - point1 = button.container.displacement.displaceThisPoint(point1); - point2 = button.container.displacement.displaceThisPoint(point2); - point3 = button.container.displacement.displaceThisPoint(point3); - - point5 = button.container.displacement.displaceThisPoint(point5); - point6 = button.container.displacement.displaceThisPoint(point6); - point7 = button.container.displacement.displaceThisPoint(point7); - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath(); - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.moveTo(point5.x, point5.y); - browserCanvasContext.lineTo(point6.x, point6.y); - browserCanvasContext.lineTo(point7.x, point7.y); - browserCanvasContext.lineTo(point5.x, point5.y); - browserCanvasContext.closePath(); - - if (button.status === "on") { - browserCanvasContext.fillStyle = button.onFillStyle; - } else { - browserCanvasContext.fillStyle = button.offFillStyle; - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.5)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - } - - - - - - - -} \ No newline at end of file diff --git a/Panels/TimeControlPanel.js b/Panels/TimeControlPanel.js index 09753f764..f3aa11a8e 100644 --- a/Panels/TimeControlPanel.js +++ b/Panels/TimeControlPanel.js @@ -1,13 +1,8 @@  - - function newTimeControlPanel() { - let PLAY_STEP = 0; - let thisObject = { container: undefined, - buttons: undefined, setDatetime: setDatetime, datetimeDisplay: undefined, stepDisplay: undefined, @@ -20,19 +15,16 @@ function newTimeControlPanel() { container.initialize(); container.isDraggeable = true; thisObject.container = container; - thisObject.container.frame.containerName = "Time Control Panel"; + thisObject.container.frame.containerName = "Current Datetime"; - let playingLoop; // Controls the generation of events that allows to play continuosly the market. + let timePeriod; return thisObject; - - - function initialize() { thisObject.container.frame.width = 200; - thisObject.container.frame.height = 85; + thisObject.container.frame.height = 65; let position = { x: (viewPort.visibleArea.topRight.x - viewPort.visibleArea.topLeft.x) / 2 - thisObject.container.frame.width / 2, @@ -45,46 +37,6 @@ function newTimeControlPanel() { let buttonNames = ['Fast Backwards', 'Play Backwards', 'Step Backwards', 'Pause', 'Step Forward', 'Play Forward', 'Fast Forward']; let lastX = 0; - let buttons = []; - - for (let i = 0; i < buttonNames.length; i++) { - - /* Buttons are going to be one at the right of the other. */ - - let button = newButton(); - button.type = buttonNames[i]; - - button.container.displacement.parentDisplacement = thisObject.container.displacement; - button.container.frame.parentFrame = thisObject.container.frame; - - button.container.parentContainer = thisObject.container; - - button.initialize(); - - buttonPosition = { // The first button - x: thisObject.container.frame.width / 2 - (buttonNames.length * button.container.frame.width) / 2, - y: thisObject.container.frame.height * 7 / 10 - }; - button.container.frame.position.x = buttonPosition.x + lastX; - button.container.frame.position.y = buttonPosition.y; - - lastX = lastX + button.container.frame.width; - - /* We start listening to the buttons click event, so as to know when one was pressed. */ - - button.container.eventHandler.listenToEvent('onMouseClick', buttonPressed, i); - - if (buttonNames[i] === 'Pause') { - button.status = 'on'; // We turn on by default the PAUSE button. - } - - buttons.push(button); - - } - - - - thisObject.buttons = buttons; let datetime = INITIAL_DATE; @@ -94,17 +46,15 @@ function newTimeControlPanel() { draw: drawTimeDisplay }; - thisObject.buttons = buttons; thisObject.datetimeDisplay = datetimeDisplay; - - viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); - PLAY_STEP = INITIAL_TIME_PERIOD; - /* Here we will listen to the event when time was changed due to a Bot Execution. */ canvas.topSpace.playStopButton.container.eventHandler.listenToEvent("Bot Execution Changed Datetime", onBotChangedTime); canvas.topSpace.playStopButton.setDatetime(datetime); + + viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); + timePeriod = INITIAL_TIME_PERIOD; } function onBotChangedTime(pNewDatetime) { @@ -115,6 +65,12 @@ function newTimeControlPanel() { } + function onZoomChanged(event) { + + timePeriod = recalculatePeriod(event.newLevel); + + } + function getContainer(point) { let container; @@ -123,21 +79,6 @@ function newTimeControlPanel() { if (thisObject.container.frame.isThisPointHere(point, true) === true) { - /* Now we see which is the inner most container that has it */ - - - for (let i = 0; i < thisObject.buttons.length; i++) { - - container = thisObject.buttons[i].getContainer(point); - - if (container !== undefined) { - - /* We found an inner container which has the point. We return it. */ - - return container; - } - } - /* The point does not belong to any inner container, so we return the current container. */ return thisObject.container; @@ -151,22 +92,12 @@ function newTimeControlPanel() { } - - function onZoomChanged(event) { - - PLAY_STEP = recalculatePeriod(event.newLevel); - - } - - function setDatetime(pDatetime) { thisObject.datetimeDisplay.currentDatetime = new Date(pDatetime); canvas.topSpace.playStopButton.setDatetime(pDatetime); } - - function addTime(seconds) { let newDate = thisObject.datetimeDisplay.currentDatetime; @@ -176,148 +107,14 @@ function newTimeControlPanel() { } - function buttonPressed(event, buttonPressedIndex) { - - clearInterval(playingLoop); - - /* When any of the buttons are pressed, the control panel must turn off the resto of the buttons. */ - - for (let i = 0; i < thisObject.buttons.length; i++) { - - if (i !== buttonPressedIndex) { - - let button = thisObject.buttons[i]; - - button.status = 'off'; - - } - - } - - /* Now we actualy do something depending on which button was pressed. */ - - switch (thisObject.buttons[buttonPressedIndex].type) { - - case "Fast Backwards": - - //pressFastBackwards(); - break; - - case "Play Backwards": - - //pressPlayBackwards(); - break; - - case "Step Backwards": - - //pressStepBackwards(); - break; - - case "Pause": - - //pressPause(); - cloudVM.onBotStopPressed(); - break; - - case "Step Forward": - - //pressStepForward(); - break; - - case "Play Forward": - - let UI_COMMANDS = { - beginDatetime: thisObject.datetimeDisplay.currentDatetime, - endDatetime: undefined, - timePeriod: PLAY_STEP, - startMode: window.CURRENT_START_MODE, - eventHandler: thisObject.container.eventHandler - }; - - cloudVM.onBotPlayPressed(UI_COMMANDS); - //pressPlayForward(); - break; - - case "Fast Forward": - - //pressFastForward(); - break; - - default: - - - } - - } - - function pressFastBackwards() { - - clearInterval(playingLoop); - playingLoop = setInterval(pressStepBackwards, 100); - - } - - function pressPlayBackwards() { - - clearInterval(playingLoop); - playingLoop = setInterval(pressStepBackwards, 1000); - - } - - function pressStepBackwards() { - - thisObject.datetimeDisplay.addTime(-1 * PLAY_STEP / 1000); - - let newDatetime = thisObject.datetimeDisplay.currentDatetime; - - thisObject.container.eventHandler.raiseEvent('Datetime Changed', newDatetime); - - } - - function pressPause() { - clearInterval(playingLoop); - } - - function pressStepForward() { - - thisObject.datetimeDisplay.addTime(PLAY_STEP / 1000); - - let newDatetime = thisObject.datetimeDisplay.currentDatetime; - - thisObject.container.eventHandler.raiseEvent('Datetime Changed', newDatetime); - - } - - function pressPlayForward() { - - clearInterval(playingLoop); - playingLoop = setInterval(pressStepForward, 1000); - - } - - function pressFastForward() { - - playingLoop = setInterval(pressStepForward, 100); - - } - - - function draw() { thisObject.container.frame.draw(false, false, true); - for (let i = 0; i < thisObject.buttons.length; i++) { - thisObject.buttons[i].draw(); - } - thisObject.datetimeDisplay.draw(); } - - - function drawTimeDisplay() { let fontSize = 10; @@ -331,7 +128,7 @@ function newTimeControlPanel() { let labelPoint = { x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, - y: thisObject.container.frame.height * 3.4 / 10 + y: thisObject.container.frame.height * 4.4 / 10 }; labelPoint = thisObject.container.frame.frameThisPoint(labelPoint); @@ -346,21 +143,6 @@ function newTimeControlPanel() { /* Now we transform x on the actual coordinate on the canvas. */ - labelPoint = { - x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, - y: thisObject.container.frame.height * 5.0 / 10 - }; - - labelPoint = thisObject.container.frame.frameThisPoint(labelPoint); - - browserCanvasContext.font = fontSize + 'px Courier New'; - browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)'; - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); - - label = PLAY_STEP / _1_MINUTE_IN_MILISECONDS + ' min'; - - /* Now we transform x on the actual coordinate on the canvas. */ - labelPoint = { x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, y: thisObject.container.frame.height * 6.5 / 10 @@ -372,10 +154,24 @@ function newTimeControlPanel() { browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)'; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); + if (timePeriod > _45_MINUTES_IN_MILISECONDS) { + label = timePeriod / _1_HOUR_IN_MILISECONDS + ' hs'; + } else { + label = timePeriod / _1_MINUTE_IN_MILISECONDS + ' min'; + } + + /* Now we transform x on the actual coordinate on the canvas. */ + + labelPoint = { + x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: thisObject.container.frame.height * 8.5 / 10 + }; + + labelPoint = thisObject.container.frame.frameThisPoint(labelPoint); + + browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)'; + browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); + } - - - - - } \ No newline at end of file diff --git a/Project.njsproj b/Project.njsproj index a3c7d2a94..f7b42d4aa 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -149,7 +149,6 @@ Code - diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 84d5e483d..924334e4b 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -68,7 +68,6 @@ "SplashScreen.js", "Canvas.js", - "Button.js", "TextButton.js", "ImageButton.js", "EventHandler.js", From c10f9ca7947789ff0870d71f1e710f19743fa640 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 1 Jun 2018 10:50:03 +0200 Subject: [PATCH 090/334] Bottom Space created --- BottomSpace/BreakpointsBar.js | 72 ++++++++++++++++++++++ Canvas.js | 113 +++++++++++++++++++--------------- Dashboard.js | 1 + Panels/ProductsPanel.js | 2 +- Project.njsproj | 7 +++ Scripts/AppLoader.js | 3 + Spaces/BottomSpace.js | 84 +++++++++++++++++++++++++ Spaces/TopSpace.js | 3 - ViewPort.js | 2 +- server.js | 8 +++ 10 files changed, 241 insertions(+), 54 deletions(-) create mode 100644 BottomSpace/BreakpointsBar.js create mode 100644 Spaces/BottomSpace.js diff --git a/BottomSpace/BreakpointsBar.js b/BottomSpace/BreakpointsBar.js new file mode 100644 index 000000000..8ad01fc5b --- /dev/null +++ b/BottomSpace/BreakpointsBar.js @@ -0,0 +1,72 @@ + +function newBreakpointsBar() { + + var thisObject = { + container: undefined, + draw: draw, + getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + initialize: initialize + }; + + var container = newContainer(); + container.initialize(); + thisObject.container = container; + + thisObject.container.frame.width = browserCanvasContext.width; + thisObject.container.frame.height = 15; + + container.frame.position.x = 0; + container.frame.position.y = 0; + + container.isDraggeable = false; + + let logo; + let canDrawLogo = false; + + return thisObject; + + function initialize() { + + + + } + + function getContainer(point) { + + let container; + + /* First we check if this point is inside this object UI. */ + + if (thisObject.container.frame.isThisPointHere(point, true) === true) { + + return this.container; + + } else { + + /* This point does not belong to this space. */ + + return undefined; + } + + } + + function draw() { + + let opacity = 1; + + browserCanvasContext.beginPath(); + + let zeroPoint = { + x: 0, + y: 0 + }; + + zeroPoint = thisObject.container.frame.frameThisPoint(zeroPoint); + + let breakpointsHeight = 15; + + browserCanvasContext.closePath(); + + browserCanvasContext.fill(); + } +} \ No newline at end of file diff --git a/Canvas.js b/Canvas.js index 3c1b50996..46d9d4692 100644 --- a/Canvas.js +++ b/Canvas.js @@ -1,36 +1,4 @@  -/* - -The canvas object represents a layer on top of the browser canvas object. - -Graphically, thiscanvas object has 4 spaces: - -1) The "Top Space": It is where Team and User information is displayed. - -2) The "Chart Space": It is where the charts are plotted. - -3) The "Floating Space": It is where floating elements live. There is a physics engine for this layer that allows these elements to flow. - -4) The "Panels Space": It is where panels live. --> This space has yet to be develop, currently pannels are somehow at the Chart Space. - -All these spaces are child objects of the Canvas object. - -Canvas - | - | - ---> topSpace - | - | - ---> chartSpace - | - | - ---> flaotingSpace - | - | - ---> panelsSpace - -*/ - let browserCanvas; // This is the canvas object of the browser. let browserCanvasContext; // The context of the canvas object. @@ -40,6 +8,41 @@ let splashScreenNeeded = true; function newCanvas() { + /* + The canvas object represents a layer on top of the browser canvas object. + + Graphically, thiscanvas object has 4 spaces: + + 1) The "Top Space": It is where Team and User information is displayed. + + 2) The "Chart Space": It is where the charts are plotted. + + 3) The "Floating Space": It is where floating elements live. There is a physics engine for this layer that allows these elements to flow. + + 4) The "Panels Space": It is where panels live. --> This space has yet to be develop, currently pannels are somehow at the Chart Space. + + 5) The "Bottom Space": Includes the breakpoint bar and a toolbar. + + All these spaces are child objects of the Canvas object. + + Canvas + | + | + ---> topSpace + | + | + ---> chartSpace + | + | + ---> flaotingSpace + | + | + ---> panelsSpace + | + | + ---> bottomSpace +*/ + const MODULE_NAME = "Canvas"; const INFO_LOG = false; const ERROR_LOG = true; @@ -69,6 +72,7 @@ function newCanvas() { chartSpace: undefined, floatingSpace: undefined, panelsSpace: undefined, + bottomSpace: undefined, animation: undefined, initialize: initialize }; @@ -87,7 +91,7 @@ function newCanvas() { addCanvasEvents(); - /* Instantiate all the children of Canvas object */ + /* Instantiate all the children spaces of Canvas object */ thisObject.topSpace = newTopSpace(); thisObject.topSpace.initialize(); @@ -101,6 +105,9 @@ function newCanvas() { thisObject.chartSpace = newChartSpace(); thisObject.chartSpace.initialize(onCharSpaceInitialized); + thisObject.bottomSpace = newBottomSpace(); + thisObject.bottomSpace.initialize(); + function onCharSpaceInitialized(err) { viewPort.raiseEvents(); // These events will impacts on objects just initialized. } @@ -125,6 +132,7 @@ function newCanvas() { animation.addCallBackFunction("Splash Screen", splashScreen.draw, onFunctionAdded); animation.addCallBackFunction("ViewPort Animate", viewPort.animate, onFunctionAdded); animation.addCallBackFunction("ViewPort Draw", viewPort.draw, onFunctionAdded); + animation.addCallBackFunction("Bottom Space", thisObject.bottomSpace.draw, onFunctionAdded); animation.addCallBackFunction("Top Space", thisObject.topSpace.draw, onFunctionAdded); animation.start(onStart); @@ -246,6 +254,17 @@ function newCanvas() { return; } + /* We check if the mouse is over an element of the Bottom Space / */ + + container = thisObject.bottomSpace.getContainer(point); + + if (container !== undefined && container.isDraggeable === true) { + + containerBeingDragged = container; + containerDragStarted = true; + return; + } + /* We check if the mouse is over a panel/ */ container = thisObject.panelsSpace.getContainer(point); @@ -301,6 +320,16 @@ function newCanvas() { return; } + /* We check if the mouse is over an element of the Bottom Space / */ + + container = thisObject.bottomSpace.getContainer(point); + + if (container !== undefined && container.isClickeable === true) { + + container.eventHandler.raiseEvent('onMouseClick', event); + return; + } + /* We check if the mouse is over a panel/ */ container = thisObject.panelsSpace.getContainer(point); @@ -461,28 +490,18 @@ function newCanvas() { let upCopyNoTranf; upCopyNoTranf = viewPort.unzoomThisPoint(upCopy); - //upCopyNoTranf = containerBeingDragged.zoom.unzoomThisPoint(upCopyNoTranf); - - /* - let displaceVector = { - x: upCopyNoTranf.x - downCopyNoTransf.x, - y: upCopyNoTranf.y - downCopyNoTransf.y - }; - */ let displaceVector = { x: dragVector.upX - dragVector.downX, y: dragVector.upY - dragVector.downY }; - if (viewPortBeingDragged) { viewPort.displace(displaceVector); } - - + if (containerBeingDragged !== undefined) { containerBeingDragged.frame.position.x = containerBeingDragged.frame.position.x + displaceVector.x; @@ -497,9 +516,5 @@ function newCanvas() { dragVector.downY = dragVector.upY; } - } - -} - - +} \ No newline at end of file diff --git a/Dashboard.js b/Dashboard.js index 0c682885b..6ca3fdf22 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -133,6 +133,7 @@ let INITIAL_ZOOM_LEVEL = -26; // This is the zoom level at the view port i let INITIAL_TIME_PERIOD = recalculatePeriod(INITIAL_ZOOM_LEVEL); // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser. const TOP_SPACE_HEIGHT = 50; +const BOTTOM_SPACE_HEIGHT = 65; var viewPort = newViewPort(); diff --git a/Panels/ProductsPanel.js b/Panels/ProductsPanel.js index 5074da5c9..524b0e8be 100644 --- a/Panels/ProductsPanel.js +++ b/Panels/ProductsPanel.js @@ -32,7 +32,7 @@ function initialize() { thisObject.container.frame.width = 350; - thisObject.container.frame.height = viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y + 15; + thisObject.container.frame.height = viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y; var position = { x: viewPort.visibleArea.topLeft.x, diff --git a/Project.njsproj b/Project.njsproj index f7b42d4aa..984467d4f 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -34,6 +34,9 @@ + + Code + Code @@ -79,6 +82,9 @@ Code + + Code + Code @@ -193,6 +199,7 @@ + diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 924334e4b..013101c25 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -21,6 +21,8 @@ /* PlotterPanels */ + "BottomSpace/BreakpointsBar.js", + "TopSpace/PlayStopButton.js", "TopSpace/CompanyLogo.js", "TopSpace/CurrentStartMode.js", @@ -32,6 +34,7 @@ "Panels/TimeControlPanel.js", "Panels/ProductsPanel.js", + "Spaces/BottomSpace.js", "Spaces/TopSpace.js", "Spaces/PanelsSpace.js", "Spaces/ChartSpace.js", diff --git a/Spaces/BottomSpace.js b/Spaces/BottomSpace.js new file mode 100644 index 000000000..85b665d0e --- /dev/null +++ b/Spaces/BottomSpace.js @@ -0,0 +1,84 @@ + +function newBottomSpace() { + + var thisObject = { + container: undefined, + draw: draw, + getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + breakpointsBar: undefined, + initialize: initialize + }; + + var container = newContainer(); + container.initialize(); + thisObject.container = container; + + thisObject.container.frame.width = browserCanvas.width; + thisObject.container.frame.height = BOTTOM_SPACE_HEIGHT; + + container.frame.position.x = 0; + container.frame.position.y = viewPort.visibleArea.bottomLeft.y; + + container.isDraggeable = false; + + return thisObject; + + function initialize() { + + thisObject.breakpointsBar = newBreakpointsBar(); + thisObject.breakpointsBar.initialize(); + + } + + function getContainer(point) { + + let container; + + container = thisObject.breakpointsBar.getContainer(point); + if (container !== undefined) { return container; } + + /* The point does not belong to any inner container, so we return the current container. */ + + return thisObject.container; + + } + + function draw() { + + thisObject.container.frame.draw(false, false); + + drawBackground(); + thisObject.breakpointsBar.draw(); + } + + function drawBackground() { + + let opacity = 1; + + let zeroPoint = { + x: 0, + y: 0 + }; + + zeroPoint = thisObject.container.frame.frameThisPoint(zeroPoint); + + let breakpointsHeight = 15; + + browserCanvasContext.beginPath(); + + browserCanvasContext.rect(zeroPoint.x, zeroPoint.y, zeroPoint.x + thisObject.container.frame.width, zeroPoint.y + breakpointsHeight); + browserCanvasContext.fillStyle = 'rgba(255, 255, 255, ' + opacity + ')'; + + browserCanvasContext.closePath(); + browserCanvasContext.fill(); + + browserCanvasContext.beginPath(); + + browserCanvasContext.rect(zeroPoint.x, zeroPoint.y + breakpointsHeight, zeroPoint.x + thisObject.container.frame.width, zeroPoint.y + thisObject.container.frame.height - breakpointsHeight); + browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; + + browserCanvasContext.closePath(); + + browserCanvasContext.fill(); + } +} \ No newline at end of file diff --git a/Spaces/TopSpace.js b/Spaces/TopSpace.js index 945b739fd..14ff0f144 100644 --- a/Spaces/TopSpace.js +++ b/Spaces/TopSpace.js @@ -22,9 +22,6 @@ function newTopSpace() { thisObject.container.frame.width = browserCanvas.width; thisObject.container.frame.height = TOP_SPACE_HEIGHT; - container.displacement.containerName = "Top Space"; - container.frame.containerName = "Top Space"; - container.frame.position.x = 0; container.frame.position.y = 0; diff --git a/ViewPort.js b/ViewPort.js index 8532ce54d..0669caf5c 100644 --- a/ViewPort.js +++ b/ViewPort.js @@ -5,7 +5,7 @@ function newViewPort() { let ANIMATION_INCREMENT = 0.25; const TOP_MARGIN = 15 + TOP_SPACE_HEIGHT; - const BOTTOM_MARGIN = 0; + const BOTTOM_MARGIN = BOTTOM_SPACE_HEIGHT; const LEFT_MARGIN = 50; const RIGHT_MARGIN = 50; diff --git a/server.js b/server.js index 78aaf6726..2a47a0e9c 100644 --- a/server.js +++ b/server.js @@ -399,6 +399,14 @@ function onBrowserRequest(request, response) { } break; + case "BottomSpace": // This means the BottomSpace folder. + { + + respondWithFile('./BottomSpace/' + requestParameters[2], response); + + } + break; + case "TopSpace": // This means the TopSpace folder. { From 6fa85b1a67e698adab20df16cea4cd9e93978a09 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 1 Jun 2018 10:58:54 +0200 Subject: [PATCH 091/334] Minor Correction --- Spaces/BottomSpace.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Spaces/BottomSpace.js b/Spaces/BottomSpace.js index 85b665d0e..a958e8300 100644 --- a/Spaces/BottomSpace.js +++ b/Spaces/BottomSpace.js @@ -66,14 +66,6 @@ function newBottomSpace() { browserCanvasContext.beginPath(); - browserCanvasContext.rect(zeroPoint.x, zeroPoint.y, zeroPoint.x + thisObject.container.frame.width, zeroPoint.y + breakpointsHeight); - browserCanvasContext.fillStyle = 'rgba(255, 255, 255, ' + opacity + ')'; - - browserCanvasContext.closePath(); - browserCanvasContext.fill(); - - browserCanvasContext.beginPath(); - browserCanvasContext.rect(zeroPoint.x, zeroPoint.y + breakpointsHeight, zeroPoint.x + thisObject.container.frame.width, zeroPoint.y + thisObject.container.frame.height - breakpointsHeight); browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; From c436cad762501cb3e788caa35b49ca311bc4cbdb Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 1 Jun 2018 12:01:53 +0200 Subject: [PATCH 092/334] DARK Color Implemented --- Dashboard.js | 8 ++++++++ Spaces/BottomSpace.js | 2 +- Spaces/TopSpace.js | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Dashboard.js b/Dashboard.js index 6ca3fdf22..4b9ec3d35 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -1,5 +1,13 @@  + +/* User Interface Colors */ + +UI_COLOR = { + DARK: "48, 48, 54", + LIGHT: "234, 226, 222" +}; + /* Callbacks default responses. */ let GLOBAL = {}; diff --git a/Spaces/BottomSpace.js b/Spaces/BottomSpace.js index a958e8300..dedb8b6ed 100644 --- a/Spaces/BottomSpace.js +++ b/Spaces/BottomSpace.js @@ -67,7 +67,7 @@ function newBottomSpace() { browserCanvasContext.beginPath(); browserCanvasContext.rect(zeroPoint.x, zeroPoint.y + breakpointsHeight, zeroPoint.x + thisObject.container.frame.width, zeroPoint.y + thisObject.container.frame.height - breakpointsHeight); - browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', ' + opacity + ')'; browserCanvasContext.closePath(); diff --git a/Spaces/TopSpace.js b/Spaces/TopSpace.js index 14ff0f144..2c7d464ee 100644 --- a/Spaces/TopSpace.js +++ b/Spaces/TopSpace.js @@ -107,7 +107,7 @@ function newTopSpace() { browserCanvasContext.beginPath(); browserCanvasContext.rect(0, 0, thisObject.container.frame.width, thisObject.container.frame.height); - browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', ' + opacity + ')'; browserCanvasContext.closePath(); From 8419f86f9eff6ec9b6446a463a91b134d3b0849e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 1 Jun 2018 12:40:38 +0200 Subject: [PATCH 093/334] Standarizing Fonts Usage --- ChartGrid.js | 10 +++++----- Dashboard.js | 10 +++++++++- FloatingSpace/Note.js | 4 ++-- FloatingSpace/NoteSets.js | 2 +- FloatingSpace/ProfileBall.js | 6 +++--- FloatingSpace/ProfileBalls.js | 2 +- Frame.js | 4 ++-- Images/Play.png | Bin 68226 -> 53599 bytes Images/Stop.png | Bin 49934 -> 50356 bytes Panels/TimeControlPanel.js | 6 +++--- ProductCard.js | 8 ++++---- SplashScreen.js | 4 ++-- TextButton.js | 2 +- TimelineChart.js | 2 +- TopSpace/CurrentBot.js | 4 ++-- TopSpace/CurrentProcess.js | 4 ++-- TopSpace/CurrentStartMode.js | 4 ++-- TopSpace/DevTeam.js | 4 ++-- TopSpace/EndUser.js | 4 ++-- 19 files changed, 44 insertions(+), 36 deletions(-) diff --git a/ChartGrid.js b/ChartGrid.js index 1500b8082..589acedd6 100644 --- a/ChartGrid.js +++ b/ChartGrid.js @@ -511,7 +511,7 @@ if (labelPoint.y > viewPort.visibleArea.topLeft.y + fontSize && labelPoint.y < viewPort.visibleArea.bottomRight.y - fontSize) { - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)'; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); @@ -548,7 +548,7 @@ if (labelPoint.y > viewPort.visibleArea.topLeft.y + fontSize && labelPoint.y < viewPort.visibleArea.bottomRight.y - fontSize) { - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)'; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); @@ -657,17 +657,17 @@ browserCanvasContext.beginPath(); browserCanvasContext.rect(labelPoint.x, labelPoint.y - fontSize, xOffset * 2, fontSize ); - browserCanvasContext.fillStyle = 'rgba(255, 255, 255, 1)'; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)'; browserCanvasContext.fill(); browserCanvasContext.closePath(); - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)'; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); } - browserCanvasContext.fillStyle = 'rgba(255, 255, 255, 1)'; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)'; browserCanvasContext.beginPath(); browserCanvasContext.rect(0, TOP_SPACE_HEIGHT, viewPort.visibleArea.topLeft.x, viewPort.visibleArea.topLeft.y - TOP_SPACE_HEIGHT); browserCanvasContext.rect(viewPort.visibleArea.topRight.x, TOP_SPACE_HEIGHT, 500, viewPort.visibleArea.topLeft.y - TOP_SPACE_HEIGHT); diff --git a/Dashboard.js b/Dashboard.js index 4b9ec3d35..33d310818 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -5,7 +5,15 @@ UI_COLOR = { DARK: "48, 48, 54", - LIGHT: "234, 226, 222" + LIGHT: "234, 226, 222", + WHITE: "255, 255, 255" +}; + +/* User Interface Fonts */ + +UI_FONT = { + PRIMARY: "Saira", + SECONDARY: "Courier New" }; /* Callbacks default responses. */ diff --git a/FloatingSpace/Note.js b/FloatingSpace/Note.js index 650d29993..a30904ea8 100644 --- a/FloatingSpace/Note.js +++ b/FloatingSpace/Note.js @@ -214,7 +214,7 @@ function newNote() { if (SIZE_PERCENTAGE > 0.9) { - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; let xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO; let yOffset = (TITLE_BAR_HEIGHT - fontSize) / 2 + 2; @@ -303,7 +303,7 @@ function newNote() { y: startingPosition.y + (i + 1) * (fontSize * 0.60 + 10) }; - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; browserCanvasContext.fillStyle = 'rgba(60, 60, 60, ' + ALPHA + ')' browserCanvasContext.fillText(labelRow, labelPoint.x, labelPoint.y); diff --git a/FloatingSpace/NoteSets.js b/FloatingSpace/NoteSets.js index c75aaa118..5339bdf90 100644 --- a/FloatingSpace/NoteSets.js +++ b/FloatingSpace/NoteSets.js @@ -283,7 +283,7 @@ function newNoteSets() { floatingObject.initializeRadius(radius); floatingObject.initializeImageSize(15); - floatingObject.fillStyle = 'rgba(255, 255, 255, 0.5)'; + floatingObject.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 0.5)'; floatingObject.labelStrokeStyle = 'rgba(60, 60, 60, 0.50)'; floatingLayer.addFloatingObject(floatingObject); diff --git a/FloatingSpace/ProfileBall.js b/FloatingSpace/ProfileBall.js index 5bca8dad9..77ca50940 100644 --- a/FloatingSpace/ProfileBall.js +++ b/FloatingSpace/ProfileBall.js @@ -117,7 +117,7 @@ function newProfileBall() { let labelPoint; let fontSize = 10; - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; let label; @@ -130,7 +130,7 @@ function newProfileBall() { y: pFloatingObject.currentPosition.y - pFloatingObject.currentImageSize / 2 - fontSize * 0.60 - 5 }; - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; browserCanvasContext.fillStyle = pFloatingObject.labelStrokeStyle; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); @@ -145,7 +145,7 @@ function newProfileBall() { y: pFloatingObject.currentPosition.y + pFloatingObject.currentImageSize / 2 + fontSize * 0.60 + 10 }; - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; browserCanvasContext.fillStyle = pFloatingObject.labelStrokeStyle; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); diff --git a/FloatingSpace/ProfileBalls.js b/FloatingSpace/ProfileBalls.js index c0d190ca4..ad5e301bf 100644 --- a/FloatingSpace/ProfileBalls.js +++ b/FloatingSpace/ProfileBalls.js @@ -57,7 +57,7 @@ function newProfileBalls() { floatingObject.initializeRadius(30); floatingObject.initializeImageSize(50); - floatingObject.fillStyle = 'rgba(255, 255, 255, 0.5)'; + floatingObject.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 0.5)'; floatingObject.labelStrokeStyle = 'rgba(60, 60, 60, 0.50)'; floatingLayer.addFloatingObject(floatingObject); diff --git a/Frame.js b/Frame.js index 14e314142..b46cbc172 100644 --- a/Frame.js +++ b/Frame.js @@ -365,7 +365,7 @@ function newFrame() { /* We paint the panel background first */ - browserCanvasContext.fillStyle = 'rgba(255, 255, 255, 0.75)'; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 0.75)'; browserCanvasContext.beginPath(); browserCanvasContext.arc(borderPoint1.x, borderPoint1.y, PANEL_CORNERS_RADIOUS, 1.0 * Math.PI, 1.5 * Math.PI); @@ -411,7 +411,7 @@ function newFrame() { let labelPoint; let fontSize = 10; - browserCanvasContext.font = fontSize + 'px Courier New'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; let label = frame.containerName; diff --git a/Images/Play.png b/Images/Play.png index 4b1e60dd2725b215b7e18ba9e9562fda7db91675..e51eb57e58ebfeaa25f6e6fe92d86ed131a1d132 100644 GIT binary patch literal 53599 zcmce7^OL5%^YuNpZF6^Q+qTUe+qUN!bH}!A++*9e?V0a>-aq24RI0D!mvmj}K9zIQ ziBy!AK!C-C1pojDQj(&||LhR}0D=S!`R}XS2u%E+fi#wp5C#1FujO@@CjFa%agfw< z{%0lsUl$*<<_7=*08*ktsvhf?Unh;GQmI4{UvVD@cdAx@wY1$eT$@uDV$X7LVsbz* zR|AdQr2y8}tc5t1okW(vTFrx8!NLS0_x2)3m_GG%5U>CMCNU#+JAwEUAd+9)#~mJrzPY-YyT%JI!-N+KN6qcUwZvDPgJJJg>sQOp^M>Ds{fF)Uhrtyt z%2!io-M^3Y};lS7`Ik8Us`XS29Ci>g(TDZ6{M85#1)-lfQGdzDG}d5RvpH zh#4iPXPx(>K3-~XeoFl51de^OC)v6l2|uo==AI+(N48xOUSPuNWm%nK08Rlfgi~ex zWq)R4c!38flu1k_3or_$DlsD_oF{wP!DLhlhC|pW!hJqWBgQ>_HtZud?4`q9Vk<3{ zorroX`4^;pHXX-azV##0y<>G@NA3`H`zv2=7Ph(60&W)!LnNfCpsF;qy*z!M!UqJv z14tbxc8AkjA%3Sz#yCQrh{6%XgV)GHPS1Pv7Iu#M_V&2uCz_H4nvx_M$^+M!FYs*+ zhZ-pbWAPX|%q{q6x3H}@_|DGG)wS*6>1leqt@YvIXe`IO0SKShJq+Cr7mPFp{r;zk zl~dpp!S8iU67Zoo5I5p8o?rmDr(WX90ftH44!^v$-#WqTn*CSkX&x*U8Ey+z1vSV4 zTfB$_;_m33T+hw7h{tZfv&a1%mBaBQPBy0_ZmGgnI9L|c94ms4h-Ic@ViH_DSoGCl*7`Bdosn7ed#^ zGKKEzz6PhhvqG+|gXT%x&AMlSWyN#Zru9K-FCD))sm>8@nnaYiqQFJLotGV#2`P1vzR=o_J$Y?&C)u2mrh&Xo5^` zBe|QQxnRU+RMqCaEBY3KiY}Uc_@A43l#2WCl-&`3?)3->$Yi7BWji@!v z8YYQGvS;RA3!3Ekm5(N%jUv04D4nZ%m%IDL6P*6vU|n~|8y?pZGkYm%1|wOu{sA&X zm-Dfeo#`{$0WU)N-b>GsPG&ml!>Y!P-&~Z&2~WL#5x2KV;cs`P^1JyG*CQ(N0zo5$ z-k_y%x&3>=BaF6)1D$lpOcBs=iKZqFbe0vVhGN@^X2X0h?J%tEgP(SK4kl3qn-_W``i~a0(2#L^~V@()hnWjNFAX_`<&YtB)# zlpryoYDRF~<3Bv3ZhL%SbUlv$^7wjcy`%DfCFA`Ge!1)Kbk?>(Gu91225}NjNBI!- z`1rSZGPahIiE1SR@hdP?^7gxXBS?2>Gx#G5Gn?VzMEv0&GyG8pP(&kvu`I;6fx6)N zC<_-k`J`o_G%Zc3BPn?EJrDZ)@M^=-e`IzQWD_P{Dp<9+?ZN%0A|H_aOXD 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 uFGu1%l~ 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 literal 49934 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

~~8uuP;$ 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 Date: Fri, 1 Jun 2018 13:06:28 +0200 Subject: [PATCH 094/334] Standarizing the sizes --- Dashboard.js | 15 +++++++++++++++ Panels/ProductsPanel.js | 6 +++--- Panels/TimeControlPanel.js | 4 ++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Dashboard.js b/Dashboard.js index 33d310818..81b0c2e59 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -16,6 +16,21 @@ UI_FONT = { SECONDARY: "Courier New" }; +/* User Interface Panels */ + +UI_PANEL = { + WIDTH: { + SMALL: 200, + NORMAL: 250, + LARGE: 350 + }, + HEIGHT: { + SMALL: 65, + NORMAL: 300, + LARGE: 450 + } +}; + /* Callbacks default responses. */ let GLOBAL = {}; diff --git a/Panels/ProductsPanel.js b/Panels/ProductsPanel.js index 524b0e8be..336ba8b85 100644 --- a/Panels/ProductsPanel.js +++ b/Panels/ProductsPanel.js @@ -31,12 +31,12 @@ function initialize() { - thisObject.container.frame.width = 350; - thisObject.container.frame.height = viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y; + thisObject.container.frame.width = UI_PANEL.WIDTH.LARGE; + thisObject.container.frame.height = UI_PANEL.HEIGHT.LARGE; var position = { x: viewPort.visibleArea.topLeft.x, - y: viewPort.visibleArea.topLeft.y + y: viewPort.visibleArea.bottomLeft.y - thisObject.container.frame.height }; thisObject.container.frame.position = position; diff --git a/Panels/TimeControlPanel.js b/Panels/TimeControlPanel.js index 108400f13..22b4302d1 100644 --- a/Panels/TimeControlPanel.js +++ b/Panels/TimeControlPanel.js @@ -23,8 +23,8 @@ function newTimeControlPanel() { function initialize() { - thisObject.container.frame.width = 200; - thisObject.container.frame.height = 65; + thisObject.container.frame.width = UI_PANEL.WIDTH.SMALL; + thisObject.container.frame.height = UI_PANEL.HEIGHT.SMALL; let position = { x: (viewPort.visibleArea.topRight.x - viewPort.visibleArea.topLeft.x) / 2 - thisObject.container.frame.width / 2, From 37a47cc43e2c74dded0572c31debd23bfe45a301 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 1 Jun 2018 18:51:49 +0200 Subject: [PATCH 095/334] Asthetics works, comma on thoursands --- ChartGrid.js | 5 +++-- Dashboard.js | 6 ++++-- Files/FileCursor.js | 2 +- FloatingSpace/Note.js | 6 +++--- FloatingSpace/ProfileBall.js | 8 ++++---- ProductCard.js | 12 ++++++------ TimelineChart.js | 8 ++++---- 7 files changed, 25 insertions(+), 22 deletions(-) diff --git a/ChartGrid.js b/ChartGrid.js index 589acedd6..d949592cc 100644 --- a/ChartGrid.js +++ b/ChartGrid.js @@ -501,9 +501,10 @@ let fontSize = 10; let label = ' ' + Math.round(j * 1000000) / 1000000; + label = Number(label).toLocaleString(); let labelPoint = { - x: viewPort.visibleArea.bottomRight.x + 1, + x: viewPort.visibleArea.bottomRight.x + 5, y: point1.y + fontSize / 2 * FONT_ASPECT_RATIO }; @@ -540,7 +541,7 @@ let label = ' ' + pad(labelValue, 3) + '%'; let labelPoint = { - x: -2, + x: 0, y: point1.y + fontSize / 2 * FONT_ASPECT_RATIO }; diff --git a/Dashboard.js b/Dashboard.js index 81b0c2e59..549d6f985 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -13,9 +13,11 @@ UI_COLOR = { UI_FONT = { PRIMARY: "Saira", - SECONDARY: "Courier New" + SECONDARY: "Source Code Pro" }; +FONT_ASPECT_RATIO = 0.50; + /* User Interface Panels */ UI_PANEL = { @@ -157,7 +159,7 @@ const _2_MINUTES_IN_MILISECONDS = 2 * 60 * 1000; const _1_MINUTE_IN_MILISECONDS = 1 * 60 * 1000; const EARLIEST_DATE = new Date(2014, 0, 18, 4, 26, 8); -const FONT_ASPECT_RATIO = 0.60; + const CHART_ASPECT_RATIO = 1 / 10; let INITIAL_ZOOM_LEVEL = -26; // This is the zoom level at the view port in which the APP starts. diff --git a/Files/FileCursor.js b/Files/FileCursor.js index f996cff5d..335533075 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -2,7 +2,7 @@ function newFileCursor() { const MODULE_NAME = "File Cursor"; - const INFO_LOG = false; + const INFO_LOG = true; const ERROR_LOG = true; const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; diff --git a/FloatingSpace/Note.js b/FloatingSpace/Note.js index a30904ea8..40081e88b 100644 --- a/FloatingSpace/Note.js +++ b/FloatingSpace/Note.js @@ -295,12 +295,12 @@ function newNote() { let startingPosition = { x: pFloatingObject.currentPosition.x, - y: pFloatingObject.currentPosition.y - labelRows.length / 2 * (fontSize * 0.60 + 10) + y: pFloatingObject.currentPosition.y - labelRows.length / 2 * (fontSize * FONT_ASPECT_RATIO + 10) }; labelPoint = { - x: startingPosition.x - labelRow.length / 2 * fontSize * 0.60, - y: startingPosition.y + (i + 1) * (fontSize * 0.60 + 10) + x: startingPosition.x - labelRow.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: startingPosition.y + (i + 1) * (fontSize * FONT_ASPECT_RATIO + 10) }; browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; diff --git a/FloatingSpace/ProfileBall.js b/FloatingSpace/ProfileBall.js index 77ca50940..c0e44ebd8 100644 --- a/FloatingSpace/ProfileBall.js +++ b/FloatingSpace/ProfileBall.js @@ -126,8 +126,8 @@ function newProfileBall() { if (label !== undefined) { labelPoint = { - x: pFloatingObject.currentPosition.x - label.length / 2 * fontSize * 0.60, - y: pFloatingObject.currentPosition.y - pFloatingObject.currentImageSize / 2 - fontSize * 0.60 - 5 + x: pFloatingObject.currentPosition.x - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: pFloatingObject.currentPosition.y - pFloatingObject.currentImageSize / 2 - fontSize * FONT_ASPECT_RATIO - 5 }; browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; @@ -141,8 +141,8 @@ function newProfileBall() { if (label !== undefined) { labelPoint = { - x: pFloatingObject.currentPosition.x - label.length / 2 * fontSize * 0.60, - y: pFloatingObject.currentPosition.y + pFloatingObject.currentImageSize / 2 + fontSize * 0.60 + 10 + x: pFloatingObject.currentPosition.x - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: pFloatingObject.currentPosition.y + pFloatingObject.currentImageSize / 2 + fontSize * FONT_ASPECT_RATIO + 10 }; browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; diff --git a/ProductCard.js b/ProductCard.js index a215afff1..20340fbeb 100644 --- a/ProductCard.js +++ b/ProductCard.js @@ -447,8 +447,8 @@ label = thisObject.devTeam.displayName; labelPoint = { - x: 10 + devTeamImageSize / 2 - label.length / 2 * fontSize * 0.60, - y: thisObject.container.frame.height / 2 + devTeamImageSize / 2 + fontSize * 0.60 + 5 + x: 10 + devTeamImageSize / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: thisObject.container.frame.height / 2 + devTeamImageSize / 2 + fontSize * FONT_ASPECT_RATIO + 5 }; labelPoint = thisObject.container.frame.frameThisPoint(labelPoint); @@ -462,8 +462,8 @@ label = thisObject.bot.displayName; labelPoint = { - x: thisObject.container.frame.width - 10 - botImageSize - 5 + botImageSize / 2 - label.length / 2 * fontSize * 0.60, - y: thisObject.container.frame.height / 2 + devTeamImageSize / 2 + fontSize * 0.60 + 5 + x: thisObject.container.frame.width - 10 - botImageSize - 5 + botImageSize / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: thisObject.container.frame.height / 2 + devTeamImageSize / 2 + fontSize * FONT_ASPECT_RATIO + 5 }; labelPoint = thisObject.container.frame.frameThisPoint(labelPoint); @@ -484,8 +484,8 @@ }; labelPoint = { - x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * 0.60, - y: thisObject.container.frame.height / 2 - devTeamImageSize / 2 - fontSize * 0.60 - 5 + x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: thisObject.container.frame.height / 2 - devTeamImageSize / 2 - fontSize * FONT_ASPECT_RATIO - 5 }; labelPoint = thisObject.container.frame.frameThisPoint(labelPoint); diff --git a/TimelineChart.js b/TimelineChart.js index 518c01820..a4eeadc14 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -968,8 +968,8 @@ point = transformThisPoint(point, thisObject.container); point = { - x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * 0.60, - y: point.y + currentFontSize * 0.60 / 2 + x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * FONT_ASPECT_RATIO, + y: point.y + currentFontSize * FONT_ASPECT_RATIO / 2 }; } else { @@ -977,8 +977,8 @@ targetLabelFontSize = 150; point = { - x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * 0.60, - y: (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 2 + currentFontSize * 0.60 / 2 + x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * FONT_ASPECT_RATIO, + y: (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 2 + currentFontSize * FONT_ASPECT_RATIO / 2 }; } From 3836c8bce66ec25211d63f64215c2297f849abb8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 1 Jun 2018 20:02:02 +0200 Subject: [PATCH 096/334] Cosmetic Adjustments --- ProductCard.js | 4 ++-- SplashScreen.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ProductCard.js b/ProductCard.js index 20340fbeb..2d191b8a4 100644 --- a/ProductCard.js +++ b/ProductCard.js @@ -354,7 +354,7 @@ if (thisObject.bot.profilePicture !== undefined) { let botImagePoint = { - x: thisObject.container.frame.width - 10 - botImageSize, + x: thisObject.container.frame.width - botImageSize / 2 - 40, y: thisObject.container.frame.height / 2 - botImageSize / 2 }; @@ -462,7 +462,7 @@ label = thisObject.bot.displayName; labelPoint = { - x: thisObject.container.frame.width - 10 - botImageSize - 5 + botImageSize / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + x: thisObject.container.frame.width - 40 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, y: thisObject.container.frame.height / 2 + devTeamImageSize / 2 + fontSize * FONT_ASPECT_RATIO + 5 }; diff --git a/SplashScreen.js b/SplashScreen.js index 1bc522238..7fb43aa72 100644 --- a/SplashScreen.js +++ b/SplashScreen.js @@ -72,7 +72,7 @@ function newSplashScreen() { let fontSize = 50; let labelPoint = { - x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO -30, + x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, y: thisObject.container.frame.height / 2 + fontSize / 2 + fontSize * 0.1 + 200 }; @@ -85,7 +85,7 @@ function newSplashScreen() { browserCanvasContext.fill(); - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; browserCanvasContext.fillStyle = 'rgba(200, 200, 200, ' + opacity + ')'; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); From 9010b3be5ae31d1347ecdd9f2c24ded9b5e0fe2c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 1 Jun 2018 21:14:36 +0200 Subject: [PATCH 097/334] Small Corrections in font size --- BottomSpace/BreakpointsBar.js | 16 ++++++++++++++++ ChartGrid.js | 1 - TimelineChart.js | 10 +++++----- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/BottomSpace/BreakpointsBar.js b/BottomSpace/BreakpointsBar.js index 8ad01fc5b..6d122ca30 100644 --- a/BottomSpace/BreakpointsBar.js +++ b/BottomSpace/BreakpointsBar.js @@ -19,16 +19,32 @@ function newBreakpointsBar() { container.frame.position.y = 0; container.isDraggeable = false; + container.isClickeable = true; let logo; let canDrawLogo = false; + let datetime; + let timePeriod; + return thisObject; function initialize() { + viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); + timePeriod = INITIAL_TIME_PERIOD; + } + function onZoomChanged(event) { + + timePeriod = recalculatePeriod(event.newLevel); + + } + + function setDatetime(pDatetime) { + + datetime = new Date(pDatetime); } function getContainer(point) { diff --git a/ChartGrid.js b/ChartGrid.js index d949592cc..4e24c2866 100644 --- a/ChartGrid.js +++ b/ChartGrid.js @@ -8,7 +8,6 @@ return chartGrid; - function draw(container, timeLineCoordinateSystem) { let periods = []; diff --git a/TimelineChart.js b/TimelineChart.js index a4eeadc14..5df6cad4a 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -918,9 +918,9 @@ if (INTENSIVE_LOG === true) { logger.write("[INFO] drawBackground -> Entering function."); } - let targetLabelFontSize = 150; - let fontSizeIncrement = 12.5; - let currentFontSize = 150; + let targetLabelFontSize = 120; + let fontSizeIncrement = 12; + let currentFontSize = 120; let market = markets.get(marketId); let label = market.assetA + " " + market.assetB; @@ -958,7 +958,7 @@ if (topPoint.y > viewPort.visibleArea.topLeft.y || bottomPoint.y < viewPort.visibleArea.bottomRight.y) { - targetLabelFontSize = 150 / 2; + targetLabelFontSize = 120 / 2; point = { x: 0, @@ -974,7 +974,7 @@ } else { - targetLabelFontSize = 150; + targetLabelFontSize = 120; point = { x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * FONT_ASPECT_RATIO, From d7fa90b2d8cef831d94f0c8eee4843fbc3f0d817 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 2 Jun 2018 00:05:46 +0200 Subject: [PATCH 098/334] Breakpoints working!!!! --- BottomSpace/BreakpointsBar.js | 88 -------------- BreakpointsBar.js | 219 ++++++++++++++++++++++++++++++++++ Canvas.js | 8 +- ChartGrid.js | 6 +- Dashboard.js | 3 +- Files/FileCursor.js | 2 +- Project.njsproj | 2 +- Scripts/AppLoader.js | 3 +- Spaces/BottomSpace.js | 9 +- TimelineChart.js | 22 ++-- ViewPort.js | 2 +- 11 files changed, 246 insertions(+), 118 deletions(-) delete mode 100644 BottomSpace/BreakpointsBar.js create mode 100644 BreakpointsBar.js diff --git a/BottomSpace/BreakpointsBar.js b/BottomSpace/BreakpointsBar.js deleted file mode 100644 index 6d122ca30..000000000 --- a/BottomSpace/BreakpointsBar.js +++ /dev/null @@ -1,88 +0,0 @@ - -function newBreakpointsBar() { - - var thisObject = { - container: undefined, - draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize - }; - - var container = newContainer(); - container.initialize(); - thisObject.container = container; - - thisObject.container.frame.width = browserCanvasContext.width; - thisObject.container.frame.height = 15; - - container.frame.position.x = 0; - container.frame.position.y = 0; - - container.isDraggeable = false; - container.isClickeable = true; - - let logo; - let canDrawLogo = false; - - let datetime; - let timePeriod; - - return thisObject; - - function initialize() { - - viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); - timePeriod = INITIAL_TIME_PERIOD; - - } - - function onZoomChanged(event) { - - timePeriod = recalculatePeriod(event.newLevel); - - } - - function setDatetime(pDatetime) { - - datetime = new Date(pDatetime); - } - - function getContainer(point) { - - let container; - - /* First we check if this point is inside this object UI. */ - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } - - function draw() { - - let opacity = 1; - - browserCanvasContext.beginPath(); - - let zeroPoint = { - x: 0, - y: 0 - }; - - zeroPoint = thisObject.container.frame.frameThisPoint(zeroPoint); - - let breakpointsHeight = 15; - - browserCanvasContext.closePath(); - - browserCanvasContext.fill(); - } -} \ No newline at end of file diff --git a/BreakpointsBar.js b/BreakpointsBar.js new file mode 100644 index 000000000..7107b24d1 --- /dev/null +++ b/BreakpointsBar.js @@ -0,0 +1,219 @@ + +function newBreakpointsBar() { + + var thisObject = { + setDatetime: setDatetime, + container: undefined, + draw: draw, + getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + initialize: initialize + }; + + var container = newContainer(); + container.initialize(); + thisObject.container = container; + + thisObject.container.frame.width = browserCanvasContext.width; + thisObject.container.frame.height = 15; + + container.frame.position.x = 0; + container.frame.position.y = viewPort.visibleArea.bottomRight.y; + + container.isDraggeable = false; + container.isClickeable = true; + + let logo; + let canDrawLogo = false; + + let datetime; + let timePeriod; + let timeLineCoordinateSystem; + let chartContainer; + + let breakpointsByTimePeriod = new Map(); + + return thisObject; + + function initialize(pChartContainer, pTimeLineCoordinateSystem) { + + timeLineCoordinateSystem = pTimeLineCoordinateSystem; + chartContainer = pChartContainer; + + viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); + timePeriod = INITIAL_TIME_PERIOD; + + thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick); + + for (let i = 0; i < marketFilesPeriods.length; i++) { + + let breakpointsMap = new Map(); + breakpointsByTimePeriod.set(marketFilesPeriods[i][0], breakpointsMap); + + } + + for (let i = 0; i < dailyFilePeriods.length; i++) { + + let breakpointsMap = new Map(); + breakpointsByTimePeriod.set(dailyFilePeriods[i][0], breakpointsMap); + + } + } + + function onClick(pPoint) { + + let point = { + x: pPoint.x, + y: pPoint.y + }; + + let miliSeconds = getMilisecondsFromPoint(point, chartContainer, timeLineCoordinateSystem); + + miliSeconds = normalizeX(miliSeconds); // We are now exactly at the middle of the "candle" correspondind to the point clicked. + + let breakpointsMap = breakpointsByTimePeriod.get(timePeriod); + let breakpoint = breakpointsMap.get(miliSeconds); + + if (breakpoint === undefined) { + + /* The breakpoint didnt exist, then we create one. */ + breakpointsMap.set(miliSeconds, 1); + + } else { + + /* The breakpoint existed, so we remove it. */ + breakpointsMap.set(miliSeconds, undefined); + + } + } + + function normalizeX(pX) { + + return Math.trunc(pX / timePeriod) * timePeriod + timePeriod / 2; + + } + + function onZoomChanged(event) { + + timePeriod = recalculatePeriod(event.newLevel); + + } + + function setDatetime(pDatetime) { + + datetime = new Date(pDatetime); + } + + function getContainer(point) { + + let container; + + /* First we check if this point is inside this object UI. */ + + if (thisObject.container.frame.isThisPointHere(point, true) === true) { + + return this.container; + + } else { + + /* This point does not belong to this space. */ + + return undefined; + } + + } + + function draw() { + + /* + To draw the breakpoints, we will calculate the miliseconds for the first x pixel of the breakpoint bar, and for the last x pixel. Once we have that + we can create an array with all the possible points for breack points. Finally we can see if brealpoints exists at those points. We plot only the ones + that exists. + */ + + let breakpointsMap = breakpointsByTimePeriod.get(timePeriod); + + let beginX = { + x: viewPort.visibleArea.bottomLeft.x, + y: 0 + }; + + let endX = { + x: viewPort.visibleArea.bottomRight.x, + y: 0 + }; + + let beginMiliseconds = getMilisecondsFromPoint(beginX, chartContainer, timeLineCoordinateSystem); + let endMiliseconds = getMilisecondsFromPoint(endX, chartContainer, timeLineCoordinateSystem); + + beginMiliseconds = normalizeX(beginMiliseconds); + endMiliseconds = normalizeX(endMiliseconds); + + AT_BREAKPOINT = false; + + for (let miliSeconds = beginMiliseconds; miliSeconds < endMiliseconds; miliSeconds = miliSeconds + timePeriod) { + + let breakpoint = breakpointsMap.get(miliSeconds); + + if (breakpoint !== undefined) { + + let point1 = { + x: miliSeconds, + y: 0 + } + + point1 = timeLineCoordinateSystem.transformThisPoint(point1); + point1 = transformThisPoint(point1, chartContainer); + + let point2 = { + x: miliSeconds, + y: thisObject.container.frame.height / 2 + 1 + } + + point2 = thisObject.container.frame.frameThisPoint(point2); + + let point = { + x: point1.x, + y: point2.y + } + + let isCurrentRecord = false; + + if (datetime !== undefined) { + let dateValue = datetime.valueOf(); + if (dateValue >= miliSeconds - timePeriod / 2 && dateValue <= miliSeconds + timePeriod / 2 - 1) { + isCurrentRecord = true; + } + } + + let radius = 5; + + let opacity = '0.5'; + + browserCanvasContext.lineWidth = 1; + + /* Outer Circle */ + + browserCanvasContext.beginPath(); + + browserCanvasContext.strokeStyle = 'rgba(123, 50, 40, ' + opacity + ')'; + + if (isCurrentRecord === false) { + browserCanvasContext.fillStyle = 'rgba(223, 70, 60, ' + opacity + ')'; + } else { + browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ + + AT_BREAKPOINT = true; // We are hitting a breakpoint! + } + + browserCanvasContext.arc(point.x, point.y, radius, 0, Math.PI * 2, true); + browserCanvasContext.closePath(); + + if (point.x < viewPort.visibleArea.topLeft.x + 50 || point.x > viewPort.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else { + browserCanvasContext.fill(); + } + + browserCanvasContext.stroke(); + } + } + } +} \ No newline at end of file diff --git a/Canvas.js b/Canvas.js index 46d9d4692..f2b795000 100644 --- a/Canvas.js +++ b/Canvas.js @@ -316,7 +316,7 @@ function newCanvas() { if (container !== undefined && container.isClickeable === true) { - container.eventHandler.raiseEvent('onMouseClick', event); + container.eventHandler.raiseEvent('onMouseClick', point); return; } @@ -326,7 +326,7 @@ function newCanvas() { if (container !== undefined && container.isClickeable === true) { - container.eventHandler.raiseEvent('onMouseClick', event); + container.eventHandler.raiseEvent('onMouseClick', point); return; } @@ -336,7 +336,7 @@ function newCanvas() { if (container !== undefined && container.isClickeable === true) { - container.eventHandler.raiseEvent('onMouseClick', event); + container.eventHandler.raiseEvent('onMouseClick', point); return; } @@ -357,7 +357,7 @@ function newCanvas() { if (container !== undefined && container.isClickeable === true) { - container.eventHandler.raiseEvent('onMouseClick', event); + container.eventHandler.raiseEvent('onMouseClick', point); return; } } diff --git a/ChartGrid.js b/ChartGrid.js index 4e24c2866..3b59941a5 100644 --- a/ChartGrid.js +++ b/ChartGrid.js @@ -1,12 +1,10 @@ function newChartGrid() { - - - var chartGrid = { + let thisObject = { draw: draw }; - return chartGrid; + return thisObject; function draw(container, timeLineCoordinateSystem) { diff --git a/Dashboard.js b/Dashboard.js index 549d6f985..68692edc3 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -123,6 +123,7 @@ function convertTimePeriodToName(pTimePeriod) { } let cloudVM = newCloudVM(); +let AT_BREAKPOINT = false; const DEBUG_START_UP_DELAY = 0 //3000; // This is a waiting time in case there is a need to debug the very first steps of initialization, to be able to hit F12 on time. const INITIAL_DEFAULT_MARKET = 2; // This is the market that will be shown when loading the site for the first time. @@ -166,7 +167,7 @@ let INITIAL_ZOOM_LEVEL = -26; // This is the zoom level at the view port i let INITIAL_TIME_PERIOD = recalculatePeriod(INITIAL_ZOOM_LEVEL); // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser. const TOP_SPACE_HEIGHT = 50; -const BOTTOM_SPACE_HEIGHT = 65; +const BOTTOM_SPACE_HEIGHT = 50; var viewPort = newViewPort(); diff --git a/Files/FileCursor.js b/Files/FileCursor.js index 335533075..f996cff5d 100644 --- a/Files/FileCursor.js +++ b/Files/FileCursor.js @@ -2,7 +2,7 @@ function newFileCursor() { const MODULE_NAME = "File Cursor"; - const INFO_LOG = true; + const INFO_LOG = false; const ERROR_LOG = true; const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; diff --git a/Project.njsproj b/Project.njsproj index 984467d4f..5666a0e54 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -34,7 +34,7 @@ - + Code diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 013101c25..456124e35 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -21,7 +21,7 @@ /* PlotterPanels */ - "BottomSpace/BreakpointsBar.js", + "TopSpace/PlayStopButton.js", "TopSpace/CompanyLogo.js", @@ -60,6 +60,7 @@ "CloudVM/WebFS.js", "CloudVM/CloudVM.js", + "BreakpointsBar.js", "WebDebugLog.js", "Plotter.js", "PlotterPanel.js", diff --git a/Spaces/BottomSpace.js b/Spaces/BottomSpace.js index dedb8b6ed..a5fee795d 100644 --- a/Spaces/BottomSpace.js +++ b/Spaces/BottomSpace.js @@ -5,7 +5,6 @@ function newBottomSpace() { container: undefined, draw: draw, getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - breakpointsBar: undefined, initialize: initialize }; @@ -25,8 +24,7 @@ function newBottomSpace() { function initialize() { - thisObject.breakpointsBar = newBreakpointsBar(); - thisObject.breakpointsBar.initialize(); + } @@ -34,8 +32,7 @@ function newBottomSpace() { let container; - container = thisObject.breakpointsBar.getContainer(point); - if (container !== undefined) { return container; } + /* The point does not belong to any inner container, so we return the current container. */ @@ -48,7 +45,7 @@ function newBottomSpace() { thisObject.container.frame.draw(false, false); drawBackground(); - thisObject.breakpointsBar.draw(); + } function drawBackground() { diff --git a/TimelineChart.js b/TimelineChart.js index 5df6cad4a..05b891c54 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -36,6 +36,7 @@ let level; let chartGrid; + let breakpointsBar; let initializationReady = false; @@ -63,6 +64,8 @@ exchangeId = exchange; chartGrid = newChartGrid(); + breakpointsBar = newBreakpointsBar(); + breakpointsBar.initialize(container, timeLineCoordinateSystem); recalculateScale(); @@ -748,6 +751,8 @@ competitionPlotter.plotter.setDatetime(datetime); } + + breakpointsBar.setDatetime(pDatetime); } } @@ -808,6 +813,8 @@ } + breakpointsBar.setDatetime(datetime); + thisObject.container.eventHandler.raiseEvent("Datetime Changed", datetime); } @@ -818,18 +825,9 @@ let container; - /* First we check if this point is inside this space. */ + container = breakpointsBar.getContainer(point); - if (this.container.frame.isThisPointHere(point) === true) { - - // return this.container; Currently there is a BUG in which if this is enabled the datetime of the control panel is not recalculated. - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } + return container; } @@ -911,6 +909,8 @@ let competitionPlotter = competitionPlotters[i]; competitionPlotter.plotter.draw(); } + + breakpointsBar.draw(); } } diff --git a/ViewPort.js b/ViewPort.js index 0669caf5c..53242a218 100644 --- a/ViewPort.js +++ b/ViewPort.js @@ -5,7 +5,7 @@ function newViewPort() { let ANIMATION_INCREMENT = 0.25; const TOP_MARGIN = 15 + TOP_SPACE_HEIGHT; - const BOTTOM_MARGIN = BOTTOM_SPACE_HEIGHT; + const BOTTOM_MARGIN = 15 + BOTTOM_SPACE_HEIGHT; const LEFT_MARGIN = 50; const RIGHT_MARGIN = 50; From ab20eb97442f6fbabd5ffac2cd9634de8466fabb Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 2 Jun 2018 09:50:45 +0200 Subject: [PATCH 099/334] Competing the Text on Splash screen --- SplashScreen.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SplashScreen.js b/SplashScreen.js index 7fb43aa72..2d8e59ca6 100644 --- a/SplashScreen.js +++ b/SplashScreen.js @@ -132,10 +132,10 @@ function newSplashScreen() { fontSize = 50; - title = "Algobots Competitions" + title = "Algobots Competitions Platform" titlePoint = { - x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO + 0, + x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO - 50, y: thisObject.container.frame.height / 2 - fontSize * 2 + 150 }; From acf385bc3c182482ef637479a8f1026aa032e20c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 2 Jun 2018 12:37:38 +0200 Subject: [PATCH 100/334] Reads and writes bot scripts at members area. --- AABrowserAPI/API.js | 4 +- BreakpointsBar.js | 4 +- CloudVM/CloudRequire.js | 8 +- CloudVM/CloudSupport.js | 7 -- CloudVM/CloudVM.js | 8 +- Dashboard.js | 2 +- Server/BotsScripts.js | 164 ++++++++-------------------------------- server.js | 78 +++++++++++++------ 8 files changed, 101 insertions(+), 174 deletions(-) diff --git a/AABrowserAPI/API.js b/AABrowserAPI/API.js index 67a3b3660..9bead5e6c 100644 --- a/AABrowserAPI/API.js +++ b/AABrowserAPI/API.js @@ -15,9 +15,9 @@ } - function saveBotCode(pSourceCode, callBackFunction) { + function saveBotCode(pDevTeam, pSource, pRepo, pPath, pSourceCode, callBackFunction) { - writeData("AAMasters", "AAMariam-Trading-Bot", "Trading-Process/User.Bot.js", pSourceCode, onDataWritten); + writeData(pDevTeam + "/" + pSource, pRepo, pPath, pSourceCode, onDataWritten); function onDataWritten(err) { diff --git a/BreakpointsBar.js b/BreakpointsBar.js index 7107b24d1..749b9d7b0 100644 --- a/BreakpointsBar.js +++ b/BreakpointsBar.js @@ -148,7 +148,7 @@ function newBreakpointsBar() { beginMiliseconds = normalizeX(beginMiliseconds); endMiliseconds = normalizeX(endMiliseconds); - AT_BREAKPOINT = false; + window.AT_BREAKPOINT = false; for (let miliSeconds = beginMiliseconds; miliSeconds < endMiliseconds; miliSeconds = miliSeconds + timePeriod) { @@ -202,7 +202,7 @@ function newBreakpointsBar() { } else { browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ - AT_BREAKPOINT = true; // We are hitting a breakpoint! + window.AT_BREAKPOINT = true; // We are hitting a breakpoint! } browserCanvasContext.arc(point.x, point.y, radius, 0, Math.PI * 2, true); diff --git a/CloudVM/CloudRequire.js b/CloudVM/CloudRequire.js index 566965ff7..28df7ad61 100644 --- a/CloudVM/CloudRequire.js +++ b/CloudVM/CloudRequire.js @@ -19,13 +19,13 @@ return thisObject; - function downloadBot(pCloudStorage, pProcessConfig, callBackFunction) { + function downloadBot(pCloudStorage, pFilePath, callBackFunction) { try { if (INFO_LOG === true) { logger.write("[INFO] downloadBot -> Entering function."); } - let filePath = "Bots" + "/" + bot.devTeam + "/" + bot.repo + "/" + pProcessConfig.name + "/" + "User.Bot.js"; + let filePath = "Bots" + "/" + pFilePath + "/" + "User.Bot.js"; downloadModule(filePath, onDownloaded) @@ -42,13 +42,13 @@ } } - function downloadCommons(pCloudStorage, callBackFunction) { + function downloadCommons(pCloudStorage, pFilePath, callBackFunction) { try { if (INFO_LOG === true) { logger.write("[INFO] downloadCommons -> Entering function."); } - let filePath = "Bots" + "/" + bot.devTeam + "/" + bot.repo + "/" + "Commons.js"; + let filePath = "Bots" + "/" + pFilePath + "/" + "Commons.js"; downloadModule(filePath, onDownloaded) diff --git a/CloudVM/CloudSupport.js b/CloudVM/CloudSupport.js index 691074e3b..e28f6563a 100644 --- a/CloudVM/CloudSupport.js +++ b/CloudVM/CloudSupport.js @@ -7,10 +7,6 @@ When running at the clode on NodeJS some things work diffently that at the brows */ - - - - function webRequire(pModulePath) { switch (pModulePath) { @@ -166,6 +162,3 @@ function callServer(pContentToSend, pPath, callBackFunction) { } } - - - diff --git a/CloudVM/CloudVM.js b/CloudVM/CloudVM.js index cd6f0d07a..8cb9fd3bc 100644 --- a/CloudVM/CloudVM.js +++ b/CloudVM/CloudVM.js @@ -82,7 +82,13 @@ function newCloudVM() { console.log("Bot code changes detected."); let path = "AABrowserAPI" + "/" - + "saveBotCode" + + "saveBotCode" + "/" + + window.DEV_TEAM + "/" + + "members" + "/" + + window.USER_LOGGED_IN + "/" + + window.CURRENT_BOT + "/" + + window.CURRENT_PROCESS + "/" + + "User.Bot.js" ; callServer(currentBotCode, path, onServerResponse); diff --git a/Dashboard.js b/Dashboard.js index 68692edc3..e637ab66e 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -123,7 +123,7 @@ function convertTimePeriodToName(pTimePeriod) { } let cloudVM = newCloudVM(); -let AT_BREAKPOINT = false; +window.AT_BREAKPOINT = false; const DEBUG_START_UP_DELAY = 0 //3000; // This is a waiting time in case there is a need to debug the very first steps of initialization, to be able to hit F12 on time. const INITIAL_DEFAULT_MARKET = 2; // This is the market that will be shown when loading the site for the first time. diff --git a/Server/BotsScripts.js b/Server/BotsScripts.js index 19d1225ce..517024d1d 100644 --- a/Server/BotsScripts.js +++ b/Server/BotsScripts.js @@ -1,168 +1,68 @@ exports.newBotScripts = function newBotScripts() { let thisObject = { - loadBotScripts: loadBotScripts, + getScript: getScript, initialize: initialize } - const GITHUB = require('../Server/Github'); - let github = GITHUB.newGithub(); - const STORAGE = require('../Server/Storage'); let storage = STORAGE.newStorage(); let serverConfig; let storageData; - let ecosystem; - let ecosystemObject; return thisObject; - function initialize(pEcosystem, pEcosystemObject, pServerConfig, pStorageData, callBackFunction) { + function initialize(pServerConfig, callBackFunction) { - serverConfig = pServerConfig; - storageData = pStorageData; - ecosystem = pEcosystem; - ecosystemObject = pEcosystemObject; + let storageData = new Map(); // For backwards compatibility only. Not used. - storage.initialize(storageData, serverConfig); + storage.initialize(storageData, pServerConfig); callBackFunction(); } - function loadBotScripts(callBackfunction) { + function getScript(pDevTeam, pSource, pRepo, pPath, callBackFunction) { - try { + storage.getStorageData(pDevTeam + "/" + pSource, pRepo, pPath, onDataArrived); - if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Entering function."); } + function onDataArrived(pData) { - /* - - Here we go through the webModules Array and bring them all. - - */ + try { - let modulesToBeRetrieved = 0; - let modulesRetrieved = 0; + if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Entering function."); } - for (let i = 0; i < ecosystemObject.devTeams.length; i++) { + let data; - let devTeam = ecosystemObject.devTeams[i]; + if (pData !== undefined) { - for (let j = 0; j < devTeam.bots.length; j++) { + data = pData.toString(); + data = data.trim(); // remove first byte with some encoding. - let bot = devTeam.bots[j]; + data = browserify(data); - getCommons(devTeam.codeName, bot.repo, onCommons); - - function onCommons() { - - for (let k = 0; k < bot.processes.length; k++) { - - let process = bot.processes[k]; - - modulesToBeRetrieved++; - getUserBot(devTeam.codeName, bot.repo, process.name, onUserBot); - - function onUserBot() { - - modulesRetrieved++; - - if (modulesRetrieved === modulesToBeRetrieved) { - - callBackfunction(); - } - } - } - } } + + callBackFunction(data); + } - - function getCommons(pDevTeam, pRepo, callBack) { - - let moduleName = "Commons.js"; - let key = pDevTeam + "." + pRepo; - let path = pDevTeam + "/" + pRepo; - - storage.getStorageData(pDevTeam + "/" + "bots", pRepo, moduleName, onDataArrived); - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Entering function."); } - - if (pData !== undefined) { - - let data = pData.toString(); - data = data.trim(); // remove first byte with some encoding. - - data = browserify(data); - - storageData.set(key, data); - - } - - callBack(); - - } - catch (err) { - console.log("[ERROR] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Error = " + err); - } - } + catch (err) { + console.log("[ERROR] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Error = " + err); } - - function getUserBot(pDevTeam, pRepo, pProcess, callBack) { - - let moduleName = "User.Bot.js"; - let key = pDevTeam + "." + pRepo + "." + pProcess + "/" + moduleName; - let path = pProcess + "/" + moduleName; - - storage.getStorageData(pDevTeam + "/" + "bots", pRepo, path, onDataArrived); - - function onDataArrived(pData) { - - try { - - if (CONSOLE_LOG === true) { console.log("[INFO] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Entering function."); } - - if (pData !== undefined) { - - let data = pData.toString(); - data = data.trim(); // remove first byte with some encoding. - - data = browserify(data); - - storageData.set(key, data); - - } - - callBack(); - - } - catch (err) { - console.log("[ERROR] BotScripts -> retrieveScripts -> Cloud -> onDataArrived -> Error = " + err); - } - } - } - - function browserify(pData) { - - let result = pData.substring(pData.indexOf('=') + 2); - - result = replaceAll(result, "require", "webRequire"); - result = replaceAll(result, "global", "window"); - - return result; - - function replaceAll(text, search, replacement) { - return text.replace(new RegExp(search, 'g'), replacement); - } - } - } - catch (err) { - console.log("[ERROR] BotScripts -> retrieveScripts -> Error = " + err); + } + + function browserify(pData) { + + let result = pData.substring(pData.indexOf('=') + 2); + + result = replaceAll(result, "require", "webRequire"); + result = replaceAll(result, "global", "window"); + + return result; + + function replaceAll(text, search, replacement) { + return text.replace(new RegExp(search, 'g'), replacement); } } } \ No newline at end of file diff --git a/server.js b/server.js index 2a47a0e9c..5adf0caf0 100644 --- a/server.js +++ b/server.js @@ -35,6 +35,7 @@ global.CUSTOM_FAIL_RESPONSE = { let storageData = new Map; let HTMLCloudScripts; // This are the html script tags needed to download the cloud web scripts. +let botScripts; // This module is the one which grabs user bots scrips from the storage, and browserifys them. let ecosystem; let ecosystemObject; @@ -95,19 +96,15 @@ function initialize() { function onInitialized() { const BOT_SCRIPTS = require('./Server/BotsScripts'); - let botScripts = BOT_SCRIPTS.newBotScripts(); + botScripts = BOT_SCRIPTS.newBotScripts(); - botScripts.initialize(ecosystem, ecosystemObject, serverConfig, storageData, onInitialized); + botScripts.initialize(serverConfig, onInitialized); function onInitialized() { - botScripts.loadBotScripts(onScriptsLoaded); + HTMLCloudScripts = pHTMLCloudScripts; + startHtttpServer(); - function onScriptsLoaded(){ - - HTMLCloudScripts = pHTMLCloudScripts; - startHtttpServer(); - } } } } @@ -429,7 +426,18 @@ function onBrowserRequest(request, response) { switch (requestParameters[2]) { case "saveBotCode": { - api.saveBotCode(pData, onResponse); + + let devTeam = requestParameters[3]; + let source = requestParameters[4] + "/" + requestParameters[5]; + let repo = requestParameters[6]; + let path; + + if (requestParameters[8] !== undefined) { + path = requestParameters[7] + "/" + requestParameters[8]; + } else { + path = requestParameters[7]; + } + api.saveBotCode(devTeam, source, repo, path, pData, onResponse); break; } @@ -643,33 +651,53 @@ function onBrowserRequest(request, response) { case "Bots": // This means the cloud folder. { + switch (requestParameters[3]) { - let map = storageData; + case 'bots': { - let key; + let devTeam = requestParameters[2]; + let source = requestParameters[3]; + let repo = requestParameters[4]; + let path; - if (requestParameters[5] !== undefined) { + if (requestParameters[6] !== undefined) { + path = requestParameters[5] + "/" + requestParameters[6]; + } else { + path = requestParameters[5]; + } - key = requestParameters[2] + "." + requestParameters[3] + "." + requestParameters[4] + "/" + requestParameters[5]; + botScripts.getScript(devTeam, source, repo, path, onScriptReady) - } else { + break; + } - key = requestParameters[2] + "." + requestParameters[3] + "." + requestParameters[4]; + case 'members': { + let devTeam = requestParameters[2]; + let source = requestParameters[3] + "/" + requestParameters[4]; + let repo = requestParameters[5]; + let path; + + if (requestParameters[7] !== undefined) { + path = requestParameters[6] + "/" + requestParameters[7]; + } else { + path = requestParameters[6]; + } + + botScripts.getScript(devTeam, source, repo, path, onScriptReady) + + break; + } + + default : { + if (CONSOLE_LOG === true) { console.log("[ERROR] server -> onBrowserRequest -> Bots -> Invalid Request. "); } + } } - let script = map.get(key); + function onScriptReady(pScript) { - if (script !== undefined && script !== null) { + respondWithContent(pScript, response); - respondWithContent(script, response); - - } else { - - if (CONSOLE_LOG === true) { console.log("[WARN] server -> onBrowserRequest -> readEcosystemConfig -> Script Not Found."); } - if (CONSOLE_LOG === true) { console.log("[WARN] server -> onBrowserRequest -> readEcosystemConfig -> key = " + key); } - - respondWithContent("", response); } } break; From 2a988427d23cddba0df7a9b922267b1cbe2ced0c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 3 Jun 2018 13:39:52 +0200 Subject: [PATCH 101/334] Improvements on Splash Screen --- Images/aa-logo.png | Bin 0 -> 4770 bytes SplashScreen.js | 112 +++++++++++++++++++++------------------------ 2 files changed, 53 insertions(+), 59 deletions(-) create mode 100644 Images/aa-logo.png diff --git a/Images/aa-logo.png b/Images/aa-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9701ee1c0e1858370837bc61930333be69bc4cd6 GIT binary patch literal 4770 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 CP}HCR literal 0 HcmV?d00001 diff --git a/SplashScreen.js b/SplashScreen.js index 2d8e59ca6..d9644e72e 100644 --- a/SplashScreen.js +++ b/SplashScreen.js @@ -34,11 +34,22 @@ function newSplashScreen() { let fadeOutCounter = 0; let opacity = 1; + let logo; + let canDrawLogo = false; + return thisObject; function initialize() { + logo = new Image(); + logo.onload = onImageLoad; + + function onImageLoad() { + canDrawLogo = true; + } + + logo.src = "Images/aa-logo.png"; } @@ -53,28 +64,14 @@ function newSplashScreen() { if (fadeOutCounter > 20) { return; } - opacity = opacity - 0.05; - } + if (canDrawLogo === false) { return; } + thisObject.container.frame.draw(false, false); - let label = '' + Math.trunc(stepsInitializationCounter) + ' %'; - stepsInitializationCounter = stepsInitializationCounter + 1; - - if (stepsInitializationCounter > 99) { - - splashScreenNeeded = false; - stepsInitializationCounter = 99; - } - - let fontSize = 50; - - let labelPoint = { - x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, - y: thisObject.container.frame.height / 2 + fontSize / 2 + fontSize * 0.1 + 200 - }; + /* Set the background. */ browserCanvasContext.beginPath(); @@ -85,61 +82,58 @@ function newSplashScreen() { browserCanvasContext.fill(); - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY; - browserCanvasContext.fillStyle = 'rgba(200, 200, 200, ' + opacity + ')'; + /* First the AA Logo. */ + + let imageHeight = 96; + let imageWidth = 480; + + let imagePoint = { + x: thisObject.container.frame.width * 1 / 2 - imageWidth / 2, + y: thisObject.container.frame.height * 1 / 2 - imageHeight / 2 + }; + + imagePoint = thisObject.container.frame.frameThisPoint(imagePoint); + + browserCanvasContext.drawImage(logo, imagePoint.x, imagePoint.y, imageWidth, imageHeight); + + /* Second the % of Advance. */ + + let label = '' + Math.trunc(stepsInitializationCounter) + ' %'; + stepsInitializationCounter = stepsInitializationCounter + 0.2; + + if (stepsInitializationCounter > 99) { + + splashScreenNeeded = false; + stepsInitializationCounter = 99; + } + + + let fontSize = 10; + + let labelPoint = { + x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, + y: thisObject.container.frame.height / 2 + fontSize / 2 + fontSize * 0.1 + 95 + }; + + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; + browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); let title; let titlePoint; - /* Advanced Algos Title */ - - fontSize = 100; - - title = "Advanced" - - titlePoint = { - x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO - 230, - y: thisObject.container.frame.height / 2 - fontSize * 2 + 50 - }; - - browserCanvasContext.font = fontSize + 'px Verdana'; - browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; - browserCanvasContext.fillText(title, titlePoint.x, titlePoint.y); - - title = "A" - - browserCanvasContext.fillStyle = 'rgba(255, 0, 0, ' + opacity + ')'; - browserCanvasContext.fillText(title, titlePoint.x, titlePoint.y); - - title = "Algos" - - titlePoint = { - x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO + 230, - y: thisObject.container.frame.height / 2 - fontSize * 2 + 50 - }; - - browserCanvasContext.font = fontSize + 'px Verdana'; - browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; - browserCanvasContext.fillText(title, titlePoint.x, titlePoint.y); - - title = "A" - - browserCanvasContext.fillStyle = 'rgba(255, 0, 0, ' + opacity + ')'; - browserCanvasContext.fillText(title, titlePoint.x, titlePoint.y); - /* Algo Bots Competitions Sub Title */ - fontSize = 50; + fontSize = 15; title = "Algobots Competitions Platform" titlePoint = { - x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO - 50, - y: thisObject.container.frame.height / 2 - fontSize * 2 + 150 + x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO + 20, + y: thisObject.container.frame.height / 2 - fontSize * 2 + 80 }; - browserCanvasContext.font = fontSize + 'px Verdana'; + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; browserCanvasContext.fillStyle = 'rgba(0, 0, 0, ' + opacity + ')'; browserCanvasContext.fillText(title, titlePoint.x, titlePoint.y); From 27c089d07e9384f762abfa39485d440c1d068502 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 3 Jun 2018 14:27:19 +0200 Subject: [PATCH 102/334] Positioning at Splash sceren. --- SplashScreen.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/SplashScreen.js b/SplashScreen.js index d9644e72e..80b65a9a5 100644 --- a/SplashScreen.js +++ b/SplashScreen.js @@ -86,10 +86,11 @@ function newSplashScreen() { let imageHeight = 96; let imageWidth = 480; + let yDisplacement = -50; let imagePoint = { x: thisObject.container.frame.width * 1 / 2 - imageWidth / 2, - y: thisObject.container.frame.height * 1 / 2 - imageHeight / 2 + y: thisObject.container.frame.height * 1 / 2 - imageHeight / 2 + yDisplacement }; imagePoint = thisObject.container.frame.frameThisPoint(imagePoint); @@ -99,7 +100,7 @@ function newSplashScreen() { /* Second the % of Advance. */ let label = '' + Math.trunc(stepsInitializationCounter) + ' %'; - stepsInitializationCounter = stepsInitializationCounter + 0.2; + stepsInitializationCounter = stepsInitializationCounter + 0.1; if (stepsInitializationCounter > 99) { @@ -111,8 +112,8 @@ function newSplashScreen() { let fontSize = 10; let labelPoint = { - x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, - y: thisObject.container.frame.height / 2 + fontSize / 2 + fontSize * 0.1 + 95 + x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO - 25, + y: thisObject.container.frame.height / 2 + fontSize / 2 + fontSize * 0.1 + 80 + yDisplacement }; browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; @@ -129,8 +130,8 @@ function newSplashScreen() { title = "Algobots Competitions Platform" titlePoint = { - x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO + 20, - y: thisObject.container.frame.height / 2 - fontSize * 2 + 80 + x: thisObject.container.frame.width / 2 - title.length / 2 * fontSize * FONT_ASPECT_RATIO - 20, + y: thisObject.container.frame.height / 2 - fontSize * 2 + 80 + yDisplacement }; browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY; From ec21fde0504ed8b6854ec409b55169051ab35b3d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 3 Jun 2018 14:58:10 +0200 Subject: [PATCH 103/334] Branding the grid --- ChartGrid.js | 2 +- TimelineChart.js | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ChartGrid.js b/ChartGrid.js index 3b59941a5..f4a20ee26 100644 --- a/ChartGrid.js +++ b/ChartGrid.js @@ -619,7 +619,7 @@ } browserCanvasContext.closePath(); - browserCanvasContext.strokeStyle = 'rgba(0, 37, 224, 0.' + Math.trunc(lineWidth + 1) + ')'; + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 0.' + Math.trunc(lineWidth + 1) + ')'; browserCanvasContext.lineWidth = lineWidth; diff --git a/TimelineChart.js b/TimelineChart.js index 05b891c54..9f38a9b2a 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -918,9 +918,10 @@ if (INTENSIVE_LOG === true) { logger.write("[INFO] drawBackground -> Entering function."); } - let targetLabelFontSize = 120; + let fontMaxSize = 80; + let targetLabelFontSize = fontMaxSize; let fontSizeIncrement = 12; - let currentFontSize = 120; + let currentFontSize = fontMaxSize; let market = markets.get(marketId); let label = market.assetA + " " + market.assetB; @@ -958,7 +959,7 @@ if (topPoint.y > viewPort.visibleArea.topLeft.y || bottomPoint.y < viewPort.visibleArea.bottomRight.y) { - targetLabelFontSize = 120 / 2; + targetLabelFontSize = fontMaxSize / 2; point = { x: 0, @@ -969,22 +970,22 @@ point = { x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * FONT_ASPECT_RATIO, - y: point.y + currentFontSize * FONT_ASPECT_RATIO / 2 + y: point.y + currentFontSize / 2 }; } else { - targetLabelFontSize = 120; + targetLabelFontSize = fontMaxSize; point = { x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * FONT_ASPECT_RATIO, - y: (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 2 + currentFontSize * FONT_ASPECT_RATIO / 2 + y: (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 2 + currentFontSize / 2 }; } - browserCanvasContext.font = currentFontSize + 'px ' + UI_FONT.PRIMARY; - browserCanvasContext.fillStyle = 'rgba(75, 86, 235, 0.07)'; + browserCanvasContext.font = currentFontSize + 'px ' + UI_FONT.SECONDARY; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 0.07)'; browserCanvasContext.fillText(label, point.x, point.y); } From 872a1265bcee9adb9e80a9ed9f79d8204f221af1 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 7 Jun 2018 12:28:41 +0200 Subject: [PATCH 104/334] Better dealing with errors when checking for bot code changes --- CloudVM/CloudSupport.js | 14 +++++++++----- CloudVM/CloudVM.js | 12 ++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CloudVM/CloudSupport.js b/CloudVM/CloudSupport.js index e28f6563a..e3cc40c56 100644 --- a/CloudVM/CloudSupport.js +++ b/CloudVM/CloudSupport.js @@ -11,13 +11,17 @@ function webRequire(pModulePath) { switch (pModulePath) { - case 'fs': { + case './AzureStorage': { - return newWebFS(); - } - case 'azure-storage': { + let MODULE = {}; + MODULE.newAzureStorage = newAzureStorage; + return MODULE; - return AzureStorage.Blob; + function newAzureStorage() { + + return AzureStorage.Blob; + + } } case './EventHandler': { diff --git a/CloudVM/CloudVM.js b/CloudVM/CloudVM.js index 8cb9fd3bc..7a1c582d5 100644 --- a/CloudVM/CloudVM.js +++ b/CloudVM/CloudVM.js @@ -15,6 +15,7 @@ function newCloudVM() { let root = newRoot(); let intervalHandler; let previousBotCode = ""; + let errorsCheckingForBotCodeChanges = 0; return thisObject; @@ -25,6 +26,7 @@ function newCloudVM() { if (INFO_LOG === true) { logger.write("[INFO] onBotPlayPressed -> Entering function."); } window.SHALL_BOT_STOP = false; + errorsCheckingForBotCodeChanges = 0; window.CURRENT_ENVIRONMENT = "Develop"; window.CURRENT_EXECUTION_AT = "Browser"; @@ -60,6 +62,7 @@ function newCloudVM() { if (INFO_LOG === true) { logger.write("[INFO] onBotStopPressed -> Entering function."); } window.SHALL_BOT_STOP = true; + errorsCheckingForBotCodeChanges = 0; } @@ -108,6 +111,15 @@ function newCloudVM() { } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] checkForChangesInBotCode -> err.message = " + err.message); } + errorsCheckingForBotCodeChanges++; + + if (errorsCheckingForBotCodeChanges > 3) { + + if (ERROR_LOG === true) { logger.write("[ERROR] checkForChangesInBotCode -> Giving up."); } + + clearInterval(intervalHandler); + + } } } } \ No newline at end of file From df242b1eb6bccee2da2538e818bf38ea4e534ff3 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 7 Jun 2018 13:25:58 +0200 Subject: [PATCH 105/334] Adapting to changes in AACloud --- CloudVM/CloudRequire.js | 17 +++++------------ CloudVM/CloudVM.js | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/CloudVM/CloudRequire.js b/CloudVM/CloudRequire.js index 28df7ad61..54130b120 100644 --- a/CloudVM/CloudRequire.js +++ b/CloudVM/CloudRequire.js @@ -1,17 +1,10 @@ -function newCloudRequire(BOT, DEBUG_MODULE) { +function newCloudRequire(bot, logger) { const INFO_LOG = true; const LOG_FILE_CONTENT = false; const MODULE_NAME = "Cloud Require"; - let bot = BOT; - - const logger = DEBUG_MODULE.newDebugLog(); - logger.bot = bot; - logger.fileName = MODULE_NAME; - logger.initialize(); - let thisObject = { downloadBot: downloadBot, downloadCommons: downloadCommons @@ -23,7 +16,7 @@ try { - if (INFO_LOG === true) { logger.write("[INFO] downloadBot -> Entering function."); } + if (INFO_LOG === true) { logger.write(MODULE_NAME + "[INFO] downloadBot -> Entering function."); } let filePath = "Bots" + "/" + pFilePath + "/" + "User.Bot.js"; @@ -37,7 +30,7 @@ } } catch (err) { - logger.write("[ERROR] downloadBot -> err = " + err.message); + logger.write(MODULE_NAME + "[ERROR] downloadBot -> err = " + err.message); callBackFunction(window.DEFAULT_FAIL_RESPONSE); } } @@ -46,7 +39,7 @@ try { - if (INFO_LOG === true) { logger.write("[INFO] downloadCommons -> Entering function."); } + if (INFO_LOG === true) { logger.write(MODULE_NAME + "[INFO] downloadCommons -> Entering function."); } let filePath = "Bots" + "/" + pFilePath + "/" + "Commons.js"; @@ -60,7 +53,7 @@ } } catch (err) { - logger.write("[ERROR] downloadCommons -> err = " + err.message); + logger.write(MODULE_NAME + "[ERROR] downloadCommons -> err = " + err.message); callBackFunction(window.DEFAULT_FAIL_RESPONSE); } } diff --git a/CloudVM/CloudVM.js b/CloudVM/CloudVM.js index 7a1c582d5..48c919119 100644 --- a/CloudVM/CloudVM.js +++ b/CloudVM/CloudVM.js @@ -113,7 +113,7 @@ function newCloudVM() { if (ERROR_LOG === true) { logger.write("[ERROR] checkForChangesInBotCode -> err.message = " + err.message); } errorsCheckingForBotCodeChanges++; - if (errorsCheckingForBotCodeChanges > 3) { + if (errorsCheckingForBotCodeChanges > 2) { if (ERROR_LOG === true) { logger.write("[ERROR] checkForChangesInBotCode -> Giving up."); } From 61fba34f1ca943547985e0854016ec7a87e84e83 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 8 Jun 2018 00:39:15 +0200 Subject: [PATCH 106/334] New Brand Colors Added --- Dashboard.js | 8 +++++++- FloatingSpace/Note.js | 4 ++-- Frame.js | 12 ++++++------ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Dashboard.js b/Dashboard.js index e637ab66e..f92534ee6 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -6,7 +6,13 @@ UI_COLOR = { DARK: "48, 48, 54", LIGHT: "234, 226, 222", - WHITE: "255, 255, 255" + WHITE: "255, 255, 255", + GOLDEN_ORANGE: "240, 162, 2", + RUSTED_RED: "204, 88, 53", + GREEN: "188, 214, 67", + RED: "223, 70, 60", + PATINATED_TURQUOISE: "27,153,139", + TITANIUM_YELLOW: "244,228,9" }; /* User Interface Fonts */ diff --git a/FloatingSpace/Note.js b/FloatingSpace/Note.js index 40081e88b..98fec7393 100644 --- a/FloatingSpace/Note.js +++ b/FloatingSpace/Note.js @@ -127,7 +127,7 @@ function newNote() { browserCanvasContext.fill(); browserCanvasContext.lineWidth = 0.1; - browserCanvasContext.strokeStyle = 'rgba(54, 54, 54, 0.75)'; + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 0.75)'; browserCanvasContext.stroke(); /* We paint the title bar now */ @@ -146,7 +146,7 @@ function newNote() { browserCanvasContext.fill(); browserCanvasContext.lineWidth = 0.1; - browserCanvasContext.strokeStyle = 'rgba(12, 64, 148, 0.75)'; + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 0.75)'; browserCanvasContext.stroke(); } diff --git a/Frame.js b/Frame.js index b46cbc172..d2be84a3c 100644 --- a/Frame.js +++ b/Frame.js @@ -382,14 +382,14 @@ function newFrame() { browserCanvasContext.fill(); browserCanvasContext.lineWidth = 0.1; - browserCanvasContext.strokeStyle = 'rgba(54, 54, 54, 0.75)'; + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 0.75)'; browserCanvasContext.stroke(); /* We paint the title bar now */ - - browserCanvasContext.fillStyle = 'rgba(37, 107, 219, 0.75)'; + + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 0.75)'; browserCanvasContext.beginPath(); browserCanvasContext.moveTo(titleBarPoint1.x, titleBarPoint1.y); @@ -401,9 +401,9 @@ function newFrame() { browserCanvasContext.closePath(); browserCanvasContext.fill(); - + browserCanvasContext.lineWidth = 0.1; - browserCanvasContext.strokeStyle = 'rgba(12, 64, 148, 0.75)'; + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 0.75)'; browserCanvasContext.stroke(); /* print the title */ @@ -425,7 +425,7 @@ function newFrame() { labelPoint = frame.frameThisPoint(labelPoint); - browserCanvasContext.fillStyle = 'rgba(240, 240, 240, 1)'; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)'; browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); } From 88f49a90e44c0a8b3943753f8799fc3263156694 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 8 Jun 2018 00:53:43 +0200 Subject: [PATCH 107/334] Brand Colors Added --- Dashboard.js | 3 ++- Frame.js | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Dashboard.js b/Dashboard.js index f92534ee6..699685762 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -12,7 +12,8 @@ UI_COLOR = { GREEN: "188, 214, 67", RED: "223, 70, 60", PATINATED_TURQUOISE: "27,153,139", - TITANIUM_YELLOW: "244,228,9" + TITANIUM_YELLOW: "244,228,9", + MANGANESE_PURPLE: "91,80,122" }; /* User Interface Fonts */ diff --git a/Frame.js b/Frame.js index d2be84a3c..3d52d5435 100644 --- a/Frame.js +++ b/Frame.js @@ -382,14 +382,14 @@ function newFrame() { browserCanvasContext.fill(); browserCanvasContext.lineWidth = 0.1; - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 0.75)'; + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.MANGANESE_PURPLE + ', 0.75)'; browserCanvasContext.stroke(); /* We paint the title bar now */ - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 0.75)'; + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 0.75)'; browserCanvasContext.beginPath(); browserCanvasContext.moveTo(titleBarPoint1.x, titleBarPoint1.y); @@ -403,7 +403,7 @@ function newFrame() { browserCanvasContext.fill(); browserCanvasContext.lineWidth = 0.1; - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 0.75)'; + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.MANGANESE_PURPLE + ', 0.75)'; browserCanvasContext.stroke(); /* print the title */ From f473b16d72902c72dd350eb35c58861ff66aa66e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 11 Jun 2018 09:16:22 +0200 Subject: [PATCH 108/334] Exchange API Keys at web server only --- CloudVM/CloudVM.js | 13 +++- CloudVM/PoloniexAPIClient.js | 23 +++---- Dashboard.js | 1 + Ecosystem.js | 7 --- Server/Permissions.js | 19 ++---- SplashScreen.js | 4 +- server.js | 115 +++++++++++++++++++++-------------- 7 files changed, 97 insertions(+), 85 deletions(-) diff --git a/CloudVM/CloudVM.js b/CloudVM/CloudVM.js index 48c919119..f5cb0c148 100644 --- a/CloudVM/CloudVM.js +++ b/CloudVM/CloudVM.js @@ -31,7 +31,18 @@ function newCloudVM() { window.CURRENT_ENVIRONMENT = "Develop"; window.CURRENT_EXECUTION_AT = "Browser"; window.STORAGE_PERMISSIONS = ecosystem.getStoragePermissions(); - window.EXCHANGE_KEYS = ecosystem.getExchangeKeys(); + + /* + When running at the browser, the AACloud VM will look for this data, in this case it does not contain any key or secret, since the browser only know the + session token the user received when he logged in. + */ + + window.EXCHANGE_KEYS = { + Poloniex: { + Key: "", + Secret: "" + } + } root.initialize(pUI_COMMANDS, onInitialized); diff --git a/CloudVM/PoloniexAPIClient.js b/CloudVM/PoloniexAPIClient.js index d86c7f6a0..6b33e0267 100644 --- a/CloudVM/PoloniexAPIClient.js +++ b/CloudVM/PoloniexAPIClient.js @@ -1,10 +1,9 @@ -function newPoloniexAPIClient(pKey, pSecret) { +function newPoloniexAPIClient() { const INFO_LOG = true; const LOG_FILE_CONTENT = false; - let key = pKey; - let secret = pSecret; + window.SESSION_TOKEN = window.localStorage.getItem("sessionToken"); let thisObject = { API: { @@ -81,8 +80,7 @@ let path = "PoloniexAPIClient" + "/" + "returnOpenOrders" + "/" - + key + "/" - + secret + "/" + + window.SESSION_TOKEN + "/" + pMarketAssetA + "/" + pMarketAssetB ; @@ -101,8 +99,7 @@ let path = "PoloniexAPIClient" + "/" + "returnOrderTrades" + "/" - + key + "/" - + secret + "/" + + window.SESSION_TOKEN + "/" + pPositionId ; @@ -120,8 +117,7 @@ let path = "PoloniexAPIClient" + "/" + "buy" + "/" - + key + "/" - + secret + "/" + + window.SESSION_TOKEN + "/" + pMarketAssetA + "/" + pMarketAssetB + "/" + pRate + "/" @@ -142,8 +138,7 @@ let path = "PoloniexAPIClient" + "/" + "sell" + "/" - + key + "/" - + secret + "/" + + window.SESSION_TOKEN + "/" + pMarketAssetA + "/" + pMarketAssetB + "/" + pRate + "/" @@ -164,8 +159,7 @@ let path = "PoloniexAPIClient" + "/" + "moveOrder" + "/" - + key + "/" - + secret + "/" + + window.SESSION_TOKEN + "/" + pPositionId + "/" + pNewRate + "/" + pPositionAmountB @@ -185,8 +179,7 @@ let path = "PoloniexAPIClient" + "/" + "returnTicker" + "/" - + key + "/" - + secret + + window.SESSION_TOKEN ; callServer(undefined, path + "/NO-LOG", onServerResponse); diff --git a/Dashboard.js b/Dashboard.js index 699685762..5d378d686 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -129,6 +129,7 @@ function convertTimePeriodToName(pTimePeriod) { } } + let cloudVM = newCloudVM(); window.AT_BREAKPOINT = false; diff --git a/Ecosystem.js b/Ecosystem.js index 19e8eaaba..3685fd45a 100644 --- a/Ecosystem.js +++ b/Ecosystem.js @@ -13,7 +13,6 @@ function newEcosystem() { getPlotter: getPlotter, getPlotterModule: getPlotterModule, getStoragePermissions: getStoragePermissions, - getExchangeKeys: getExchangeKeys, initialize: initialize } @@ -32,12 +31,6 @@ function newEcosystem() { } - function getExchangeKeys() { - - return ECOSYSTEM.EXCHANGE_KEYS; - - } - function getHost(pHostCodeName) { for (let i = 0; i < ECOSYSTEM.hosts.length; i++) { diff --git a/Server/Permissions.js b/Server/Permissions.js index c7c0c2e25..d9c18ef55 100644 --- a/Server/Permissions.js +++ b/Server/Permissions.js @@ -19,7 +19,7 @@ filePath = '../' + 'Connection-Strings' + '/' + 'Storage.Permissions.json'; pEcosystemObject.STORAGE_PERMISSIONS = JSON.parse(fs.readFileSync(filePath, 'utf8')); - readExchangeAPIKey(); + readPermissions(); } catch (err) { console.log("[ERROR] readStoragePermissions -> err = " + err.message); @@ -27,26 +27,19 @@ } } - function readExchangeAPIKey() { + function readPermissions() { try { let fs = require('fs'); - let filePath = '../' + 'Exchange-Keys' + '/' + 'Secret.Keys' + '.json'; + let filePath = '../' + 'Permissions' + '/' + 'Secrets' + '.json'; - pEcosystemObject.EXCHANGE_KEYS = JSON.parse(fs.readFileSync(filePath, 'utf8')); - callBackFunction(); + let permissioins = JSON.parse(fs.readFileSync(filePath, 'utf8')); + callBackFunction(permissioins); } catch (err) { - console.log("[ERROR] readExchangeAPIKey -> err = " + err.message); + console.log("[ERROR] readPermissions -> err = " + err.message); console.log("[HINT] You need to have a file at this path -> " + filePath); - pEcosystemObject.EXCHANGE_KEYS = { - Poloniex: { - Key: "", - Secret: "" - } - } - callBackFunction(); } } diff --git a/SplashScreen.js b/SplashScreen.js index 80b65a9a5..34d7cc650 100644 --- a/SplashScreen.js +++ b/SplashScreen.js @@ -67,8 +67,6 @@ function newSplashScreen() { opacity = opacity - 0.05; } - if (canDrawLogo === false) { return; } - thisObject.container.frame.draw(false, false); /* Set the background. */ @@ -82,6 +80,8 @@ function newSplashScreen() { browserCanvasContext.fill(); + if (canDrawLogo === false) { return; } + /* First the AA Logo. */ let imageHeight = 96; diff --git a/server.js b/server.js index 5adf0caf0..59cd0c015 100644 --- a/server.js +++ b/server.js @@ -49,6 +49,8 @@ let isHttpServerStarted = false; const STORAGE = require('./Server/Storage'); let storage = STORAGE.newStorage(); +let authenticatedSession; // We do not send these keys to the browser, instead they are kept here for when they are needed. + initialize(); function initialize() { @@ -93,7 +95,9 @@ function initialize() { permissions.initialize(ecosystemObject, onInitialized); - function onInitialized() { + function onInitialized(pPermissionsSecrets) { + + authenticatedSession = pPermissionsSecrets; const BOT_SCRIPTS = require('./Server/BotsScripts'); botScripts = BOT_SCRIPTS.newBotScripts(); @@ -575,55 +579,72 @@ function onBrowserRequest(request, response) { case "PoloniexAPIClient": // This is trying to access this library functionality from the broser. { - const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient'); - let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(requestParameters[3], requestParameters[4]); - switch (requestParameters[2]) { + /* We are going to let access the exchange only to authenticated users, that measn that we need the a valid session token. */ - case "returnOpenOrders": { - poloniexApiClient.API.returnOpenOrders(requestParameters[5], requestParameters[6], onExchangeResponse); - break; + let sessionToken = requestParameters[3]; + + for (let i = 0; i < authenticatedSession.length; i++) { + + let session = authenticatedSession[i]; + + if (session.sessionToken === sessionToken) { + + let exchangeKey = session.exchangeKeys[0].key; // 0 because we only deal with one exchange for now. + let exchangeSecret = session.exchangeKeys[0].secret; + + const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient'); + let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(exchangeKey, exchangeSecret); + + switch (requestParameters[2]) { + + case "returnOpenOrders": { + poloniexApiClient.API.returnOpenOrders(requestParameters[4], requestParameters[5], onExchangeResponse); + break; + } + + case "returnOrderTrades": { + poloniexApiClient.API.returnOrderTrades(requestParameters[4], onExchangeResponse); + break; + } + + case "buy": { + poloniexApiClient.API.buy(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse); + break; + } + + case "sell": { + poloniexApiClient.API.sell(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse); + break; + } + + case "moveOrder": { + poloniexApiClient.API.moveOrder(requestParameters[4], requestParameters[5], requestParameters[6], onExchangeResponse); + break; + } + + case "returnTicker": { + poloniexApiClient.API.returnTicker(onExchangeResponse); + break; + } + } + + function onExchangeResponse(err, exchangeResponse) { + + /* Delete these secrets before they get logged. */ + + requestParameters[3] = ""; + + let serverResponse = { + err: err, + exchangeResponse: exchangeResponse + } + + respondWithContent(JSON.stringify(serverResponse), response); + } + + return; } - - case "returnOrderTrades": { - poloniexApiClient.API.returnOrderTrades(requestParameters[5], onExchangeResponse); - break; - } - - case "buy": { - poloniexApiClient.API.buy(requestParameters[5], requestParameters[6], requestParameters[7], requestParameters[8], onExchangeResponse); - break; - } - - case "sell": { - poloniexApiClient.API.sell(requestParameters[5], requestParameters[6], requestParameters[7], requestParameters[8], onExchangeResponse); - break; - } - - case "moveOrder": { - poloniexApiClient.API.moveOrder(requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse); - break; - } - - case "returnTicker": { - poloniexApiClient.API.returnTicker(onExchangeResponse); - break; - } - } - - function onExchangeResponse(err, exchangeResponse) { - - /* Delete these secrets before they get logged. */ - - requestParameters[3] = ""; - requestParameters[4] = ""; - - let serverResponse = { - err: err, - exchangeResponse: exchangeResponse - } - - respondWithContent(JSON.stringify(serverResponse), response); } } break; From 4e134252071f1d8248c0507c62c9271a645a0e5a Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 11 Jun 2018 13:18:30 +0200 Subject: [PATCH 109/334] Bitcoin Background Added --- Images/bitcoin-logo-background.png | Bin 0 -> 16957 bytes Images/bitcoin-logo.png | Bin 0 -> 88034 bytes TimelineChart.js | 103 +++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 Images/bitcoin-logo-background.png create mode 100644 Images/bitcoin-logo.png diff --git a/Images/bitcoin-logo-background.png b/Images/bitcoin-logo-background.png new file mode 100644 index 0000000000000000000000000000000000000000..1627225c4d9b857ded2fa38d15e57280b996d6dc GIT binary patch literal 16957 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 CaJIz& literal 0 HcmV?d00001 diff --git a/TimelineChart.js b/TimelineChart.js index 9f38a9b2a..352c90076 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -42,6 +42,10 @@ let productsPanel; + /* Background */ + let logo; + let canDrawLogo = false; + return thisObject; function initialize(exchange, market, pProductsPanel, callBackFunction) { @@ -50,6 +54,18 @@ if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } + /* We load the logo we will need for the background. */ + + logo = new Image(); + + logo.onload = onImageLoad; + + function onImageLoad() { + canDrawLogo = true; + } + + logo.src = "Images/bitcoin-logo-background.png"; + /* Remember the Products Panel */ productsPanel = pProductsPanel; @@ -918,6 +934,93 @@ if (INTENSIVE_LOG === true) { logger.write("[INFO] drawBackground -> Entering function."); } + if (canDrawLogo === false) { return; } + + let backgroundLogoPoint1; + let backgroundLogoPoint2; + + let imageHeight = 84; + let imageWidth = 300; + + let point1 = { + x: viewPort.visibleArea.topLeft.x, + y: viewPort.visibleArea.topLeft.y + }; + + backgroundLogoPoint1 = { + x: getDateFromPoint(point1, thisObject.container, timeLineCoordinateSystem).valueOf(), + y: getRateFromPoint(point1, thisObject.container, timeLineCoordinateSystem) + }; + + let point2 = { + x: viewPort.visibleArea.topLeft.x + imageWidth * 2, + y: viewPort.visibleArea.topLeft.y + }; + + backgroundLogoPoint2 = { + x: getDateFromPoint(point2, thisObject.container, timeLineCoordinateSystem).valueOf(), + y: getRateFromPoint(point2, thisObject.container, timeLineCoordinateSystem) + }; + + let currentCorner = { + x: getDateFromPoint(viewPort.visibleArea.topLeft, thisObject.container, timeLineCoordinateSystem).valueOf(), + y: getRateFromPoint(viewPort.visibleArea.topLeft, thisObject.container, timeLineCoordinateSystem) + }; + + currentCorner.x = Math.trunc(currentCorner.x / (backgroundLogoPoint2.x - backgroundLogoPoint1.x)) * (backgroundLogoPoint2.x - backgroundLogoPoint1.x); + + let rowHight = (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 4.5; + + let offSet = 0; + + for (let j = 0; j < 5; j++) { + + if (offSet === 0) { + + offSet = -imageWidth; + + } else { + offSet = 0; + } + + for (let i = 0; i < 6; i++) { + + imagePoint = timeLineCoordinateSystem.transformThisPoint(currentCorner); + imagePoint = transformThisPoint(imagePoint, thisObject.container); + + browserCanvasContext.drawImage(logo, imagePoint.x + i * imageWidth * 2 + offSet, imagePoint.y + j * rowHight, imageWidth, imageHeight); + + } + } + + /* We will paint some transparent background here. */ + + let opacity = "0.9"; + + let fromPoint = { + x: 0, + y: 0 + }; + + let toPoint = { + x: 0, + y: thisObject.container.frame.height + }; + + fromPoint = transformThisPoint(fromPoint, thisObject.container); + toPoint = transformThisPoint(toPoint, thisObject.container); + + browserCanvasContext.beginPath(); + + browserCanvasContext.rect(viewPort.visibleArea.topLeft.x, fromPoint.y, viewPort.visibleArea.topRight.x - viewPort.visibleArea.topLeft.x, toPoint.y - fromPoint.y); + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')'; + + browserCanvasContext.closePath(); + + browserCanvasContext.fill(); + + /* Finally the name of the market. */ + let fontMaxSize = 80; let targetLabelFontSize = fontMaxSize; let fontSizeIncrement = 12; From 5b5f674d42275c32777545a4e40c75e1fdf95386 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 11 Jun 2018 13:46:06 +0200 Subject: [PATCH 110/334] Scales background introduced --- ChartGrid.js | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/ChartGrid.js b/ChartGrid.js index f4a20ee26..1c7e0284f 100644 --- a/ChartGrid.js +++ b/ChartGrid.js @@ -8,6 +8,9 @@ function draw(container, timeLineCoordinateSystem) { + rightScaleBackground(); + leftScaleBackground(); + let periods = []; let boxes = []; let labels = []; @@ -493,7 +496,9 @@ rightScale(); leftScale(); - function rightScale() { + function rightScale() { + + /* And now the scale. */ let fontSize = 10; @@ -672,5 +677,43 @@ browserCanvasContext.closePath(); browserCanvasContext.fill(); } + + function rightScaleBackground() { + + const RIGHT_MARGIN = 50; + + /* We will paint some transparent background here. */ + + let opacity = "0.95"; + + browserCanvasContext.beginPath(); + + browserCanvasContext.rect(viewPort.visibleArea.topRight.x, viewPort.visibleArea.topRight.y, RIGHT_MARGIN, viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topRight.y); + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')'; + + browserCanvasContext.closePath(); + + browserCanvasContext.fill(); + + } + + function leftScaleBackground() { + + const LEFT_MARGIN = 50; + + /* We will paint some transparent background here. */ + + let opacity = "0.95"; + + browserCanvasContext.beginPath(); + + browserCanvasContext.rect(0, viewPort.visibleArea.topRight.y, LEFT_MARGIN, viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topRight.y); + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')'; + + browserCanvasContext.closePath(); + + browserCanvasContext.fill(); + + } } } From 800b0cfd17b47ea5836609713dbb8b491a48869d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 12 Jun 2018 14:45:38 +0200 Subject: [PATCH 111/334] BUG with loading Commons --- Server/Storage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server/Storage.js b/Server/Storage.js index ab5524872..52485b519 100644 --- a/Server/Storage.js +++ b/Server/Storage.js @@ -80,7 +80,7 @@ if (CONSOLE_LOG === true) { console.log("[ERROR] Storage -> getStorageData -> onFileReceived -> err = " + JSON.stringify(err)); } if (CONSOLE_LOG === true) { console.log("[ERROR] Storage -> getStorageData -> onFileReceived -> Returning an empty JSON object string. "); } - callBackFunction("{}"); + callBackFunction(""); return; } From 108a63753f453f9a6b987cf9c56161e04cfcbdce Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 12 Jun 2018 15:10:56 +0200 Subject: [PATCH 112/334] 2 logos added to background --- Images/tether-logo-background.png | Bin 0 -> 13384 bytes Images/tether-logo.png | Bin 0 -> 125244 bytes TimelineChart.js | 41 +++++++++++++++++++++++------- 3 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 Images/tether-logo-background.png create mode 100644 Images/tether-logo.png diff --git a/Images/tether-logo-background.png b/Images/tether-logo-background.png new file mode 100644 index 0000000000000000000000000000000000000000..db90501a42028404f0309b263768e261364069d3 GIT binary patch literal 13384 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 RU;zifD9ETt*Grm){2%c~n~VSe literal 0 HcmV?d00001 diff --git a/Images/tether-logo.png b/Images/tether-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7f8fc88f775acdbf8e829b56de4fda620236502f GIT binary patch literal 125244 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 =tpfsv-+`grc1HLw)!uMM^l7IQ@`DO_A! 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 XEDlSM++r?f4CH8k#g1z0``dp27yNtp literal 0 HcmV?d00001 diff --git a/TimelineChart.js b/TimelineChart.js index 352c90076..e5ca7d103 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -43,8 +43,10 @@ let productsPanel; /* Background */ - let logo; - let canDrawLogo = false; + let logoAssetA; + let logoAssetB; + let canDrawLogoA = false; + let canDrawLogoB = false; return thisObject; @@ -54,17 +56,25 @@ if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } - /* We load the logo we will need for the background. */ + /* We load the logow we will need for the background. */ - logo = new Image(); + logoA = new Image(); + logoB = new Image(); - logo.onload = onImageLoad; + logoA.onload = onImageALoaded; - function onImageLoad() { - canDrawLogo = true; + function onImageALoaded() { + canDrawLogoA = true; } - logo.src = "Images/bitcoin-logo-background.png"; + logoB.onload = onImageBLoaded; + + function onImageBLoaded() { + canDrawLogoB = true; + } + + logoA.src = "Images/tether-logo-background.png"; + logoB.src = "Images/bitcoin-logo-background.png"; /* Remember the Products Panel */ @@ -934,7 +944,7 @@ if (INTENSIVE_LOG === true) { logger.write("[INFO] drawBackground -> Entering function."); } - if (canDrawLogo === false) { return; } + if (canDrawLogoA === false || canDrawLogoB === false) { return; } let backgroundLogoPoint1; let backgroundLogoPoint2; @@ -972,6 +982,7 @@ let rowHight = (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 4.5; let offSet = 0; + let alternateLogo = "A"; for (let j = 0; j < 5; j++) { @@ -985,6 +996,16 @@ for (let i = 0; i < 6; i++) { + let logo; + + if (alternateLogo === "A") { + logo = logoA; + alternateLogo = "B"; + } else { + logo = logoB; + alternateLogo = "A"; + } + imagePoint = timeLineCoordinateSystem.transformThisPoint(currentCorner); imagePoint = transformThisPoint(imagePoint, thisObject.container); @@ -1021,6 +1042,8 @@ /* Finally the name of the market. */ + return; + let fontMaxSize = 80; let targetLabelFontSize = fontMaxSize; let fontSizeIncrement = 12; From 937c1c6e6d6d7c511b49628f2556af895cacee49 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 12 Jun 2018 20:45:41 +0200 Subject: [PATCH 113/334] Chart Background Fixed --- TimelineChart.js | 115 +++++++++++------------------------------------ 1 file changed, 27 insertions(+), 88 deletions(-) diff --git a/TimelineChart.js b/TimelineChart.js index e5ca7d103..bf7b94ca6 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -944,7 +944,7 @@ if (INTENSIVE_LOG === true) { logger.write("[INFO] drawBackground -> Entering function."); } - if (canDrawLogoA === false || canDrawLogoB === false) { return; } + if (canDrawLogoA === false || canDrawLogoB === false) { return; } let backgroundLogoPoint1; let backgroundLogoPoint2; @@ -963,7 +963,7 @@ }; let point2 = { - x: viewPort.visibleArea.topLeft.x + imageWidth * 2, + x: viewPort.visibleArea.topLeft.x + imageWidth * 4, y: viewPort.visibleArea.topLeft.y }; @@ -981,8 +981,11 @@ let rowHight = (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 4.5; + imagePoint = timeLineCoordinateSystem.transformThisPoint(currentCorner); + imagePoint = transformThisPoint(imagePoint, thisObject.container); + let offSet = 0; - let alternateLogo = "A"; + for (let j = 0; j < 5; j++) { @@ -994,20 +997,30 @@ offSet = 0; } - for (let i = 0; i < 6; i++) { + for (let i = 1; i < 6; i = i + 2) { - let logo; + let logo = logoA; - if (alternateLogo === "A") { - logo = logoA; - alternateLogo = "B"; - } else { - logo = logoB; - alternateLogo = "A"; - } + browserCanvasContext.drawImage(logo, imagePoint.x + i * imageWidth * 2 + offSet, imagePoint.y + j * rowHight, imageWidth, imageHeight); - imagePoint = timeLineCoordinateSystem.transformThisPoint(currentCorner); - imagePoint = transformThisPoint(imagePoint, thisObject.container); + } + } + + offSet = 0; + + for (let j = 0; j < 5; j++) { + + if (offSet === 0) { + + offSet = -imageWidth; + + } else { + offSet = 0; + } + + for (let i = 0; i < 6; i = i + 2) { + + let logo = logoB; browserCanvasContext.drawImage(logo, imagePoint.x + i * imageWidth * 2 + offSet, imagePoint.y + j * rowHight, imageWidth, imageHeight); @@ -1040,80 +1053,6 @@ browserCanvasContext.fill(); - /* Finally the name of the market. */ - - return; - - let fontMaxSize = 80; - let targetLabelFontSize = fontMaxSize; - let fontSizeIncrement = 12; - let currentFontSize = fontMaxSize; - - let market = markets.get(marketId); - let label = market.assetA + " " + market.assetB; - - //label = '' + level; // Math.trunc(timePeriod / 1000 / 60); - - if (tooTiny() === true ) { - return; - } - - let topPoint = { - x: 0, - y: 0 - }; - - let bottomPoint = { - x: 0, - y: thisObject.container.frame.height - }; - - topPoint = transformThisPoint(topPoint, thisObject.container); - bottomPoint = transformThisPoint(bottomPoint, thisObject.container); - - /* We want the label of the market to be always centered in the middle of the screen, unless the upper or lower border of the frame is visible on the screen */ - - let point; - - if (targetLabelFontSize !== currentFontSize) { - if (targetLabelFontSize > currentFontSize) { - currentFontSize = currentFontSize + fontSizeIncrement; - } else { - currentFontSize = currentFontSize - fontSizeIncrement; - } - } - - if (topPoint.y > viewPort.visibleArea.topLeft.y || bottomPoint.y < viewPort.visibleArea.bottomRight.y) { - - targetLabelFontSize = fontMaxSize / 2; - - point = { - x: 0, - y: thisObject.container.frame.height / 2 - }; - - point = transformThisPoint(point, thisObject.container); - - point = { - x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * FONT_ASPECT_RATIO, - y: point.y + currentFontSize / 2 - }; - - } else { - - targetLabelFontSize = fontMaxSize; - - point = { - x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.bottomLeft.x) / 2 - label.length / 2 * currentFontSize * FONT_ASPECT_RATIO, - y: (viewPort.visibleArea.bottomLeft.y - viewPort.visibleArea.topLeft.y) / 2 + currentFontSize / 2 - }; - - } - - browserCanvasContext.font = currentFontSize + 'px ' + UI_FONT.SECONDARY; - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 0.07)'; - browserCanvasContext.fillText(label, point.x, point.y); - } function moveViewPortToCurrentDatetime() { From 29a4bb7bca6dc2d4a2ec0ad64b6c6a4578e28d66 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 13 Jun 2018 06:02:23 +0200 Subject: [PATCH 114/334] Chart Background enhaced --- Images/aa-logo-background.png | Bin 0 -> 5518 bytes Images/poloniex-logo-background.png | Bin 0 -> 10703 bytes Images/poloniex-logo.png | Bin 0 -> 18237 bytes TimelineChart.js | 74 +++++++++++++++++++++++++--- 4 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 Images/aa-logo-background.png create mode 100644 Images/poloniex-logo-background.png create mode 100644 Images/poloniex-logo.png diff --git a/Images/aa-logo-background.png b/Images/aa-logo-background.png new file mode 100644 index 0000000000000000000000000000000000000000..cb84e7a21ebf7ecda25456bfd6c875186be02490 GIT binary patch literal 5518 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 literal 0 HcmV?d00001 diff --git a/Images/poloniex-logo-background.png b/Images/poloniex-logo-background.png new file mode 100644 index 0000000000000000000000000000000000000000..b589e405f112d7ad52c89dee993d072f98935e93 GIT binary patch literal 10703 zcmb_?Ra6{J)a?)m?mD=K!5Q4$9YSz-2^t^}TnC3Bfj|fz+!EY%uwWSo?yiFd8{qQ& z>%QEF`}Wsb-KQS9q)T?~v+KlaYbxPjQeXlA02~!%d0hYiiQ^@&hmQL477oC4eKDxk zYD)4i_9flPwTHYI3=d_a4=+~ve;&mV7fAqs6-Py0M$d2YBW8uzSMr?-8l&#t!%sr(1ibDRx`FUG6d1nW4xB1 z5OF{S_VI{(Y->Jz^lT4kb8tKSP6KuCe#ogshnc-A)yx(3Ih-kH>xsl5dZV7jW7YS+ zmWk~`wo14b!1IgEdQ%p(Ta`Zr6oiNvddM7BR4l520&K1_HQpBCN(k?R4@)# zil0QY;EBnX?*(qPPs`I83S)f}WY?v}Ef&qKGvTZ=;lO}7rze|oU&`XhsK`pEPMzZA z4<1Db0p+z*`EUDst#Hm+1~DMBm^p)~JdX+B0Y;~h^|a5DI%!%^AP_64fb8-Hwb02r zA&i%_*_0*fIURZ(1O*Bw9VxmDKzuq|U)LVb4>sQ+cMcf5Y99>u&Lk3{5kj@Iv+@i6 zo^s;ZKYIOpDh;IIYC@T0+6v9<2u3b-pILW)OCS#wNM|e+&>(YpjuV2C6$poZwO*EQ3QKMlkwG$FI zr3l{WwkBVyPKr&fYaBfR!2(A7P;L+dNF@arwV1Vw9yZRv&RIGhO_fa9e{snpE`?`< z^?;?YVB`VZ#seI8`h9&~Unc;Pqa`4HOyV4zp^u1?U$U6{8{PeW5&9sn^R@}j#oZrS z7`AeFcRY^~4Ey>a+e?+a|9C^LKHpou89}L)w=+j8g~9HCw5dBQfrMm796yug?|@^f0!?5e3AuOs|vQgsX6j_q4t{uasF>UB*aiP+{_h2sHrzohHh+85glUbIIx z%*>w?eEw-)OXh+{tzZ_Q1RqCWTUycqOmW37#LE$`a&h%l?-O{MJOEW+ZizGH$u&)D zp%Ap>Gn0wjq3a*^xAFv$_%Detdj@@)SdUbJ67a26C!*S6vVYWb_}uR{Rsp%bBaq__ z9vA5qs(t%fvX4^omZ}YrFbPs=0{z?;RAOsvDhD$j91Rn4uKPEo6TEfst7UNp+nom} z6tex(_6-=|;No2W7|2{j1>tCp=cYA`vD<=LA96B>kGaj290j^kuP%h(qsY%4;xos^ zUta@Px~2ZS{f2Q~Ft|7LfR>y;4mY6TDQHThG>pMeKyD8TEIVY=hfCy(IK`$$zE7sa zQdRPPI3Bom?&#bDPzi3SN|3+QWOe7CC0dLENZIx7IjP%f9fx3_)1)MZMJM?_E$paa zU%MLIJ|cBoPXr(ga+-Rqdw8q>z!Jah-VEhyzqTNnei^KxUR7l{=MuWKbPwP*f`MyR zXkFHfT2kUuxCPjXs!QTSMauV7>#{P^JiOZXYvbLWAElg4mMrP1gp+!po-2Di5o#$O zl^FB{C1y*DammS4{d1+0mR1MKPY)j)(2@E01jg#|UttZEvjuYv9IeV%PA1O=++5be zm*bDd$Jf!3hCE00WvSE}&IlQoo9>%@1A`Gvf_Wkk5yt3qt;z57*khBk91)Btq!C{B z^~N6S7bJnc$0*%DtpjECNyC;|^!r%xbd6jp|B=z7kTN9Wyp!~#5+=dvA$Y~E)Nsi{ zE?*=3Ln9JjTpKJi|JFZt&Fi1|`$$;HkahifJW;8qizmVJdU34hWk~-IPQ;fJF{?&H z%Yot_g)tYNHuc*{uftOV2b8&SsyzevRCJzEKcl(*nu{lEI_=?>x=(k%_~b+R4z?JV z7gCq>+)de>UsG*HgFsms)l#%hak@g4?+94O@9Msnc)D#oT2yzq?>HX!Nd1A!9o*<9 z@w_xCwEjsg{`~>LANI!)fCm*Mlxbs&apA6|(X+#Ty8y{MGoZ-fM}vIlQRytM6Mcmw-u|Taw1Ny_K;E~% zE{fXnxL3ppKHp#weitN{0rj&>#1AK$b6f93hWOiWRiP1aeBR3@ttYAmp?cXFIaB0NEYbm8^62ViXIQtPEALH$ZVYAWL$3) z6d~Fl@WQTA6-qLNW&i8uQ=Jvj8UZ>8Zykjtq4|bJ+RiKpp>Fl_{afmI*_A%)eDxuU zf=_qu!KwURg{@fnUkXNk+^h_0>FJxL=F8Q7c9^d0DU=*n-SuSiU zgny~bhxLVrX;O;ku5Fnjag69<@K=1GDmV3ZI7E8N> zv4)QLsv3_g7B5W9L}uobh_3uYv2G(bvMwoyH@v1?F{!qW;Uvr$lkTfYa_#*=lBL=`C(Q-mkAm3`%SK2w7nsjn)fLfTyX4KCGx zSiiC;PY%N_N^y|7MoI-qN_oafy){El+DaYDn{u=6Kse!{oSlaCXNg%GHm?YfayoEG z(p0^GU&q-wg+Cqnb^J`N3X9rzdHmt_$n^3#k=9~m zKR>V6&+WB>eb#l$l^PniliXdq&p(}`Hc^cNl+er{me%eLDFy0`tD^%O({(vogCwEJ zl$A#_$;!HZq$xmTo$^TDXe4s-+p!7~kg^&{8EOE=c3s2^+>sqo-k$7nt-tKY>Er9e zXbn?m$DRX9fk3wkmOr8Td9)VagqdNbLO=|pB4T3cnxVwL-`Lorqw-BliNx(Vqzv3F zLA`VoVjV4i<|8Yhip!2p8Js9deEccC-)iOG*$|=H`J7TjKavpISh9IXlgRUKV4>D; z%#fonVdku6V#I6)+XJa`=CS|tv${*~{yoSPs zF4Tmwb)^@CTtfVtUpnT^`s<<;Hg}NdTmCMGXEwt(Ljopsd+ouZzeRIbjeVSr4fO&R z${G=}j^Tes@c^1RI5ZGO6(Vw^5@J?CA1AuV^=a0$NY_2CGchi`Q89nfAX)U@7g*oC z&JDOL-TRH-mb6XXesdvqa~w5mY5JW>1w;+T{wi1&sWzv%;AfZ2$CGiu3(eUy z)!>u@vA>OZ3e~MR&?_xKN>R`FkCH(uYC`dYp0rgz?|N@;jF7Yh1b)>{&v*?P$IKxN z0VzlmPfx9eC6-QJgsik7msYs%qdxEgd`?b;y?59`)Xd#}{~nPg1%dIONleO?Ym$?w z`d4=B5LX3q39i5R=C@3!_gNh(gLC@aKgvm${<4Q;dd=^)ZX)E4I`Au!sSht=kGY}d7=u{b7APnQ^mCWnScdQY-_X;5o$luQp@ z_ia5pL%v~T5gXG^6XoRao{)7uP7PAxF9@^W5aysTW2=%1P7QIH40aq(dLguSW^%vb zNfzxBLf#F?bZw(_LpyzNxJlCM5=MS%Ka|kfzFz10{@mOscg}kcaW^tq!CT zl5{4j&QH`I6tRzvBk^(4b)^|S(s{G>X#d_VigpzgF>dGUquF4)L8vD=I*D#HIOe|1 zq6656dYzm5?V7hJ)7T^9Hf3)AQdZt=p`!dD!`>WdbhZp6qmY#>kuQ2YToOC$YsxJH z(V&!S%zaOHDOL|q8P56h}hwa26x>_9RXxiZBh||eQIn39dl}$#eb&kE_dI_`+!d>jqqOrcB zbQ!4~u+&@7FApj=O4C=k+SPLZUi0Yvo$IGWSG+KHcMccApZU$AgQ=5x)>BR7osmKD zh8TzNd$tH?L-A}4JDqBaw#iZ_qikP!ZXWY2#HZ;8DfN@I?Hhwqqk*^!-l{B~i4=@g z5=P96^N3bHtF0KW5RhHV;{43`&wTZ~X5(1E?Zp7=dvTw?b;#d&bG^vlTHqY~V@~8C zCz_aatcC76g)yRNjc2i`QyHR%X!HL?i?n><(SBBAxLq#odlTR3e}9)GDP$V?e1xfz z&V=1*$8&1dC0{pC-vB3sC@?;e?YuZSiAy>ZiG{zhJtE~Je_vV}H8Bsy5oOJm)7M}D0*e+;iqv7`+31HRCL3f5 zW=}0Az8u`#M>@riR|U=J5g)wpr?&8bHBAjYl-SU1Jb0VaxpKQ{{w#dx(xjmSL5?%VUNs1Kh{8^+onQ14}mi6`9`qF*3& zK%L4r2M4d(l%5!e0$qjm3IZ0+)fDfzklfybI_M~>R395m!>X##NJ#-L?*-|8<2Qc& zs?*>n#=!SWp7n5X(dPgwjzRV3FCHHDUrPM;?GnJ$97c8yPONY+zyHn>UEw_Ne0txA zc0?W`MTf^meZ;r4rRb@t--i~9v;YUUSs;ZMmMuY{|8P;-&^aR{Lzq;;%X&jzSzdnq zaJzp-Ag51i^XXBhpiNQ8*2)P)6+voeJ@IAR>NLixPw34WrVhWo9T+fYV*Emr{uVVg z3jC;&i9$X*8zre*I$3%1N+s3fp<^M7x17OEBq7&c?p#itdAcrY7MZ7R!qs*56EF*; zK%vSi7eEJq&Ro{v6J4&j*#gCr%TPzJ_j4A z0Z>Ky%<`lN?@LR1x0H|ZJ%Lp8!`|)u4?MqV-Fc>5Re(*qUon$GB_4*=!`Ce`%o&oF z*ycI|moHG+X0$hqn-*lKmnc=RB38{zKf6)Ai)-0}kiT4GG8D#L%M~!o5-!7+(V012 z(*B7bKE5}xHA&g*YeF&cP4ZoqQ~)ZIPP$kwSh+BUo_WyFAMVw=uW8NS2CDL~X2X#1 zC62%7)Vuii(>{(lLAOFK=i9NbOEMnmhe*1ilhj;JQG~XsD$jm1_g71uE(M%V=KirB4<21DB?HYRp@VUIh^RWM=DI56frqHGuE zru0+r3V!0*UiS4(b>FK{q_5<+BPW-iH|i=cIs=w4%;$enQ)+%c?c(nUiPF~9rNYo` z6r=KU-09rU%*(?MGE;2Ag{AiBb%PEknG%qw4!l~H3|HJ7CaWMkR2yN1LwG+f0wj#n zBy%Y6KS5JoAdUu-_7-PjePdv;tdtHY&t|o;ulpM)YB-HYh-!z;?Y| zoBhkp>%FWkJ&dbWS|ve)_E;Fnnv@yoWdy4{(HzZcw-Z(5%89o!Z7f(Ud1iq@LtNDC z>}}n|sq|PXjP?7Xn{dj$?c0`ore5wi6&0BX%u@Cj-xWTd%bZSzi>^U>zct~!QTOYD z;pu92u48`iHIL1xYhSnsAK1~7o~8r78u=xhV6n}oY~uIa+p+xdJ=hApO?m;H0Ew?l z12eu|YNdU;JDvt6I#@feZBlmjUX_rRh%Iw4M52a5SXMeq(=z(YV5vZlTwo?>@EbvY z)Ey(_5>6}1p=4dTeoft8UlmBDNLE3$0Pg#sfvlF-e0Y&>(H+J3!iG8YJ8#+Yur0pG zvyP(T_HdJ~(KC4!!Sjzf5J%LP=L0V81&knyHtH{oC@)hJ>m=vCL6%5OU0+zGk44iK z62;?kuh&%<(oNG?c|^~hTYIxCTju;eT)BL=l^+UH{mE-n%^bmJ_@{=3U)08#Ghn6+ ztmoTtMPU@p5F3~3BN$N@qV%=6?p>kpkzJ|Ogni@s$XD3e^#PybyH;@e7CM&z|K=d) z((UuF3-d&z3R#Y$e|U*-ri<5)T^s1VC2gptW!13CVSIU&U|2rOD1724xKA#P?RKyE zeZ*%&R@qR+TC&L+ljNUa$UJn1g=66eapLX0YsZfi+80&_B7FgLa92rM!8~#5wsPtA z?_ow?%_3o0$UOd^^3i+_gdGEhEUZ$bRH}KMMM&Ipv;7Iu+z+Sd`^;>HhR299M1_;q zSAx*$_hgxCjq{B2_A#4ejHYId7VSJx>O4(TQ%i>2nddo35thBCR_~vKQ{+cd0*yp) z1GvqgaH+MPcwH|W9Hc=rS`dkS2KKuPB{^l4BJH0*;E-?Yd(p8O26Y&JgMu5tn?Uzch6QiZlP>36g^vA-$^ z-I^E0xr%i&xxTHOHAlWn%gUnBK-Kw{mKf4ygS6~RnQ%(s75U#1shhA&Fcsh5eEj1^ zhctC~v#}Kcx#MUa3snm(7&#goITEVdL%gPH_oXIY)CvNte$M%x^ylf(dR$2knQI|V zx;BiBKkD_{4;yQ0`d?@|RZIyfoQqB;a{drjKR6J@#Ybk45Zy|>pGVQO^S9m*4)odv zHGLE9pM2Zas2gwIiJ@iibhVhhjUh)iQt7^M>)98*#d2rhd;I5$FiBX)=txpd zK?RID;HeW%({@{z&pJgFn*CQ0u@8q+kOrd4r>93@nZas58>E8XWDpm1>oVd9XQZLZ z@s;-J<{zooWN??iT2}j#Lm=sNp)~l)4*RF9HN~B%)E0X07T*sH7d)C>ZUI5oXg&O4 zEu%;Oens^*J04v|dM-u(qG=1o#fqWQoCP5jQ_n~(m4R7QXbS14ExxZYMudumQ$DGI zMU)O8f}}K(j9&JDTz#xB>B;X}#_6dNtAZIB)Cvjr8&(@@PTn1{-*x2tJxNr_b2U1) z3lu6b&+XEq<`WGpNnvTN@rT^7_sBJC{OKr9-x3ZCI>eR~A#S94@uH7zV%s?O&%Y>k zm7Bgo#!jrZWrp@O{-bh-FZb6jd<1;!bs14m{haqDE|1$RVR>d-(q?WD!Yq^$>hy*w z18tWbAv&+7E^I1T>T}q6T za)&|hlJ|P}9IaHHRB?MREP8^7ZT1KU^?Z3QM~5t^D{*A{(AcNq@<$p?W0Ui4vT>{9 zMLbw8SpfKHDooY0yQwOY@twh0US4q08DqmI8(=~&>iQ7YuGRfnfy64waohy6mF;hc z#&r%>tm?4Z^}13#DMSB>?o;XymC;mjy6Z0lhrzKi*49FNRlR@^>nBass6*G|O<{wl z1jo$k(9~rramgUI;QP~uiZKoLAuEd=g^unU!1MOEui@ZNI1L5{qzyk^xJ!W`-nY6_ zQk(*;W=uLF{ADbRt+Pk{-L+;zd6m@y-ju98(##k)`Uyiee5HfSiWKJ5gCEA52(6Ko z0&L0)G43kNRZ_LTWkfmXa}0IpuxTL%rl7=QsZs|x_h0X88*Q`pL38F2-{Bmwv-q81 z+32}b+b54NBwpafsSDsT!xaf@57DtD=5}2SXWkl8$n~EoFu3vekjPHtF}M>e1X<}U z01;NRkFvToU#&LAScz`vJ3IW@pU*dn3dk0&9T`%}B44!0+k;fGs2MJ$?IbFx-n?!P zg0UB@zLIzHN&XDC3nDQZgVbCqe-N#=TsB1bO`m|cX^MlAGk$0ft4gb%3CrGWmdUVm zN5c$ZeX4>9B45&c@C^0}+^e7dOo*8m# zg!}Y8wt%eYx=OTKgRoOYF%5nn)DMi9wGLxZaj*)AGuxZE47o+HD<_0Ugt6?BM-AEc zb7yiXI%TF5M?)16*E@3_PkjpM#CV%yLrE%rHB#AC=c|L%vbV8bnXuRb|5gw; zS6}LdXBkkJq2<_D;tSx@4<#RY@je9;6Y>nNt{R+(QSh1?Ez@Wve9;asdv7K-hW`$ujExG71JK<&lL~7y$ z$J}(m^GqkfZFuj*kuv|`FG5_?IUP!jk1Zl%CJ=+B_Yj~z8ZQ#`=pL=W zqN#>sP)pxEls8%`q%~~KEIfcSDI&=C76G|vW(n zp`fXnbM%#Vc`{hoRX>Um|Ncupy^<@H$HMzI1igIl2$T~2pP^M_Lt}(4hW54l@Y4u! zjz%kYAF}D#=%3zja8Z;Bq{QH#$mRS+a(!`=4gAIeE%k_3KsJ`Q`VTP{FDQ! zP0m}-TdO0$=I}05i08Uvtq(4zLDU9(DYQ^j{9XFapk}jVZdD#KM=26N>`Ary>_`nw zV%sTI?`kX+N>V&&V10vn)oXW0+D8w|AoOAV&g)9G-M&t_v=pG1CxqVGNl#vb4~@Aa5~VEs3BC>f8F7}KT3ihyvj`xX6%g=* z%?BOYh?e6?qo-sZPTSE9c?ui6jfijbkr3_IgZ&BrFgshI`L;G0+_O{n(da@ReE8;K z`ot@WCiGox8h-fV57KXyHKzn2&L+klbrq`SxXzgTay3IZ5RDC#EE;!g+|{p)O6Y3P zj3`{i$_$mOBYxdHw~#|ljO&XV>hRRawV<}|YyMq?`V-cn78fhWYC{UO?A6OztD_aaHfzXrGGU?QB(@6IMBRxm71Q2`dz zBGA0rE_$(L0oy2W9AZXq@GTZNP@7YZ_C>*3`znNXN29e*;VQA}at%?<$!Q*aGDH?nV%ZDxxXeZPw%}{+32-!kkUFamMbzL20DQx&> zR<<4T>y+oQLt4J;f|M^dV|eMpua4tV}8$kRa9LodSI7*@-7j{ z_Wtfc*XZ49SuY>FTH)7Z?Mi6@?I_4pkTST-8w|zfNMNljZzZ4XMzA?MI}1d}W6)px zJil)CXg!RxGPZf|BO<99RM~dvoSZW`L-2?h$x)it{bw0dBIJ{XiCEXeDCPWzg4AyJ z3nnW|O~GYNv}1jj-xrDC=ul80BYw|yv|?b#Gu?Avv__e;^Q$4xY^`kYo9-IEDvPi_ z2kdl)!(r{4$wwIiCGL0UuIBEW@M&;O`QqI{XXCq;92rNp$4O3U@D$<~*77qOcRt`Ocx}-sA zpucR#o~(%M+5GX>KF9;^g+X?9JACo*myXy|26zD-=FB|{BvTIt$R}Ggj#tkI{S(it zG8BOVRWB|ggDIMsZ^LE8Uzlsi*#(JVHL2X>t&U2c&C5|o^Sbn|3mJ0T`GD6)=uad= zO*OR9H>l=!;vTa1yo08Ng$t2uJ~iBvjVZ4-tZat2!Y3aWbj`n+}CW7piTy1jSW*-Ll0wCGviMf1+*y3ENHnGuDGzU?F( zG??=A8Z8O^PoT0bdb02ufpkc*0X)OR6ex*T~FHIk%{ z%(d)aLg=OVkQq_04CXPcd6V_HU1BUI6!AC)D$3K&X=#Hh*l96m9NX&+Z)0mvNJy`S zlA=6rH_vq5iv{!g{{v*49ig3Wbqj83a3_YHjpF%7&Nj1;b3D5o^fuV}#Ojw5`CU4OG^NP# zV?$Q`^+Xp*DY(k}r8S+%0@beb7XCUqTST(5vB+d?^#;v>vOP=~mx>vM(oQ2pn`!zY z*wVjdeyxbQ=-GC!I1h&Z1pB$egXNyYUWMZ0;!vBC9q{e(@ zgcR|Z&?A_cT%14l{o=vf0??x*|IVfltP7wGxmVP1L}t)5vb$FkJ((9xoGg1P`4p^b zL%VZApT)##VGry(AA5H@jz(J`fuF+3P#w(dg)Y}MgtO7rp7B5;9c<3k^*B(p{(SSx z(aCjILQEN5h6l7cD`a4^eP#s|wXNH|u~93UHfZ$L3VNL1$|c!~`uvDVr<%%^m>a8z z5{b1kXxC`i#;gXa`yBa*55{w0V^K-vp_9PDQ-2#=1IjiqW(A{pUZE<#?`+P@#ITD% zWpIp<;!RGtM2o(YV^#1~#iV%=l)$KC+9K)U;DMbKYU7k-_lazzB#I(fovD(B^x;)S zCcQ&xwBzAtb?*#3oQ6-G_^Xd8Qbs|Hych@9HqK$R{o9 zmCi5D?~;8s^X)5LDltX65LgG56=b~-=_TIjS1@XsKzh7dTIyoK(diR@HWS{uUM9}I z8u*0b`B3)xc5X)vC1=q!&8noB%|&_sdWxG5S!*H(SxkB0aJrOI^eN{|zQ&cjoUJ;h zul-KNsp?eXL(=mJ5T6-)a=gD*f0a?bFW!6Iv;BNVh*m~MMlxJxI;Dh! zSfS&7cS$(#xTWGx9HvW*ap~J@rjM#?PF2M1)ZNC7vbVICdp%HK8EB;MZ+xsyD@_c; zX?a$tl*D;VN|8?*gAJghQ!`E1LioKP!g|naBjDq2NW4eB%=wQChx4rI+ee~g%twB_ zWr8pVMXA~p{p1pU#NTH+Tt9;CRbOb6zo=zv)v=QD&_ZDDJPLcRK6 zkIu@q4=v-$3G`QT6=Cr6egyDKCKgIWeqok(e7G(qTbyNYe&GJYs-54dm=^luFP{mW z!!xi5U+E`{;*#R^ukUU!CME7bP~3eyhPcjtT16RV3=W{YR5PWN`A>B2$4NMP|11q( z;@ME>^+JRSSd5cott*H|x6ji_(Z7O1$?m;r88_C>&xgLgxF4~+(R-2);m;RmIz4^l zW85l!wotugsmG?sn#k4<8{$^yCs_FCs5tk((3?&c6PxEcYH#!3&v4NrW5r2p>#Z>t z6RQ(Hc&h-T$2NLCl5*njCR4@>Ecsp>{W~3st(=>t>Z%Tle4_jOyiX_I@B4J(B@C_# z;o42+?jJpPtF5ogv`<}OkIkDL&R~e=ZZN}QQXV@+VN5asXR-l62X|D0E`=uto~oUQG@Cha{~;`!Y zmi&z(UgY)LzeQ{KN#BKgX+?bdrXs4+brEw%?pEFh=)o_m-G z*0YvEE@>!&|Kq5Jb*mtHXu%`a8H{8s6297s4`Js%XW=q~K8=pG7@8&i!{s(c1p6V& zpp;(}xW4LfuJ3XB#W21RDmEDV)Y_V*&5K?Vfoi?HZcWc3G49c!7rhi!dYYAd-}J9o z0;?7^2?<%i9L5ZYyYxDbDEWw)%$*fslUZ^5HnXCx_T_HYv{KPT3C%b#*e?PJg}DOQ z!*&UYfH_ADSwUC^W5d6_Pk8Ys%L>ClFN3%3P(0)#rg*n*jX3^ZlKt^Ontwyg=o)1^bgOhBExcyrC9B+fZ zSItS2L-8{DQ9yQ%@8LaLSi8V&@$66=ZB5_gVc=9ZZSeV|)W8?&c3HE6HQH3B z!lHgGs5RV;QR3_1la35|1e1;*a&UvUpIsEQN?fxmp{(T&hjRT=N_Oh2W*AcC;Gd$< zi4bp|H||0K$Ve~WO%tHgft)XgoPN;@3}Ph1Fyf<*rmrR5+@qSIJxhtE??1Yi*S$my zp05$@@;m+Sg%1ATSj0l^^JhRc(89{xL#gs5LXz2A!O+{*%G*xV#>?)-0C;)8!kj#U zoM2u(US3f?UQsZZlSe?5hi4>Dj`9B~;OcJcWbgm~FVNEWkoQsmprW8DUn6T7{(k^a CTXyUK literal 0 HcmV?d00001 diff --git a/Images/poloniex-logo.png b/Images/poloniex-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..798c46a19d2c69f0857465e9a584526211fc93ed GIT binary patch literal 18237 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 Entering function."); } - if (canDrawLogoA === false || canDrawLogoB === false) { return; } + if (canDrawLogoA === false || canDrawLogoB === false || canDrawLogoExchange === false || canDrawLogoAA === false) { return; } let backgroundLogoPoint1; let backgroundLogoPoint2; @@ -963,7 +983,7 @@ }; let point2 = { - x: viewPort.visibleArea.topLeft.x + imageWidth * 4, + x: viewPort.visibleArea.topLeft.x + imageWidth * 8, y: viewPort.visibleArea.topLeft.y }; @@ -991,13 +1011,13 @@ if (offSet === 0) { - offSet = -imageWidth; + offSet = imageWidth * 4 - imageWidth; } else { offSet = 0; } - for (let i = 1; i < 6; i = i + 2) { + for (let i = 0; i < 9; i = i + 4) { let logo = logoA; @@ -1012,13 +1032,13 @@ if (offSet === 0) { - offSet = -imageWidth; + offSet = imageWidth * 4 - imageWidth; } else { offSet = 0; } - for (let i = 0; i < 6; i = i + 2) { + for (let i = 1; i < 9; i = i + 4) { let logo = logoB; @@ -1027,6 +1047,48 @@ } } + offSet = 0; + + for (let j = 0; j < 5; j++) { + + if (offSet === 0) { + + offSet = imageWidth * 4 - imageWidth; + + } else { + offSet = 0; + } + + for (let i = 2; i < 9; i = i + 4) { + + let logo = logoExchange; + + browserCanvasContext.drawImage(logo, imagePoint.x + i * imageWidth * 2 + offSet, imagePoint.y + j * rowHight, imageWidth, imageHeight); + + } + } + + offSet = 0; + + for (let j = 0; j < 5; j++) { + + if (offSet === 0) { + + offSet = imageWidth * 4 - imageWidth; + + } else { + offSet = 0; + } + + for (let i = 3; i < 9; i = i + 4) { + + let logo = logoAA; + + browserCanvasContext.drawImage(logo, imagePoint.x + i * imageWidth * 2 + offSet, imagePoint.y + j * rowHight, imageWidth, imageHeight); + + } + } + /* We will paint some transparent background here. */ let opacity = "0.9"; From 441c2d1c5b06d973480b5d69f91259fc714590ab Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 13 Jun 2018 15:22:24 +0200 Subject: [PATCH 115/334] Logos not dissapearing --- TimelineChart.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/TimelineChart.js b/TimelineChart.js index 801da0896..0cc908687 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -1009,15 +1009,15 @@ for (let j = 0; j < 5; j++) { - if (offSet === 0) { + if (offSet === -imageWidth * 8) { - offSet = imageWidth * 4 - imageWidth; + offSet = -imageWidth * 4 - imageWidth; } else { - offSet = 0; + offSet = -imageWidth * 8; } - for (let i = 0; i < 9; i = i + 4) { + for (let i = 0; i < 12; i = i + 4) { let logo = logoA; @@ -1030,15 +1030,15 @@ for (let j = 0; j < 5; j++) { - if (offSet === 0) { + if (offSet === -imageWidth * 8) { - offSet = imageWidth * 4 - imageWidth; + offSet = -imageWidth * 4 - imageWidth; } else { - offSet = 0; + offSet = -imageWidth * 8; } - for (let i = 1; i < 9; i = i + 4) { + for (let i = 1; i < 12; i = i + 4) { let logo = logoB; @@ -1051,15 +1051,15 @@ for (let j = 0; j < 5; j++) { - if (offSet === 0) { + if (offSet === -imageWidth * 8) { - offSet = imageWidth * 4 - imageWidth; + offSet = -imageWidth * 4 - imageWidth; } else { - offSet = 0; + offSet = -imageWidth * 8; } - for (let i = 2; i < 9; i = i + 4) { + for (let i = 2; i < 12; i = i + 4) { let logo = logoExchange; @@ -1072,15 +1072,15 @@ for (let j = 0; j < 5; j++) { - if (offSet === 0) { + if (offSet === -imageWidth * 8) { - offSet = imageWidth * 4 - imageWidth; + offSet = -imageWidth * 4 - imageWidth; } else { - offSet = 0; + offSet = -imageWidth * 8; } - for (let i = 3; i < 9; i = i + 4) { + for (let i = 3; i < 12; i = i + 4) { let logo = logoAA; From b7c8d6342a2bf6077ac349e5bc55025b8a34f719 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 13 Jun 2018 20:45:35 +0200 Subject: [PATCH 116/334] Session Manager and Storage Manager Implemented. --- Project.njsproj | 5 +- Server/Permissions.js | 47 ----------- Server/SessionManager.js | 48 +++++++++++ Server/StorageAccessManager.js | 112 ++++++++++++++++++++++++++ server.js | 140 ++++++++++++++++++--------------- 5 files changed, 241 insertions(+), 111 deletions(-) delete mode 100644 Server/Permissions.js create mode 100644 Server/SessionManager.js create mode 100644 Server/StorageAccessManager.js diff --git a/Project.njsproj b/Project.njsproj index 5666a0e54..7b7e5e06b 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -54,7 +54,7 @@ Code - + Code @@ -82,6 +82,9 @@ Code + + Code + Code diff --git a/Server/Permissions.js b/Server/Permissions.js deleted file mode 100644 index d9c18ef55..000000000 --- a/Server/Permissions.js +++ /dev/null @@ -1,47 +0,0 @@ -exports.newPermissions = function newPermissions() { - - let thisObject = { - initialize: initialize - } - - return thisObject; - - function initialize(pEcosystemObject, callBackFunction) { - - readStoragePermissions(); - - function readStoragePermissions() { - - let filePath; - - try { - let fs = require('fs'); - filePath = '../' + 'Connection-Strings' + '/' + 'Storage.Permissions.json'; - pEcosystemObject.STORAGE_PERMISSIONS = JSON.parse(fs.readFileSync(filePath, 'utf8')); - - readPermissions(); - } - catch (err) { - console.log("[ERROR] readStoragePermissions -> err = " + err.message); - console.log("[HINT] readStoragePermissions -> You need to have a file at this path -> " + filePath); - } - } - - function readPermissions() { - - try { - let fs = require('fs'); - let filePath = '../' + 'Permissions' + '/' + 'Secrets' + '.json'; - - let permissioins = JSON.parse(fs.readFileSync(filePath, 'utf8')); - callBackFunction(permissioins); - } - catch (err) { - console.log("[ERROR] readPermissions -> err = " + err.message); - console.log("[HINT] You need to have a file at this path -> " + filePath); - - callBackFunction(); - } - } - } -} \ No newline at end of file diff --git a/Server/SessionManager.js b/Server/SessionManager.js new file mode 100644 index 000000000..c7ce0c800 --- /dev/null +++ b/Server/SessionManager.js @@ -0,0 +1,48 @@ +exports.newSessionManager = function newSessionManager() { + + let thisObject = { + getSession: getSession, + initialize: initialize + } + + let activeSessions = new Map(); + + return thisObject; + + function initialize(callBackFunction) { + + readSessions(); + + function readSessions() { + + try { + let fs = require('fs'); + let filePath = '../' + 'Sessions' + '/' + 'Open.Sessions' + '.json'; + + let sessions = JSON.parse(fs.readFileSync(filePath, 'utf8')); + + for (let i = 0; i < sessions.lenght; i++) { + + let session = sessions[i]; + + activeSessions.set(session.sessionToken, session); + + } + + callBackFunction(); + } + catch (err) { + console.log("[ERROR] readSessions -> err = " + err.message); + console.log("[HINT] You need to have a file at this path -> " + filePath); + + callBackFunction(); + } + } + } + + function getSession(pSessionToken) { + + return activeSessions.get(pSessionToken); + + } +} \ No newline at end of file diff --git a/Server/StorageAccessManager.js b/Server/StorageAccessManager.js new file mode 100644 index 000000000..a2630363f --- /dev/null +++ b/Server/StorageAccessManager.js @@ -0,0 +1,112 @@ +exports.newStorageAccessManager = function newStorageAccessManager() { + + let thisObject = { + getPermissions: getPermissions, + initialize: initialize + } + + let permissions; + + return thisObject; + + function initialize(callBackFunction) { + + readStoragePermissions(); + + function readStoragePermissions() { + + let filePath; + + try { + let fs = require('fs'); + filePath = '../' + 'Storage' + '/' + 'Storage.Permissions.json'; + permissions = JSON.parse(fs.readFileSync(filePath, 'utf8')); + + callBackFunction(); + + } + catch (err) { + console.log("[ERROR] readStoragePermissions -> err = " + err.message); + console.log("[HINT] readStoragePermissions -> You need to have a file at this path -> " + filePath); + + callBackFunction(); + } + } + } + + function getPermissions(pTeams) { + + let azure = require('azure-storage'); + let blobService = azure.createBlobService(permissions.connectionString); + + let startDate = new Date(); + startDate.setDate(startDate.getDate() - 1); + + let expiryDate = new Date(startDate); + expiryDate.setDate(startDate.getDate() + 3); + + for (let i = 0; i < pTeams.length; i++) { + + let team = pTeams[i]; + + if (team.readConnectionString !== undefined) { + + let azurePermissions = azure.BlobUtilities.SharedAccessPermissions.READ; + + let container = team.codeName; + let blobName = undefined; + + let sharedAccessPolicy = { + AccessPolicy: { + Permissions: azurePermissions, + Start: startDate, + Expiry: expiryDate + } + }; + + let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy); + team.readConnectionString = "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + ""; + } + + if (team.writeConnectionString !== undefined) { + + let azurePermissions = azure.BlobUtilities.SharedAccessPermissions.WRITE; + + let container = team.codeName; + let blobName = undefined; + + let sharedAccessPolicy = { + AccessPolicy: { + Permissions: azurePermissions, + Start: startDate, + Expiry: expiryDate + } + }; + + let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy); + team.readConnectionString = "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + ""; + } + } + + return pTeams; + } +} + + +/* + + "Develop": { + "aaplatform": { + "readConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-05-21T07%3A16%3A54Z&se=2018-08-19T07%3A16%3A54Z&sp=r&sv=2017-07-29&sr=c&sig=YzkqXqAaXsbyn5hOgHCLDjKL8xcSkjBa0e9E1nNdoEI%3D" + }, + "aamasters": { + "readConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-05-18T11%3A46%3A36Z&se=2018-08-16T11%3A46%3A36Z&sp=r&sv=2017-07-29&sr=c&sig=XHpklrDCK3Ta7Zp2F1S6UWkKgd2Sf0wTUUWcrykhh%2FA%3D", + "writeConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-05-18T11%3A47%3A35Z&se=2018-08-16T11%3A47%3A35Z&sp=w&sv=2017-07-29&sr=c&sig=MENzxltuTVcXCgM%2BCtgfGkNtEULelIEHk0ke1nFCr6E%3D" + }, + "aabash": { + "readConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-06-10T17%3A12%3A13Z&se=2018-09-08T17%3A12%3A13Z&sp=r&sv=2017-07-29&sr=c&sig=zb1JWz2Fl1baO2VjFFP4qKzobV85%2F79c2dXWX4fuBLc%3D", + "writeConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-06-10T17%3A13%3A51Z&se=2018-09-08T17%3A13%3A51Z&sp=w&sv=2017-07-29&sr=c&sig=OCrxZggKIQS0Vm8wKA1SAhhTbSlq%2BRd7VqQhp8NUhF8%3D" + } + } + +*/ \ No newline at end of file diff --git a/server.js b/server.js index 59cd0c015..272e7aba3 100644 --- a/server.js +++ b/server.js @@ -49,7 +49,7 @@ let isHttpServerStarted = false; const STORAGE = require('./Server/Storage'); let storage = STORAGE.newStorage(); -let authenticatedSession; // We do not send these keys to the browser, instead they are kept here for when they are needed. +let sessionManager; // This module have all authenticated active sessions. initialize(); @@ -90,25 +90,31 @@ function initialize() { function onLoadCompeted(pHTMLCloudScripts) { - const PERMISSIONS = require('./Server/Permissions'); - let permissions = PERMISSIONS.newPermissions(); + const SESSION_MANAGER = require('./Server/SessionManager'); + sessionManager = SESSION_MANAGER.newSessionManager(); - permissions.initialize(ecosystemObject, onInitialized); + sessionManager.initialize(onInitialized); - function onInitialized(pPermissionsSecrets) { + function onInitialized() { - authenticatedSession = pPermissionsSecrets; + const STORAGE_ACCESS_MANAGER = require('./Server/StorageAccessManager'); + storageAccessManager = STORAGE_ACCESS_MANAGER.newStorageAccessManager(); - const BOT_SCRIPTS = require('./Server/BotsScripts'); - botScripts = BOT_SCRIPTS.newBotScripts(); - - botScripts.initialize(serverConfig, onInitialized); + storageAccessManager.initialize(onInitialized); function onInitialized() { - HTMLCloudScripts = pHTMLCloudScripts; - startHtttpServer(); + const BOT_SCRIPTS = require('./Server/BotsScripts'); + botScripts = BOT_SCRIPTS.newBotScripts(); + botScripts.initialize(serverConfig, onInitialized); + + function onInitialized() { + + HTMLCloudScripts = pHTMLCloudScripts; + startHtttpServer(); + + } } } } @@ -584,67 +590,75 @@ function onBrowserRequest(request, response) { let sessionToken = requestParameters[3]; - for (let i = 0; i < authenticatedSession.length; i++) { + let session = sessionManager.getSession(sessionToken); - let session = authenticatedSession[i]; + if (session !== undefined) { - if (session.sessionToken === sessionToken) { + let exchangeKey = session.exchangeKeys[0].key; // 0 because we only deal with one exchange for now. + let exchangeSecret = session.exchangeKeys[0].secret; - let exchangeKey = session.exchangeKeys[0].key; // 0 because we only deal with one exchange for now. - let exchangeSecret = session.exchangeKeys[0].secret; + const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient'); + let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(exchangeKey, exchangeSecret); - const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient'); - let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(exchangeKey, exchangeSecret); + switch (requestParameters[2]) { - switch (requestParameters[2]) { - - case "returnOpenOrders": { - poloniexApiClient.API.returnOpenOrders(requestParameters[4], requestParameters[5], onExchangeResponse); - break; - } - - case "returnOrderTrades": { - poloniexApiClient.API.returnOrderTrades(requestParameters[4], onExchangeResponse); - break; - } - - case "buy": { - poloniexApiClient.API.buy(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse); - break; - } - - case "sell": { - poloniexApiClient.API.sell(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse); - break; - } - - case "moveOrder": { - poloniexApiClient.API.moveOrder(requestParameters[4], requestParameters[5], requestParameters[6], onExchangeResponse); - break; - } - - case "returnTicker": { - poloniexApiClient.API.returnTicker(onExchangeResponse); - break; - } + case "returnOpenOrders": { + poloniexApiClient.API.returnOpenOrders(requestParameters[4], requestParameters[5], onExchangeResponse); + break; } - function onExchangeResponse(err, exchangeResponse) { - - /* Delete these secrets before they get logged. */ - - requestParameters[3] = ""; - - let serverResponse = { - err: err, - exchangeResponse: exchangeResponse - } - - respondWithContent(JSON.stringify(serverResponse), response); + case "returnOrderTrades": { + poloniexApiClient.API.returnOrderTrades(requestParameters[4], onExchangeResponse); + break; } - return; + case "buy": { + poloniexApiClient.API.buy(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse); + break; + } + + case "sell": { + poloniexApiClient.API.sell(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse); + break; + } + + case "moveOrder": { + poloniexApiClient.API.moveOrder(requestParameters[4], requestParameters[5], requestParameters[6], onExchangeResponse); + break; + } + + case "returnTicker": { + poloniexApiClient.API.returnTicker(onExchangeResponse); + break; + } } + + function onExchangeResponse(err, exchangeResponse) { + + /* Delete these secrets before they get logged. */ + + requestParameters[3] = ""; + + let serverResponse = { + err: err, + exchangeResponse: exchangeResponse + } + + respondWithContent(JSON.stringify(serverResponse), response); + } + + return; + } + + else { + + let customResponse = { + result: global.CUSTOM_FAIL_RESPONSE.result, + message: "Your session has expired. Please login again." + }; + + respondWithContent(JSON.stringify(customResponse), response); + } } break; From 23acd981906618e0af66910c5cdd9d6874d6e0f3 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 13 Jun 2018 22:38:21 +0200 Subject: [PATCH 117/334] Session Token implemented at Index, preLoader --- AABrowserAPI/{API.js => BotCode.js} | 2 +- AABrowserAPI/UserAuthentication.js | 23 +++++++ CloudVM/CloudSupport.js | 25 -------- Dashboard.js | 28 --------- Project.njsproj | 5 +- Scripts/AppPreLoader.js | 96 +++++++++++++++++++++++++++-- Server/ConfigReader.js | 3 +- index.html | 2 + server.js | 53 +++++++++++----- 9 files changed, 160 insertions(+), 77 deletions(-) rename AABrowserAPI/{API.js => BotCode.js} (99%) create mode 100644 AABrowserAPI/UserAuthentication.js diff --git a/AABrowserAPI/API.js b/AABrowserAPI/BotCode.js similarity index 99% rename from AABrowserAPI/API.js rename to AABrowserAPI/BotCode.js index 9bead5e6c..9a5474840 100644 --- a/AABrowserAPI/API.js +++ b/AABrowserAPI/BotCode.js @@ -1,4 +1,4 @@ -exports.newAPI = function newAPI() { +exports.newBotCode = function newBotCode() { let thisObject = { saveBotCode: saveBotCode, diff --git a/AABrowserAPI/UserAuthentication.js b/AABrowserAPI/UserAuthentication.js new file mode 100644 index 000000000..7d48837f7 --- /dev/null +++ b/AABrowserAPI/UserAuthentication.js @@ -0,0 +1,23 @@ +exports.newUserAuthentication = function newUserAuthentication() { + + let thisObject = { + authenticateUser: authenticateUser, + initialize: initialize + } + + let serverConfig; + + return thisObject; + + function initialize(pServerConfig) { + + serverConfig = pServerConfig; + + } + + function authenticateUser(callBackFunction) { + + callBackFunction(global.DEFAULT_OK_RESPONSE); + + } +} \ No newline at end of file diff --git a/CloudVM/CloudSupport.js b/CloudVM/CloudSupport.js index e3cc40c56..9431f17cf 100644 --- a/CloudVM/CloudSupport.js +++ b/CloudVM/CloudSupport.js @@ -141,28 +141,3 @@ function downloadModule(pPath, callBackFunction) { } } -function callServer(pContentToSend, pPath, callBackFunction) { - - let xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = function () { - if (this.readyState === 4 && this.status === 200) { - - callBackFunction(xhttp.responseText); - - } - }; - - if (pContentToSend === undefined) { - - xhttp.open("GET", pPath, true); - xhttp.send(); - - } else { - - let blob = new Blob([pContentToSend], { type: 'text/plain' }); - - xhttp.open("POST", pPath, true); - xhttp.send(blob); - - } -} diff --git a/Dashboard.js b/Dashboard.js index 5d378d686..8f638b8c1 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -40,34 +40,6 @@ UI_PANEL = { } }; -/* Callbacks default responses. */ - -let GLOBAL = {}; - -GLOBAL.DEFAULT_OK_RESPONSE = { - result: "Ok", - message: "Operation Succeeded" -}; - -GLOBAL.DEFAULT_FAIL_RESPONSE = { - result: "Fail", - message: "Operation Failed" -}; - -GLOBAL.DEFAULT_RETRY_RESPONSE = { - result: "Retry", - message: "Retry Later" -}; - -GLOBAL.CUSTOM_OK_RESPONSE = { - result: "Ok, but check Message", - message: "Custom Message" -}; - -GLOBAL.CUSTOM_FAIL_RESPONSE = { - result: "Fail Because", - message: "Custom Message" -}; /* The Dashboard is the root object that contains all the other stuff in it. Some of that stuff is visible, some other is invisible. */ diff --git a/Project.njsproj b/Project.njsproj index 7b7e5e06b..e2fd0014f 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -29,7 +29,10 @@ true - + + Code + + Code diff --git a/Scripts/AppPreLoader.js b/Scripts/AppPreLoader.js index 9ff7d98a4..318ee5384 100644 --- a/Scripts/AppPreLoader.js +++ b/Scripts/AppPreLoader.js @@ -1,6 +1,37 @@  +/* Callbacks default responses. */ + +let GLOBAL = {}; + +GLOBAL.DEFAULT_OK_RESPONSE = { + result: "Ok", + message: "Operation Succeeded" +}; + +GLOBAL.DEFAULT_FAIL_RESPONSE = { + result: "Fail", + message: "Operation Failed" +}; + +GLOBAL.DEFAULT_RETRY_RESPONSE = { + result: "Retry", + message: "Retry Later" +}; + +GLOBAL.CUSTOM_OK_RESPONSE = { + result: "Ok, but check Message", + message: "Custom Message" +}; + +GLOBAL.CUSTOM_FAIL_RESPONSE = { + result: "Fail Because", + message: "Custom Message" +}; + function loadAdvancedAlgosPlatform() { + /* The first thing to do here is to add the canvas where all the action is going to happen. */ + let canvas = document.createElement('canvas'); canvas.id = "canvas"; @@ -12,17 +43,70 @@ function loadAdvancedAlgosPlatform() { let body = document.getElementsByTagName("body")[0]; body.appendChild(canvas); - let path = "Scripts/AppLoader.js"; + /* The second thing to do is to send the tokenSession to the server, so that it can prepare the server side data structures needed. */ - REQUIREJS([path], onRequired); + let sessionToken = window.sessionToken; + if (sessionToken === undefined) { sessionToken = ""} - function onRequired(pModule) { + let path = "AABrowserAPI/authenticateUser/" + sessionToken; - console.log(path + " downloaded."); + callServer(undefined, path, onServerReponded); - let APP_LOADER_MODULE = newAppLoader(); - APP_LOADER_MODULE.loadModules(); + function onServerReponded(pResponse) { + err = JSON.parse(pResponse); + + if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { + + console.log("Authentication Error. " + err.message); + return; + + } + + loadModules(); + } + + /* And Finally, we start loading all the scripts we will inmediatelly need. */ + + function loadModules() { + + let path = "Scripts/AppLoader.js"; + + REQUIREJS([path], onRequired); + + function onRequired(pModule) { + + console.log(path + " downloaded."); + + let APP_LOADER_MODULE = newAppLoader(); + APP_LOADER_MODULE.loadModules(); + + } } } +function callServer(pContentToSend, pPath, callBackFunction) { + + let xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function () { + if (this.readyState === 4 && this.status === 200) { + + callBackFunction(xhttp.responseText); + + } + }; + + if (pContentToSend === undefined) { + + xhttp.open("GET", pPath, true); + xhttp.send(); + + } else { + + let blob = new Blob([pContentToSend], { type: 'text/plain' }); + + xhttp.open("POST", pPath, true); + xhttp.send(blob); + + } +} diff --git a/Server/ConfigReader.js b/Server/ConfigReader.js index dd9d9dec9..0a0f84767 100644 --- a/Server/ConfigReader.js +++ b/Server/ConfigReader.js @@ -18,9 +18,8 @@ return thisObject; - function initialize(pEcosystem, pEcosystemObject, pServerConfig, pStorageData, callBackFunction) { + function initialize(pEcosystem, pEcosystemObject, pStorageData, callBackFunction) { - serverConfig = pServerConfig; storageData = pStorageData; ecosystem = pEcosystem; ecosystemObject = pEcosystemObject; diff --git a/index.html b/index.html index 9b91a18a8..c733eb598 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,8 @@ Advanced Algos + + diff --git a/server.js b/server.js index 272e7aba3..5d08efd7b 100644 --- a/server.js +++ b/server.js @@ -49,7 +49,8 @@ let isHttpServerStarted = false; const STORAGE = require('./Server/Storage'); let storage = STORAGE.newStorage(); -let sessionManager; // This module have all authenticated active sessions. +let sessionManager; // This module have all authenticated active sessions. +let storageAccessManager; // This module manages the SAS for user to access the cloud storage from the browser. initialize(); @@ -64,7 +65,7 @@ function initialize() { const CONFIG_READER = require('./Server/ConfigReader'); let configReader = CONFIG_READER.newConfigReader(); - configReader.initialize(ecosystem, ecosystemObject, serverConfig, storageData, onInitialized); + configReader.initialize(ecosystem, ecosystemObject, storageData, onInitialized); function onInitialized(pServerConfig) { @@ -424,21 +425,21 @@ function onBrowserRequest(request, response) { case "AABrowserAPI": // This means the Scripts folder. { - const AABROSER_API_MODULE = require('./AABrowserAPI/' + 'API'); - let api = AABROSER_API_MODULE.newAPI(); + switch (requestParameters[2]) { - api.initialize(serverConfig); + case "saveBotCode": { - processPost(request, response, onPostReceived) + const AABROSER_API_BOT_CODE = require('./AABrowserAPI/' + 'BotCode'); + let botCode = AABROSER_API_BOT_CODE.newBotCode(); - function onPostReceived(pData) { + botCode.initialize(serverConfig); - switch (requestParameters[2]) { + processPost(request, response, onPostReceived) - case "saveBotCode": { + function onPostReceived(pData) { let devTeam = requestParameters[3]; - let source = requestParameters[4] + "/" + requestParameters[5]; + let source = requestParameters[4] + "/" + requestParameters[5]; let repo = requestParameters[6]; let path; @@ -447,15 +448,31 @@ function onBrowserRequest(request, response) { } else { path = requestParameters[7]; } - api.saveBotCode(devTeam, source, repo, path, pData, onResponse); - break; + botCode.saveBotCode(devTeam, source, repo, path, pData, onResponse); + + function onResponse(err, pResponse) { + + respondWithContent(JSON.stringify(pResponse), response); + } } + break; } - function onResponse(err, pResponse) { + case "authenticateUser": { - respondWithContent(JSON.stringify(pResponse), response); + const AABROSER_API_USER_AUTHENTICATION = require('./AABrowserAPI/' + 'UserAuthentication'); + let userAuthentication = AABROSER_API_USER_AUTHENTICATION.newUserAuthentication(); + + userAuthentication.initialize(); + userAuthentication.authenticateUser(onFinish); + + function onFinish(err) { + + respondWithContent(JSON.stringify(err), response); + } + + break; } } } @@ -814,6 +831,14 @@ function onBrowserRequest(request, response) { let fileContent = file.toString(); + /* The second request parameters is the sessionToken, if it exists. */ + + if (requestParameters[2] !== "" && requestParameters[2] !== undefined) { + + fileContent.replace("", "") + + } + addImages(); function addImages() { From 35cf0a50ce14ca36fc512c568c3ee0bc8666d522 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 14 Jun 2018 07:35:04 +0200 Subject: [PATCH 118/334] More Logging --- Exchanges/PoloniexAPIClient.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Exchanges/PoloniexAPIClient.js b/Exchanges/PoloniexAPIClient.js index 18a5484e3..3d7aba923 100644 --- a/Exchanges/PoloniexAPIClient.js +++ b/Exchanges/PoloniexAPIClient.js @@ -40,7 +40,7 @@ // Generate headers signed by thisObject user's key and secret. // The secret is encapsulated and never exposed - function _getPrivateHeaders (parameters) { + function _getPrivateHeaders(parameters) { var paramString, signature; if (!key || !secret) { @@ -401,8 +401,9 @@ analizeResponse: function (logger, exchangeErr, exchangeResponse, notOkCallBack, okCallBack) { - const INFO_LOG = false; + const FULL_LOG = false; const LOG_FILE_CONTENT = false; + const MODULE_NAME = "Poloniex API Client"; /* This function analizes the different situations we might encounter trying to access Poloniex and returns appropiate standard errors. */ @@ -411,8 +412,8 @@ let stringExchangeResponse = JSON.stringify(exchangeResponse); let stringExchangeErr = JSON.stringify(exchangeErr); - if (INFO_LOG === true) { logger.write("[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr); } - if (LOG_FILE_CONTENT === true) { logger.write("[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); } + if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr); } + if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); } if (stringExchangeErr.indexOf("ETIMEDOUT") > 0 || stringExchangeErr.indexOf("ENOTFOUND") > 0 || @@ -425,7 +426,9 @@ stringExchangeResponse.indexOf("Bad gateway") > 0 || stringExchangeResponse.indexOf("Internal error. Please try again") > 0))) { - logger.write("[WARN] analizeResponse -> Timeout reached or connection problem while trying to access the Exchange API. Requesting new execution later."); + logger.write(MODULE_NAME, "[WARN] analizeResponse -> Timeout reached or connection problem while trying to access the Exchange API. Requesting new execution later."); + logger.write(MODULE_NAME, "[WARN] analizeResponse -> stringExchangeErr = " + stringExchangeErr); + notOkCallBack(global.DEFAULT_RETRY_RESPONSE); return; @@ -433,27 +436,31 @@ if (JSON.stringify(exchangeResponse).indexOf("error") > 0) { - logger.write("[ERROR] analizeResponse -> Unexpected response from the Exchange."); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> Unexpected response from the Exchange."); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeResponse = " + exchangeResponse); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); return; } if (exchangeErr) { - logger.write("[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange."); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange."); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeErr = " + exchangeErr); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); return; } else { - logger.write("[INFO] analizeResponse -> No problem found."); + logger.write(MODULE_NAME, "[INFO] analizeResponse -> No problem found."); okCallBack(); return; } } } catch (err) { - logger.write("[ERROR] analizeResponse -> err.message = " + err.message); + logger.write(MODULE_NAME, "[ERROR] analizeResponse -> err.message = " + err.message); notOkCallBack(global.DEFAULT_FAIL_RESPONSE); return; } From 70ec8f0e905e6f70f8c31f79897de742f3879794 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 14 Jun 2018 16:10:57 +0200 Subject: [PATCH 119/334] User Authentication Implemented --- AABrowserAPI/UserAuthentication.js | 60 +++++++++++++++++++++++--- Scripts/AppPreLoader.js | 8 +++- Server/StorageAccessManager.js | 68 ++++++++++++------------------ TopSpace/DevTeam.js | 7 +-- TopSpace/EndUser.js | 5 +-- server.js | 11 +++-- 6 files changed, 100 insertions(+), 59 deletions(-) diff --git a/AABrowserAPI/UserAuthentication.js b/AABrowserAPI/UserAuthentication.js index 7d48837f7..1172f8f3c 100644 --- a/AABrowserAPI/UserAuthentication.js +++ b/AABrowserAPI/UserAuthentication.js @@ -1,23 +1,73 @@ exports.newUserAuthentication = function newUserAuthentication() { + MAX_STORAGE_PERMISSION_DAYS = 3; + let thisObject = { authenticateUser: authenticateUser, initialize: initialize } - let serverConfig; + let sessionManager; + let storageAccessManager; return thisObject; - function initialize(pServerConfig) { + function initialize(pSessionManager, pStorageAccessManager) { - serverConfig = pServerConfig; + sessionManager = pSessionManager; + storageAccessManager = pStorageAccessManager; } - function authenticateUser(callBackFunction) { + function authenticateUser(pSessionToken, callBackFunction) { - callBackFunction(global.DEFAULT_OK_RESPONSE); + let userProfile = { + userName: "Guest", + devTeams: [], + storagePermissions: new Map() + }; + + /* The first possibility is that the sessionToken is not there. */ + + if (pSessionToken === "") { + + callBackFunction(global.DEFAULT_OK_RESPONSE, userProfile); + return; + } + + /* The second posiibility is that the session is not found. */ + + let session = sessionManager.getSession(sessionToken); + + if (session === undefined) { + + let customResponse = { + result: global.CUSTOM_FAIL_RESPONSE.result, + message: "Invalid session token received. Please login again." + }; + + callBackFunction(customResponse, userProfile); + return; + + } + + /* The last one is that the session is found, meaning valid. */ + + userProfile.userName = session.userName; + userProfile.devTeams = session.devTeams; + + for (let i = 0; i < session.devTeams.lenght; i++) { + + let devTeam = session.devTeams[i]; + let readPermission = storageAccessManager.getPermission(devTeam, "READ", MAX_STORAGE_PERMISSION_DAYS); + let writePermission = storageAccessManager.getPermission(devTeam, "WRITE", MAX_STORAGE_PERMISSION_DAYS); + + userProfile.storagePermissions.set(devTeam + "." + "READ", readPermission); + userProfile.storagePermissions.set(devTeam + "." + "WRITE", writePermission); + + } + + callBackFunction(global.DEFAULT_OK_RESPONSE, userProfile); } } \ No newline at end of file diff --git a/Scripts/AppPreLoader.js b/Scripts/AppPreLoader.js index 318ee5384..5c3b1cc82 100644 --- a/Scripts/AppPreLoader.js +++ b/Scripts/AppPreLoader.js @@ -52,9 +52,11 @@ function loadAdvancedAlgosPlatform() { callServer(undefined, path, onServerReponded); - function onServerReponded(pResponse) { + function onServerReponded(pResponseFromServer) { - err = JSON.parse(pResponse); + let responseFromServer = JSON.parse(pResponseFromServer); + + err = responseFromServer.err; if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { @@ -63,6 +65,8 @@ function loadAdvancedAlgosPlatform() { } + window.USER_PROFILE = responseFromServer.userProfile; + loadModules(); } diff --git a/Server/StorageAccessManager.js b/Server/StorageAccessManager.js index a2630363f..02e6268df 100644 --- a/Server/StorageAccessManager.js +++ b/Server/StorageAccessManager.js @@ -1,7 +1,7 @@ exports.newStorageAccessManager = function newStorageAccessManager() { let thisObject = { - getPermissions: getPermissions, + getPermission: getPermission, initialize: initialize } @@ -34,7 +34,7 @@ } } - function getPermissions(pTeams) { + function getPermission(pTeam, pType, pDays) { let azure = require('azure-storage'); let blobService = azure.createBlobService(permissions.connectionString); @@ -43,52 +43,36 @@ startDate.setDate(startDate.getDate() - 1); let expiryDate = new Date(startDate); - expiryDate.setDate(startDate.getDate() + 3); + expiryDate.setDate(startDate.getDate() + pDays); - for (let i = 0; i < pTeams.length; i++) { + let azurePermissions; - let team = pTeams[i]; - - if (team.readConnectionString !== undefined) { - - let azurePermissions = azure.BlobUtilities.SharedAccessPermissions.READ; - - let container = team.codeName; - let blobName = undefined; - - let sharedAccessPolicy = { - AccessPolicy: { - Permissions: azurePermissions, - Start: startDate, - Expiry: expiryDate - } - }; - - let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy); - team.readConnectionString = "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + ""; + switch (pType) { + case "READ": { + azurePermissions = azure.BlobUtilities.SharedAccessPermissions.READ; + break; } - - if (team.writeConnectionString !== undefined) { - - let azurePermissions = azure.BlobUtilities.SharedAccessPermissions.WRITE; - - let container = team.codeName; - let blobName = undefined; - - let sharedAccessPolicy = { - AccessPolicy: { - Permissions: azurePermissions, - Start: startDate, - Expiry: expiryDate - } - }; - - let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy); - team.readConnectionString = "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + ""; + case "WRITE": { + azurePermissions = azure.BlobUtilities.SharedAccessPermissions.WRITE; + break; } } + + let container = team.codeName; + let blobName = undefined; + + let sharedAccessPolicy = { + AccessPolicy: { + Permissions: azurePermissions, + Start: startDate, + Expiry: expiryDate + } + }; + + let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy); + + return "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + ""; - return pTeams; } } diff --git a/TopSpace/DevTeam.js b/TopSpace/DevTeam.js index 0656f7835..89783ab6c 100644 --- a/TopSpace/DevTeam.js +++ b/TopSpace/DevTeam.js @@ -24,11 +24,12 @@ function newDevTeam() { function initialize() { - window.DEV_TEAM = window.localStorage.getItem("devTeam"); - - if (window.DEV_TEAM === null) { + if (window.USER_PROFILE.devTeams.length === 0) { window.DEV_TEAM = "Not a devTeam Member"; + } else { + window.DEV_TEAM = window.USER_PROFILE.devTeams[0]; } + } function getContainer(point) { diff --git a/TopSpace/EndUser.js b/TopSpace/EndUser.js index 04ff14729..aae1219ee 100644 --- a/TopSpace/EndUser.js +++ b/TopSpace/EndUser.js @@ -24,11 +24,8 @@ function newEndUser() { function initialize() { - window.USER_LOGGED_IN = window.localStorage.getItem("userName"); + window.USER_LOGGED_IN = window.USER_PROFILE.userName; - if (window.USER_LOGGED_IN === null) { - window.USER_LOGGED_IN = "Guest User"; - } } function getContainer(point) { diff --git a/server.js b/server.js index 5d08efd7b..f6578b345 100644 --- a/server.js +++ b/server.js @@ -465,11 +465,16 @@ function onBrowserRequest(request, response) { let userAuthentication = AABROSER_API_USER_AUTHENTICATION.newUserAuthentication(); userAuthentication.initialize(); - userAuthentication.authenticateUser(onFinish); + userAuthentication.authenticateUser(requestParameters[3], sessionManager, storageAccessManager, onFinish); - function onFinish(err) { + function onFinish(err, pUserProfile) { - respondWithContent(JSON.stringify(err), response); + let responseToBrowser = { + err: err, + userProfile: pUserProfile + }; + + respondWithContent(JSON.stringify(responseToBrowser), response); } break; From 09018069ce5eaa9a27bb7049582cb40f2a279d47 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 14 Jun 2018 17:56:52 +0200 Subject: [PATCH 120/334] User Authentication Running --- AABrowserAPI/UserAuthentication.js | 4 +- Scripts/AppPreLoader.js | 2 +- Server/SessionManager.js | 2 +- Server/StorageAccessManager.js | 2 +- index.html | 9 +- server.js | 192 ++++++++++++++++------------- 6 files changed, 120 insertions(+), 91 deletions(-) diff --git a/AABrowserAPI/UserAuthentication.js b/AABrowserAPI/UserAuthentication.js index 1172f8f3c..b4f7eb5c7 100644 --- a/AABrowserAPI/UserAuthentication.js +++ b/AABrowserAPI/UserAuthentication.js @@ -37,7 +37,7 @@ /* The second posiibility is that the session is not found. */ - let session = sessionManager.getSession(sessionToken); + let session = sessionManager.getSession(pSessionToken); if (session === undefined) { @@ -56,7 +56,7 @@ userProfile.userName = session.userName; userProfile.devTeams = session.devTeams; - for (let i = 0; i < session.devTeams.lenght; i++) { + for (let i = 0; i < session.devTeams.length; i++) { let devTeam = session.devTeams[i]; let readPermission = storageAccessManager.getPermission(devTeam, "READ", MAX_STORAGE_PERMISSION_DAYS); diff --git a/Scripts/AppPreLoader.js b/Scripts/AppPreLoader.js index 5c3b1cc82..b018bf194 100644 --- a/Scripts/AppPreLoader.js +++ b/Scripts/AppPreLoader.js @@ -45,7 +45,7 @@ function loadAdvancedAlgosPlatform() { /* The second thing to do is to send the tokenSession to the server, so that it can prepare the server side data structures needed. */ - let sessionToken = window.sessionToken; + let sessionToken = window.SESSION_TOKEN; if (sessionToken === undefined) { sessionToken = ""} let path = "AABrowserAPI/authenticateUser/" + sessionToken; diff --git a/Server/SessionManager.js b/Server/SessionManager.js index c7ce0c800..79e8a5874 100644 --- a/Server/SessionManager.js +++ b/Server/SessionManager.js @@ -21,7 +21,7 @@ let sessions = JSON.parse(fs.readFileSync(filePath, 'utf8')); - for (let i = 0; i < sessions.lenght; i++) { + for (let i = 0; i < sessions.length; i++) { let session = sessions[i]; diff --git a/Server/StorageAccessManager.js b/Server/StorageAccessManager.js index 02e6268df..c92afe468 100644 --- a/Server/StorageAccessManager.js +++ b/Server/StorageAccessManager.js @@ -58,7 +58,7 @@ } } - let container = team.codeName; + let container = pTeam.codeName.toLowerCase(); let blobName = undefined; let sharedAccessPolicy = { diff --git a/index.html b/index.html index c733eb598..035c7d6a6 100644 --- a/index.html +++ b/index.html @@ -3,8 +3,6 @@ Advanced Algos - - @@ -15,7 +13,12 @@ } - + diff --git a/server.js b/server.js index f6578b345..3474e8d03 100644 --- a/server.js +++ b/server.js @@ -148,8 +148,28 @@ function onBrowserRequest(request, response) { if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> Entering function."); } if (CONSOLE_LOG === true && request.url.indexOf("NO-LOG") === -1) { console.log("[INFO] server -> onBrowserRequest -> request.url = " + request.url); } - var htmlResponse; - var requestParameters = request.url.split("/"); + let htmlResponse; + let requestParameters = request.url.split("/"); + + + if (requestParameters[1].indexOf("index.html") >= 0) { + + /* + We use this to solve the problem when someone is arriving to the site with a sessionToken in the queryString. We extract here that + token, that will be sent later embedded into the HTML code, so that it can enter into the stardard circuit where any site can put + the sessionToken into their HTML code and from there the Browser app will log the user in. + */ + + let queryString = requestParameters[1].split("?"); + + requestParameters[1] = ""; + requestParameters[2] = queryString[1]; + homePage(); + + return; + } + + switch (requestParameters[1]) { @@ -464,8 +484,8 @@ function onBrowserRequest(request, response) { const AABROSER_API_USER_AUTHENTICATION = require('./AABrowserAPI/' + 'UserAuthentication'); let userAuthentication = AABROSER_API_USER_AUTHENTICATION.newUserAuthentication(); - userAuthentication.initialize(); - userAuthentication.authenticateUser(requestParameters[3], sessionManager, storageAccessManager, onFinish); + userAuthentication.initialize(sessionManager, storageAccessManager); + userAuthentication.authenticateUser(requestParameters[3], onFinish); function onFinish(err, pUserProfile) { @@ -820,77 +840,109 @@ function onBrowserRequest(request, response) { break; default: + { + homePage(); + } + } - if (requestParameters[1] === "") { + function homePage() { - let fs = require('fs'); - try { - let fileName = 'index.html'; - fs.readFile(fileName, onFileRead); + if (requestParameters[1] === "") { - function onFileRead(err, file) { + let fs = require('fs'); + try { + let fileName = 'index.html'; + fs.readFile(fileName, onFileRead); - if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> Entering function."); } + function onFileRead(err, file) { - try { + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> Entering function."); } - let fileContent = file.toString(); + try { - /* The second request parameters is the sessionToken, if it exists. */ + let fileContent = file.toString(); - if (requestParameters[2] !== "" && requestParameters[2] !== undefined) { + /* The second request parameters is the sessionToken, if it exists. */ - fileContent.replace("", "") + if (requestParameters[2] !== "" && requestParameters[2] !== undefined) { - } + fileContent = fileContent.replace("window.SESSION_TOKEN = ''", "window.SESSION_TOKEN = '" + requestParameters[2] + "'") - addImages(); + } - function addImages() { + addImages(); - if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addImages -> Entering function."); } + function addImages() { - const htmlLine = '' + '\n' + - ' ' + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addImages -> Entering function."); } - let devTeams = ecosystemObject.devTeams; + const htmlLine = '' + '\n' + + ' ' - addScript(devTeams); + let devTeams = ecosystemObject.devTeams; - function addScript(pDevTeams) { + addScript(devTeams); - if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addImages -> addScript -> Entering function."); } + function addScript(pDevTeams) { - for (let i = 0; i < pDevTeams.length; i++) { + if (CONSOLE_LOG === true) { console.log("[INFO] server -> onBrowserRequest -> onFileRead -> addImages -> addScript -> Entering function."); } - let devTeam = pDevTeams[i]; + for (let i = 0; i < pDevTeams.length; i++) { - let htmlLineCopy = htmlLine; + let devTeam = pDevTeams[i]; - let stringToInsert; - stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); - stringToInsert = stringToInsert.replace('@repo@', devTeam.codeName + "-Dev-Team"); - stringToInsert = stringToInsert.replace('@image@', devTeam.codeName + ".png"); - stringToInsert = stringToInsert.replace('@id@', devTeam.codeName + ".png"); + let htmlLineCopy = htmlLine; - let firstPart = fileContent.substring(0, fileContent.indexOf('') + 15); - let secondPart = fileContent.substring(fileContent.indexOf('') + 15); + let stringToInsert; + stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); + stringToInsert = stringToInsert.replace('@repo@', devTeam.codeName + "-Dev-Team"); + stringToInsert = stringToInsert.replace('@image@', devTeam.codeName + ".png"); + stringToInsert = stringToInsert.replace('@id@', devTeam.codeName + ".png"); - fileContent = firstPart + stringToInsert + secondPart; + let firstPart = fileContent.substring(0, fileContent.indexOf('') + 15); + let secondPart = fileContent.substring(fileContent.indexOf('') + 15); - for (let j = 0; j < devTeam.bots.length; j++) { + fileContent = firstPart + stringToInsert + secondPart; - let bot = devTeam.bots[j]; + for (let j = 0; j < devTeam.bots.length; j++) { - if (bot.profilePicture !== undefined) { + let bot = devTeam.bots[j]; + + if (bot.profilePicture !== undefined) { + + let htmlLineCopy = htmlLine; + + let stringToInsert; + stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); + stringToInsert = stringToInsert.replace('@repo@', bot.repo); + stringToInsert = stringToInsert.replace('@image@', bot.profilePicture); + stringToInsert = stringToInsert.replace('@id@', devTeam.codeName + "." + bot.profilePicture); + + let firstPart = fileContent.substring(0, fileContent.indexOf('') + 15); + let secondPart = fileContent.substring(fileContent.indexOf('') + 15); + + fileContent = firstPart + stringToInsert + secondPart; + + } + } + + for (let j = 0; j < devTeam.plotters.length; j++) { + + let plotter = devTeam.plotters[j]; + + for (let k = 0; k < plotter.modules.length; k++) { + + let module = plotter.modules[k]; + + if (module.profilePicture !== undefined) { let htmlLineCopy = htmlLine; let stringToInsert; stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); - stringToInsert = stringToInsert.replace('@repo@', bot.repo); - stringToInsert = stringToInsert.replace('@image@', bot.profilePicture); - stringToInsert = stringToInsert.replace('@id@', devTeam.codeName + "." + bot.profilePicture); + stringToInsert = stringToInsert.replace('@repo@', plotter.repo); + stringToInsert = stringToInsert.replace('@image@', module.profilePicture); + stringToInsert = stringToInsert.replace('@id@', devTeam.codeName + "." + plotter.codeName + "." + module.codeName + "." + module.profilePicture); let firstPart = fileContent.substring(0, fileContent.indexOf('') + 15); let secondPart = fileContent.substring(fileContent.indexOf('') + 15); @@ -899,53 +951,27 @@ function onBrowserRequest(request, response) { } } - - for (let j = 0; j < devTeam.plotters.length; j++) { - - let plotter = devTeam.plotters[j]; - - for (let k = 0; k < plotter.modules.length; k++) { - - let module = plotter.modules[k]; - - if (module.profilePicture !== undefined) { - - let htmlLineCopy = htmlLine; - - let stringToInsert; - stringToInsert = htmlLineCopy.replace('@devTeam@', devTeam.codeName); - stringToInsert = stringToInsert.replace('@repo@', plotter.repo); - stringToInsert = stringToInsert.replace('@image@', module.profilePicture); - stringToInsert = stringToInsert.replace('@id@', devTeam.codeName + "." + plotter.codeName + "." + module.codeName + "." + module.profilePicture); - - let firstPart = fileContent.substring(0, fileContent.indexOf('') + 15); - let secondPart = fileContent.substring(fileContent.indexOf('') + 15); - - fileContent = firstPart + stringToInsert + secondPart; - - } - } - } } } } - - respondWithContent(fileContent, response); + } - } - catch (err) { - console.log("[ERROR] server -> onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); - } + respondWithContent(fileContent, response); + + } + catch (err) { + console.log("[ERROR] server -> onBrowserRequest -> File Not Found: " + fileName + " or Error = " + err); } } - catch (err) { - console.log(err); - } - } else { - - respondWithFile("" + requestParameters[1], response); - } + catch (err) { + console.log(err); + } + } else { + + respondWithFile("" + requestParameters[1], response); + + } } function sendResponseToBrowser(htmlResponse) { From 13159013eefee689dc15c006891ba6fb02c2f0fe Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 14 Jun 2018 19:00:51 +0200 Subject: [PATCH 121/334] Repulsion Force Adjusted --- FloatingSpace/FloatingLayer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FloatingSpace/FloatingLayer.js b/FloatingSpace/FloatingLayer.js index ff2b3b53b..53b59b7b2 100644 --- a/FloatingSpace/FloatingLayer.js +++ b/FloatingSpace/FloatingLayer.js @@ -61,7 +61,7 @@ function newFloatingLayer() { let dyingFloatingObjects = []; - let maxTargetRepulsionForce = 0.0005; + let maxTargetRepulsionForce = 0.003; let currentHandle = 0; return thisObject; From 073045e20a187c2877999093bb3a6d69ee38dde5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 14 Jun 2018 20:01:32 +0200 Subject: [PATCH 122/334] DevTeam and Bot topButton implemented and tested --- Spaces/TopSpace.js | 16 ++++++++++---- TopSpace/CurrentBot.js | 50 +++++++++++++++++++++++++++++++++++++++--- TopSpace/DevTeam.js | 29 ++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 9 deletions(-) diff --git a/Spaces/TopSpace.js b/Spaces/TopSpace.js index 2c7d464ee..a41066c97 100644 --- a/Spaces/TopSpace.js +++ b/Spaces/TopSpace.js @@ -31,6 +31,14 @@ function newTopSpace() { function initialize() { + let sharedStatus = { + currentDevTeamIndex: 0, + currentUserBotIndex: 0, + currentProcessIndex: 0, + currentBotType: "", + eventHandler: newEventHandler() + }; + thisObject.companyLogo = newCompanyLogo(); thisObject.companyLogo.initialize(); @@ -38,16 +46,16 @@ function newTopSpace() { thisObject.endUser.initialize(); thisObject.devTeam = newDevTeam(); - thisObject.devTeam.initialize(); + thisObject.devTeam.initialize(sharedStatus); thisObject.currentBot = newCurrentBot(); - thisObject.currentBot.initialize(); + thisObject.currentBot.initialize(sharedStatus); thisObject.currentProcess = newCurrentProcess(); - thisObject.currentProcess.initialize(); + thisObject.currentProcess.initialize(sharedStatus); thisObject.currentStartMode = newCurrentStartMode(); - thisObject.currentStartMode.initialize(); + thisObject.currentStartMode.initialize(sharedStatus); thisObject.playStopButton = newPlayStopButton(); thisObject.playStopButton.initialize(); diff --git a/TopSpace/CurrentBot.js b/TopSpace/CurrentBot.js index f98fcc2f3..584a1e772 100644 --- a/TopSpace/CurrentBot.js +++ b/TopSpace/CurrentBot.js @@ -19,15 +19,59 @@ function newCurrentBot() { container.frame.position.y = 0; container.isDraggeable = false; + container.isClickeable = true; + + let sharedStatus; return thisObject; - function initialize() { + function initialize(pSharedStatus) { - window.CURRENT_BOT = window.localStorage.getItem("currentBot"); + sharedStatus = pSharedStatus; - if (window.CURRENT_BOT === null) { + if (window.USER_PROFILE.devTeams.length === 0) { window.CURRENT_BOT = "You have no Bots"; + } else { + + if (window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length === 0) { + window.CURRENT_BOT = "You have no Bots"; + } else { + window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + } + } + + thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick); + sharedStatus.eventHandler.listenToEvent("devTeam Changed", onDevTeamChanged); + } + + function onDevTeamChanged() { + + if (window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length > 0) { + + sharedStatus.currentUserBotIndex = 0; + window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + + } else { + + window.CURRENT_BOT = "You have no Bots"; + + } + } + + function onClick() { + + if (sharedStatus.currentUserBotIndex + 1 === window.USER_PROFILE.devTeams.length) { + + sharedStatus.currentUserBotIndex = 0; + window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + return; + } + + if (sharedStatus.currentUserBotIndex + 1 < window.USER_PROFILE.devTeams.length) { + + sharedStatus.currentUserBotIndex++; + window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + return; } } diff --git a/TopSpace/DevTeam.js b/TopSpace/DevTeam.js index 89783ab6c..bad342f67 100644 --- a/TopSpace/DevTeam.js +++ b/TopSpace/DevTeam.js @@ -19,17 +19,42 @@ function newDevTeam() { container.frame.position.y = 0; container.isDraggeable = false; + container.isClickeable = true; + + let sharedStatus; return thisObject; - function initialize() { + function initialize(pSharedStatus) { + + sharedStatus = pSharedStatus; if (window.USER_PROFILE.devTeams.length === 0) { window.DEV_TEAM = "Not a devTeam Member"; } else { - window.DEV_TEAM = window.USER_PROFILE.devTeams[0]; + window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; } + thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick); + } + + function onClick() { + + if (sharedStatus.currentDevTeamIndex + 1 === window.USER_PROFILE.devTeams.length) { + + sharedStatus.currentDevTeamIndex = 0; + window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; + sharedStatus.eventHandler.raiseEvent("devTeam Changed"); + return; + } + + if (sharedStatus.currentDevTeamIndex + 1 < window.USER_PROFILE.devTeams.length) { + + sharedStatus.currentDevTeamIndex++; + window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; + sharedStatus.eventHandler.raiseEvent("devTeam Changed"); + return; + } } function getContainer(point) { From 5d470480dec9c154b4a97cdba99e164b95efbf69 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 07:50:10 +0200 Subject: [PATCH 123/334] Process Button Implemented --- TopSpace/CurrentBot.js | 17 ++++++---- TopSpace/CurrentProcess.js | 69 ++++++++++++++++++++++++++++++++++---- TopSpace/DevTeam.js | 10 +++--- TopSpace/EndUser.js | 6 ++-- 4 files changed, 82 insertions(+), 20 deletions(-) diff --git a/TopSpace/CurrentBot.js b/TopSpace/CurrentBot.js index 584a1e772..73c05ad8d 100644 --- a/TopSpace/CurrentBot.js +++ b/TopSpace/CurrentBot.js @@ -1,14 +1,14 @@  function newCurrentBot() { - var thisObject = { + let thisObject = { container: undefined, draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + getContainer: getContainer, initialize: initialize }; - var container = newContainer(); + let container = newContainer(); container.initialize(); thisObject.container = container; @@ -21,6 +21,8 @@ function newCurrentBot() { container.isDraggeable = false; container.isClickeable = true; + const NOT_FOUND = "You have no Bots"; + let sharedStatus; return thisObject; @@ -30,11 +32,11 @@ function newCurrentBot() { sharedStatus = pSharedStatus; if (window.USER_PROFILE.devTeams.length === 0) { - window.CURRENT_BOT = "You have no Bots"; + window.CURRENT_BOT = NOT_FOUND; } else { if (window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length === 0) { - window.CURRENT_BOT = "You have no Bots"; + window.CURRENT_BOT = NOT_FOUND; } else { window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; } @@ -50,10 +52,11 @@ function newCurrentBot() { sharedStatus.currentUserBotIndex = 0; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + sharedStatus.eventHandler.raiseEvent("userBot Changed"); } else { - window.CURRENT_BOT = "You have no Bots"; + window.CURRENT_BOT = NOT_FOUND; } } @@ -64,6 +67,7 @@ function newCurrentBot() { sharedStatus.currentUserBotIndex = 0; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + sharedStatus.eventHandler.raiseEvent("userBot Changed"); return; } @@ -71,6 +75,7 @@ function newCurrentBot() { sharedStatus.currentUserBotIndex++; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + sharedStatus.eventHandler.raiseEvent("userBot Changed"); return; } } diff --git a/TopSpace/CurrentProcess.js b/TopSpace/CurrentProcess.js index 43a672c56..46dac05fc 100644 --- a/TopSpace/CurrentProcess.js +++ b/TopSpace/CurrentProcess.js @@ -1,14 +1,14 @@  function newCurrentProcess() { - var thisObject = { + let thisObject = { container: undefined, draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + getContainer: getContainer, initialize: initialize }; - var container = newContainer(); + let container = newContainer(); container.initialize(); thisObject.container = container; @@ -19,15 +19,70 @@ function newCurrentProcess() { container.frame.position.y = 0; container.isDraggeable = false; + container.isClickeable = true; + + const NOT_FOUND = "No Process Found"; + + let sharedStatus; return thisObject; - function initialize() { + function initialize(pSharedStatus) { - window.CURRENT_PROCESS = window.localStorage.getItem("currentProcess"); + sharedStatus = pSharedStatus; - if (window.CURRENT_PROCESS === null) { - window.CURRENT_PROCESS = ""; + if (window.USER_PROFILE.devTeams.length === 0) { + window.CURRENT_PROCESS = NOT_FOUND; + } else { + + if (window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length === 0) { + window.CURRENT_PROCESS = NOT_FOUND; + } else { + + if (window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length === 0) { + window.CURRENT_PROCESS = NOT_FOUND; + } else { + + window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; + + } + } + } + + thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick); + sharedStatus.eventHandler.listenToEvent("userBot Changed", onUserBotChanged); + } + + function onUserBotChanged() { + + if ( window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length > 0) { + + if (window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length > 0) { + + sharedStatus.currentProcessIndex = 0; + window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; + + return; + } + } + + window.CURRENT_PROCESS = NOT_FOUND; + } + + function onClick() { + + if (sharedStatus.currentProcessIndex + 1 === window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { + + sharedStatus.currentProcessIndex = 0; + window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; + return; + } + + if (sharedStatus.currentProcessIndex + 1 < window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { + + sharedStatus.currentProcessIndex++; + window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; + return; } } diff --git a/TopSpace/DevTeam.js b/TopSpace/DevTeam.js index bad342f67..4a6431d3b 100644 --- a/TopSpace/DevTeam.js +++ b/TopSpace/DevTeam.js @@ -1,14 +1,14 @@  function newDevTeam() { - var thisObject = { + let thisObject = { container: undefined, draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + getContainer: getContainer, initialize: initialize }; - var container = newContainer(); + let container = newContainer(); container.initialize(); thisObject.container = container; @@ -21,6 +21,8 @@ function newDevTeam() { container.isDraggeable = false; container.isClickeable = true; + const NOT_FOUND = "Not a devTeam Member"; + let sharedStatus; return thisObject; @@ -30,7 +32,7 @@ function newDevTeam() { sharedStatus = pSharedStatus; if (window.USER_PROFILE.devTeams.length === 0) { - window.DEV_TEAM = "Not a devTeam Member"; + window.DEV_TEAM = NOT_FOUND; } else { window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; } diff --git a/TopSpace/EndUser.js b/TopSpace/EndUser.js index aae1219ee..47ff40866 100644 --- a/TopSpace/EndUser.js +++ b/TopSpace/EndUser.js @@ -1,14 +1,14 @@  function newEndUser() { - var thisObject = { + let thisObject = { container: undefined, draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. + getContainer: getContainer, initialize: initialize }; - var container = newContainer(); + let container = newContainer(); container.initialize(); thisObject.container = container; From 95d51b4332fcae414230653b6a5c77b91b8198df Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 08:57:14 +0200 Subject: [PATCH 124/334] Bug onClick --- TopSpace/CurrentBot.js | 4 ++-- TopSpace/CurrentProcess.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TopSpace/CurrentBot.js b/TopSpace/CurrentBot.js index 73c05ad8d..95b71a805 100644 --- a/TopSpace/CurrentBot.js +++ b/TopSpace/CurrentBot.js @@ -63,7 +63,7 @@ function newCurrentBot() { function onClick() { - if (sharedStatus.currentUserBotIndex + 1 === window.USER_PROFILE.devTeams.length) { + if (sharedStatus.currentUserBotIndex + 1 === window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { sharedStatus.currentUserBotIndex = 0; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; @@ -71,7 +71,7 @@ function newCurrentBot() { return; } - if (sharedStatus.currentUserBotIndex + 1 < window.USER_PROFILE.devTeams.length) { + if (sharedStatus.currentUserBotIndex + 1 < window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { sharedStatus.currentUserBotIndex++; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; diff --git a/TopSpace/CurrentProcess.js b/TopSpace/CurrentProcess.js index 46dac05fc..435710522 100644 --- a/TopSpace/CurrentProcess.js +++ b/TopSpace/CurrentProcess.js @@ -71,14 +71,14 @@ function newCurrentProcess() { function onClick() { - if (sharedStatus.currentProcessIndex + 1 === window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { + if (sharedStatus.currentProcessIndex + 1 === window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length) { sharedStatus.currentProcessIndex = 0; window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; return; } - if (sharedStatus.currentProcessIndex + 1 < window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { + if (sharedStatus.currentProcessIndex + 1 < window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length) { sharedStatus.currentProcessIndex++; window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; From 5f947f1f6857cf4488e34cdadc6e35886c612cc6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 08:59:54 +0200 Subject: [PATCH 125/334] Bug #2 fixed --- TopSpace/CurrentBot.js | 4 ++-- TopSpace/CurrentProcess.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TopSpace/CurrentBot.js b/TopSpace/CurrentBot.js index 95b71a805..ed2db0809 100644 --- a/TopSpace/CurrentBot.js +++ b/TopSpace/CurrentBot.js @@ -63,7 +63,7 @@ function newCurrentBot() { function onClick() { - if (sharedStatus.currentUserBotIndex + 1 === window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { + if (sharedStatus.currentUserBotIndex + 1 === window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { sharedStatus.currentUserBotIndex = 0; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; @@ -71,7 +71,7 @@ function newCurrentBot() { return; } - if (sharedStatus.currentUserBotIndex + 1 < window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { + if (sharedStatus.currentUserBotIndex + 1 < window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length) { sharedStatus.currentUserBotIndex++; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; diff --git a/TopSpace/CurrentProcess.js b/TopSpace/CurrentProcess.js index 435710522..e543e2619 100644 --- a/TopSpace/CurrentProcess.js +++ b/TopSpace/CurrentProcess.js @@ -71,14 +71,14 @@ function newCurrentProcess() { function onClick() { - if (sharedStatus.currentProcessIndex + 1 === window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length) { + if (sharedStatus.currentProcessIndex + 1 === window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length) { sharedStatus.currentProcessIndex = 0; window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; return; } - if (sharedStatus.currentProcessIndex + 1 < window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length) { + if (sharedStatus.currentProcessIndex + 1 < window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes.length) { sharedStatus.currentProcessIndex++; window.CURRENT_PROCESS = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].processes[sharedStatus.currentProcessIndex].name; From 658b9434e74c9961942bc324a8b9a56093b1d73e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 09:30:59 +0200 Subject: [PATCH 126/334] Better Backgrounds with smaller logos --- TimelineChart.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/TimelineChart.js b/TimelineChart.js index 0cc908687..adaa9047e 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -969,8 +969,11 @@ let backgroundLogoPoint1; let backgroundLogoPoint2; - let imageHeight = 84; - let imageWidth = 300; + let imageHeight = 42; + let imageWidth = 150; + + let MAX_COLUMNS = 16; + let MAX_ROWS = 7; let point1 = { x: viewPort.visibleArea.topLeft.x, @@ -1007,7 +1010,7 @@ let offSet = 0; - for (let j = 0; j < 5; j++) { + for (let j = 0; j < MAX_ROWS; j++) { if (offSet === -imageWidth * 8) { @@ -1017,7 +1020,7 @@ offSet = -imageWidth * 8; } - for (let i = 0; i < 12; i = i + 4) { + for (let i = 0; i < MAX_COLUMNS; i = i + 4) { let logo = logoA; @@ -1028,7 +1031,7 @@ offSet = 0; - for (let j = 0; j < 5; j++) { + for (let j = 0; j < MAX_ROWS; j++) { if (offSet === -imageWidth * 8) { @@ -1038,7 +1041,7 @@ offSet = -imageWidth * 8; } - for (let i = 1; i < 12; i = i + 4) { + for (let i = 1; i < MAX_COLUMNS; i = i + 4) { let logo = logoB; @@ -1049,7 +1052,7 @@ offSet = 0; - for (let j = 0; j < 5; j++) { + for (let j = 0; j < MAX_ROWS; j++) { if (offSet === -imageWidth * 8) { @@ -1059,7 +1062,7 @@ offSet = -imageWidth * 8; } - for (let i = 2; i < 12; i = i + 4) { + for (let i = 2; i < MAX_COLUMNS; i = i + 4) { let logo = logoExchange; @@ -1070,7 +1073,7 @@ offSet = 0; - for (let j = 0; j < 5; j++) { + for (let j = 0; j < MAX_ROWS; j++) { if (offSet === -imageWidth * 8) { @@ -1080,7 +1083,7 @@ offSet = -imageWidth * 8; } - for (let i = 3; i < 12; i = i + 4) { + for (let i = 3; i < MAX_COLUMNS; i = i + 4) { let logo = logoAA; From c61f423f5f9c2c991f7abaa83d32312e9f29660a Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 12:18:09 +0200 Subject: [PATCH 127/334] We have at the browser the user Profile Storage Permissions including the READ to the platform container. --- AABrowserAPI/UserAuthentication.js | 18 +++++++++++++----- Server/StorageAccessManager.js | 5 ++--- TopSpace/EndUser.js | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/AABrowserAPI/UserAuthentication.js b/AABrowserAPI/UserAuthentication.js index b4f7eb5c7..cf93785d3 100644 --- a/AABrowserAPI/UserAuthentication.js +++ b/AABrowserAPI/UserAuthentication.js @@ -24,7 +24,7 @@ let userProfile = { userName: "Guest", devTeams: [], - storagePermissions: new Map() + storagePermissions: [] }; /* The first possibility is that the sessionToken is not there. */ @@ -59,14 +59,22 @@ for (let i = 0; i < session.devTeams.length; i++) { let devTeam = session.devTeams[i]; - let readPermission = storageAccessManager.getPermission(devTeam, "READ", MAX_STORAGE_PERMISSION_DAYS); - let writePermission = storageAccessManager.getPermission(devTeam, "WRITE", MAX_STORAGE_PERMISSION_DAYS); + let container = devTeam.codeName.toLowerCase(); - userProfile.storagePermissions.set(devTeam + "." + "READ", readPermission); - userProfile.storagePermissions.set(devTeam + "." + "WRITE", writePermission); + let readPermission = storageAccessManager.getPermission(container, "READ", MAX_STORAGE_PERMISSION_DAYS); + let writePermission = storageAccessManager.getPermission(container, "WRITE", MAX_STORAGE_PERMISSION_DAYS); + + userProfile.storagePermissions.push([devTeam.codeName + "." + "READ", readPermission]); + userProfile.storagePermissions.push([devTeam.codeName + "." + "WRITE", writePermission]); } + /* In order to be able to download a bot source code, the user will need READ permissions over the Platform container. */ + + let container = "aaplatform"; + let readPermission = storageAccessManager.getPermission(container, "READ", MAX_STORAGE_PERMISSION_DAYS); + userProfile.storagePermissions.push(["AAPlatform" + "." + "READ", readPermission]); + callBackFunction(global.DEFAULT_OK_RESPONSE, userProfile); } diff --git a/Server/StorageAccessManager.js b/Server/StorageAccessManager.js index c92afe468..97b1d09d6 100644 --- a/Server/StorageAccessManager.js +++ b/Server/StorageAccessManager.js @@ -34,7 +34,7 @@ } } - function getPermission(pTeam, pType, pDays) { + function getPermission(pContainer, pType, pDays) { let azure = require('azure-storage'); let blobService = azure.createBlobService(permissions.connectionString); @@ -58,7 +58,6 @@ } } - let container = pTeam.codeName.toLowerCase(); let blobName = undefined; let sharedAccessPolicy = { @@ -69,7 +68,7 @@ } }; - let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy); + let sasToken = blobService.generateSharedAccessSignature(pContainer, blobName, sharedAccessPolicy); return "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + ""; diff --git a/TopSpace/EndUser.js b/TopSpace/EndUser.js index 47ff40866..602c3cf42 100644 --- a/TopSpace/EndUser.js +++ b/TopSpace/EndUser.js @@ -26,6 +26,20 @@ function newEndUser() { window.USER_LOGGED_IN = window.USER_PROFILE.userName; + /* Here we will rearrange the storage permissions array into a map, so that it can be easily consumed when needed. */ + + let permissionsMap = new Map; + + for (i = 0; i < window.USER_PROFILE.storagePermissions.length; i++) { + + let permission = window.USER_PROFILE.storagePermissions[i]; + + permissionsMap.set(permission[0], permission[1]); + + } + + window.USER_PROFILE.storagePermissions = permissionsMap; + } function getContainer(point) { From 465ba5c2ff1f158b462482e70bcd3189c272b2a8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 12:44:25 +0200 Subject: [PATCH 128/334] devTeam Dependencies need READ permissions to storage. Done. --- AABrowserAPI/UserAuthentication.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AABrowserAPI/UserAuthentication.js b/AABrowserAPI/UserAuthentication.js index cf93785d3..b6fb0e12e 100644 --- a/AABrowserAPI/UserAuthentication.js +++ b/AABrowserAPI/UserAuthentication.js @@ -67,6 +67,18 @@ userProfile.storagePermissions.push([devTeam.codeName + "." + "READ", readPermission]); userProfile.storagePermissions.push([devTeam.codeName + "." + "WRITE", writePermission]); + /* Each devTeam potentially depends on data from other devTeams. The user will need the storage permissions to read that data. */ + + for (j = 0; j < devTeam.devTeamDependencies.length; j++) { + + let dependecy = devTeam.devTeamDependencies[j]; + + let container = dependecy.toLowerCase(); + + let readPermission = storageAccessManager.getPermission(container, "READ", MAX_STORAGE_PERMISSION_DAYS); + + userProfile.storagePermissions.push([dependecy + "." + "READ", readPermission]); + } } /* In order to be able to download a bot source code, the user will need READ permissions over the Platform container. */ From 067f4f46f696c2eaf35ba06607d83c83c51907d5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 13:51:59 +0200 Subject: [PATCH 129/334] BOT REPO --- AABrowserAPI/UserAuthentication.js | 2 +- CloudVM/CloudVM.js | 2 +- TopSpace/CurrentBot.js | 5 +++++ TopSpace/DevTeam.js | 13 ++++++++----- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/AABrowserAPI/UserAuthentication.js b/AABrowserAPI/UserAuthentication.js index b6fb0e12e..8ff0b2007 100644 --- a/AABrowserAPI/UserAuthentication.js +++ b/AABrowserAPI/UserAuthentication.js @@ -80,7 +80,7 @@ userProfile.storagePermissions.push([dependecy + "." + "READ", readPermission]); } } - + /* In order to be able to download a bot source code, the user will need READ permissions over the Platform container. */ let container = "aaplatform"; diff --git a/CloudVM/CloudVM.js b/CloudVM/CloudVM.js index f5cb0c148..fa9c83e24 100644 --- a/CloudVM/CloudVM.js +++ b/CloudVM/CloudVM.js @@ -100,7 +100,7 @@ function newCloudVM() { + window.DEV_TEAM + "/" + "members" + "/" + window.USER_LOGGED_IN + "/" - + window.CURRENT_BOT + "/" + + window.CURRENT_BOT_REPO + "/" + window.CURRENT_PROCESS + "/" + "User.Bot.js" ; diff --git a/TopSpace/CurrentBot.js b/TopSpace/CurrentBot.js index ed2db0809..237bb0126 100644 --- a/TopSpace/CurrentBot.js +++ b/TopSpace/CurrentBot.js @@ -37,8 +37,10 @@ function newCurrentBot() { if (window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots.length === 0) { window.CURRENT_BOT = NOT_FOUND; + window.CURRENT_BOT_REPO = "NO REPO"; } else { window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + window.CURRENT_BOT_REPO = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].repo; } } @@ -52,6 +54,7 @@ function newCurrentBot() { sharedStatus.currentUserBotIndex = 0; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + window.CURRENT_BOT_REPO = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].repo; sharedStatus.eventHandler.raiseEvent("userBot Changed"); } else { @@ -67,6 +70,7 @@ function newCurrentBot() { sharedStatus.currentUserBotIndex = 0; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + window.CURRENT_BOT_REPO = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].repo; sharedStatus.eventHandler.raiseEvent("userBot Changed"); return; } @@ -75,6 +79,7 @@ function newCurrentBot() { sharedStatus.currentUserBotIndex++; window.CURRENT_BOT = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].displayName; + window.CURRENT_BOT_REPO = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].userBots[sharedStatus.currentUserBotIndex].repo; sharedStatus.eventHandler.raiseEvent("userBot Changed"); return; } diff --git a/TopSpace/DevTeam.js b/TopSpace/DevTeam.js index 4a6431d3b..fec528132 100644 --- a/TopSpace/DevTeam.js +++ b/TopSpace/DevTeam.js @@ -24,6 +24,7 @@ function newDevTeam() { const NOT_FOUND = "Not a devTeam Member"; let sharedStatus; + let label = "" return thisObject; @@ -32,9 +33,10 @@ function newDevTeam() { sharedStatus = pSharedStatus; if (window.USER_PROFILE.devTeams.length === 0) { - window.DEV_TEAM = NOT_FOUND; + label = NOT_FOUND; } else { - window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; + window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].codeName; + label = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; } thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick); @@ -45,7 +47,8 @@ function newDevTeam() { if (sharedStatus.currentDevTeamIndex + 1 === window.USER_PROFILE.devTeams.length) { sharedStatus.currentDevTeamIndex = 0; - window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; + window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].codeName; + label = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; sharedStatus.eventHandler.raiseEvent("devTeam Changed"); return; } @@ -53,7 +56,8 @@ function newDevTeam() { if (sharedStatus.currentDevTeamIndex + 1 < window.USER_PROFILE.devTeams.length) { sharedStatus.currentDevTeamIndex++; - window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; + window.DEV_TEAM = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].codeName; + label = window.USER_PROFILE.devTeams[sharedStatus.currentDevTeamIndex].displayName; sharedStatus.eventHandler.raiseEvent("devTeam Changed"); return; } @@ -83,7 +87,6 @@ function newDevTeam() { thisObject.container.frame.draw(false, false); let fontSize = 12; - let label = window.DEV_TEAM; let point = { x: thisObject.container.frame.width * 1 / 3, From cbc9db1f8dc462ce223c7f9adbcdc1f89fc683b3 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 15 Jun 2018 17:15:43 +0200 Subject: [PATCH 130/334] Saving the bot code and retrieving it without the cache --- AABrowserAPI/BotCode.js | 28 ++++++++++++++-------------- CloudVM/CloudVM.js | 15 ++++++++++++--- Server/BotsScripts.js | 2 +- Server/CloudScripts.js | 4 ++-- Server/ConfigReader.js | 10 +++++----- Server/Storage.js | 8 ++++++-- server.js | 8 ++++---- 7 files changed, 44 insertions(+), 31 deletions(-) diff --git a/AABrowserAPI/BotCode.js b/AABrowserAPI/BotCode.js index 9a5474840..b60e05229 100644 --- a/AABrowserAPI/BotCode.js +++ b/AABrowserAPI/BotCode.js @@ -65,26 +65,26 @@ let blobService = storage.createBlobService(connectionString); let blobPath = pOrg + "/" + pRepo + "/" + pPath; - let blobText = nodeify(pFileContent.toString()); + let blobText = nodify(pFileContent.toString()); - blobService.createBlockBlobFromText('aaplatform', blobPath, blobText, onFileReceived); + blobService.createBlockBlobFromText('aaplatform', blobPath, blobText, onFileCreated); - function onFileReceived(err, text, response) { + function onFileCreated(err, text, response) { try { - if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileReceived -> Entering function."); } - if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileReceived -> err = " + JSON.stringify(err)); } - if (LOG_FILE_CONTENT === true) { console.log("[INFO] API -> writeData -> onFileReceived -> response = " + JSON.stringify(response)); } - if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileReceived -> pOrg = " + pOrg); } - if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileReceived -> pRepo = " + pRepo); } - if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileReceived -> pPath = " + pPath); } + if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileCreated -> Entering function."); } + if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileCreated -> err = " + JSON.stringify(err)); } + if (LOG_FILE_CONTENT === true) { console.log("[INFO] API -> writeData -> onFileCreated -> response = " + JSON.stringify(response)); } + if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileCreated -> pOrg = " + pOrg); } + if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileCreated -> pRepo = " + pRepo); } + if (CONSOLE_LOG === true) { console.log("[INFO] API -> writeData -> onFileCreated -> pPath = " + pPath); } if (err !== null || text === null) { - if (CONSOLE_LOG === true) { console.log("[ERROR] API -> writeData -> onFileReceived -> Error Received from API Library. "); } - if (CONSOLE_LOG === true) { console.log("[ERROR] API -> writeData -> onFileReceived -> err = " + JSON.stringify(err)); } - if (CONSOLE_LOG === true) { console.log("[ERROR] API -> writeData -> onFileReceived -> Returning an empty JSON object string. "); } + if (CONSOLE_LOG === true) { console.log("[ERROR] API -> writeData -> onFileCreated -> Error Received from API Library. "); } + if (CONSOLE_LOG === true) { console.log("[ERROR] API -> writeData -> onFileCreated -> err = " + JSON.stringify(err)); } + if (CONSOLE_LOG === true) { console.log("[ERROR] API -> writeData -> onFileCreated -> Returning an empty JSON object string. "); } callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; @@ -94,7 +94,7 @@ callBackFunction(global.DEFAULT_OK_RESPONSE); } catch (err) { - console.log("[ERROR] API -> writeData -> onFileReceived -> err.message = " + err.message); + console.log("[ERROR] API -> writeData -> onFileCreated -> err.message = " + err.message); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } @@ -105,7 +105,7 @@ } } - function nodeify(pData) { + function nodify(pData) { let start = pData.indexOf('function') + 9; diff --git a/CloudVM/CloudVM.js b/CloudVM/CloudVM.js index fa9c83e24..62c81268f 100644 --- a/CloudVM/CloudVM.js +++ b/CloudVM/CloudVM.js @@ -93,7 +93,7 @@ function newCloudVM() { if (currentBotCode !== previousBotCode) { - console.log("Bot code changes detected."); + console.log("CloudVM -> Bot code changes detected."); let path = "AABrowserAPI" + "/" + "saveBotCode" + "/" @@ -109,9 +109,18 @@ function newCloudVM() { function onServerResponse(err) { - if (INFO_LOG === true) { logger.write("[INFO] checkForChangesInBotCode -> onServerResponse -> Entering function."); } - if (INFO_LOG === true) { logger.write("[INFO] checkForChangesInBotCode -> onServerResponse -> err = " + err); } + err = JSON.parse(err); + if (INFO_LOG === true) { logger.write("[INFO] checkForChangesInBotCode -> onServerResponse -> Entering function."); } + + if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { + + if (ERROR_LOG === true) { logger.write("[ERROR] checkForChangesInBotCode -> onServerResponse -> err.message = " + err.message); } + console.log("CloudVM -> Changes in code NOT saved. Plase check the error log and try again."); + return; + } + + console.log("CloudVM -> Changes in code saved."); } } } diff --git a/Server/BotsScripts.js b/Server/BotsScripts.js index 517024d1d..afe92bc2e 100644 --- a/Server/BotsScripts.js +++ b/Server/BotsScripts.js @@ -24,7 +24,7 @@ function getScript(pDevTeam, pSource, pRepo, pPath, callBackFunction) { - storage.getStorageData(pDevTeam + "/" + pSource, pRepo, pPath, onDataArrived); + storage.getStorageData(pDevTeam + "/" + pSource, pRepo, pPath, false, onDataArrived); function onDataArrived(pData) { diff --git a/Server/CloudScripts.js b/Server/CloudScripts.js index ecd9976ce..cd1c3b841 100644 --- a/Server/CloudScripts.js +++ b/Server/CloudScripts.js @@ -42,7 +42,7 @@ */ - storage.getStorageData('AdvancedAlgos', 'AACloud', 'web.config.json', onDataArrived); + storage.getStorageData('AdvancedAlgos', 'AACloud', 'web.config.json', true, onDataArrived); function onDataArrived(pData) { @@ -84,7 +84,7 @@ let webModule = pCloudWebConfig.webModules[i].name + '.js'; - storage.getStorageData('AdvancedAlgos', 'AACloud', webModule, onDataArrived); + storage.getStorageData('AdvancedAlgos', 'AACloud', webModule, true, onDataArrived); function onDataArrived(pData) { diff --git a/Server/ConfigReader.js b/Server/ConfigReader.js index 0a0f84767..27a144f3a 100644 --- a/Server/ConfigReader.js +++ b/Server/ConfigReader.js @@ -91,7 +91,7 @@ */ - storage.getStorageData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', onDataArrived); + storage.getStorageData('AdvancedAlgos', 'AAPlatform', 'ecosystem.json', true, onDataArrived); function onDataArrived(pData) { @@ -145,7 +145,7 @@ requestsSent++; - storage.getStorageData(host.codeName + "/" + "competitions", competition.repo, competition.configFile, onDataArrived); + storage.getStorageData(host.codeName + "/" + "competitions", competition.repo, competition.configFile, true, onDataArrived); function onDataArrived(pData) { @@ -202,7 +202,7 @@ requestsSent++; - storage.getStorageData(host.codeName + "/" + "plotters", plotter.repo, plotter.configFile, onDataArrived); + storage.getStorageData(host.codeName + "/" + "plotters", plotter.repo, plotter.configFile, true, onDataArrived); function onDataArrived(pData) { @@ -291,7 +291,7 @@ requestsSent++; - storage.getStorageData(devTeam.codeName + "/" + "bots", bot.repo, bot.configFile, onDataArrived); + storage.getStorageData(devTeam.codeName + "/" + "bots", bot.repo, bot.configFile, true, onDataArrived); function onDataArrived(pData) { @@ -354,7 +354,7 @@ requestsSent++; - storage.getStorageData(devTeam.codeName + "/" + "plotters", plotter.repo, plotter.configFile, onDataArrived); + storage.getStorageData(devTeam.codeName + "/" + "plotters", plotter.repo, plotter.configFile, true, onDataArrived); function onDataArrived(pData) { diff --git a/Server/Storage.js b/Server/Storage.js index 52485b519..f71f1f692 100644 --- a/Server/Storage.js +++ b/Server/Storage.js @@ -17,7 +17,7 @@ } - function getStorageData(pOrg, pRepo, pPath, callBackFunction) { + function getStorageData(pOrg, pRepo, pPath, saveAtCache, callBackFunction) { try { @@ -72,8 +72,12 @@ if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> pRepo = " + pRepo); } if (CONSOLE_LOG === true) { console.log("[INFO] Storage -> getStorageData -> onFileReceived -> pPath = " + pPath); } - storageData.set(pOrg + '.' + pRepo + '.' + pPath, text); + if (saveAtCache === true) { + storageData.set(pOrg + '.' + pRepo + '.' + pPath, text); + + } + if (err !== null || text === null) { if (CONSOLE_LOG === true) { console.log("[ERROR] Storage -> getStorageData -> onFileReceived -> Error Received from Storage Library. "); } diff --git a/server.js b/server.js index 3474e8d03..5081b70e6 100644 --- a/server.js +++ b/server.js @@ -470,9 +470,9 @@ function onBrowserRequest(request, response) { } botCode.saveBotCode(devTeam, source, repo, path, pData, onResponse); - function onResponse(err, pResponse) { + function onResponse(err) { - respondWithContent(JSON.stringify(pResponse), response); + respondWithContent(JSON.stringify(err), response); } } @@ -782,7 +782,7 @@ function onBrowserRequest(request, response) { case "Plotters": // This means the plotter folder, not to be confused with the Plotters script! { - storage.getStorageData(requestParameters[2] + "/" + "plotters", requestParameters[3], requestParameters[4], onDataArrived); + storage.getStorageData(requestParameters[2] + "/" + "plotters", requestParameters[3], requestParameters[4], true, onDataArrived); function onDataArrived(pData) { @@ -794,7 +794,7 @@ function onBrowserRequest(request, response) { case "PlotterPanels": // This means the PlotterPanels folder, not to be confused with the Plotter Panels scripts! { - storage.getStorageData(requestParameters[2] + "/" + "plotters", requestParameters[3], requestParameters[4], onDataArrived); + storage.getStorageData(requestParameters[2] + "/" + "plotters", requestParameters[3], requestParameters[4], true, onDataArrived); function onDataArrived(pData) { From 62716b564680680a2540e880c7aa8081808350cf Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 16 Jun 2018 08:26:54 +0200 Subject: [PATCH 131/334] Change Require Timeout to 30 seconds --- Scripts/require.js | 2 +- server.js | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Scripts/require.js b/Scripts/require.js index 31a06544e..7a373df4c 100644 --- a/Scripts/require.js +++ b/Scripts/require.js @@ -203,7 +203,7 @@ var REQUIREJS, REQUIRE, DEFINE; //Defaults. Do not set a default for map //config to speed up normalize(), which //will run faster if there is no default. - waitSeconds: 7, + waitSeconds: 30, baseUrl: './', paths: {}, bundles: {}, diff --git a/server.js b/server.js index 5081b70e6..29ab0100b 100644 --- a/server.js +++ b/server.js @@ -124,8 +124,6 @@ function initialize() { } } - - function startHtttpServer() { if (CONSOLE_LOG === true) { console.log("[INFO] server -> startHtttpServer -> Entering function."); } From 88b5758e4f8ae1ac47bbafa130fc112872a4566f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 16 Jun 2018 08:38:06 +0200 Subject: [PATCH 132/334] Timeout moved to 60 sec --- Scripts/require.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Scripts/require.js b/Scripts/require.js index 7a373df4c..f9476f532 100644 --- a/Scripts/require.js +++ b/Scripts/require.js @@ -203,7 +203,7 @@ var REQUIREJS, REQUIRE, DEFINE; //Defaults. Do not set a default for map //config to speed up normalize(), which //will run faster if there is no default. - waitSeconds: 30, + waitSeconds: 60, baseUrl: './', paths: {}, bundles: {}, From 30745869fe5bc9f93de939303be98c526596aa0a Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 16 Jun 2018 08:48:29 +0200 Subject: [PATCH 133/334] Pannel Width Changed --- Dashboard.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dashboard.js b/Dashboard.js index 8f638b8c1..0739c7469 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -29,8 +29,8 @@ FONT_ASPECT_RATIO = 0.50; UI_PANEL = { WIDTH: { - SMALL: 200, - NORMAL: 250, + SMALL: 100, + NORMAL: 150, LARGE: 350 }, HEIGHT: { From 8df11106f26252ca4df8d7f5443d5ad552d13302 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 16 Jun 2018 10:02:34 +0200 Subject: [PATCH 134/334] Product Card Inhaced. --- ProductCard.js | 93 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 60 insertions(+), 33 deletions(-) diff --git a/ProductCard.js b/ProductCard.js index 2d191b8a4..1954757d6 100644 --- a/ProductCard.js +++ b/ProductCard.js @@ -387,53 +387,80 @@ } } + drawProductLoadStatus(); + + function drawProductLoadStatus() { - /* Now the small circle */ + let offFillStyle = 'rgba(' + UI_COLOR.RED + ', 0.10)'; + let onFillStyle = 'rgba(' + UI_COLOR.GREEN + ', 0.10)'; + let loadingFillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.10)'; - centerPoint = { - x: thisObject.container.frame.width / 2, - y: thisObject.container.frame.height / 2 - }; + switch (thisObject.status) { - /* Now the transformations. */ + case PRODUCT_CARD_STATUS.ON: + browserCanvasContext.fillStyle = onFillStyle; + break; - centerPoint = thisObject.container.frame.frameThisPoint(centerPoint); + case PRODUCT_CARD_STATUS.OFF: + browserCanvasContext.fillStyle = offFillStyle; + break; - /* Lets start the drawing. */ + case PRODUCT_CARD_STATUS.LOADING: + browserCanvasContext.fillStyle = loadingFillStyle; + break; - browserCanvasContext.beginPath(); - browserCanvasContext.arc(centerPoint.x, centerPoint.y, 3, 0, 2 * Math.PI); - browserCanvasContext.closePath(); + } - let offFillStyle = 'rgba(232, 28, 28, 0.75)'; - let onFillStyle = 'rgba(45, 232, 28, 0.75)'; - let loadingFillStyle = 'rgba(237, 227, 47, 0.75)'; + let centerPoint = { + x: thisObject.container.frame.width / 2, + y: thisObject.container.frame.height / 2 - 13 + }; - switch (thisObject.status) { + let point1 = { + x: centerPoint.x - plotterImageSize.width / 2, + y: centerPoint.y - plotterImageSize.height / 2 - 7 + }; - case PRODUCT_CARD_STATUS.ON: - browserCanvasContext.fillStyle = onFillStyle; - break; + let point2 = { + x: centerPoint.x + plotterImageSize.width / 2, + y: centerPoint.y - plotterImageSize.height / 2 - 7 + }; - case PRODUCT_CARD_STATUS.OFF: - browserCanvasContext.fillStyle = offFillStyle; - break; + let point3 = { + x: centerPoint.x + plotterImageSize.width / 2, + y: centerPoint.y - plotterImageSize.height / 2 + 7 + }; - case PRODUCT_CARD_STATUS.LOADING: - browserCanvasContext.fillStyle = loadingFillStyle; - break; + let point4 = { + x: centerPoint.x - plotterImageSize.width / 2, + y: centerPoint.y - plotterImageSize.height / 2 + 7 + }; + + /* Now the transformations. */ + + point1 = thisObject.container.frame.frameThisPoint(point1); + point2 = thisObject.container.frame.frameThisPoint(point2); + point3 = thisObject.container.frame.frameThisPoint(point3); + point4 = thisObject.container.frame.frameThisPoint(point4); + + browserCanvasContext.beginPath(); + browserCanvasContext.moveTo(point1.x, point1.y); + browserCanvasContext.lineTo(point2.x, point2.y); + browserCanvasContext.lineTo(point3.x, point3.y); + browserCanvasContext.lineTo(point4.x, point4.y); + browserCanvasContext.closePath(); + + browserCanvasContext.fill(); + + browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 1)'; + browserCanvasContext.lineWidth = 0.1; + browserCanvasContext.stroke(); } - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 1)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.closePath(); - - /* print the text */ + /* + print the text + */ let labelPoint; let fontSize = 10; From dba6329827d9807dea339b2b7ad82db66930fd93 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 16 Jun 2018 10:48:08 +0200 Subject: [PATCH 135/334] Transparency adjusted --- ProductCard.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ProductCard.js b/ProductCard.js index 1954757d6..f63c8705e 100644 --- a/ProductCard.js +++ b/ProductCard.js @@ -391,9 +391,9 @@ function drawProductLoadStatus() { - let offFillStyle = 'rgba(' + UI_COLOR.RED + ', 0.10)'; - let onFillStyle = 'rgba(' + UI_COLOR.GREEN + ', 0.10)'; - let loadingFillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.10)'; + let offFillStyle = 'rgba(' + UI_COLOR.RED + ', 0.20)'; + let onFillStyle = 'rgba(' + UI_COLOR.GREEN + ', 0.20)'; + let loadingFillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.40)'; switch (thisObject.status) { From 219e7f73be405a36de2f4a606bcb0fcea945f96b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 16 Jun 2018 11:57:41 +0200 Subject: [PATCH 136/334] Logs Improved --- CloudVM/PoloniexAPIClient.js | 28 ++++++++++++++++------------ Images/bots/Mariam.png | Bin 0 -> 79390 bytes Images/bots/Olivia.png | Bin 0 -> 18843 bytes Images/bots/Tom.png | Bin 0 -> 16438 bytes 4 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 Images/bots/Mariam.png create mode 100644 Images/bots/Olivia.png create mode 100644 Images/bots/Tom.png diff --git a/CloudVM/PoloniexAPIClient.js b/CloudVM/PoloniexAPIClient.js index 6b33e0267..e6a990643 100644 --- a/CloudVM/PoloniexAPIClient.js +++ b/CloudVM/PoloniexAPIClient.js @@ -1,9 +1,9 @@ function newPoloniexAPIClient() { const INFO_LOG = true; - const LOG_FILE_CONTENT = false; + const LOG_FILE_CONTENT = true; - window.SESSION_TOKEN = window.localStorage.getItem("sessionToken"); + const MODULE_NAME = "CloudVM -> Poloniex Client API"; let thisObject = { API: { @@ -28,8 +28,8 @@ let stringExchangeResponse = JSON.stringify(exchangeResponse); let stringExchangeErr = JSON.stringify(exchangeErr); - if (INFO_LOG === true) { logger.write("[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr); } - if (LOG_FILE_CONTENT === true) { logger.write("[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); } + if (INFO_LOG === true) { logger.write( MODULE_NAME, "[INFO] analizeResponse -> stringExchangeErr = " + stringExchangeErr); } + if (LOG_FILE_CONTENT === true) { logger.write( MODULE_NAME, "[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); } if (stringExchangeErr.indexOf("ETIMEDOUT") > 0 || stringExchangeErr.indexOf("ENOTFOUND") > 0 || @@ -42,35 +42,39 @@ stringExchangeResponse.indexOf("Bad gateway") > 0 || stringExchangeResponse.indexOf("Internal error. Please try again") > 0))) { - logger.write("[WARN] analizeResponse -> Timeout reached or connection problem while trying to access the Exchange API. Requesting new execution later."); + logger.write( MODULE_NAME, "[WARN] analizeResponse -> Timeout reached or connection problem while trying to access the Exchange API. Requesting new execution later."); notOkCallBack(global.DEFAULT_RETRY_RESPONSE); return; } else { - if (JSON.stringify(exchangeResponse).indexOf("error") > 0) { + if (exchangeResponse !== null && exchangeResponse !== undefined) { - logger.write("[ERROR] analizeResponse -> Unexpected response from the Exchange."); - notOkCallBack(global.DEFAULT_FAIL_RESPONSE); - return; + 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 = " + stringExchangeResponse); + notOkCallBack(global.DEFAULT_FAIL_RESPONSE); + return; + } } if (exchangeErr) { - logger.write("[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange."); + logger.write( MODULE_NAME, "[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange."); notOkCallBack(global.DEFAULT_FAIL_RESPONSE); return; } else { - logger.write("[INFO] analizeResponse -> No problem found."); + logger.write( MODULE_NAME, "[INFO] analizeResponse -> No problem found."); okCallBack(); return; } } } catch (err) { - logger.write("[ERROR] analizeResponse -> err.message = " + err.message); + logger.write( MODULE_NAME, "[ERROR] analizeResponse -> err.message = " + err.message); notOkCallBack(global.DEFAULT_FAIL_RESPONSE); return; } diff --git a/Images/bots/Mariam.png b/Images/bots/Mariam.png new file mode 100644 index 0000000000000000000000000000000000000000..3e0e6cac2465bdfb48e8e176b2c508b598be7915 GIT binary patch literal 79390 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�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�aG6DjEhY&R-I03<(O#HDK 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²SjXR_X7QVi6hW0ss!PA%HV90{ho^|P?DoZaeDH|o^+5>dj; z$mg5hq1e-d??(ok9|ItlP`4vESKRaH>S|{oX4lNCsyFNI-z5_o$(?wAnNK=~{+Ob~ ziAGsJm*+|)Zn1>+4Q4-`Fo5=?fYqgM>wZw+C0_zN>#I_b7#UI&pu(rrX1^I^dYS$~ zU)d;E1P&kan_`@h#~%8_CNoGm2oAYENsj(;oiqX%7{hphkq50a=H6dSEveUtj%;)B zbkXeYO37pWO0__Av;zBneHtfEgRY_I?HP%Ww$L4$a_$4X1^qV9Vk~)QF%W}}gyUY2 zsVi4X^e9944_h)4Yy~G?=7}Ha8T`v4T^%L)(>Pt}3+K+YY(2rP6zW{4Kg|udB`b;O z1-|AABqs(0;EV!d4Z;d)%l}G|pGzK```AMp146aiy6$I0Av0nG=ZmR}TcfF?fRT`p zA+xIi(c$2!u`!$qmrtpx+C+q}dm|Pd;k1s;8zA01O0J}VOc88#a3W{2Cj?fzbGRKl zH~dVWSYUOXgDQ=Z4-%=uHgj zU&sDtx0GYrqSoEE@-Hu`rw1ux;6XzQ@>vdL($cZBT(-GPF&hT<%N4eg1&!u>Gn!1z zsWwu>(@ni}nzny@mKO0H@ISy|=wmh~`pe1DO*}~X)K}XG&t&&U3h0n%+LjI7%0Ajh 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 Z9E1M<1<*h59U}{%XsGBa*DKmY{~v{WCmsL* literal 0 HcmV?d00001 diff --git a/Images/AAMasters/Plotters-Stairs-Patterns/CandleStairs.png b/Images/AAMasters/Plotters-Stairs-Patterns/CandleStairs.png new file mode 100644 index 0000000000000000000000000000000000000000..a21beb7a0811f5b3a40d1604912b59d41b7a3299 GIT binary patch literal 9158 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 NfP%Vw?R&G}{{celWuO26 literal 0 HcmV?d00001 diff --git a/Images/AAMasters/Plotters-Stairs-Patterns/VolumeStairs.png b/Images/AAMasters/Plotters-Stairs-Patterns/VolumeStairs.png new file mode 100644 index 0000000000000000000000000000000000000000..363096eeebf8427259199c30aef468b6ca308532 GIT binary patch literal 6976 zcmZ{J1yCGavvvX`Kp-Rw1cKY*5Zo=Wi!AOM+#x`43+}SG>x&27U_loM7Tnz>xGruB zm+!v!ulnm&-I|)|Q_q~PKK-1o=XA|PC@V_8eM9`_#fukjAu?dq7cXAMKaU|8ub-a} zLL_<5=Cz5OH2B5Sf3APvC5g`n<~JD~=VvSP-?vo1t>}vv#J&))xVp!}QMOK^-kAxJAUMJxB65$Y){xG@Y;|-W1vakLhMN`zn-T%&F{wYg!C494}7|B zw`tawNr-PlHQm*R%Ocw!<$g>{+1McVN|^j^P{&6`td3snx-j@5ux_^4Xq%nP>qZ+f z&azf=pDHe6MFWMy7`!e=8RTTtYOYskZjT%!H$1*B_lqLcH&>B3we9b$@AfIyNM9h` zS80*M4&YuZP~`n}{L{S{lw8hyK?L&1-uw6?M$$akC*Bh=en8oi%biJIc9Z>L9t&hSv}|JR+U~ZNVD- zS+8sEY-#xnlqHLNA9?)Vkj!Vn{mvvD!v=e`A%%k)_9U_sa6Jt@am!<1u&_j&pKIIx zS^NZ;S}3!d(G=V4_=x?Du9zoMs{M)0c1f}B{+gSYn@fj^!LUTjrg zP4BqtXrge6OA-F){e7_1!bK_#TTPzb9ULq58X?MHKM=7vYbEYj0pY8R3{wpb_6@vo z^VB)~LH?JB>QeAb=?P6KM;(Rm&-7?x59_xpel4P@nhNZ(j%vp;`4|DOSFNztxtfYQ zUYDs*?2wg@;ieA{!n!b;sHo&|5*iabbHV|qAwtI??Bl#^@|2Xg-vf`|!N9=|Z?mQ9 z`&46oov=5Vz?)mor9+nHx?s4MM!tnJr>5L6-MH9OEq-N6#FG>3QTc)8rxp~>xvWoTN==F$Wrqw6z(dw5fak>K4yn~#v~=h$Qm*L7rD#zDIO0( z2TLL@gULeQqa=noPx}zBs1!O%fM)$;WW zg>LUJ8TqII?ADRFnIK(OD{k<u`hmxI`@ZF$kU5;j7W$*}*qG zQp22E-n!J2wy2>Y;YC6sJ8sbv9#2EhGo9BXDnLwoM}W@(>qb2fM`9g-KdWK|1Vh)6 zvS59@vO8=!k*#ZuE}d;p-r|Y?M@7xO6T^2$3eIa8mU`aA@edkV6yvrt?sgS*ew3x` zcOJ;^=;07mDDMs|qBZj+pR@|k&ZaG!jprx#{%EPr9T{F_@S)+Se}t)grDg=EGBmw& ztlXNLy}?1tXJMY|exG^kSYLIg?8Bt;&B}#9i7e5dzLt}LbLMI-!uXnCUkXK~mkbm5 zd}8k!>;bH-#;K{aHVxyyfoTju!gCC4(BJw^fvrg1@ri`KB~o0;>B8*%2xjX@xFc$9 z4fS!h`|i`@weI44sir@)x4W{iS4t%ssoQr}b7T0Z%4OTbo!LEXL5n|=Pu)ie2>E?d zLc|ejWxZ!BtycI(TEV;BhUc)}c5cfYani1I)kA1QEG7KjL$0Uu$SZl@U5EzK$WU4QDI(VT`s6mvzd2Wh}ZyjzueyE6pi z>r|W=4HI8AO}xbwW72c~{L)2H$4TKB?Ka`pqB9xE0!(hl!Cl&;1GptqQX@#-BKRB< zL_GevLYU^m;RB5$L#>|WxI0WOzR0@is=0{WpBHx@g)l=0X6E!8 zr?f{;oHXEXAf!Is=d$d_^-ULOAe(HulJ(*yjbZR7+<@m-sAZ`7A7401BD9;s&HPnu zE6Z_ZL)rV;M0#+L&s?d9>4wO~{Y~-*Gdl%?I**%_@Nf>WR+an}V|ShvHjZiO_1|H- z;~CbChSd}gWgFuKJ_f@~hR#ncV>i>V!bZoSNBUf=vl|Y&QD%^cJSMp%9!$SL2A5Iv z7QETwUhchU^`*}S68-xVixD9~@byZUP}t&X3BO=q*t_H-yZl7F!!_O4C}P3k?<=ct zE2|~w}Zl9Ujw%qHpDM5mVHRiR$6P->=<@R+ueW;D!M&Kfk za2Osd>+eN}s3h7g1jqbHj7Xi1LA+D?9U$MLaPfGbU!RfEeor=jE^tG*lw!H}10uoA7iL!vhUdnBd;|K8<3y}8 z6ejcAA$j0i#&eq6?M`3+&?M-ltvZjaIGe)OK}mJZr&~ zfqE5n+JtD>s{lr6@IRWFRUi6{l$6oEH@Ce;^8NaGdgS4V7_I`)Ii(P24q@5*X0&ilguQbUlxm+m&}> zQZEy=!3QqpLa%e>VPTNN2;~<{E|yNkPCp3MS=RVf6?x6VBno7ifJpgY6?D_T(Sj0JsUV*Oa!4CtSBX%uoq zLz0szsRKGZRa3@}HvG=;4i69C(KSRXfo*th#$(s+Ty3;qk=So0phC;s?EK7i&9WDZ ztC9A0@qUPq1@G&hz3O|ugi8e8mrQpQPgKZQv6+Q!3tB6xx(^sx@5+)^@ZgszX{l+J zrg(tGuO?N7uo}jL%Wv%8I@xC=Y9rcx$@I!248N%J^5#ruO{nCI3Nt|h_4Pyip4|II zAGIfkhha)9=qLfTrr(-Zo*VAgx(ijtD^t99%MX62cu)wgwvMv$3E*|0*r`|;YR zMr!|Vj`4k_yV_hxd@-?uorY!D!jYq4{^zyfJQk`*_LJ80i4o*YZ7oWo627s8#h4q3 zrdAIhapX1OQ<^4VqhTdK+O$6rJPh}q)JtS|pT?b4E}^4w*WOx@_z?^|oe0PHHQ)XC zu(Q#!TwU}&gk8+6 zb-pSl0F>qcRAFHQ!_P0DkE(-9rikqixtzpcAp2#o6MsO5?FOl@@yllwg$d?%9%7-P z1PscjXuJ#5GmtVky;-E74ws>PkMTvbHEdFCX@k0^4p@+s^@bW30}UlLS^R^m-w|>2 z&o=?jmGGJJn}8$Eolgz$_sDPr5#sdQ`}oh4?;E2%-g(Bf-hUDl6LSib{TKTh?$0!$ zI|L;$F)RpH`5z2B2dKxwYD_>dHp>u70tUXvK>I{uj#<`sv0P>eYQ%7@D2NGlzqT|Mh}m-|Lok(IUuj zZguR;Igsq={H|)yz%OjeB^g*|3}pGs#ucf06WE^hy~2B#9?UT{@cK(tNZ&=c3?!n5 z8tvUT+`VQz@~e|wJVU4=1cGeTKssYPT4?& z*x%9Pr_!wMFA=la+_po1c%;V_yp?E(1tzX_ie%QZE=MPzotK zDYYx=VPt_!jC%u^N4LD*cfkcF=xV@)5epqot+c3=Lb73#VGOzKjwxl@m_r2ny+p(Q zJ4ix!Fq$;SaWOO`0zaOK+o>~e(R|TiKX27y-q4aaCpC@F5RCuIoN41&#C<>tp`81T zVs^-CtRoti%}cV?tGTKxU~y;e=%7?!jeUhas#)7qMkc(J3d2iEm5xc<)LOY9E|5i_ zhnCE13sCatuP;^(nK7Cfl9SuEN++;(5r9wfeb6v(U)pl?)Z#m$`AS__s76MmqT!UA zc>jsay<7Kah8ga+0WKU1+&qiRHqp=B7epT?&`IK$)T@X-Ad$~|Rni99!?IB=_>jFE zWI7VGbUoKcu}9McYVegg&wABeUNRNkHp)MNit`Xde#5GGD4M~q3b7vVHX89!EeRs@ zk0KSp5!m+Ubgo;<8maEC7@BmeonYshvV&@?0)yejDVFJBTl&j2*W-nSJr{O`RE^_KL%CKa)Au6RBE$(^(%8!zX6uU%DHeW)Ly=EKZ670zh zpjNf%^=<1)g}3i1)+jF3Oj#$475_s?PvMR?8nVOXdu;AE3%_7Q7J{;gELSq;M*4vA}vCY%pW$-gg0dWZlOV@iz(xmu8 zcie_0rZ|21IHH$@P@7Mz>|$r`(Hh`ZFPtcS@}298h^3OWVQbmUV2tzExj`(90=p+a zb%ZBaeI&#L=M$%j9j%9oh%TK-Z~_&$LyNw7tKVLe8s=M zU|9G)Etj8S9Puju_e~o3#%GN*l|TkjpyWt*zR?s1uwyO4VKIJfV*E_2Q#&3idx>;BXu>M=^%PJ_PQL&;5e!GRLL)4j0k!9q1UK9t;sjDusm zgF8@~zV1m8>uP|kZRn{OK10O=2@f9~O517sQ!TXp&(e%tyExm?8VM1~sD9qw`&cT~ zt)FZBiJ8uTN%yW}D`WM!izf9|k{eNqPt(=MMSK~3}_Q?gm=MCFhs94C3J|@uD}wO0MGUm+~lF0ZAUGUUP!!s(%M zE7LQlj%}lww_u99(f$Jgs8lxZ+aV$cVZ$$@WeUyc$Wd2jukc>`I8T?E)lC`e1o=Hz zL0hyu@fKNNyJ$_0<0#QAU9w2z-Ng(Shz{GA zPk+Qe-z)>svq#^oE@7yOofua*3q*RpTmB1On+z6^h#&;4Y?h7Z$2!W^hVIPPpqo zF5Cv$^UOwU?mwukg$cL=5c}fz0i{@5tr!|bJ4*9xzvdW!U9v9}>K*(OABT%)93EaQ z3RJrZM1BvG9#2ivMlY!?d3sc!;q(x9MaSl8y}T(d`5O$2Y_B#b%*X;(r0cPCGf%`= z$_(A6eA%;2eXGCI*e1#3+8T(Es*D2AuXT7~*~rLCbk+TkOAIFF(M5?{NSf2F=ByY@ZSnDWyM$9+&$qFKrD2CQ zFt-8hNh^?jn* z?6U)XNeD(f%7W>4zW=DqC2H>dyv!a+e{kx81>y^8tKa=dkp@AijQ_Fm?CK&nK;3Mr({#omYS)uvlvyHI}@qM3^VOrJ+G$e#NCJ1{tAaZ@9+$ZZ^M6t2%f}LMwtC`ewIf)|B|A0 zk<@lEGj=f-G<7n6HZM5YIrv%Gxmh^`)Y-WNd3Xf5I9SP}FFx zS_xwO($DAl=XZUd=X$%33i=j499UiW>!U(vd+)gRoazfV9w@IX^T1xP?} zivs`IhnNVzCHOwJiQf`gX{oCa-28ie=_*UXe?#(4!`KtQ*Z9v{ZNy1|fPlMDQ$@+Z zZ(%PtFxF<&Y(>$V=_+K*$)4HQ_h7oa`|;PyRyx@ix{1_@QMag7m}01Dc%#|)0c_!^ z#Km9!l834)al{Zu)BL*p`0|}fF>x_5)hf@6yt!2?+{Ho%c7J!g!~VkmB1b>rQV%UJ z-ythz=;HaHSYc}4c_QzR#gE#`kh0g0Xman2C zwKuaTE&LM*SgI}I@~e(DB1!oZfD-hPr>#wD3{*y zz3=GLs*4+R^*X}kPB&K8iGTw(wDH4`zW!ATM;Q1=7i9Xj4>?DR8%J?;;9zN+60dR* zEv0{T!t0AHu%T{k+gzOht55;x!$4g;0hT!^sd{B=C~!r&Y1K{#l3|kt;43!>KW3Sv zzfjih;MB0fHs_v50DA+Z*rL&kl8g+=Z}8Vh=LHOtYIkkgIUP*OM}A~SOwAtFD|Gl= z`OnU}92^@)x5$VG|q1A z2?PCkRtGPR3XJq+T%_FS?%>p8Ag-<6@}xi&PLWMI& zK+*nkvruqTF*>%@8;wpVyMwgUIUGA37@186lia&Uc~xL3C$hBE-D)P(mFlrGo0;%= z>MurlBtXi}6B*n`Q{uAd*+O00y^PZ5vGveY(~h6 z{D?7m8dv8DQxxy?lXCC=4S<{>WRsDnQQ8TI(#QuE!7Pt!`|Vjiym)K-l7NKpHb3=k z4Hk+wnG`Q>fB1$7C!oT^i|fCrVtr3|`vX+7xbyOMMfJ7{r1j5&ZK@3a0eJjv#LI1+a-jiE$Db1m_In~IrJrME7phK zcT>IRkmphJv>gXIMzFSGHc=Zk<&xDgl5i`M{bTR_{tI?ENW`eHZ~wy)un=HNM<${A z+Z$yZR6#~gPIKA^D{G1rkkW9;c!l06Z@Th)R~$`^m3gQZ*(tos zq`? zGH>WHx7jGE2X%}Bk=zJNoxsymj)vZ!lOH^2O?Yi1KK6^4O7x`hYVm0GFBh!L=Wj;V zhv&-wHdVK-zK<(*qq9e#(ttVH)+2_#{&!faZRYJ&h25ek_Njhu>`}fvLs^4#dSn)c zcl6~RwH+>T~&3SgSg4mb0=Y!8^yNd1+yL-P2IxI2rJ1oJ9 zAYBqoc1-0=B0nmWajSoxTX^H|&-p=Io|J_x#z8zwJbSOUgE`K=Z6hLPj*b>1BxGWz z7pu{F&^3ANF>jc2JR1Xd=9p0MJb$+ClvE#j{rR1fY=BYmZol40z!o~GzQ;U)M=h+Q zg({1|HQS+^mKXQd;GL)JQF49$L-9kEcR00OPTTw%9@|hc&;T2|#~Wou&msirgw%6s z$&=TQ4*V6m{w|o;zLjPaG*6$>W#j`Rqg;1hA(&JnU8PE={R2X2IAgg>d@XAEYw#pfW1O;*RE8_nF>L&@}G9O<2ytyZ+MT zt&Sn``|$ckE5vY9ZQN5M)!*DLQVW>V-!D>-&E-6h9T!2=anZ>+K~5umdY~mdpFh7$}hh&+Lq{a!TR@=i}uqaIu&&dfITvH`r5n&ptw%aaqc=OgVat~WKkCo zjPfb58f|mEokDfNuHD7giD@(dMgYU?(6uf_b!^&~m(rA33{nSw^B%iBulVHavuqi9 z;8I^v%JWvHy>;w#M{0gqK~_eYPx-)Lx?EjMG0%)YoTZ&5x6L4OmDtg+XZkJzSkzQ7 zNih(A;ZZ^6E>O@+)vq)Li2BsCD4^Y%-N8SwkW5?iiR<+xCEZHpxW z@7MnZf-tbtQHG4ik(zc65`;!(f!&rqI)ee~ewrw#=qu0pZ8dWsrt6Ms!@d#x`a6^Q zcNcZ@qfLNnqG}lOG^4brt5f(DS0rfK0@3YD==5}z(>An~`}@Mhq&gxbsL)~N^3so9 z*?gvLBLgbWa8QI$&@W0XDe#C^3-XlTxM(^yMse$Fwyftvul~;W)NW+#bKq=Tk!Ms)#=$JaR1x#-$JmTeV@wlW#a>d z=~?+@jla(WT|(B^iMy*!+c-fV3=5$u62 zq=~y`JCjgWh^(%tt5E#20NQ^QKLH&he=$!*K7R9Ky_0dVzqkuM$gq}_$?>mVNz(HT zAZD%ZP#@4RoUDLEw-Ba!aAjk6ol5LnMkS{7=6Rq`jesOVifL1C8#61E(1>{$0f<%R zS?s4ovV+6&Q&di7%2KGGH^^tltM}cmLJ^$W>DOd;A=q2Mrdq5~k|x4E?cv9#y4=A? zhc$Efxx#z2@&+e${#fyqn_}t=w<`nxm~+@h#23ZyK54z1VfiR#3?FQq(cIHPkVu~PsY0s%S2WxoIPBG}dkIx~f&@Qt;vGI>(`nt#_nR?_1 zP4g@o+6M0LturiaW^BoFc<^z6DEIlu=E6pUxR5h9KI*G#E1>Jo?(gae66FEEt_ls`lz-% zbC_A$Y1P+vc(C)dr+OF8?Xwb>z`XuJjgEv%J*vt`aL0*v(L^GO48ULGX2$qrn#WpN zE^w2l#8Mb!pucE;oTge=XAL_(2}mzl{rhGbqSn}1yo*V)>0)?(fJ~lBEKO=**0DzN zOgFG>)rG#|1>9vo&zm7?c4N8>ACIrQcPAZswVn`r8V+RTTe8WG=e$3*FFQ*$5nOkg zn43j4_0`5}*~hk~QENRstk_x$db-m5tZ8)aW-EBz4+b}uB3*etAJBRI`1}wd(%`k~ zxISqeD`3_-m2>zM$3Hf?ai^_wXx+NDzeV_e&-W;AaM(F4I)SX~ z5i6B|%go(^&8{5m&Xu|_)R1|U{!C@qo_4-mUsc?d;pq9eQ_&vDg9YO5b%{mpkyF?x z)Z=)aYHG&p=ssv;Ir`HyHb^XY7N_~t zl@@!@H8Oe4@GAmcJKbG8kr%wrS>v)2)Xwa*|3{+a=eA1S^5M=-uWnHsdT5p1R#AFZ z9FNt_x%Cjn_^nDK_)DUpO!S-9)g&9R({`?7)@fAxI*1y!>(0u3#mS39IvHu9KKI#C zuPl4{s!=U=cQrEw+S;zDiy$onr*#k^OVf?nlu|Y4__9$y<&jUKU#0dd=_w=ffiG`h z9)pa_P4%uicMR-wn4f}~k@p)WQ|B8!8LacX(!Fl%_Y3xo&Um9m`V%%Arb*@n=QXs} z5PUYkt42^2GF&Rz(e4Jqq;zBUog@~21O<-@@#C_w9LPtP(nyI#2K=M!&+DUWt=nL= zO^=+!gMBgfSTMxke&r*ig9n!_dH#ogYJuby$NxJQ`@aRoq*3wLnIXQz%}OPsP2-X# z^|rP`*K7Fb@_p|d3#VAaIsYg9G47^&NFBNSxyc_3d?9lD_8>m{HwCe`T$V(C3txa=3-J)WJ^h)GbmI{xeGJ&Y?r<<3VpZLFA5qe#Zis z>->+bk-csHrd>g@r>%H1s+xJ1_YZgclkPaAX$?*1)psFMf8GaO`bg%`JWSa=;ZU#OQlsOO=r3+d z?a=MnIRNT%*xwz~Vbc}pudM}{_)rcCZz%KvsS>n5Q<@gBtP=rATBJp~s!Ma%-KDda z)c0*!H;0eR2s1ue&|ZbM$;A~!y@fGMZnvZOOOznWU0lwhZ`D14ebOmjCLvV2{dq%l zy|JXD z2{SGXObBSAig*h3cBWi?^Y+#6q70^7&(DkI<{a*#U)x|OrCFfbm8Ml{|0*1AlBMa( zG;MKo2bH(<>?_g!Ec?x~LUHjON@S!-w-JmbUP9GfkRP`}d)z0SNtgBDA6*nHeQ^7Y zle#(3hxdWL<@ENyh-nFY74#>AOv2x_VF)*z%@6elVWR%SqhjIqAty=o2TTjQ7zH3k z?LlMwn}gPo(JjW)8G-E94w!Tp#|Hpk4u}Pv1})&X9rpCDcvirkT#_4HA|5MRK6e*A zo5_s7p~bjuQ;M?~s)zBHIGJqvR8dU%UGo2MDnq%e@+aDaJ9);are^*`qy(10YCd1|nY+*3l{Ko*KK8H)cO>HYr%Q}W~Vs_!vVh=P(vFp&`evQZZyKEAQ5x&Ec` zYI&K?H;{;*_Nc1p(FpXYvwfehv6*kNP?#egvl(JA#dpsPO04RS5sODJazSDCdi1qR z^LL#M}Ip5LVn{B=rG2I7%1{d#^)Z1ds*m{!{E91P|cYJeF%Rj;I zwk_FbO$7NzrF7vk-t(CV{-ryhTSZvAV1B-rOQFU{;TqLFJF(s>I0J8wwJ;ConWZ6M|(j z06GNNP^aI2eNVUc{y)yWP=A`0|0+~COuTnAfuJSNKYkyV=LsZV!TrhJl@I!?>B{5L z|BDKBnJYWd5PUVX)&!Kyko*${y6R-U`#4|k3k_MMZq>y(yAUB5uZ*~<6N-M|bM)QQ zEEe}JW4iAE7HENag7m@UmN)GfY+kCC1;|{b#{*Pt?c1ZP{l< z**extQ{{QJ?^W?`;62Qnd-?yIuFf|~h`js!wicfqWEMtA@njKol3suCly6oBUk5$~ z-iE=JmhCB+^LhSAC@SU+Wpzf)n`-4a=Q5S0K2HVekGax5u3L_4ZFX-~s^Qry9rqE# zj3YwcIXAT7n2ZZjh+rdm+f{Pf7?TV#4l+ z|HF>DC6#yd#QUGp{}x>qJWl^FfZn|%&ZDUOkGRjFxIJJ^$??Q2iKi_Q6e05rFSRsZ(<`Yzcl$i$Hg40lx9)CdSSUz0W@YltVU5*x4pf-G z1=8IFju9A#nD6Dv&3DK-HHvtSwAjfV4x1{}#V;xXb3jX@#%4X1*l*IG!@v1}Lv1qr zY^aS8X|lVJ!eJqOtX#kEGvCp6d8{?7M1P%rlInApw>QJJ@gI{)c`UInl1le6F?|A5 z6u7g)zi-p;xsm6DzXCid{3UbBW$=eZuwtd?W3rNu$8ti1r8LbhbG@JNW8yUqPVK74 z7w*t*L9LG>VSViU9kY_(9z?8Go}acdYeD8^y;|=2jN_fi)&tkkG1pe^JIJ@Y>*V8F zC^r`i!CL+jL+;tikj(bLV3P_b1`$|fN9DfP7hXVBycSiN)q8oO!f6_F3$h-Jvu zHn6vEav+h4-H5pfeoO zvC3`RGHR^c!HL%cNne%5%i_Oe+F<5MnEgGIiP=C)mtH89{02@zLg4_C{W!q2wjQ9~U_iBDONPjXhsI4mQzKzdQa2+;pqH>H#^ zF3T8!aNTYcWO7m^nf!3Hzq2|IK*>H+8EP{ zs*->fzcB_s>&*a)9W)}`qre?YuRSlfH?mkY|{L^?Tz#f6MmTV;4c*4e z{4e>mS;I;MO-qu-^!tjsGm-m1p9(T#!R_4k#Vls>uMJz=Zp|^~{jv!&&sP&ZACh}rI38PSTIQ#wL9o-Kr@41S$@4;G$E#k8y0++tP9^ubR~4kyoiwTJduPu{yXp@5ZJoRgxhg*K{(2weK%DH&=- z=VJ2j-xm#Cl>WB1iVB82F4VNR>KB-YkM`^a@ORe93`@Pb0R0LI|8$E;87VCm0`ze) zg#Qbs6Wt80{@y9QMYhMs45TKpQC&! zmU$nXmm;Ih9!}x4D59+%=%e+%0A$U{8`$w7Keg*VP!&&G|7kx}iPK~DZycY0H>2z8 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 literal 0 HcmV?d00001 diff --git a/Images/AAMasters/Plotters-Trading/Live.png b/Images/AAMasters/Plotters-Trading/Live.png new file mode 100644 index 0000000000000000000000000000000000000000..71f56528665269cdb6fdc6d3575d51dbfe0f43b5 GIT binary patch literal 10193 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 literal 0 HcmV?d00001 diff --git a/Images/AASpartans/AAKing-Trading-Bot/King.png b/Images/AASpartans/AAKing-Trading-Bot/King.png new file mode 100644 index 0000000000000000000000000000000000000000..c9622fcc1ee0ef18ee4c0edde7e8f0eb9369a44c GIT binary patch literal 62942 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ξ9{!EZb?P<96ynSF=gp^Q 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 literal 0 HcmV?d00001 diff --git a/Images/AASpartans/AASpartans.png b/Images/AASpartans/AASpartans.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c7106fa47eec889c0419756235560e85cff389 GIT binary patch literal 945647 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

Y5Vw?{jBN>tA}xPcDH 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%0DjiCOV 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

JnzglvOAQPVLO7l=S`W;VDmO^&Ea8xTbzq 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

+za-JZ8 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

^r4?*-Y*wC+~yJE|ig9;8wN_p#3OvXpS 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

F}?0j>giaTBNnntW?oZ7APi&IHJ|{U;_fwJv6y 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 literal 0 HcmV?d00001 diff --git a/Images/AAVikings/AAGauss-Indicator-Bot/Gauss.png b/Images/AAVikings/AAGauss-Indicator-Bot/Gauss.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c7df2251a5055a85f1d031e01890b437d3eaad GIT binary patch literal 29322 zcmd>FV{)6O#>4>Q@ya*FenUsCmCxB|IWbj={l(Ucuy?e30;H z5Rh<~bQFv0qrX!8+W*#O6%}COQ{hw4t?f=t&JB)?w@WE#*twY5x!J1g>q)4|3&_iJ z35vJ0l?MbHpi|PxYp4&7wjZ7@mz8HE$2wq=5nzy0pyLxj;b3j<&k?f_(X%rkkWJL_(~HCunJHg@A_v zkB$KehX9X`NJ&k|FTmkpZ583;?(663=WAzcu4k&RuBWfApe_#wj|dJ9MTv(a#m}v+ zpy6om;_7A_9~gp;jEIko?P_N#FE0p>Pk@Gm4g(DZ3kC0PrAI(VuBV}3YiH{1X>DT; z&^OTt^R~qxB-7JVEXs(%ryx*JlXP`8Gc^SWh;cTz)@Gzfaq%#eWTe(qq?c6|%ZT$v zgxUUziHLJ`C{Bn?i}CL3u2o~FkB;ok&j8j*M#uH1m-)XcHEJsa0%G4RDEgYQe(GY8lTl_x7vVfH+~e4-|Dd0=6?UH zrgydOo$;c`-ekSiaihn1|5rRdcO57w1%4|?QoLS^-3C?9zOZ0luOk{i<>25Tw||%a z{4jp29T-v)uugEtbzGX*|8A7J)8jIEt$82)^!q{kTRH^@OifEk!N%T(Lg8}QX!4Ga zkI(XS6!n7-ZnTeW;|W@YWKK&}LlLL_DjWXz{@wLa#^(DZGe$QW72CfkO<;R})O{o2 zy+0geG43$X+Tys~vtOk6?h$pVvhr9_TpW`cQrXmW7U**lXi<502M4!zS7~EKspAgP z;9qq2bUB8f_6&yl&dGJX4d)@EF8{vMbNQay?2dGLvEJ&RwSq(r^T-xgR{*#-#wcG#p<`ap0a%z1NeUUU( zFgcc$mZrJ~cL&$eaR+sG*YRzP;j3`~_=ll^xgeA_%bChkNLEMRV?I9Y+e&{e+!Xlz z)gSrz@c4krj)n_GL`D<&WWU{`s5kGGk`dh$T@eTO-z##TO1i2#CptH(7Jw5KJAJ#v zrtLneJtlhamtvCRv*Th=Vhvs->O6>CTo9&Uytq#!NW@Tq`1|vv%8P`8j?Sz}O86)f zE~Yx9eC#(0LQ_XqWm|aoufp)Qwr~zJ1Ne(sQ|YI2F`up&QllS7KoD&t z3|}+0ZU?tp7uvDy3~5`TitV1mnyc(oz^uloVfX^qPN=G?(%p%B*0r*}-ZZI~MFlna z&wpY~3V>Sqq8ZfS%?@V92rdS@gO>?O^=<^gIM(&bW*f4AE!rdFesGWAAK(zR$lBJsrcQ?K@kqx4!BdS|TEH zV{?H(qTuqf<3eW@J?E^xT7z{i$E_aI$QO^x&oN(aS{rLU8NDP0x95-TzfKcW)No^ns@n7A~vb2|h{flo37>$FunOfA;)!yx~yw`{Hl!To2}h$PX53MEdJLW_eS zz=9JJ8xhfv(N{~jj%@9ShQ1E5r{H^Sh>Q%6&JF;~f5TIh8BFsOZ7wMJU7h)8UM*Bi z3#Fv4LiRM9u5+=nrseQYU!`KJzgW$4N!a>#Dca$a@D+gdSI;(B|hDGv&( zqHL43$m*j7jmTC8yum_nNjysvJHC0{2Nc_ZfRV?GqY%=_L(+CsRHR~T&H;n|omjWU z(w5T^t6;6yc6k;(U_nGTh16F5?uw}ybA;QEou|$*7tB%al*{m~@Opm{gG!d}J4hj1 z55iI}$r(PN7{tVAiM9Xs>Rd@s)Zt|yeSZm^tfJ+5c7jRS?&EM!z9bCly+@RO$Lg!i!?8% za;?_-t3Wp!=uCjkwbvJBRMuAJA>#Rec=jU3Z3jBP#m<*88$c0Qak4Xh2Z>-~`*+i8 z)t(S^WQgUv5ggd6`knIIE|xVllS)3Cb9nmYFyxY&*lw5FenNK2bbe!5neCJzkw}m7FvVaM^6z(D)?E4VrQjU3VLV7&uY`ngLv(ebz~$yCguvk zXq$#FC)l%CQWBLFCpEa13}il$>av-I9mwS&p`)#n5naW4IYr+4fc(v+B!TmF^Iius za^2h1?B1Lf$u%IR2#LlRv_fG50TDAs+g>D1YA5vhppKf97#QrVeLWK((O0B$wZ^UL z<)?tKuZgjlNQCbq$P^=GF_<-@$UrDiYo#NSltF_>PZy)3!&6>SVf1E#INA$6b{*JU z7Z5nNw7Nt_8g)PtD5oUrf;|&Fac8$iQ%X`q;rSl*xGb~a7qcVcR)myXgJdgG)V94j zATq{=b)7L{(P%BZjJ`VROi=BqFNYQ?XRNweQ|%V7PKv9mEh9coV-HyaOXBFTvCE)?HOoqmxuw9d^E&!=FYW3_wBOjxZ}%G?5wVh)+cgL!r38dVetu zL$UIxvpKooG|qTAWy`ku3Z|9az1ZPjo==_&W$!{frR9(U$;3oSe6E+dnd#Hf*1iBV z{ZZSrt(VlF6n)Ab!Tur)zJpA5LnSbZ4)SvsljM~79GF6YVPU3>A!HK z$5#N;5Mo|c~q+}#Ue$IVJWpJF&3sd`6 zb%HZz0S~BbfojzRcUku05i`k26l#&WdJ7jI@muXQL?A#gXN>6q$J_AkAtE~y@8hNc`ShIiGbIx z7hT@pV<2S3AtdI%G#yF6(PC?rt<5>n0=C5)XA)TU#^d8-e{;U5Mp`;hwV9;_q_ovR z74W(67`q)v3itADU@alBcj{WET-Ptc5fj$IxRaFf=aET*TwQc;FKeLHkD^D>E^?uw z&M}tkASIE@VYRfzS(U<%HOz~P(MZHtl_p;C@D1NW#YbQJ4!1V)zg9 z##cMOJKjIFw5Mk)q%$)d09agHj*-`%Ge1$bW>xmF{GWq&1gDCNDYg+#mmaUuhf{qbG!H-X*} z>swrJ($YK5=kM2$bibxrut1ckHDv(Ah)1?V4%5-C-A zi}FNM*MWqLSB$S7dP?B;yfSaXSOPS+EMXotJF&5`HOie0MZ~z)dz%LYSQ!8?y$#?c z;j_cLx+=rl27iz8$D*|5ItlGwT*L{yViTOl&i4+%_=yUfKTx_ig9etdpfQb*|J&Xs zCO$MZt}gNZOHLxtdSW;6{6D$FpIVW=jMZHZ+LvsvH$q+D{3}b``;kgZ%Y8o3uDlb;^wM*89SKR-tVxmu*R^k zjr~BZVXgBg`8~;8fA7ppR$QX@;Y*+)I#<^f4sKn--Q6fIHtu`JOOQG@zV1QdOhbkVB*GDN=| z&F^EUYW9YqL0z5ivu7he2m0*WPJfL)T?ZL|i-xZ3am?a7ujpu6KNx$^a0Mrh(hyTg zX?U8$loWlkXP^JbAz3xm5Xh-2ijdiGdi#Y*fP@6ZGN=zvf(jkj>fZG19GuPESPzXDCvgm6K{jO*hc;~pL!)V&Y&Z}N}=M9E8F{{iz-Q;lZU z<*m(bU%Nn%hqE*_Im&^lPft%D#Toj1)MKO*quOg?0PGc!aX%_*dgd5UXHGLUO+!UP zvm3?91?k0O;vwg^gN_`2>bE=4h4z#sE-owAd(C_Dr{VP&Jh~J(?QRTF-WL=gvq-JK zXg=zYl|Fm$IKA=?mPmI0^ly?tRNs-*QYtx9(_s;^^;0S##)x3)qz6vUdTm;rOlJaO zdg_|)7%DeN7!2k?U?Kdlhgk?(QKcqr>@L8?M*PiO z)QQ{ckiQU6`^oNMC2VvRVA2+;Lv)g|hlbv@bw%*fTQmTifSI)P)OUq|SRRNTyo}1q z-)9{anVG!hx*4CQJS6KmB5W<^u*;8h53hI`DaupRY{zI~cz+_y4UagF3~M4XM^97o zp&-d1LQ02*sNi(|no3u=Ub(B_0iC)2sjxboz9*@wztNmW7#mwzOT>)a(tIGH{L-Y5 zHZ_&B#^_hm0sus1HFLul>ewy^P-#Fwfa?-0&u*D!3v@kEN)SE z2SXqfjZuAtK5BwCE>DUt%d2bbFWl7eimftYio3#pg>?PS=^!+*sVuQ6xjXYfx%BXm zS@;I$(U*jTiMVFiWe|f%lut)tIA#`fXBztnuawu1zY^acqY0_S=d?{`6r`9WhTv+& zu&OZ!w+9mu85nrQjmR=V7&|dZM+ufJRvbo9nBqFrFuM{cgqJS2d!qJ;gr1(#rq=S- z@CLH7k^K~$?(PqeO_z}FK`6Mm6$w&ByLwhu<;TK7;QD8wyn*>gndg+t_qEf^gjx1k zbvvbSFWmio!{E{W-TqD`Is?TAP3L}^nVH_mqq=5oAAiB) zHx;##3xCU0(%@`N$@l-AW`*GkE3_)AN*IDpd%glJaY5a-sOpGHN$Km!!{b}i+xmjC zuEQ5#+u1X(_^d@l7`EN)-EDg^L?OLkfI4|}KOjW^vJC2byuY7To?u#-&~oE|lM%WF zCw-+{0#g#i z1}s)*wUvUR2w9-t#8&l9Q#COeTk}ohzS^v`FUcpVtuU|VqoXG^_C@@&(zk5OZ1;~T z&LF^h_pYiJ`}92GW)BVog(NQz`u*breOVqJe({+e&Iex>sooj9nsfW){G9aZ&zrV{ zhY573v32xXE52kIy9t|KOaz>yh=k0L@eLCnjWqd=f^s4pvP~BfVrVqi9Ct@Dp5hEh zW@(p!cOBb`VNFfU-X7N4o|QMJUbL;s>MS;sQRk80&?^E6Zl~Yt-MNy>Z&_M zdUl>*r`zfMeNyvO>_yi7bS_v@NBdLh5Q@)@ZV7qaA(c#wKTZ~Vsbyk=$ppL zDS$EfOd5I(Lb1oiR<|SZ{t_dU zU|lmqScVv70}F;AT|Cw`lD-xUHnl))W4I4y3bKMV?Cw?iDTXKVKp|Jh-?$N64L z(tNVY=MDRrcxj8G^gk2hVEB%&o6bnb%Kx+*8)KI*jCune-wvzB>%M-uDk3I!2Vv)W zUwphw;I@H)9HRYkm4Y~$n-3p6tDNG-j86p<;?YPgu87NyxnjItq1nbjkW7+`Lvl)5 zZ8mL9NI(J~{Ey=OsNhuMOOh^Fu3JW&bwicLGsnvlDpZua1fQltCc2%tFN&+wYQ~KN z*?z0_bN_ON!*Qd^zm0z_>OZsMg6`WHQoOX6o6hUC-uJ7?@#T>WrrvW@{|1*w2BIXu5N1Zwq%b*8$3|vFG@Lw6SWlEK2}cffAwzCnI!X)AQIBj zI=GofP_1hZz?EN$zQ`goB=BXCT;M4Kxy9daNcHcgPs>viJ!1cL`MrK3|MyLv0Q{<` zKU=o-xV$^GO`irKTxMD~Z1Y=PeZ39wx3^zcS$9K9oMy%uLFQsXgCh-OZ<<{T@y5k94z2h-7o_UOf@fe`WjA}K8>h?pZD z`E&`g6NzMft+}+yNcA-BZ2~1LXlV6nJ!pac~K5nb6fzXMJf`V?#)%_>6p`&bA0Quvu+qqrQcnNQE2j=;Axb2jHny4Q#s<|wG~>Frf#$H0!6 zawZO{BD?|#r3AerFEv3S2rqi5c6z%616`BXObCz0fh(t7Q1LmP>$d; zag%{=7H=A~AYO4e^zY<$*rs5jYI*!46cHziRp*|s*#Gdj@p)S&43>Okj59|cmhgQ2 z{W2{4b(;8%PD!2v`0R&?s+^fIcA}1A9NA!Iidz#U%Co_*q^GN*r>`1*S79zgJ#(~#U^g)5)hS(K~V1j6dV z5lm`Xqw(Zkm8@1ZwrnIXr^9B2Lr&iP>01!=pTs@g$T$lz9iPDRX z4J$?iqMX7kIo_CHW%6awrX|z&4fxG%YY+m!T@y5+vhoXf7!BNo zf69loOB^37T*PZ zdcHp`8}(aOnPoC5Do;xupNVR8#pcGUx-|h&+1RW|K_MChD#0nCg_1Zs9_{t{6$Tg> z6)`&1i-N_&co0%?3D2fc)&oE0^8$kIoN)=xsZo(Y?&ghRlj(5Got+71)LK8THYKcT zF84U~bXc1Fu&C)<1FWq_Y|AUJL`VIRuo!L0iBY9uJJo^tOL> zGWN~dd^IP7_6rJasY07at8HEH?YRJy#hZeW{(-<^S7hI;K(h#~Hp~B01O2N_W`S8t ztY}eBGxCL>bIE5t>J7LimHoVpOiyPvdig5L3;4h~dHu2U?X;}-SMd26lpYjxITQ5 zqWS6LxRDWhSfPg0QBuJAUfU{ar|{&9{XW^Jh;LEXRLOs)i3} zf;Se23l6qRPo9%3G{CEa+w~0pOGf?)M;c!#-s^ucJ6?GmNEaXsCYZKK$Frmt6cRRq z>`@RHY-)1&^=UD1w7t=b+`}oz325|^5EC;g3#;L45zTnduSJ)I$Zw3Qw)V3hZ!-x63@MR?HmkaCas3{M9&a2Am48h2^#j)U; z->nxfFY_eozt9irfM2~J$ytkw1mt3Or3aHcp{E^F6taXbT@OR$^p-v)WZh{JrPdn@49NT4GI;DL0fY^ z4=1X;ste^KCt|%OwC3%xOy(r!B;Yc_DX9`FeovgqBtq)9u`%(ngIKs+65-Y1MvlHl z(rjP{v*XXg{@cBFtsf4L>pukN=X@&+@pSOxs-}~(^Pz~y4ug*U!nel{D)A<%@gpy8r9)7qg8b% zBhWXd)R7(SqY15Z1W%Qgt~pflkGD%>NfT3{5fx19LJU&Q;iIIcj+97gPfm_60A2dC zXwgJUhBy!1*VNkm+1dI$Owh+tCCaIy2}rtwc-7+unbZe2i%zRc|WNy;s+)4%T-H;sI#54mArUTeF2_0 zKb+Xx^19ytZfT*b+bw8#qv?vZIy>C$zwY_0=sly{(+4?_?gXMjjGmn}Y$6M<_$Pu? zd^(E!LDbPfAM>Wgs#WXtcPE%O`l|eX!!(R6R$8 zKd9yh+8CKtbyEv00p~+S~eX0u!X^Y z0jmQi;ZGzCW#$iNxnCc?w7s~Ttcr;cfXAKTeBx~B^}c`V?eRwrzoAvRYtXiWHudi9 z=&-SbHiaX^*SX4jgC`N&6?oCKIQpD;t$wYJi<(22`s{n_;9{;TnRzBxN!SWZ+_|o! z*G+bJPfOx2C?>Nt_0r#KOHbcmU8b(J2mX*opIXXOMBRv#x3=v$!yaR@BZStRERKv2 z6l&hm(?sAnFsVzLH=Hsc(x@cTiA4O)6LsPFq|(pBpMwiAdZ!=h}@`bJlQ z_eR@ax6&ea7mM%d?j_fy%=$2dxb@(c(7Z37BQk;Ce?IeeS;7$Xc-1r6`$sdTN6M?S zv&N@JM@yS@w{hx7kHm6 zMY?#ilah8&2(Ao~v=8-FAelPZiVj4NXH@JLpRbplK*)1)a^wrB13a&a&z;xFU1Ir_ z33O6q+~4JtpbbCmSp(SdB|)7 z^jp@}-gtsQA*3yL#|!Pd&zmhz7m^~WVT3a02( ziOIo2%xX$1<;!~C=G-;Gq&R);c2A;@siy_&9cVu`iF^2g^B)VR2$#-;uj$Ur}pPrUtkB)}1Yih6)MToW7_0^Yjv^0!3n!NU2=gV%$ znz(b1`ua9#y&o#i%7{@Z>I?-9VLm+xW&?MUyYIqzWM6ai^jA_* z?;K^MZLjd(#zu6(plRc5YEysx8G z(`a((zlciuE`r{8Fy4W9WCy2JrqbA02^xCLAmr0|J-S{oE30MFwsLKPtc-N_!!ozoyO3=7U~99k0}fy?y!S7wb#WQIh%fhQ|FjPoL~Sbbxj8ZY#_cH^i+hMG zUpow50uVZCSwZe5xs{m+Q<8XmF9z=ARi>B$pC2Dpu1131%|Qc$A&=xDcW`amUJr0E zIziK28B&@sOCX3P%1BNi)SR6C_RXC3;t@qfkCKv)3Z#uf={nc#ZQAzVJ|0Utdu_#@ zwu-g}kI*DLx+)uiSGqk;uLyo5*;@^_6qhG9B@9t z=nj%j=GMRd^t1(@QM!TJCSa}!Yr>0w3^&SCClGc*h~##DU5x_MrkJPv?7Bz%@9?IWT-Q58IL&G$0cXwH2O5v$#D0?Itl9fb_Weu(M@i8Rq#bxFHq+|a~ zK-md$INGzx8_w&&E7+XF!*RZ*H1Yt}5W?z2#Uwf`_V2_Gt zZ^Ij4aeSCL7W%q3xTo68`%kgAkn10cSJIC<|4TtfQ-|h_Gn6D~vW10N!@naKJLUMN z*VTHJS=u_MbdwpQj~HE>jMlv?+&Y|cbb?*k2Slq4Wr{E z*4M~ts%pwC&1i0(*8*k(>V0acloBo4ch`LJ-`~c3B~`}Yq2`>8*;U1qq<%S7Jl(!J zDh1viz8(*E3)s)p94*xi50wsK<>VRhd0Y%cqt{iYXVLQ+A@u~lcJv-hwoW=;^-H_n zPftz~`gfC^pL?%wprPl<9Pv8yX!p;`OivZ;D$$I64kDLoX>L!D%N4SbbDIVfmb=<` zd9}6pIM=(f(9<^-*LL7(EO9FnABuhv;^$&jCi<-T^x5V|Nk}P)PU{M48VG8(E~UmL zz_B~&%V;Vd9v)sE9tzx4?d+_q&aw~&jx1py;vSujUk=Bj21{4TrHhJq12snC5wRJ3dwac9 z&EvAu6Yx0w;O_O^>rhAPmfmtx&g_143jB`MIbIEyr1`fLJ2>gNeowt6VCVSV{&IZa zcr64`m0{cS{e%=7<*K5Q9&o}n>2F0{84iWi|udi79 zSO$YZxxdyjSg=8X-E2JC+%HFpqluJ%r4KjTJ9l(l?-2(j!{>8bm^}l=^6q?BQSmvP23n%Yn07r%qD&`&Vk!S!W0VsmYd<^`i}mQHO(y?ISnzw&@DdsD|@ zm(kYif~tV;%k}FXai6r!r?QCcfUELTxVOzkh#Q}WVDK9&&4kbEe=riy%m>WfL zTXTw2OU#r{6(QVt?Y0;D;LuyJK5D+#*GEOOWvya-vl?*MO;y!^qKUztDqblEhuzADMH1nk1ge%}G3{~7y#?)bTiTmFPxzIw~D zogjIp4sQzbHWPDKr4Pkjb=eW3O@JZVaBVZAWJH2!N65$e-%MCJkofiW^#qnV`(n>o z@%_rLczi8z0f!gpm-%u&4n#tGb5HA7768D&Tip>H6Vq%Aq=razFQknkZIP+R$6k0t zN7GzgBiXgJsGhYE5h#!dbZ0F${saI%0Y4Iqa7xvHzpxKCOZixnh#!S33;{|Ik*i7k zJlcVQLKa_&_gTsBp~z;vyR%t)aV4Zt zOF6M6_J&^cF1&$BE6piE2VXjkI1QjJE-vorIq?#Y-+n|yMT-;OfnkF10S;T2h=) zUKv+X#1=e7bZjuflk&CMI!rJS<}&jqtVii)*Viy+2uq2px~Je&5ezVi_JOeMH8=Morm44 z;+#oIb&E`h%TLP7h+52=$Z1VxLt!j9H1goG_v)>V#A%H}CJqj@$(b;KdNy|OBscR3 z%T%|`JZ(dr+N!h2JAsAv_5~gOE;cRIHO}QN)@46>=4p~EqN<8$wWQ=V3adSH zHzZ_aQZ*`Hra|6MA)E!WvaD`7|Fp@~lRtHE=e!rU?QBTj* z+SIY-pnLfuMyo6v@=EFD}m z+;b&UnF^WT^tk0TvN9Rqlv~b+2XJ!;)aiN0iZP@1oKA8I#;R|3)(oKOIaBqKcu+_?KBKP_b7P%pbJ_o)XwTv=IYl9* zgWz%0o>^N38U35@C(?7Y6U=WnQkNb^g;XtkXl}R5QWPAv&hKhy@wixQw#~`O1={pw z#<*aWNtt-uDqQ|K);O3`IZ)A4#79U`$Hm5GOJKVxm8Uy>y8yC7lO#j+$iO8;jo=N! zh2v(5MLht4hlgLlXOf)lY6eD3L`KELxatWrr=xSNqlU(Pgo9KJRUu~yIby9DnY*FF zoIGN^)Hb)TgKH5Wa^gxi{p7z}lx4QL<#}O0oW4!)BrB0}D;uI20l&ZdK_ksb#7j;b zL+lvE2xGeI3Cmuq90Q6CNBR5ypKAeda4ae8T0q_0&bFJiueh2Y%V|zXrW;y*%P2i5 zU{P~1pnNFxPgm{$nTv9ml9l`(@!Ks13H+EWmcxb1=;9xWyPR zp#9s>AV+(!U2(#)#pw#5shj!R%j);bz<)`L3!t1?IX|EPP<%YsNz$TZih(uUzyZ8V z;~y0E4!B*_(C%jt$iKpZqKX<=)P~2K-Kv|m6R#BGJxd#v(gj`DE(;hvZ$~y$JLlUw zdf)&44%NCLEdveRAlAU%Rf=V4@S3AJ?AQ|taz;l-qe<)c{XYo0W>t~2Idma8!r>M? zMMYV{qW-vrx3l&Bh_<=~8U*eFUME`}HPg$s7uQ)kH@2!ZH4u)5VCY>5ss+ zhS7oU#-KkE&5M-j#5d!#1Y%x~(bvbD0lLV8JUOg(tQ{Vwoxfk7dY~g;;xNgfzkjdk z{*4+kPIpN6@~ol}b__#x^}ScJlTwhN9uR-LX#QO>V$E-?#N~M;!^q)*?$KP7Yxt-w zPBlMn`&(zAdgQnv2TI160-CcrF%hogpT?k+IkHM}jO)o5-K7cJr6!e>SXppVp60e6 z{|{;>P=B}cuXC~esJ#{Qy0j6`LI#Us(!mo_9^F}rCoPWzfJOLRP}7Zh%Xm}!`Tk5C z6yhZ!z5l02)$>0dp#(#1s|+no+wQhMC!87!nw>9gJ{NZ(-Jc68sO&{#pCi$_?=yhb zMYWBlnK<<|5<3(NWBiQ}YU=w>ZzbI?3!dz*4Six|*GpxvuZy^Pd~Zz{qY5bc@)m2n=tW z3Yf~1_y7R}HGEq^U^og6amp#T_D1wVdwAKDGIO{`{6xYV2o&Cw4*kkN2-x0#-(aXg-cEP>tsv|$zm8ON@2zUuVe-5CQ>@0Yy1nT)8 z$qFNmG?*v6tBU7e>>MJIDdwOl^Kro@E(Sw;S{-`YMO*j$l%wqmZL~t*LTo1Dwv= zR%;u>%N{hvqr@_27gy@icm66HL%nIHg`Ph~I=X-AnghGrc(^zW&MaKbj6J-(0|LGr z_-U5j2i*ajpV!cVQ(b|={8Wszfi7%b4s3#*C}7pERB^Fi1PBv00}9v>NGNz0iL3}o^19FT!qs66GP zcVq>m2^Q+JMf(~2+Kr%ts)|b*u>x=w4iWcYTWj$>K7ybNl3i3ZS04IMWFi3&Oh6XD zuzPH@{F$PZ1vnJDV1t<H-6gkD*i zs#~D9Hx1~U*Fr&(hBdXiI*Ve8US7gt-Y4mm2}(E4tx|+YGi+izc}dU0(2T0*(T<+b z<)|fV%yQmXxT4Fn8&2irtvl@xfl8d%5DWM{{uPz!OlslaXcj;cb4G^Vo{OY`MVO9u z8rk`8{o-&cH;`>TZHuzWRB3gJkGU(r{(RJoZ+#t+iCOD0F_mL@!+&LVeioSbeWNs& zL-8j!;p03A>ZN`0gNqgpik;;Y{X7px#Qjda?Yzg$GrQF65~Ckrvb2uXyl zlj?%1G<*UUR z@Lt*p=QQ(aKYmSaCOmERJRKxM^`a?h*54Voa6MvuC!--`J8b0fx?WanV8 z+LjR$vH)u31s4+18161!G@-lt`Z0R(pF>Fgb*`sjEI*XE$E>J5x9Dlxa1jE+UXgb& zxaW$qc61JYei2wjtv710GYD@Mg3|_w91=;+ucO^6rp?W-uM2HV9bVq$6ia1q+!Zg$ z#a7s3%PqxjFGNKd%bHIopi^o4>!c^kPHE{@Y0rpW3AW~l#r;14DKXa0p#xWm z%b0GfnOcgJRhtQ##8rlHn<%U_1`R`D#iLNl`wr^4xDdv}0|)_D4m2X|CSG^L)vFpX z-~)#=K=&eg{wgri4eoXT`GW_<2zXYSxA{?PB@?=VZwjB!W#7s4sw<9+?5wLjvv6(J zd3ZW&ZVs0{SJ5s4(z{Mf)1Sj=Y7*V#O6=fq69#x%2|QjPJDkRji;K%_?wX$N>dKg_ z2zoo0-`?Jv$}OL)NNUb0tf{e|8ntC|a$=)=LpnhCvZzE1MUO5c^XV=V9eB=?vD30kW`XljMKvTeBwR7+>GMR zy0+ODOQDOeuPr=#wm4Ec2T0~BIzEiN_s_omVgRqFryw-}7vzsj(DH)WAvfdbnNd-k zhWdIA070CaDrC?^L>#Ock}+h7L1@xEzOwC^nTS+Ac&U?n1Vxq4baqcG0Qh z-g3I(G#;6l2#n}oMVdn$jYEetfQ}o`pxgjJz{b@Z0XKMX?Lz!il;~`l6F$nH-GGe} zws>_8ja|D|y*PXA%(KUr&y2Xe#o;O{9=3mQt-r+Z;fH-qjpYe$q#y?zkC#fr$Hn^9 zdpA@HGqI6T8C`Bc?Wv8u<*CSm8MN~y50;juBbOpqOJ_Jx#bPpJMBAXrdZ=ByKKW!H zvQ>pb76eG0GIa_garpxqHUtDf2Lh5^2UI)aSNcGO2h!snzR`X4DuKYi5)!3iz$W^} zhJ>+Ij+&d7L4hA0xpv;Uc5(KS>zUeXp>El8*%j$`JNiDvNK?~aMS|Q49)u&|A_jQ= zJbyOc#LwHtkAuy^8fI}grEa(iC?S)*<&%>YIhCAIkdsSwox+UV`a(k+Y(pAr4T$Bg zk9KT#Bv8mK5cNb~8F?)$KXzj|0P)b#xC+h3MGXiN;6ncfFmeO@3gMJ3^vbLxivCwU1*vWOwjVHByFrT(XJv(#m$exXAV82=Amru;QNq&KzjC9yTOXMT z=5_mD;S*D#b_U1z(FT06s%WQRzar~nvkTWAe{&{u?9AiGmoG1`j?6u5PXMu({Y#LD z#tmQAccC_|{nkDfrVqnUkE_ffO+xn4B9TaH4PI(O=#L^INFnUR0iK|@kv|zc$xV05 zU_z@hH8PjgR%2f@S87w_7t`Jg&UDD~({1~7^f1W1k1Ps5JTZX1XQy1$_=XK0;RnJG z=y+%#r$%W28$byF>ArzX&tKv5qxlKAh#ZGZh9A~P6+OVs9A31yUwr-S+1T)<#mCpG zr&ixiuLg00f`Z<uJ(R*^@{JahK$jZ6} z32kQ=E&~^rzd!Tr@|m&4{&(}st8Wv6f)eItlKMVS(pS*a!$R&hL=GB&`~qaKdccU( z{5#2+Iblv(K^{Q^W)5ylPgylmuvwT>LZE+OATJfV1}?WCaUeZCBg3tWxl&mvoT!{H z@|wpjGdh8|Dx{Gg9!L=g9A#RO zrMDX(L=J0cxM+a%MPh_t1R{WUh3Ajs*m&B?opAm9^V)<|3M*I@tt4^cn8d8@|yb)I(7#}Danaq zWW$XsE&(7^;GuC9nFzi@h~~ln#Z4F5$YX5*$LF(M_i&R1oL02FYEV$ywP&9{11!k? zq6Z`P%ggUpRyk@yT*73<{g%7!BHtpXF_LLSkrOXDm1b=SA+(f2` zlHR_wTep&_*RNACRN&@1m3qsduq=avVuOF0oM^(!l@Z%gf_heM~knrDI|Yz!R&tfVY=$$Tb5*Ad;blByp- zVC5?)eJuhK-fh$kF@E*x#f!*17J*RCPmC=q8?rIP8ty!a+>I}+OezqN`GHP8VSdM5 zA3LA9{OtTU-$1bUzZ+^R&V7I#wE%UVT3#{nV2u(=Qp~Me;7wF2l|jG7NKR(7w6rAO z0(1}C+e?Z;r2r$4=z`?cRa7m)tw>HZ0v{@MFTb3ejvJUvA0W+S%$2T8*v+rLo3IP5 zdvkwfZVrn^TUmYv9hKBBOPy%sz7;`gD!)8hOMd;7&2jx3dRGy1ana{R^T1W_VZGX> z3`f2$`e>(sR5>j;p$J?-D!FV4upX#tQMK^Cg&>U%7lbZp74Xs%dnrw1s__~SS~n2lp>f0I#*Ng}R9}&hQ+IK*F^V~`)&Mk;ro=}l9SeFd71PVrS zULGA8ep)hvP6w9)`}tN&-p|+DziTPsgpsr?aENQE%DbuR-t?v4yqHKN^Yfkjqe$iH zq#RB}aCSv-WrW@8WX0V4NYRp4Om-%nkr+TD=tzAg37lA7L|ltk={G>32ng%@wE|r9 zAwmuZbORlTtK%ZnvBJ{atQ=f9KMqZA%zQ34P)^{J{n>^`+FY+KUp{jN)Z&@3GYgAF zOM_i*Zl!Yo1X`x_%98q$hsegJ>$mdqS^!8gM16}034FiRT7Bzb``hBo41|#_L0Umu z%v3EL_UP)$({Iwc18GiH;p~u9|FEcr(z)!)4(`m*%3W@Igv`92zC<$C>&0uc*X(PTLs#Fv z?Q)yRfN)R1g)|S=L6r3M0V6M~T9S2c-J<8UgB+1&PfamgXH{8&Gq_-KqC z3RI(|LOcNh(#I%c@W~%sYlBO-{?+cQH+Vs+k+QRAC2WKt+{W@sKN^dQkEKCyxTEnb z7A@IF4SVd#r7usPKmY8^8Gtc7RW~@Y{ATX0+uY0y2^WNOGn=`;TpZH}zLi|u3d6q( zISXLGQ?MW5k$k;5Z?L2}&PmgW6u`T2BS6cYR~~QWs~E07&WH zoa^}~&t)58CMkWH=9xqqgPxhzN5RCa#E|=lX$ENT6X!3T{|33u^4gheQ&ZC;{dV(n z;8)F+GZ9c5a5EWimWx{+0uVq_+){ii4H&tdm-iBZ0?hn){d#d#$*sybr*LDu2S55s zxUoezKfuYv#3`D5CC*31%SKIJJ#sW_Vq)b%ZkA1y?>$yy6Eexy#NrDCJhqQP8U|x@ z)mSGQBcPc;fRSxGie}8#7@8_PrzMiC#TO~h2 z5u_WmBEAJ~11Mb`xQCOf#X#VAA}-4Ncw`ud$rK7F zMjkM84P)cth->HBAVq_a7(gt*P@?q@YdVG-ktsylIDg#A^d{j~AXEEH6ZpKv~| z9-I^xl20s%wQgx-GveYh??5|2lez^xMIgiLnCs`y9)rem4xPScZ`WzxKe)U+0;F^a zXAmGkId1otTl({^_g!x>___IK2=ZIE5XWk5ee^Q#M~IR~k05k1Gvn}Sj1>Z&ix&Ab!`^ z1ksJl(HE^O6;z~RSWRTMjNB;&Y0{tH(R22>>yyt`xB_%DccK``^nTDE%J4F_5(m1o_g~ClEx_OjWF` z==5ZAfV7m1`<4H8kJU-nopN$#kF{n`79i(ljMH25DP)>ET{4+iSji7(?_G*!sm0>dK^9TQzEtE;4PZa$xTFCroi7tCoGttu{FsQx*P{wVJ{29uVI_?M`R zqJ)a}~_#Arn+8Abj7ejnmpdVt2?k|+3Yp+; zX+Yzfdc{T=m^Tz8Vt1ZU8oKn&=g-cJy|_H~V&dI9yEk)orD`+W0^ z=uqDB*sIoCw-(N}(m?=&Oo2w^R^F>eFI!(edi5x;g(-}RiVJ23gbzgP-_SI64>zU} zFoI~j70DZ|1|cFlIvqLj;6dF`8QLq3i<}9yKC$21MB%f*!}`)%tv~y^)qqNHSCGR0 zcN`l|pmkLwcRp`RCX1%g3h68g8AD@OQfZlGbQ;Z1D&$_AjZMy|D=>2A#pTzFq09ZN z@7~>?E>&~G6{I4Ev&Dskk?=k?URA|;3$OBS6+b$5_Grs3gbg5L0n*hYu)O*PEY>F~ z%qiF-@Ji|pw!49k>^=&1k79u8|;p_AlKsJ18vFGergA`;QjhJ$s9@ERmV5siyG<<9bNTV*(23Rlk(JVk)h@Mk++=wpt0zAs4j)4Dv6&j{EUtdKkk>+QdG!40 z(X(fd9z_5kp7j!PaBeQv)Q5w23Jkz zhdR}>GIK)mS$+A$^@*}33Yka75QrFo`)87pc?=At+tHEumq2t?WzQNAnr!~9CApw@BsZQ%F<4X7hS@~ z$BC@yXveTvvjLog%}~+k)Y9T&QAteBz4S(6QhuLkV&)Dzk(TB}qdB@W^unc7B&E_Y zWXw2W!~bJ)a=JtT$dM>2CdRKUNl-rCjd66u`-I>V#|bpwL|?B~Azy&AJ>l%?d}eIg zE_7sdC5tJX8z|tGH^TL5Pbdk&tz~2l@B=f?f)NRU`oZR}(qM~}QqL_OH zy}e{ntP}6uqoo8Ai3H^I1cs%UiDLkUg1Kq>|Kix-$QK00$3c96q%15;YAR1jq&j(< z%c)lmPTB6t>~?5_aXAmB%f&bOoVbBMCs*sJCSnC zA{rvws;h^K-$PhbBgf;kwpQg8zt4N$e7~fm(9h4*0gn&EE0Qcodred=EfvE9q5}xy z_&CsC@lmEx90S9mp?aoGO}#MYPR}|Hib$ud&FfQX@l?Hw$bJqM(d4h;*uWxkqmeW2 zC{2yGY|@(YlTuhAu_5_6Ir&YH_Wa9xdnp38DOz3C)4sONcG`0yyPcapIlyKKkb_Gb zLDlhY#;Q7S8tU4hn_n6!t}8AsUe0TI@Zdqo&-VuhOImWXIJ%}jRyXlhR(L2IdqHXV z##>l<&)nnF2wnPL)ZpG!v;=F%)K5F3&=vthco#w7?gr! z9O5=`&Dnn)#|D9bZ)$ziK#yu#WEhv)la$}V=MI#|%@ia=#Ep{?*+z-i-J_~5Ybcza z&n}(AWi(W#=ktkygtSHk2SvaQwo=vgF)Z`)T9g>Be^A^~((+?oam)R#uKP@8quHl{#<72XPho#b>=QCwBpm_SA*;aNng3#}Xao|{fq-sa{?hV@u)PHX-G^^9!u;^c7Du#ub`GpwPh z{2o&WMH7@|EFORJrlYon80snkIUW>o8Kd!W0(5|Er&tvOZ**C1RB#8MzZM!47QBRI zVqmFbgb@K@eMn{hBajWJOb&`^A2bqB*eXtfJC(r+y}jJ@dm;HfjeTn^0fFIQ=EKR! zxtGrz@)FJn?=`YQ(pb<}i!K|y$RBTkSGDo-Dq;$;qh+4xhV%$;2X$|s2vu)0Rb2;Z zX%mJo{wB)ZSoBsS-Tp8{n@!ChmB5ys@LE zriF!afJQg6ya;hijy4Jpr_lnO;=?md4M(FIqVg$?$m9ZL?F>{31?19hJ)?CX$cizA z^|yey8|my7(~fQ;OYcc)OuLg<(A18sF(VVxls;-ocXYQ?NSs4dE;DizTTxLl$xR0r zSWhVhX^>=^qG=A^rZ&jN_ZjdiwFn1YhXDr?lBGymPFlu_cy~u9yrZJ=UTH-S7hW_) zv``94n;#zFfp_xv_lP$rQ}JU&C5l$FK`bJJhViqgD0del(XlV<`FO+MG$SKr6iN>{ z=Q0Xftm}!5O#)5<*jNbg-YF z3X>x&b&H5Fb1;ht3l0xs$KxG6NXA;mPVVlCH*caW6cxoRl&=~^3q6J5SOE{dT4P(0g{9HPQGd!j&Nl~Jt8Hpe03m;_+R ztdML@tEVuXhZAxIy#B!Hvk6B#rz5-v@|5O68Z%8IbmOf4cOL~AneMu-(YAP5&8 z?Cy@oOG|5O8EYFmc1M#%1p+xo$>kz}8cquD=J6&SA*UJN97oRNL~<|EhcxveCx#)5 z-BcPMXzy!eHU2#u8#d@6Z?bAc>0{8T;4R1wke+*@ePkf<0Z2EbzdNj$nl{b=7Z<_h zLLH&qOG^r5vB*Rk@xtZvp<#^NG-5q6N0zRhc zF}`-p5leL3FOhbI*XsIvEAkOQBgcmGF#Y~QiN z5yTmtF)kR7BT~p|X=|N7nToQsbVB~S>#es9OSuEMuylX2fE|^>f_4-N6_J+QkVd1X zu*=H)va;rLvx2eMnTQ;AqQ8FtJ8^O#{3afM(A^5J9j-Y}Ag>?Jg|w~|GM|7UXm%sU z3-9iB_cckQ^{o3AL?=;nY@O)UjUw=ZzmH?X294bx?buFeV&N6s$^4KM3O_1DbRKRW z1%sknGT_%^ZndglBZ7m2C&MPWNi+A5Bq@N*L#ENA?yy3ld~lAn28Mz9-faYg@OZp#8ZVF{|yyK|BjX z{qXuGL3H##f@8ym%{wgjL0|lBj2f|AWe4xC5_Aj5Jythr{*{44Y)* zxhz2=WP37!MgT#O5*Hf+f5*X=4cAOX8m77-=Sg6g-efi+56Vy66#L6uowM z?m8MMdeMYv{j1&GSIB(YIE~1{5HKHbAWjYb9K20?wTI2)hQtyR`64ONN2bz1HukvavhFA34@Xh*x(U2M0xz1-&2w=Kpb;tSX<$vo zlL|5L5hirNX&?ghFL`U;z@iayv{Bj8D#>R= z7>3owo0g7_v^5b5STOF%R0`o1oo+x+^NEUz4dKzoQ}|6tc}~VBMj6`F-j7pLiBcP4 zj;>6PdPbIxX3UJ1&I#+8xlu_Wj6_-pJ{;PQUyjkl5Jj>;5J({NqNDY%kW-^+?!+`m zS)x{TZQhqW?x=H6^gcO^JOc)X{Ey=RB+7@Nw`Z{#3>3prNAH8TLLz6-Fqkwc1GGHREb9GJ|x7tc=o zpijT72L?g#(Zvo75VkaP0a4|h)?lZiwY6xa3N z$r^WbL5^^yAqj%~PdJvybR4Om3WyjN)J1UVCd%6OB}jzSGzQgOD$lQlGtT0%$SnRO z0AUpfQnjMIMr#)%nYOZ#vXPN!&&WvOXk>2gT*fGKrc_9Rb|55&ozD`i%}TE|Ok_kf zfp!>&GS72yaf%DjkB<*T-q(OnSjP%(5a8}2DkOv+0+IDk;y?;K4Ug=620$3rdW(ZN z0tPB&JhE1Vr%_ofK8wq5q>wvO1vnqH#BgNjlB}niti2!8)5fgSjaehC6c$am&6TjNR{C*YI&1kpTRbSkeqAmCzn_c)>q2`PaEzwGiPP@#Ncs8mM=!>|xd z&D8B?W=Nx+9ATtzX5MXPZZbWQ%@xHs>z8*TSo57evOth}#fVG>!8J~UyiYC=6r>ag zJ}isCZzSkpXmlyMly}rWk7L6IxB_?pKy(p6>0S5N9u^cOBAuS5$FPj2riJ7eRFKjq z{e$|M{x)L?0!$~Z4D zk=_tvmQzZKv&oGUda1!>pMY#7oS!Krm7>+vN;${dgv|N~T>3yl`W@tSCCb{IAu`h5 z4>vS4H8l#F1pMxBHkH7~h_V=_am}YFYYSBrmb(G{qNP%y@4tp)!v-?4Lc~hJ{G#4~ zA0ULN$1tE%1!R7rUz=figN<2H=0FZsE!eFhd&-sxIVwx2E_+<9)QoxDv%wIXQ!y}^ zcxQmfDjR`b)>)fv;FhPyZZns6ii@rv(S^E!22f);a}RimiTq6I1AGU!R}6vRWe7TZEQ-4MsrFzGnqwd zL0mWCQkRf9#gygD*kH}v+}wgEin2gQ#p+38(35B~Dh4X8MU@XC zCnj<-vkHSMvRAs6%;r{xM{8#y+|(l6<|<}FC$fWu>LlFZfPj1`4%9wMN=jc!{x2K0 zMG^#Xun>ue!D#4dpiC6#CbU3SAJiKb<(FmYkbf~>{dXjkrVj}psAkcqJrrUTgWxW& zlIhowIX%pro2$&M3>Lm)x=ok5*-f>f)g#o@OB1*_W_@;2PL7#YdU~Kp9I_zVML7#e zs~^}9%^f1k02m|3aHQt>h7c(qdR$SShAx`@zsCVcC?8^u1%e_a2B~K>Mq0d+6+SMb ztZ0cjk(G%pn(|z->soRvwX=2htmUW$;}R%H(i1HfV3oi zz3m7X0Wpw3Qukiw!pLZN9q&_ov zZpm}W)=)TeFFPlKDP&HM4mJ2O-AHq0qc*}AlA16bS?Z!7Z_mXd1PUNVdPJ&G^j3E3 z?`suEBNC8~6l0{v>gmBCH#PMAnw|fRFuJbSMBAYKj zChI_HQK=~@RANtG-*1Ft!vCZEuJzGM|cx8^z`_g?1}*!D@yPIIR^X z4(C6Kb0Ed?Sp|J-vE7kGVR1o@q%epSR$3aOLwd-Nd&z`+0>q@1?kw z4yo52buL0>6#U(Fga4(i(ZM3duwytk11f(M@kd1{SlGL7LL4>+j5HI8+~ z0=YLah8E~Vnw#+&wO#UTD>AfUW<{x$x~Zel95(Fp>l1FhY$p;7>|)iVLB!(^+?}vkE9{b;5*Zq(N|GIJ(mae117{dl8u& z&WP*yAWe}q1M+Xr#s_23VnJ-&@v|{3YAcdxtEs84sm~BL_?Sgt8w~x5EOMCG*hG(k zG*em(#7NQ|R>7Sf7J)cUpjknD9CW`JV3oom3wnD65F^p!0U`MxI*;Eh<^E50ok&cH z$>daW3d@cRP8Asz85-KysJW3i=^Pu*43_B-Jm62JnWo@lF|5g3cN&Rl42ENX%ee7H zeMeoBaT=A+7Y#d=7|7$3i9Npp`9Fn$Sjas_(w(HtqM90E9+R0>$!Rc*D9s^F#+A+2 z3xj9U{dr_?Kt`N^Rgjb~T9{)vbzj8CkNZlY7;G|;3xkFr84n~2ntts-|Ic9{mYl}9 zRn{h#mz|Z7JC`o3oQs$VPQQ~~R9F_59+E%c&u51aGim&S@&e?&TrrN}-QC8%CU{?8 zR6L=8Uyc9~2m;A}HV^S1fq__2o|2)8UnVD`D?M0P8iDo4k=!D@TMC0iayr~O-)SZubq+rEfOB(ej{AE+a(~NTfi^qXosJYQw99>3G)9eiZ!dm z3THS%b@kO!Ty{fFPLW~ee0t)5e_%I{PhjT@5cSbZ!4MpMjr}c*dHx>Z03-$3atE#j z4`jp6e;UFs25#laQ7^^em=O_6WpQ!A>D)wrej=a6j(}JIt;M=>B_MvlLo49MjT_Mc z{(;0s=1u)D$hUX9=EZvkHsg3dnn=q zoHVZlK(pD+BSP%3{?o(#J60MLfh7&F+3XHJFPcb7=LgtH83qOH99abTp5y;0000bbVXQnWMOn= zI&E)cX=Zr1u4PXUI7y>O=&W?%0ii67ou3Q@N+AI6Ke0@k7YdYDG?MpAwv;kEUaeT7m zAN}M142VT7^%@klAbwisiOQWEF@_43QFep70N2oyp|tZ+C4&Vh5#)D2On z2^AE@f+(++1cXc?1*=N@cYT;p3+~c<_+X);4)w^2-l?!FV?2=ZW12SRkEc(C^Y#1?4KIsY(zM>!7L|TH_GH(MvQ+2wEIQ2x?=f+Lj!1MFwBSJMkgBmv7fUY2GZsaS zPyxniY9p~uVyvZY8d}rhz&}^5(MtIPz!<-IkS`Wb7DwnHK&}suAP9()gl@OX#>R-< z-CcqxLfBy6Ik}fAtPtl>GstTes;_0Ku z^aefh<${NGNwJ(#uBNOOOX{YiDqAk?U*)r({VZ2+{(b)JU;a4{A3xwf`?LFe=Lg?o zd*>3bz5ZFUPM=37$82tHGP-h&zx=Cz$?e-8k;WlX3WmKdTN~SSIw?|Wqy%FetJR7) z)aWQgDTTEbYy3%RjG<{7qA2n=3zD{NF-?tiEkU42qY#=9k)~inf*_!345qC7hCs5l zw~w$Di>e@YhIBBb4I^}vBBO}BG6YGCib4beq{2BtS+`WCC5s}uX~4#?&-UgPqkf-2 z0H#7{hiMv65ly>dwkT+vAWBkNCvjE~1Od(p+PcMBL)$h8EOk?%YDpj@5^%24c)@ZG<&R~oI0a6NL9TCML&N&Va4zSiz*EQqum}k$PaC~-(sr_r$)(w@&$@82? zj~=iw?DNKJud}nW#d0yDlcXpKfr3Cuv=Rsh!Z{rN5cgZduD=3KAh0j)79B+Xy>TsJ z5Yp*{FMifoSQiBt2NH)vBZb8{gRa^JEj1w;guvl2t-%uiSc> zS6+UJ-K`!;3SsO}p~lICs#Vy!;r6|!{OD&t=j{A~-e7|~H&m@a5CrH=$$0-%*pi86! zthLM*E254iaFR6Cv=W?!$!bZ@IW{_73L(%zf)NrGX{?Zx#(^pp+HK6l7M1SRODrY3=;wu;2MW=jyQ@@#+Q)RTAXt@0m3?L(_*xF zu@Qt2gh7b#^$gY-s=9qqVm<%(+a*_B*C?fk?uTFX##)33@JBqD^~R`; zLo0z){(A@Oo#L?0Vw}SYP*-og^i3TGC@uXD+7@RVQh-(xEd;_fL|Sn9V3${4zQ(1! zEw;9Xj79@gn1YIlk`X!@vC13%=DR=P2S4~3)&(?15JV|)oUTtlNYaF@?QQlC_90Ll zou69Uwk$kG(k8l=*MQ4B(2tn;U# zR6@gL&>k=){{xb{}aS#xN{xgmuHaCWBZ*8)De*Vi3I666} z+aFOI$g39XB!LzPA!saE>-!L$#G$`AjK!G7Hz*E*ARy2Jg@5vKB01RK=K77x?CfmP z>BI;r(JDj*F|&Ej)5Cjw^znUu_`{!bbbNs&z!1_OMD+R_Z0u;7)>506x@yVGg6VQb zSyycCZ?kGDB!a0ZAOv)-{a{xp(I=GW37;=9_QQ?Pc7) zeVe!5`YiYFJw(_RX9Z1BGCn=w-S2%LYZ`7`yGbX_xc}fbwR1?Jh@*s1YAWNX%K~Fs zgwT|&qj82nOPqDM))0#Tp(Vmfv{Iy<1SK^2d_mh(xVpi#5G!z1&9Ycg))gv>Ns|y2 zX^d@fp{A`GWRl>Nrm_whCa5SOa)MB4KvLC>Ki$`#q0&S_%+1RiTsyeL)^LcxQMU#u z^!i3cPOXhh)YZYxHsMo(ERw2d-6p|qDo4#q=7Y(aY3au1j=t~k|4N575^QUtd zXq4*s4PqV68Gn`wfs*P)?~%qKS(XwgP17`3XNYuw){^CNK|kw420PmuynN#Zr^iR+ zc@DNk36R1eodCg$9zzI$5)!cd+deG*!1ooGzh4>$CubKtJwC%YP*H-l7Gn&(PR9Q3 z4uejJPy&ZWNP!Nl#R}`o3Tx4TQlOCFJ4>w`Wk@?BnCm#v^1tA zhy#Ko@eQbTIM>oN4X!n~w#AqR6>F+|iLG-&DbTV-m>gvw2sARzXdHB+j0VYgz9LF9 zoOYl!-A)gOK$j(DQDfT{q$G)A2AzzzUVD}8VTMFdw+*KCudzUZl1!EbvsFdy6i!7n zE!3@8FM5p-79m(~2tg3|g{_qGH>Y((>qc8RP)dPqJ)#vVvM8Zy8|tE@u6-|JU5i1W z5cGRJlmu%Ugpzc!7-ItR#ftfKMz7aH;7eN9)HE2b9PATEYF+00V#zsh)}ed@;!7?5 z|9_Zu18;yuVOSIuVbY;7mcx^CoO3iy!#JAJS_cQ0=%xy#d>5ldQxUAYco}LW;>A@d zqyr2a{XSb;1L8ze);Wtp(d~8!l8i;+_|Z>4;-CHbUvYLiq0{k5RuXryPLdZ5R#uc% z!+1K!2}u}5RBcOHmPB#PaI;SoMJ$%bR8>P9btsC8DCton=ywMQ6r<4=McrVeW_WPm z(UdesDuu?s33a(-=kjG1<1s;~NTQfL&$-+*lywDh#G)~L``sV0fBAq*2L}Y55n1ft zbdX4;Fm20Xu^^I?rYvyI`5UA))KyMv9o8y(ogwAqg1o5FQsIOq3}X*$G!^s76xZZL zfh5f$5Kz}SI*@d;Em|FsH-<3n5=5DA8iRl!icvuX2(%cwlfgQmb&c#}svpD?iCZFS0>z?V~c6&U(TN(#aK$IvDimGXGLJ@=!feJ9IB}G*; zna=6=`=n_f2~>59mQ9V6k}wPjWw>s}91erU5yb($e!_5+A*5wl74+o*w6DKUPjkNe z!}nM$8q#b;U0Y-jW01_21?LxIMw`3nFv1E&-CB$^L}^NIxI-uD5=03>5HNb}3bWaa z)*6NzTP#*fk}N}p8WjderD&aHckhzl9HAl(Bfw&+8rL>t>2(67uysY6#Te62H-@B> zaddiy3St`P@$e{$C{#pmXA`YMmdhn=YYD;-0Yrn6rtv+9sT8zkzCo5)XBAl-(o0g}G@`5v%DP6o7DPsrbkRD&p=er1Q#-od z2&Dt8fh>+`Yz?XBqc#2k z&>AcaZEKJcq!t7k1itnjjRxGjb&D(4E@N;k>l!O!e)7|w^5oe$MJ-9w5FJ3(8j4lL zcrrzYDOJ;wR}DpD3FDOE)+YN0m)P1qpx52;^`3BKSw@=1w63KnSL9_*n#P22fRzS| zp{gpvB&2B?hP^JXsj17By({|^%N1D^Q&(nQm>&-VGQ~6SNK%tA^8y1$o`lI7w@uHUf(QXFPu(EY^WB5^MYd zm(DN#Q2VAfNfNYPH_Gc~{&@)&1fHg=rKGJJ49yxO(1bxi6a?#rUHD!?c@EDx={J&m zPGHFO-&<1{(sLXC zN|eyq=rEm5+1lDc2*=UWM@%LY%-e5p>-s)=JRXx}8NFUik|e&y1gx!bcyj2{{7xL~GJcJBM4d>PiaYFd~e!=aG~^Dg2`MgYspB=NizmG--h# z3m!f`q{tiE*3vWuLMVTt$&j?u#R*AeEFy^6-aFvcH$KC`)$4QzeN@(G)j%AD2n|`H z5vC?Gj<`33dWoXu(fyA&e)^EQm}8n1yW1Psw!yX)5AWUOkN)5f`4|7!zaon}{OLFU zl*weqpZ)WH&KJM@C0_gNXUK*_dfR)PE=tapHK7feEN3{=q5_RmV6DJ9fwR`1-Uy@$ zF`~r^iBb~NI&9S-wIWI~kK_nToMv>aMY1kUnufqsgs!GtO?W(+aIwruqJU)cfTasq z&L)H+M(BVf?GeX`hjF7AsY9%_2qCDdl0ZaQERvSZ(KZKrTZ{%Nbych-6bdH<1}LkB zr^lx}J3b??eKl^K|Jy?P)1S3$1PMm?#pl+iw?p8hKq!x5HMN&vJm*NX_K>${p1m4C zI7b)+>&D)rOF^hUg@na=bF6QP=U@M=7?fCd4}V)OB0k+5e|u9Q1g$kM5VPk!$z(F& z>~unqCgerM9NM@L003I0RMQl4N}bTRXh``di$1lyqa8fBBF8V=hk5C}uO> zJ-SCQea7`yUcqf{(d}=N>JFQ+W@h1JdBId_M4S=@F~%Ai<4{83lmut!b+dJE(ymJi zNz+uArXdUhtg#SEl+*~J5YBlv-PE+UChGPOt3E|OXS|#fh#0wX8L4|Lk!gdxCet}Vnx-U?CJQy&TN~`{ZZaHnKv+yuQX5U2cCpgG$%hvcj!w>5)-6HW z#W=9m;jF-|89r+*iUv?96|4zG?KuS@2((&1AK@Eg`*$02Aw0p>wk=9}WGjthk|-hw ze6Jy;|9rl%onw9QdY%T>kH>y`3w+vHxWBcL{P#}Czq3&gzS2=^((-v(+_WvL)r#}; za|krX!uIACFWq{T;V@>txWv<=LyBVMwO2x+wPrGzaB_0OYcJnoYjcCN)8p~eL-eDI z3wE})NjG;G4YwF}`*hNjD3nOi@cnmx#t(n;Q!eIXrn3dBq9u${HaGU!*}lTv2T#!9 zT5hoxptTN9(`${Dg5ArPxqj`X5?f7p|EE7@eE0;} z7X0Gf?~_l?5!H&#?G0RAGdX<1JW=%a_ZTD*_wGI7_WOczGG=t?60hBOiGTU<4m}F4 zZjGpq@A71I%*T%&^490R#5-U4buR5*L2dT=&if}+E~R!M!d57x*Gox-a|YvDnzA8_ zBl4o5ELKE8ND@UfRYg%0=qLoIu?VaK>m+WC_%u#an~Hd}P23+*U7S-_9;%k2gHnRH z+e50zH@MnswWJWJAV3O1H%keGWzf$!IM`!jG{n>eLKu=Hq9UZWaB_amgC~c~Rs~im z(yUKq3@VIiYu`jazd4L)o~xD!f&lv*22v6&6)NzDoOP^Mxi2}JrlGZdMJp}9SOP7H zf)E#ZbSY4uZU`?hFfSIqbAIcK^(J$|fnC>JIE3_#y1(Sy-)c1ebC=BDLC@rxQ5Q%d z(Hi>wKD)aXBcaleh^6vM( zi>pco-GnSq%%`UW(o(Df(pWPbjYxZaS}D^Wl3G z<7cFDK_a{CB_+k-`~2w7AG3XMgBvfs!RK$h&I38($;vTX; zF=d6;8mTp{vuLN+ryG<_jS&_@y5=q{t!#`7R@4fzYPR_Qv2lj6lDd7*k0o@Y@)dPvt=Ow-V~Pu0Cr zfm&}2BR;(&ygJ%}l?W%-(>1F-hHuC%KFQyE+I)0ilSVXj2eL_3!}(uwwB8!yA=?_Uyx?2^@IT@&{>lH1Cm+4XlTY3!rR3W7fP8XHFP8k;uYQ4U z5;2{ev6^3yMv{#|7hA1Ru3 z_$eokAEHgkz4w1c8Y{m3o4-k2ELcs?aMs|$fC`BbAyNlqaY9|>)TVvZ95PAHrVa8lx=Kh>c*p! zLU;j&7J@Jch@;r+$b|K$ukb3~AW$f!k?WIOYlX$p8iP`v5{RQ{&21=@Tr=lVV64NM z7VFl{y!0@v`?QJh=#~3ae=DBfAVT_|mvW7=`3B~>Y*ws6gulH(1fIe7FtEe4jsICC zF~;JAq-^}}3pM=w{o6cy`ivloa7eFi2sCBc5GN6%(FS$fa(*#pGM%Az4{m&OdNHL~ zOSH2zM9|QdGtxw1o1C`J353CvE4pbwClH)GyHCElpma+bQ}ObR>-^TQ{U(u&nN3$* zzIKzHD_7XPb_Lyu2ogzEE!fCHda7ka!~gUD^uOlgAAOrE+kK`dPuLqKWV)uBpOQ+$ z>$fg*;VZiRF%lzyKJN=Mm@{FFYh(yJzTCvg@3z;&v0bw@46(#*BLOX~tWFdU# z&;MU+iF5v|fBO4;a`!H%2;*Xm)dVU;Sc7Owv~#qL!#RbO0R$SmF1tgiy;9m*;v^+W zQ@=QzrEN;;y1<#1AfCH@sT1g@u5QKiQd)c?=57ts%jBRO~+DqP@L#>;1Ei^)T zHMn(ly%`&%6ogTP!=gQzKvmc1Aix1dQIcjEIA~3aeIYwnSnDtb9M8XBv*_~qW_f-a zT7Pp`&%_HHRb8&F2?49s5~MGparHpgtS z0;$mR>4K)IsLPzTDRH)BI7oT*#x*YOZ?QETu(dH@e`l9&nvp~?Pai+#U#!NQkDsxz ze~Hh1`K$cNAOHJ&>s$YtN5?;qUaCeWv_BJ}uI9p*?HQU{k2fzFwpZx4SVg!#q z{4tle2AFbAH|fbsqnjYwl32p#MxTy0Eb}Re zZh7sk8|df;hsVd1^^B^iC~M2^!DS|AQ_`%977fK}$)(*P7td~^DYz;NUcUA^8+&{F zaNMxUmxNiyY7~@3s@mQ z8V}G&uj@jGG|tjiUf?L!G7f7E);W|4a6+Ha0~#D! zI>hs4UkWe|XAMFrz)NV_w#8!o|67Z4lCw$4+35v&QPPW2`uz@NRiT0q9fla^xR}f+ zih{bXy&9o0=)6~Z>uMa}m17TY^}gkeZs*DMz^7SnSAX$g~<*450bhGdYS0*gul zHurZJ?C-4oED@KlzRc5yM~s(qmZrqCIZaSAx008xUFPuNeU46!dGpsSZ~VPm3=T$o z=fguDT->9Rjxe=EYC$U$*0!+9na}40S2ihDIoqQFXHSXqBvbD9v?*0LFZJ8{VxTZiTMbk8Y z2dxxBQB@T>jv|DxI8%9Q-x-G84mYk|p*P5&twBg!u|&uKtmR@dqqVSq=_)sGyiS^q z_|N|O&uD^xS6+Rc#cE01jd5j3v6%9$fA$?N9zEpgqkCk%nBhiB(d5X;;pQt$Rq(a1 zyusoXGT3bY0Qw#s%4mv4u6c8vuQ55WMZDDOgWm~dthf9|) zlXbg50Q*rtuX8!>FMI1JFVdX-TL+xCUn|QP{2>gaKiYAe|*pl2!!>5qMd*z%%0DuQ2Hw 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%0DmZV?-&Vw8mI|-NBmr)RmbUVU2M_~YY=y%|BIih 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

$~2%)v_C_oIbx#YMMAlG3$>u} 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 literal 0 HcmV?d00001 diff --git a/Images/bots/Olivia.png b/Images/bots/Olivia.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0f892794df7be747212f725b2235ff827b8477 GIT binary patch literal 18843 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 a*uvEPKMRCZ$^iZe07;6 Date: Sat, 16 Jun 2018 13:28:06 +0200 Subject: [PATCH 137/334] No more using of github for images. Everything goes for now to the web server. --- .../AAMariam-Trading-Bot}/Mariam.png | Bin Images/AAMasters/AAMasters.png | Bin 0 -> 67064 bytes .../AAOlivia-Indicator-Bot}/Olivia.png | Bin .../AATom-Indicator-Bot}/Tom.png | Bin .../Plotters-Candles-Volumes/Candles.png | Bin 0 -> 10842 bytes .../Plotters-Candles-Volumes/Volumes.png | Bin 0 -> 15665 bytes .../Plotters-Stairs-Patterns/CandleStairs.png | Bin 0 -> 9158 bytes .../Plotters-Stairs-Patterns/VolumeStairs.png | Bin 0 -> 6976 bytes .../Plotters-Trading/Competition.png | Bin 0 -> 10340 bytes Images/AAMasters/Plotters-Trading/History.png | Bin 0 -> 6335 bytes Images/AAMasters/Plotters-Trading/Live.png | Bin 0 -> 10193 bytes Images/AASpartans/AAKing-Trading-Bot/King.png | Bin 0 -> 62942 bytes Images/AASpartans/AASpartans.png | Bin 0 -> 945647 bytes .../AAVikings/AAGauss-Indicator-Bot/Gauss.png | Bin 0 -> 29322 bytes Images/AAVikings/AAVikings.png | Bin 0 -> 96358 bytes .../Plotters-Linear-Regression-Curve/LRC.png | Bin 0 -> 7571 bytes server.js | 26 ++++++++++++++++-- 17 files changed, 23 insertions(+), 3 deletions(-) rename Images/{bots => AAMasters/AAMariam-Trading-Bot}/Mariam.png (100%) create mode 100644 Images/AAMasters/AAMasters.png rename Images/{bots => AAMasters/AAOlivia-Indicator-Bot}/Olivia.png (100%) rename Images/{bots => AAMasters/AATom-Indicator-Bot}/Tom.png (100%) create mode 100644 Images/AAMasters/Plotters-Candles-Volumes/Candles.png create mode 100644 Images/AAMasters/Plotters-Candles-Volumes/Volumes.png create mode 100644 Images/AAMasters/Plotters-Stairs-Patterns/CandleStairs.png create mode 100644 Images/AAMasters/Plotters-Stairs-Patterns/VolumeStairs.png create mode 100644 Images/AAMasters/Plotters-Trading/Competition.png create mode 100644 Images/AAMasters/Plotters-Trading/History.png create mode 100644 Images/AAMasters/Plotters-Trading/Live.png create mode 100644 Images/AASpartans/AAKing-Trading-Bot/King.png create mode 100644 Images/AASpartans/AASpartans.png create mode 100644 Images/AAVikings/AAGauss-Indicator-Bot/Gauss.png create mode 100644 Images/AAVikings/AAVikings.png create mode 100644 Images/AAVikings/Plotters-Linear-Regression-Curve/LRC.png diff --git a/Images/bots/Mariam.png b/Images/AAMasters/AAMariam-Trading-Bot/Mariam.png similarity index 100% rename from Images/bots/Mariam.png rename to Images/AAMasters/AAMariam-Trading-Bot/Mariam.png diff --git a/Images/AAMasters/AAMasters.png b/Images/AAMasters/AAMasters.png new file mode 100644 index 0000000000000000000000000000000000000000..2949bda39dc66a5d3af2cf414402bc6d73e52691 GIT binary patch literal 67064 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�MXjEN(ik2ZZ}u$c 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