From 0508a1e20c83273ca77bb87f0cb05481e3d17aa5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 18 Mar 2018 10:07:45 +0100 Subject: [PATCH] global.FILE_PATH_ROOT eliminated --- .vs/AACloud/v15/.suo | Bin 88576 -> 80384 bytes Context.js | 8 +++--- Run.js | 62 ++++++++++++++++++++++++------------------- Status Report.js | 2 +- this.config.json | 6 +++++ 5 files changed, 46 insertions(+), 32 deletions(-) diff --git a/.vs/AACloud/v15/.suo b/.vs/AACloud/v15/.suo index e77727f3afb00517494975d8831baad6de38a2d0..a755e491534b6efb2996de9828b453fc8e26883a 100644 GIT binary patch delta 3343 zcmb`J3s6+o8OQH;b{Cdq5s;^_!15BJ1XlqcXyPgx#fUtVq{i07STxWQg9f5D)?GBI zi4S!5BQB8Ck{hKR$C!kRXew#_sTHO-`xOs3$(#&o8WQ3s70mHyANyVX9@bf$Oa zch5QB`Of41zjMw#u0DfnP`|^*w)TkR7)6Ov6h#Ma4-E|=Q3%ApRr3u|IA@BCi0*4S zEgi@INHe%aIK>+ZUlo-`_zsoB(c7)3Oty(gUZZnS2Vd9aIg??}0ZCv4Fo7(P3i5$$ zI~wVvK>ilW*~pIqCBO{wz?0y9kO5|aX}}5+KqSzEXFxQNeU3z$qA2Ogn1G=GX*d`M z(gQY&yC!L#9R>NhV*^IndLr_fU~0ftiu7I(3mgHP^m_pLG%y=T1?F(3AxST5c$y)9 zR3l8X@B^fa!K2_YQ17nEPHRBsN8ramj-QA$B9I^AV}?}YYLwOk9x%k4oyfRAEAWWM zi0VxX8g?QQ)iM(F5ML2h>f)NS&O-B7aAs_dmtb{6*WDMsAtP7B)@w|w#sAb442Ty>f+%>5Nzx?i+ zIEvu25gYli$(%5X;0;oN1xT0M?#IV!-KIXONQ5N`q=SF!3GWQlSwSYq0@)x35FeoAYY*OW+Zb$#e;&UjVeaJ$7+yZuAo+ZOeY!)9~zCy1ZII9*d3e_Pz6~9WBn(l+k>mVq&Of_GHojhZH8EY#UJhkrUhl+N; zTX^!)wOo%Jfw!%T;^Uu&X@4G*Me2j%zlCeX0QFW|_5N_F4-55Cp)S(*PBsV*OBm^` zo=6t0XvzCT&!g{}e+d+3wgqej+dv!G4t4-H@Bjww;3cpVctHo~1YO!&%c~IO3U%h4 z(I|g5OfH9vD85mCS2VPt1q5j<`n{;utQ7;K{zQ1{vRF;a@~_)y*h7jMlChIs$=nFa;c}dqR+TMK+llS&aTBWUea}DY6v+=f? zDNbFbSJw%?)ECe3eO7N_6`7+4z8b!y;HbnedA!>sxG#!;+X0hqg= zx-z9yQFnxS4%hLS0~vhsa3i&Awj(jbl#rw)?ffgfWr+gahp&rPnwSK*j5;hOl z;2q<818;d-arnDV8QdFtG}uzf^}UaLk>>k&0>#Rm5q$O_6VFdxSdI}#sjrCdtURlo z|D)#A&KFNM->tCjTjgW-7X!TUYrjT(;PN{r6J{&#BaYXkU|RKcEAbQ}W-*PhKCTiTV+HJ5Gb0Qu{!{fS~~8N1+Gf38DzADIy~9N9qkJyybwcA-&0 zsOQWx*y!h%>YM8up6BJzDLpkQy=eOCBhD{R(5iR$ zWn7n^8vIvyU18*l82)YG?VS@&le}&tjpH{@&*AFp#vU7)dS;RkPpt@uko_H2QfiNb zMDIr~;u(L6*C~$R3Ns#@MI!8wsHEG(=Pr!qhAX>bGv$2zPk~QfC6&O!DdE?@ICWQ` zr0SAy3Do|ZnetYrOy$^*v-#rZ$^VE==BE~EVBa@-zxLf9JmmlY delta 5224 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 diff --git a/Context.js b/Context.js index 741c0eaa9..c8eefe7a6 100644 --- a/Context.js +++ b/Context.js @@ -178,7 +178,7 @@ if (FULL_LOG === true) { logger.write("[INFO] initialize -> getExecutionHistory -> Entering function."); } let fileName = "Execution.History.json" - let filePath = global.FILE_PATH_ROOT + "/Output/" + bot.process; + let filePath = bot.filePathRoot + "/Output/" + bot.process; if (FULL_LOG === true) { logger.write("[INFO] initialize -> getExecutionHistory -> fileName = " + fileName); } if (FULL_LOG === true) { logger.write("[INFO] initialize -> getExecutionHistory -> filePath = " + filePath); } @@ -239,7 +239,7 @@ let fileName = "Execution.Context.json" let dateForPath = date.getUTCFullYear() + '/' + utilities.pad(date.getUTCMonth() + 1, 2) + '/' + utilities.pad(date.getUTCDate(), 2) + '/' + utilities.pad(date.getUTCHours(), 2) + '/' + utilities.pad(date.getUTCMinutes(), 2); - let filePath = global.FILE_PATH_ROOT + "/Output/" + bot.process + '/' + dateForPath; + let filePath = bot.filePathRoot + "/Output/" + bot.process + '/' + dateForPath; if (FULL_LOG === true) { logger.write("[INFO] initialize -> getExecutionContext -> fileName = " + fileName); } if (FULL_LOG === true) { logger.write("[INFO] initialize -> getExecutionContext -> filePath = " + filePath); } @@ -399,7 +399,7 @@ let fileName = "Execution.Context.json" let dateForPath = global.processDatetime.getUTCFullYear() + '/' + utilities.pad(global.processDatetime.getUTCMonth() + 1, 2) + '/' + utilities.pad(global.processDatetime.getUTCDate(), 2) + '/' + utilities.pad(global.processDatetime.getUTCHours(), 2) + '/' + utilities.pad(global.processDatetime.getUTCMinutes(), 2); - let filePath = global.FILE_PATH_ROOT + "/Output/" + bot.process + '/' + dateForPath; + let filePath = bot.filePathRoot + "/Output/" + bot.process + '/' + dateForPath; if (FULL_LOG === true) { logger.write("[INFO] saveThemAll -> writeExecutionContext -> fileName = " + fileName); } if (FULL_LOG === true) { logger.write("[INFO] saveThemAll -> writeExecutionContext -> filePath = " + filePath); } @@ -459,7 +459,7 @@ if (FULL_LOG === true) { logger.write("[INFO] saveThemAll -> writeExucutionHistory -> Entering function."); } let fileName = "Execution.History.json" - let filePath = global.FILE_PATH_ROOT + "/Output/" + bot.process; + let filePath = bot.filePathRoot + "/Output/" + bot.process; if (FULL_LOG === true) { logger.write("[INFO] saveThemAll -> writeExucutionHistory -> fileName = " + fileName); } if (FULL_LOG === true) { logger.write("[INFO] saveThemAll -> writeExucutionHistory -> filePath = " + filePath); } diff --git a/Run.js b/Run.js index da2b7b5f8..f859c51a1 100644 --- a/Run.js +++ b/Run.js @@ -25,35 +25,12 @@ global.EXCHANGE_SIMULATION_MODE = JSON.parse(global.PLATFORM_CONFIG.exchangeSimu global.STORAGE_CONN_STRING_FOLDER = global.PLATFORM_CONFIG.storageConnStringFolder; // 'Testnet', 'Mixed' or 'Production', or whatever folder name the conn strings files are into. -/* Now we will read the config of the bot from the path we obtained on the VM config. */ - -let botConfig; - -try { - - botConfig = JSON.parse(fs.readFileSync(global.PLATFORM_CONFIG.bot.path + '/this.bot.config.json', 'utf8')); -} -catch (err) { - console.log("[ERROR] 'readConfig' - ERROR : " + err.message); - return; -} - -let bot = { // TODO > REPLACE THIS FOR THE ENTIRE BOT CONFIGURATION. NOTE THAT NAME NOW IS CODENAME - "name": botConfig.displayName, - "type": botConfig.type, - "version": botConfig.version, - "devTeam": botConfig.devTeam -}; - /* Now we will run according to what we see at the config file. */ const ROOT_DIR = './'; const MODULE_NAME = "Run"; const DEBUG_MODULE = require(ROOT_DIR + 'Debug Log'); -const logger = DEBUG_MODULE.newDebugLog(); -logger.fileName = MODULE_NAME; -logger.bot = botConfig; process.on('uncaughtException', function (err) { logger.write('uncaughtException - ' + err.message); @@ -140,9 +117,6 @@ global.dailyFilePeriods = global.dailyFilePeriods = JSON.parse(global.dailyFilePeriods); -/* File Path Root */ - -global.FILE_PATH_ROOT = botConfig.devTeam + "/" + botConfig.codeName + "." + botConfig.version.major + "." + botConfig.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + botConfig.dataSetVersion; /* Loop Counter */ @@ -162,6 +136,40 @@ const TRADING_BOT_MAIN_LOOP_MODULE = require('./Trading Bot Main Loop'); const INDICATOR_BOT_MAIN_LOOP_MODULE = require('./Indicator Bot Main Loop'); const EXTRACTION_BOT_MAIN_LOOP_MODULE = require('./Extraction Bot Main Loop'); +/* Loop through all the processes configured to be run by this Node.js Instance. */ + +let logger; + +for (let p = 0; p < global.PLATFORM_CONFIG.executionList; p++) { + + let listItem = PLATFORM_CONFIG.executionList[p]; + + /* Now we will read the config of the bot from the path we obtained at the AACloud config. */ + + let botConfig; + + try { + + botConfig = JSON.parse(fs.readFileSync(global.PLATFORM_CONFIG.bot.path + '/this.bot.config.json', 'utf8')); + } + catch (err) { + console.log("[ERROR] 'readConfig' - ERROR : " + err.message); + return; + } + + logger = DEBUG_MODULE.newDebugLog(); + logger.fileName = MODULE_NAME; + logger.bot = botConfig; + + /* File Path Root */ + + bot.filePathRoot + botConfig.filePathRoot = botConfig.devTeam + "/" + botConfig.codeName + "." + botConfig.version.major + "." + botConfig.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + botConfig.dataSetVersion; + + +} + + /* Now we will see which are the script Arguments. We expect the name of the process to run, since that is what it should be defined at the Task Scheduller. */ let processToRun = process.argv[2]; @@ -226,7 +234,7 @@ for (let i = 0; i < botConfig.processes.length; i++) { let month = pad((new Date()).getUTCMonth() + 1, 2); let year = (new Date()).getUTCFullYear(); - switch (bot.type) { + switch (botConfig.type) { case 'Extraction': { runExtractionBot(processConfig, month, year); return; diff --git a/Status Report.js b/Status Report.js index 2d2c37fc5..19a764726 100644 --- a/Status Report.js +++ b/Status Report.js @@ -173,7 +173,7 @@ } let fileName = "Status.Report.json" - let filePath = global.FILE_PATH_ROOT + "/Reports/" + owner.process + timePath; + let filePath = bot.filePathRoot + "/Reports/" + owner.process + timePath; if (FULL_LOG === true) { logger.write("[INFO] save -> fileName = " + fileName); } if (FULL_LOG === true) { logger.write("[INFO] save -> filePath = " + filePath); } diff --git a/this.config.json b/this.config.json index 539bb127a..b347619d5 100644 --- a/this.config.json +++ b/this.config.json @@ -8,6 +8,12 @@ "bot": { "path": "../Bots/AAMasters/AAMariam-Trading-Bot" }, + "executionList": [ + { + "botPath": "../Bots/AAMasters/AAMariam-Trading-Bot", + "process": "Trading-Process" + } + ], "stopGracefully": "false", "exchangeSimulationMode": "false", "storageConnStringFolder": "Production",