diff --git a/core/lib/fragment_lib.js b/core/lib/fragment_lib.js index fc7a7a86..f4ef0f0f 100644 --- a/core/lib/fragment_lib.js +++ b/core/lib/fragment_lib.js @@ -534,7 +534,9 @@ module.exports = { if(keepArray && dfobTable.length==0){ fragmentSelected = [{ frag : newFrag, - relativHistoryTableSelected: relativHistoryTable + //relativHistoryTable is [] cause by copyDataUntilPath call or dafault. + relativHistoryTableSelected: relativHistoryTable, + relativDfobTable: [] }]; } @@ -570,15 +572,17 @@ module.exports = { const isDfobFragmentSelected = processedData.dfobFragmentSelected&&processedData.dfobFragmentSelected.length>0; - const fragVerif = await fragmentModelInstance.findOne({_id: newFrag.id}).exec(); + // const fragVerif = await fragmentModelInstance.findOne({_id: newFrag.id}).exec(); // console.log('__copyFragUntilPath fragVerif',JSON.stringify(fragVerif)) return { data : processedData.data, - dfobFragmentSelected:isDfobFragmentSelected ? processedData.dfobFragmentSelected : { + //if no processedData.dfobFragmentSelected but algo is here, that means this step create fragment + dfobFragmentSelected:isDfobFragmentSelected ? processedData.dfobFragmentSelected : [{ frag : newFrag, - relativHistoryTableSelected: processedData.relativHistoryTableSelected - }, + relativHistoryTableSelected: processedData.relativHistoryTableSelected, + relativDfobTable: dfobTable + }], rootFrag :newFrag.rootFrag, newFrag :newFrag }; @@ -627,10 +631,11 @@ module.exports = { }else{ let relativHistoryTableCopy =[...relativHistoryTable] - let fragmentSelected; + let fragmentSelected=[]; let relativHistoryTableSelected=[]; for (let key in data) { - // console.log('___0.1',key,data) + // console.log('______key',key) + // console.log('______dfobTable',dfobTable) let dfobTableCurrent = [...dfobTable]; let dfobTableCopy = [...dfobTable]; let dfobMarker = false; @@ -641,13 +646,16 @@ module.exports = { }else{ dfobTableCurrent=[]; } + console.log('____relativHistoryTableCopy 1',relativHistoryTableCopy) if (data[key] && data[key] != null && data[key]._frag) { if(dfobTableCurrent.length>0){ const persitedFrag = await this.copyFragUntilPath(data[key]._frag, dfobTableCopy, keepArray, [], callerFrag) data[key] = { _frag:persitedFrag.newFrag._id.toString() }; - fragmentSelected=persitedFrag.dfobFragmentSelected; + if(persitedFrag.dfobFragmentSelected){ + fragmentSelected=fragmentSelected.concat(persitedFrag.dfobFragmentSelected); + } } } else { // console.log('_',key,data[key]) @@ -655,12 +663,16 @@ module.exports = { data[key] = processedData.data; data = this.replaceMongoNotSupportedKey(data, false); - fragmentSelected=processedData.dfobFragmentSelected?processedData.dfobFragmentSelected:undefined; + if(processedData.dfobFragmentSelected){ + fragmentSelected=fragmentSelected.concat(processedData.dfobFragmentSelected) + } + // fragmentSelected=processedData.dfobFragmentSelected?processedData.dfobFragmentSelected:undefined; // console.log('__->',processedData.relativHistoryTableSelected,relativHistoryTableCopy) if (processedData?.relativHistoryTableSelected?.length>relativHistoryTableSelected.length){ relativHistoryTableSelected=processedData.relativHistoryTableSelected; relativHistoryTableCopy = relativHistoryTableSelected }else{ + console.log('____relativHistoryTableCopy 2',relativHistoryTableCopy) relativHistoryTableSelected = relativHistoryTableCopy } // relativHistoryTableSelected=processedData?.relativHistoryTableSelected?.length>relativHistoryTableSelected.length?processedData.relativHistoryTableSelected:relativHistoryTableCopy; @@ -668,15 +680,16 @@ module.exports = { // console.log('___________processedData',data); } // console.log('_____ return data',JSON.stringify(data)); - // console.log('_____________________________relativHistoryTableSelected',relativHistoryTableSelected) + console.log('_____________________________relativHistoryTableSelected',relativHistoryTableSelected) + // console.log('_____________________________dfobTableCopy',dfobTableCopy) + console.log('_____________________________dfobTable',dfobTable) return { data, - relativHistoryTableSelected:relativHistoryTableSelected, - dfobFragmentSelected:fragmentSelected + relativHistoryTableSelected : relativHistoryTableSelected, + dfobFragmentSelected : fragmentSelected }; } } else { - console.log('AAAAALLLLLLOOO') return { data, relativHistoryTable diff --git a/engine/services/engine.js b/engine/services/engine.js index 693a9770..62303155 100644 --- a/engine/services/engine.js +++ b/engine/services/engine.js @@ -371,6 +371,8 @@ class Engine { keepArray ) + console.log('__dfobFragmentFlow',dfobFragmentFlow.dfobFragmentSelected) + const newFrag = dfobFragmentFlow.newFrag; let dfobFragmentSelected = dfobFragmentFlow.dfobFragmentSelected; @@ -421,7 +423,7 @@ class Engine { return [ processingNode, item.frag, - {dfobTable:item.relativHistoryTableSelected||[],pipeNb, keepArray}, + {dfobTable:item.relativDfobTable||[],pipeNb, keepArray}, componentFlow.primaryflow, secondaryFlowDefraged ] @@ -721,15 +723,19 @@ class Engine { let currentdFob = newDfobPathTab.shift() let flowOfKey = currentFlow[currentdFob] - // TODO complex algorythm, To improve - if (newDfobPathTab.length > 0) { - return (this.buildDfobFlow(flowOfKey, newDfobPathTab, currentdFob, keepArray)) - } else { - if (Array.isArray(flowOfKey) && keepArray != true) { + if(flowOfKey){ + // TODO complex algorythm, To improve + if (newDfobPathTab.length > 0) { return (this.buildDfobFlow(flowOfKey, newDfobPathTab, currentdFob, keepArray)) } else { - return (this.buildDfobFlow(currentFlow, newDfobPathTab, currentdFob, keepArray)) + if (Array.isArray(flowOfKey) && keepArray != true) { + return (this.buildDfobFlow(flowOfKey, newDfobPathTab, currentdFob, keepArray)) + } else { + return (this.buildDfobFlow(currentFlow, newDfobPathTab, currentdFob, keepArray)) + } } + }else{ + throw new Error(`dfobPath '${dfobPathTab}' isn't achievable`) } } } else { @@ -779,63 +785,68 @@ class Engine { if(needDfob){ // console.log('WITH DFOB',dfobTable); // if (this.config.quietLog != true) console.time("build-DfobFlow"); - const dfobFlow = this.buildDfobFlow( - rebuildData, - dfobTable, - undefined, - keepArray - ) - let paramArray = dfobFlow.map(item => { - var recomposedFlow = []; - - recomposedFlow = recomposedFlow.concat([{ - data: item.key != undefined ? item.objectToProcess[item.key] : item.objectToProcess, - componentId: primaryflow.componentId - }]); - recomposedFlow = recomposedFlow.concat(secondaryFlow); - - return [ - processingNode.component, - recomposedFlow, - processingNode.queryParams == undefined ? undefined : processingNode.queryParams.queryParams - ] - }); - // if (this.config.quietLog != true) console.timeEnd("build-DfobFlow"); - // if (this.config.quietLog != true) console.time("work"); - const componentFlowDfob = await this.promiseOrchestrator.execute(module, module.pull, paramArray, { - beamNb: pipeNb, - logIteration: true, - continueChekFunction: async () => { - const process = await this.workspace_lib.getCurrentProcess(this.processId); - if (process.state == 'stop') { - return false - } else { - return true - } - } - }, this.config); - // if (this.config.quietLog != true) console.timeEnd("work"); - // if (this.config.quietLog != true) console.time("recompose-DfobFlow"); - - for (var componentFlowDfobKey in componentFlowDfob) { - if ('data' in componentFlowDfob[componentFlowDfobKey]) { - if (dfobFlow[componentFlowDfobKey].key != undefined) { - dfobFlow[componentFlowDfobKey].objectToProcess[dfobFlow[componentFlowDfobKey].key] = - componentFlowDfob[componentFlowDfobKey].data - } else { - // all keys to replace because no key defined because root dfob - for (let key of Object.keys(dfobFlow[componentFlowDfobKey].objectToProcess)) { - dfobFlow[componentFlowDfobKey].objectToProcess[key] = undefined; + try { + const dfobFlow = this.buildDfobFlow( + rebuildData, + dfobTable, + undefined, + keepArray + ) + let paramArray = dfobFlow.map(item => { + var recomposedFlow = []; + + recomposedFlow = recomposedFlow.concat([{ + data: item.key != undefined ? item.objectToProcess[item.key] : item.objectToProcess, + componentId: primaryflow.componentId + }]); + recomposedFlow = recomposedFlow.concat(secondaryFlow); + + return [ + processingNode.component, + recomposedFlow, + processingNode.queryParams == undefined ? undefined : processingNode.queryParams.queryParams + ] + }); + // if (this.config.quietLog != true) console.timeEnd("build-DfobFlow"); + // if (this.config.quietLog != true) console.time("work"); + const componentFlowDfob = await this.promiseOrchestrator.execute(module, module.pull, paramArray, { + beamNb: pipeNb, + logIteration: true, + continueChekFunction: async () => { + const process = await this.workspace_lib.getCurrentProcess(this.processId); + if (process.state == 'stop') { + return false + } else { + return true } - for (let key of Object.keys(componentFlowDfob[componentFlowDfobKey].data)) { - dfobFlow[componentFlowDfobKey].objectToProcess[key] = componentFlowDfob[componentFlowDfobKey].data[key]; + } + }, this.config); + // if (this.config.quietLog != true) console.timeEnd("work"); + // if (this.config.quietLog != true) console.time("recompose-DfobFlow"); + + for (var componentFlowDfobKey in componentFlowDfob) { + if ('data' in componentFlowDfob[componentFlowDfobKey]) { + if (dfobFlow[componentFlowDfobKey].key != undefined) { + dfobFlow[componentFlowDfobKey].objectToProcess[dfobFlow[componentFlowDfobKey].key] = + componentFlowDfob[componentFlowDfobKey].data + } else { + // all keys to replace because no key defined because root dfob + for (let key of Object.keys(dfobFlow[componentFlowDfobKey].objectToProcess)) { + dfobFlow[componentFlowDfobKey].objectToProcess[key] = undefined; + } + for (let key of Object.keys(componentFlowDfob[componentFlowDfobKey].data)) { + dfobFlow[componentFlowDfobKey].objectToProcess[key] = componentFlowDfob[componentFlowDfobKey].data[key]; + } } + } else if (componentFlowDfob[componentFlowDfobKey].error != undefined) { + dfobFlow[componentFlowDfobKey].objectToProcess[dfobFlow[componentFlowDfobKey].key] = + componentFlowDfob[componentFlowDfobKey] } - } else if (componentFlowDfob[componentFlowDfobKey].error != undefined) { - dfobFlow[componentFlowDfobKey].objectToProcess[dfobFlow[componentFlowDfobKey].key] = - componentFlowDfob[componentFlowDfobKey] } + } catch (error) { + //if exception during buildDfobFlow or other buildDfobFlow is not impact } + // if (this.config.quietLog != true) console.timeEnd("recompose-DfobFlow"); } else { // console.log('WITHOUT DFOB');