#71: Added more skipped branch checks. Need to fix visited in worker

This commit is contained in:
frikky
2020-06-20 11:43:22 +02:00
parent 8f40fa01e9
commit c3d3258ed4
4 changed files with 81 additions and 3 deletions
+62 -2
View File
@@ -681,7 +681,7 @@ func handleGetStreamResults(resp http.ResponseWriter, request *http.Request) {
// Finds the child nodes of a node in execution and returns them
// Used if e.g. a node in a branch is exited, and all children have to be stopped
func findChildNodes(workflowExecution WorkflowExecution, nodeId string) []string {
log.Printf("\nNODE TO FIX: %s\n\n", nodeId)
//log.Printf("\nNODE TO FIX: %s\n\n", nodeId)
allChildren := []string{nodeId}
// 1. Find children of this specific node
@@ -690,6 +690,21 @@ func findChildNodes(workflowExecution WorkflowExecution, nodeId string) []string
if branch.SourceID == nodeId {
log.Printf("Children: %s", branch.DestinationID)
allChildren = append(allChildren, branch.DestinationID)
childNodes := findChildNodes(workflowExecution, branch.DestinationID)
for _, bottomChild := range childNodes {
found := false
for _, topChild := range allChildren {
if topChild == bottomChild {
found = true
break
}
}
if !found {
allChildren = append(allChildren, bottomChild)
}
}
}
}
@@ -884,6 +899,31 @@ func handleWorkflowQueue(resp http.ResponseWriter, request *http.Request) {
workflowExecution.Results = append(workflowExecution.Results, actionResult)
}
// FIXME: Have a check for skippednodes and their parents
for resultIndex, result := range workflowExecution.Results {
if result.Status != "SKIPPED" {
continue
}
// Checks if all parents are skipped or failed. Otherwise removes them from the results
for _, branch := range workflowExecution.Workflow.Branches {
if branch.DestinationID == result.Action.ID {
for _, subresult := range workflowExecution.Results {
if subresult.Action.ID == branch.SourceID {
if subresult.Status != "SKIPPED" && subresult.Status != "FAILURE" {
log.Printf("SUBRESULT PARENT STATUS: %s", subresult.Status)
log.Printf("Should remove resultIndex: %d", resultIndex)
workflowExecution.Results = append(workflowExecution.Results[:resultIndex], workflowExecution.Results[resultIndex+1:]...)
break
}
}
}
}
}
}
extraInputs := 0
for _, result := range workflowExecution.Results {
if result.Action.Name == "User Input" && result.Action.AppName == "User Input" {
@@ -893,7 +933,6 @@ func handleWorkflowQueue(resp http.ResponseWriter, request *http.Request) {
log.Printf("LENGTH: %d - %d", len(workflowExecution.Results), len(workflowExecution.Workflow.Actions))
//log.Printf("Checking results %d vs %d", len(workflowExecution.Results), len(workflowExecution.Workflow.Actions)+extraInputs)
if len(workflowExecution.Results) == len(workflowExecution.Workflow.Actions)+extraInputs {
finished := true
lastResult := ""
@@ -906,8 +945,29 @@ func handleWorkflowQueue(resp http.ResponseWriter, request *http.Request) {
break
}
// FIXME: Check if ALL parents are skipped or if its just one. Otherwise execute it
if result.Status == "SKIPPED" {
skippedNodes = true
// Checks if all parents are skipped or failed. Otherwise removes them from the results
for _, branch := range workflowExecution.Workflow.Branches {
if branch.DestinationID == result.Action.ID {
for _, subresult := range workflowExecution.Results {
if subresult.Action.ID == branch.SourceID {
if subresult.Status != "SKIPPED" && subresult.Status != "FAILURE" {
//log.Printf("SUBRESULT PARENT STATUS: %s", subresult.Status)
//log.Printf("Should remove resultIndex: %d", resultIndex)
finished = false
break
}
}
}
}
if !finished {
break
}
}
}
lastResult = result.Result
+8
View File
@@ -325,6 +325,14 @@ const AngularWorkflow = (props) => {
incomingEdges.addClass('success-highlight')
currentnode.addClass('executing-highlight')
break
case "SKIPPED":
currentnode.removeClass('not-executing-highlight')
currentnode.removeClass('success-highlight')
currentnode.removeClass('failure-highlight')
currentnode.removeClass('awaiting-data-highlight')
currentnode.removeClass('executing-highlight')
currentnode.addClass('skipped-highlight')
break
case "WAITING":
currentnode.removeClass('not-executing-highlight')
currentnode.removeClass('success-highlight')
+10
View File
@@ -113,6 +113,16 @@ const data = [{
'background-color': '#77b0d0',
},
},
{
selector: '.skipped-highlight',
css: {
'background-color': 'grey',
'border-color': 'grey',
'border-width': '8px',
'transition-property': 'background-color',
'transition-duration': '0.5s',
},
},
{
selector: '.success-highlight',
css: {
+1 -1
View File
@@ -502,9 +502,9 @@ func handleExecution(client *http.Client, req *http.Request, workflowExecution W
nextActions = []string{startAction}
} else {
for _, item := range workflowExecution.Results {
// FIXME: Check whether the item should be visited or not
visited = append(visited, item.Action.ID)
nextActions = children[item.Action.ID]
// FIXME: check if nextActions items are finished?
}
}