328 lines
12 KiB
JavaScript
328 lines
12 KiB
JavaScript
|
|
function newDailyFiles () {
|
|
const MODULE_NAME = 'Daily Files'
|
|
const INFO_LOG = false
|
|
const ERROR_LOG = true
|
|
const logger = newWebDebugLog()
|
|
logger.fileName = MODULE_NAME
|
|
|
|
let thisObject = {
|
|
getFileCursor: getFileCursor,
|
|
setDatetime: setDatetime,
|
|
setTimePeriod: setTimePeriod,
|
|
getExpectedFiles: getExpectedFiles,
|
|
getFilesLoaded: getFilesLoaded,
|
|
initialize: initialize,
|
|
finalize: finalize
|
|
}
|
|
|
|
let filesLoaded = 0
|
|
let expectedFiles = 0
|
|
|
|
let fileCloud
|
|
|
|
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 {
|
|
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) }
|
|
|
|
callBackWhenFileReceived = callBackFunction
|
|
|
|
let exchange = ecosystem.getExchange(pProduct, pExchange)
|
|
|
|
if (exchange === undefined) {
|
|
throw 'Exchange not supoorted by this product of the ecosystem! - pDevTeam.codeName = ' + pDevTeam.codeName + ', pBot.codeName = ' + pBot.codeName + ', pProduct.codeName = ' + pProduct.codeName + ', pExchange = ' + pExchange
|
|
}
|
|
|
|
fileCloud = newFileCloud()
|
|
fileCloud.initialize(pBot)
|
|
|
|
/* First we will get the Data Range */
|
|
|
|
fileCloud.getFile(pDevTeam, pBot, pSet, exchange, pMarket, undefined, undefined, undefined, true, onDataRangeReceived)
|
|
|
|
function onDataRangeReceived (err, pFile) {
|
|
try {
|
|
if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Entering function.') }
|
|
|
|
let beginDateRange
|
|
let endDateRange
|
|
|
|
switch (err.result) {
|
|
case GLOBAL.DEFAULT_OK_RESPONSE.result: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received OK Response.') }
|
|
|
|
beginDateRange = new Date(pFile.begin)
|
|
endDateRange = new Date(pFile.end)
|
|
|
|
break
|
|
}
|
|
|
|
case GLOBAL.DEFAULT_FAIL_RESPONSE.result: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received FAIL Response.') }
|
|
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
|
return
|
|
}
|
|
|
|
case GLOBAL.CUSTOM_FAIL_RESPONSE.result: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received CUSTOM FAIL Response.') }
|
|
if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> err.message = ' + err.message) }
|
|
|
|
if (err.message === 'File does not exist.') {
|
|
if (INFO_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> No Date Range file found. maxDate will be set to current datetime. ') }
|
|
|
|
endDateRange = new Date()
|
|
break
|
|
}
|
|
|
|
if (err.message === 'Missing Configuration.') {
|
|
if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> The needed configuration for the dateRange at the dataSet of the product was not found.') }
|
|
if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> maxDate will be set to current datetime.') }
|
|
|
|
endDateRange = new Date()
|
|
break
|
|
}
|
|
|
|
/* If none of the previous conditions are met, the we return the err to the caller. */
|
|
|
|
callBackFunction(err)
|
|
return
|
|
}
|
|
|
|
default: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received Unexpected Response.') }
|
|
callBackFunction(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
/* Now we will get the daily files */
|
|
|
|
for (i = 0; i < dailyFilePeriods.length; i++) {
|
|
let periodTime = dailyFilePeriods[i][0]
|
|
let periodName = dailyFilePeriods[i][1]
|
|
|
|
if (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, onInitialized)
|
|
|
|
function onInitialized (err) {
|
|
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)
|
|
}
|
|
}
|
|
} catch (err) {
|
|
if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onFileReceived -> err = ' + err) }
|
|
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
|
}
|
|
}
|
|
} catch (err) {
|
|
if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err) }
|
|
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
|
}
|
|
}
|
|
|
|
function onFileReceived (err) {
|
|
try {
|
|
if (INFO_LOG === true) { logger.write('[INFO] onFileReceived -> Entering function.') }
|
|
|
|
switch (err.result) {
|
|
case GLOBAL.DEFAULT_OK_RESPONSE.result: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] onFileReceived -> Received OK Response.') }
|
|
break
|
|
}
|
|
|
|
case GLOBAL.DEFAULT_FAIL_RESPONSE.result: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] onFileReceived -> Received FAIL Response.') }
|
|
callBackWhenFileReceived(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
|
return
|
|
}
|
|
|
|
case GLOBAL.CUSTOM_FAIL_RESPONSE.result: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] onFileReceived -> Received CUSTOM FAIL Response.') }
|
|
if (INFO_LOG === true) { logger.write('[INFO] onFileReceived -> err.message = ' + err.message) }
|
|
|
|
callBackWhenFileReceived(err)
|
|
return
|
|
}
|
|
|
|
default: {
|
|
if (INFO_LOG === true) { logger.write('[INFO] onFileReceived -> Received Unexpected Response.') }
|
|
callBackWhenFileReceived(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
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) {
|
|
if (ERROR_LOG === true) { logger.write('[ERROR] onFileReceived -> err = ' + err) }
|
|
callBackWhenFileReceived(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
|
}
|
|
}
|
|
|
|
function getFileCursor (pPeriod) {
|
|
try {
|
|
if (INFO_LOG === true) { logger.write('[INFO] getFileCursor -> Entering function.') }
|
|
|
|
return fileCursors.get(pPeriod)
|
|
} catch (err) {
|
|
if (ERROR_LOG === true) { logger.write('[ERROR] getFileCursor -> err = ' + err) }
|
|
}
|
|
}
|
|
|
|
function setDatetime (pDatetime) {
|
|
try {
|
|
if (INFO_LOG === true) { logger.write('[INFO] setDatetime -> Entering function.') }
|
|
|
|
filesLoaded = 0
|
|
expectedFiles = 0
|
|
|
|
fileCursors.forEach(setDatetimeToEach)
|
|
|
|
function setDatetimeToEach (fileCursor, key, map) {
|
|
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) }
|
|
|
|
fileCursor.reload(onFileReceived)
|
|
}
|
|
} catch (err) {
|
|
if (ERROR_LOG === true) { logger.write('[ERROR] setDatetime -> err = ' + err) }
|
|
}
|
|
}
|
|
|
|
function setTimePeriod (pTimePeriod, pDatetime) {
|
|
try {
|
|
if (INFO_LOG === true) { logger.write('[INFO] setTimePeriod -> Entering function.') }
|
|
|
|
filesLoaded = 0
|
|
expectedFiles = 0
|
|
|
|
fileCursors.forEach(setTimePeriodToEach)
|
|
|
|
function setTimePeriodToEach (fileCursor, key, map) {
|
|
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) }
|
|
|
|
fileCursor.reload(onFileReceived)
|
|
}
|
|
} catch (err) {
|
|
if (ERROR_LOG === true) { logger.write('[ERROR] setTimePeriod -> err = ' + err) }
|
|
}
|
|
}
|
|
|
|
function getExpectedFiles () {
|
|
if (INFO_LOG === true) { logger.write('[INFO] getExpectedFiles -> Entering function.') }
|
|
if (INFO_LOG === true) { logger.write('[INFO] getExpectedFiles -> expectedFiles = ' + expectedFiles) }
|
|
|
|
return expectedFiles
|
|
}
|
|
|
|
function getFilesLoaded () {
|
|
if (INFO_LOG === true) { logger.write('[INFO] getFilesLoaded -> Entering function.') }
|
|
if (INFO_LOG === true) { logger.write('[INFO] getFilesLoaded -> filesLoaded = ' + filesLoaded) }
|
|
|
|
return filesLoaded
|
|
}
|
|
}
|