diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py
index 8e77b6b0..2c8246d8 100644
--- a/backend/app_sdk/app_base.py
+++ b/backend/app_sdk/app_base.py
@@ -1488,7 +1488,7 @@ class AppBase:
# Means it's a single item -> continue
if seconditem == "":
print("[INFO] In first - handling %s. Len: %d" % (firstitem, len(basejson)))
- if firstitem.lower() == "max" or firstitem.lower() == "last":
+ if firstitem.lower() == "max" or firstitem.lower() == "last" or firstitem.lower() == "end":
firstitem = len(basejson)-1
elif firstitem.lower() == "min" or firstitem.lower() == "first":
firstitem = 0
@@ -1503,14 +1503,14 @@ class AppBase:
newvalue, is_loop = (tmpitem, parsersplit[outercnt+1:])
else:
print("[INFO] In ELSE - handling %s and %s" % (firstitem, seconditem))
- if firstitem.lower() == "max" or firstitem.lower() == "last":
+ if firstitem.lower() == "max" or firstitem.lower() == "last" or firstitem.lower() == "end":
firstitem = len(basejson)-1
elif firstitem.lower() == "min" or firstitem.lower() == "first":
firstitem = 0
else:
firstitem = int(firstitem)
- if seconditem.lower() == "max" or seconditem.lower() == "last":
+ if seconditem.lower() == "max" or seconditem.lower() == "last" or firstitem.lower() == "end":
seconditem = len(basejson)-1
elif seconditem.lower() == "min" or seconditem.lower() == "first":
seconditem = 0
diff --git a/backend/go-app/go.mod b/backend/go-app/go.mod
index 204385cc..94d499b4 100644
--- a/backend/go-app/go.mod
+++ b/backend/go-app/go.mod
@@ -2,7 +2,7 @@ module main
go 1.15
-replace github.com/shuffle/shuffle-shared => ../../../../git/shuffle-shared
+//replace github.com/shuffle/shuffle-shared => ../../../../git/shuffle-shared
//replace github.com/frikky/kin-openapi => ../../../../git/kin-openapi
//replace github.com/frikky/go-elasticsearch => ../../../../git/go-elasticsearch
@@ -22,7 +22,7 @@ require (
github.com/gorilla/mux v1.8.0
github.com/h2non/filetype v1.1.1
github.com/satori/go.uuid v1.2.0
- github.com/shuffle/shuffle-shared v0.1.62
+ github.com/shuffle/shuffle-shared v0.1.70
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
go4.org v0.0.0-20201209231011-d4a079459e60 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519
diff --git a/backend/go-app/main.go b/backend/go-app/main.go
index 0938c464..e8ab58d3 100644
--- a/backend/go-app/main.go
+++ b/backend/go-app/main.go
@@ -2885,7 +2885,7 @@ func handleSwaggerValidation(body []byte) (shuffle.ParsedOpenApi, error) {
}
} else {
isJson = true
- log.Printf("Successfully parsed JSON!")
+ //log.Printf("[DEBUG] Successfully parsed JSON!")
}
if len(version.SwaggerVersion) > 0 && len(version.Swagger) == 0 {
diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go
index 282af25c..c7af3c50 100644
--- a/backend/go-app/walkoff.go
+++ b/backend/go-app/walkoff.go
@@ -1040,7 +1040,6 @@ func executeWorkflow(resp http.ResponseWriter, request *http.Request) {
}
user, userErr := shuffle.HandleApiAuthentication(resp, request)
-
if user.Role == "org-reader" {
log.Printf("[WARNING] Org-reader doesn't have access to run workflow: %s (%s)", user.Username, user.Id)
resp.WriteHeader(401)
@@ -2171,7 +2170,7 @@ func iterateOpenApiGithub(fs billy.Filesystem, dir []os.FileInfo, extra string,
}
if appCounter > 0 {
- log.Printf("Preloaded %d OpenApi apps in folder %s!", appCounter, extra)
+ //log.Printf("Preloaded %d OpenApi apps in folder %s!", appCounter, extra)
}
return nil
diff --git a/docker-compose.yml b/docker-compose.yml
index f1c7ff7c..d48c7797 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -16,7 +16,7 @@ services:
depends_on:
- backend
backend:
- #build: ./backend
+ build: ./backend
image: ghcr.io/frikky/shuffle-backend:nightly
container_name: shuffle-backend
hostname: ${BACKEND_HOSTNAME}
diff --git a/frontend/src/components/ShuffleCodeEditor.jsx b/frontend/src/components/ShuffleCodeEditor.jsx
index e0baf9ed..4465ae77 100644
--- a/frontend/src/components/ShuffleCodeEditor.jsx
+++ b/frontend/src/components/ShuffleCodeEditor.jsx
@@ -38,7 +38,7 @@ const CodeEditor = (props) => {
function expectedOutput(input) {
const found = input.match(/[$]{1}([a-zA-Z0-9_-]+\.?){1}([a-zA-Z0-9#_-]+\.?){0,}/g)
- console.log(found)
+ //console.log(found)
try{
// When the found array is empty.
diff --git a/frontend/src/components/Workflowsearch.jsx b/frontend/src/components/Workflowsearch.jsx
new file mode 100644
index 00000000..e69de29b
diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx
index 880178eb..ac9990fa 100644
--- a/frontend/src/views/AngularWorkflow.jsx
+++ b/frontend/src/views/AngularWorkflow.jsx
@@ -1056,7 +1056,7 @@ const AngularWorkflow = (defaultprops) => {
}
curworkflowComment.position = cyelements[key].position();
- console.log(curworkflowComment)
+ //console.log(curworkflowComment)
newComments.push(curworkflowComment);
} else {
@@ -3193,14 +3193,14 @@ const AngularWorkflow = (defaultprops) => {
event.path !== null &&
event.path.length > 0
) {
- console.log("PATH: ", event.path[0])
+ //console.log("PATH: ", event.path[0])
if (event.path[0].localName !== "body") {
//console.log("Skipping because body is not targeted")
return;
}
}
- console.log("PATH2: ", event.target)
+ //console.log("PATH2: ", event.target)
if (
event.target !== undefined &&
event.target !== null
@@ -7643,6 +7643,11 @@ const AngularWorkflow = (defaultprops) => {
const handleWorkflowSelectionUpdate = (e) => {
setUpdate(Math.random());
+
+ if (e.target.value === undefined || e.target.value === null || e.target.value.id === undefined) {
+ return null
+ }
+
workflow.triggers[
selectedTriggerIndex
].parameters[0].value = e.target.value.id;
@@ -10268,7 +10273,7 @@ const AngularWorkflow = (defaultprops) => {
return (
Execution Argument
-
+
{executionData.execution_argument}
@@ -10415,11 +10420,11 @@ const AngularWorkflow = (defaultprops) => {
base = JSON.stringify(base)
}
- if (base_node_name === "execution_argument") {
+ if (base_node_name === "execution_argument" || base_node_name === "Execution Argument") {
base_node_name = "exec"
}
- console.log("COPY: ", copy);
+ console.log("COPY: ", base_node_name, copy);
//var newitem = JSON.parse(base);
var newitem = validateJson(base).result
@@ -11352,10 +11357,13 @@ const AngularWorkflow = (defaultprops) => {
: selectedResult.status === "ABORTED" || selectedResult.status === "FAILURE"
? "red"
: yellow;
+
const validate = !codeModalOpen
? ""
: validateJson(selectedResult.result.trim());
+
if (validate.valid && typeof validate.result === "string") {
+ console.log(validate.result)
validate.result = JSON.parse(validate.result);
}
@@ -11691,7 +11699,7 @@ const AngularWorkflow = (defaultprops) => {
) : (
-
+
{
setCy(incy);
}}
/>
-
+
)}
{executionModal}
diff --git a/frontend/src/views/Workflows.jsx b/frontend/src/views/Workflows.jsx
index 679812c6..072238c6 100644
--- a/frontend/src/views/Workflows.jsx
+++ b/frontend/src/views/Workflows.jsx
@@ -429,7 +429,11 @@ export const validateJson = (showResult) => {
}
}
- //console.log("VALID: ", jsonvalid, result)
+ if (jsonvalid && typeof result === "number") {
+ jsonvalid = false
+ }
+
+ //console.log("VALID: ", jsonvalid, result, typeof result)
return {
valid: jsonvalid,
result: result,
diff --git a/functions/onprem/worker/build.sh b/functions/onprem/worker/build.sh
index 3b9a9b74..9ca623e2 100644
--- a/functions/onprem/worker/build.sh
+++ b/functions/onprem/worker/build.sh
@@ -1,5 +1,5 @@
NAME=shuffle-worker
-VERSION=0.9.45
+VERSION=0.9.46
echo "Running docker build with $NAME:$VERSION"
#CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o worker.bin .
diff --git a/functions/onprem/worker/go.mod b/functions/onprem/worker/go.mod
index 88003e36..dc35b688 100644
--- a/functions/onprem/worker/go.mod
+++ b/functions/onprem/worker/go.mod
@@ -10,6 +10,6 @@ require (
github.com/docker/go-connections v0.4.0 // indirect
github.com/gorilla/mux v1.8.0
github.com/patrickmn/go-cache v2.1.0+incompatible
- github.com/shuffle/shuffle-shared v0.1.60
+ github.com/shuffle/shuffle-shared v0.1.70
go4.org v0.0.0-20201209231011-d4a079459e60 // indirect
)
diff --git a/functions/onprem/worker/go.sum b/functions/onprem/worker/go.sum
index bcb952de..7f161bfd 100644
--- a/functions/onprem/worker/go.sum
+++ b/functions/onprem/worker/go.sum
@@ -580,6 +580,8 @@ github.com/shuffle/shuffle-shared v0.1.55 h1:feHtTN7Uhr1aMxkMIo3xZbr97599VB2eLek
github.com/shuffle/shuffle-shared v0.1.55/go.mod h1:2ndjLm4ZOvY6arGFwOgGnkQ457Ke7gka9HDF/EkdIxQ=
github.com/shuffle/shuffle-shared v0.1.60 h1:Jjb6TfE/KnVfCryIL2vtRHBnBX307slVlGBjaEqgwW4=
github.com/shuffle/shuffle-shared v0.1.60/go.mod h1:2ndjLm4ZOvY6arGFwOgGnkQ457Ke7gka9HDF/EkdIxQ=
+github.com/shuffle/shuffle-shared v0.1.68 h1:xneGx6ZBU9hgIPt3W6pMUIoTZDxNJbOX/cKhndoVu3Y=
+github.com/shuffle/shuffle-shared v0.1.68/go.mod h1:2ndjLm4ZOvY6arGFwOgGnkQ457Ke7gka9HDF/EkdIxQ=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go
index 26775e92..8af69c9b 100644
--- a/functions/onprem/worker/worker.go
+++ b/functions/onprem/worker/worker.go
@@ -69,7 +69,7 @@ var nextActions []string
var extra int
var startAction string
*/
-var results []shuffle.ActionResult
+//var results []shuffle.ActionResult
var allLogs map[string]string
var containerIds []string
var downloadedImages []string
@@ -660,6 +660,7 @@ func removeIndex(s []string, i int) []string {
func handleExecutionResult(workflowExecution shuffle.WorkflowExecution) {
ctx := context.Background()
+
startAction, extra, children, parents, visited, executed, nextActions, environments := shuffle.GetExecutionVariables(ctx, workflowExecution.ExecutionId)
log.Printf("[DEBUG][%s] Getting info for %s. Extra: %d", workflowExecution.ExecutionId, workflowExecution.ExecutionId, extra)
dockercli, err := dockerclient.NewEnvClient()
@@ -840,6 +841,8 @@ func handleExecutionResult(workflowExecution shuffle.WorkflowExecution) {
// SKIP if it's not onprem
toRemove := []int{}
//log.Printf("\n\nNEXTACTIONS: %#v\n\n", nextActions)
+ // FIXME: In this loop, there may be an ordering issue where a subflow and other triggers don't wait for all parent nodes to finish, due to that happening farther down in the loop. That means they may execute with only a single parent node actually being finishing.
+ // FIXME: Look at how to fix it by moving it farther down. PS: Fixing this, means it should be fixed in the worker too. Make them generic in shuffle mod
for index, nextAction := range nextActions {
action := getAction(workflowExecution, nextAction, environment)
// check visited and onprem
@@ -854,145 +857,6 @@ func handleExecutionResult(workflowExecution shuffle.WorkflowExecution) {
continue
}
- newExecId := fmt.Sprintf("%s_%s", workflowExecution.ExecutionId, nextAction)
- if !shuffle.ArrayContains(executedIds, newExecId) {
- executedIds = append(executedIds, newExecId)
- toRemove = append(toRemove, index)
- } else {
- //log.Printf("\n\n[DEBUG] %s is already executed. Continuing.", newExecId)
- continue
- }
-
- // max 1000 :o
- if len(executedIds) >= 1000 {
- executedIds = executedIds[900:999]
- }
-
- if action.AppName == "Shuffle Tools" && (action.Name == "skip_me" || action.Name == "router" || action.Name == "route") {
- err := runSkipAction(topClient, action, workflowExecution.Workflow.ID, workflowExecution.ExecutionId, workflowExecution.Authorization, "SKIPPED")
- if err != nil {
- log.Printf("[DEBUG][%s] Error in skipme for %s: %s", workflowExecution.ExecutionId, action.Label, err)
- } else {
- log.Printf("[INFO][%s] Adding visited (4): %s", workflowExecution.ExecutionId, action.Label)
-
- visited = append(visited, action.ID)
- executed = append(executed, action.ID)
- continue
- }
- } else if action.AppName == "Shuffle Workflow" {
- //log.Printf("SHUFFLE WORKFLOW: %#v", action)
- action.Environment = environment
- action.AppName = "shuffle-subflow"
- action.Name = "run_subflow"
- action.AppVersion = "1.0.0"
-
- //appname := action.AppName
- //appversion := action.AppVersion
- //appname = strings.Replace(appname, ".", "-", -1)
- //appversion = strings.Replace(appversion, ".", "-", -1)
- // shuffle-subflow_1.0.0
-
- //visited = append(visited, action.ID)
- //executed = append(executed, action.ID)
-
- trigger := shuffle.Trigger{}
- for _, innertrigger := range workflowExecution.Workflow.Triggers {
- if innertrigger.ID == action.ID {
- trigger = innertrigger
- break
- }
- }
-
- // FIXME: Add startnode from frontend
- action.Label = trigger.Label
- action.Parameters = []shuffle.WorkflowAppActionParameter{}
- for _, parameter := range trigger.Parameters {
- parameter.Variant = "STATIC_VALUE"
- action.Parameters = append(action.Parameters, parameter)
- }
-
- action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
- Name: "source_workflow",
- Value: workflowExecution.Workflow.ID,
- })
-
- action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
- Name: "source_execution",
- Value: workflowExecution.ExecutionId,
- })
-
- action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
- Name: "source_node",
- Value: trigger.ID,
- })
-
- action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
- Name: "source_auth",
- Value: workflowExecution.Authorization,
- })
-
- //trigger.LargeImage = ""
- //err = handleSubworkflowExecution(client, workflowExecution, trigger, action)
- //if err != nil {
- // log.Printf("[ERROR] Failed to execute subworkflow: %s", err)
- //} else {
- // log.Printf("[INFO] Executed subworkflow!")
- //}
- //continue
- } else if action.AppName == "User Input" {
- log.Printf("[DEBUG] RUNNING USER INPUT!")
-
- if action.ID == workflowExecution.Start {
- log.Printf("[DEBUG] Skipping user input because it's the startnode")
- visited = append(visited, action.ID)
- executed = append(executed, action.ID)
- continue
- } else {
- log.Printf("[DEBUG] Should stop after this iteration because it's user-input based. %#v", action)
- trigger := shuffle.Trigger{}
- for _, innertrigger := range workflowExecution.Workflow.Triggers {
- if innertrigger.ID == action.ID {
- trigger = innertrigger
- break
- }
- }
-
- action.Label = action.Label
- action.Parameters = []shuffle.WorkflowAppActionParameter{}
- for _, parameter := range trigger.Parameters {
- action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
- Name: parameter.Name,
- Value: parameter.Value,
- })
- }
-
- trigger.LargeImage = ""
- triggerData, err := json.Marshal(trigger)
- if err != nil {
- log.Printf("[WARNING] Failed unmarshalling action: %s", err)
- triggerData = []byte("Failed unmarshalling. Cancel execution!")
- }
-
- err = runUserInput(topClient, action, workflowExecution.Workflow.ID, workflowExecution, workflowExecution.Authorization, string(triggerData), dockercli)
- if err != nil {
- log.Printf("[ERROR] Failed launching backend magic: %s", err)
- os.Exit(3)
- } else {
- log.Printf("[INFO] Launched user input node succesfully!")
- os.Exit(3)
- }
-
- break
- }
- } else {
- //log.Printf("Handling action %#v", action)
- }
-
- if len(toRemove) > 0 {
- //toRemove = []int{}
- //for index, nextAction := range nextActions {
- }
-
// Not really sure how this edgecase happens.
// FIXME
@@ -1030,12 +894,7 @@ func handleExecutionResult(workflowExecution shuffle.WorkflowExecution) {
if continueOuter {
log.Printf("[INFO] Parents of %s aren't finished: %s", nextAction, strings.Join(parents[nextAction], ", "))
- //for _, tmpaction := range parents[nextAction] {
- // action := getAction(workflowExecution, tmpaction)
- // _ = action
- // //log.Printf("Parent: %s", action.Label)
- //}
- // Find the result of the nodes?
+
continue
}
@@ -1043,11 +902,200 @@ func handleExecutionResult(workflowExecution shuffle.WorkflowExecution) {
actionResult := getResult(workflowExecution, nextAction)
if actionResult.Action.ID == action.ID {
log.Printf("[INFO] %s already has status %s.", action.ID, actionResult.Status)
+
continue
} else {
log.Printf("[INFO][%s] %s:%s has no status result yet. Should execute.", workflowExecution.ExecutionId, action.Name, action.ID)
}
+ newExecId := fmt.Sprintf("%s_%s", workflowExecution.ExecutionId, nextAction)
+ _, err := shuffle.GetCache(ctx, newExecId)
+ if err == nil {
+ //log.Printf("\n\n[DEBUG] Already found %s - returning\n\n", newExecId)
+ continue
+ }
+
+ cacheData := []byte("1")
+ err = shuffle.SetCache(ctx, newExecId, cacheData)
+ if err != nil {
+ log.Printf("[WARNING] Failed setting cache for action %s: %s", newExecId, err)
+ } else {
+ log.Printf("\n\n[DEBUG] Adding %s to cache. Name: %s\n\n", newExecId, action.Name)
+ }
+
+ if action.AppName == "Shuffle Tools" && (action.Name == "skip_me" || action.Name == "router" || action.Name == "route") {
+ topClient := &http.Client{
+ Timeout: 3 * time.Second,
+ }
+ err := runSkipAction(topClient, action, workflowExecution.Workflow.ID, workflowExecution.ExecutionId, workflowExecution.Authorization, "SKIPPED")
+ if err != nil {
+ log.Printf("[DEBUG][%s] Error in skipme for %s: %s", workflowExecution.ExecutionId, action.Label, err)
+ } else {
+ log.Printf("[INFO][%s] Adding visited (4): %s", workflowExecution.ExecutionId, action.Label)
+
+ visited = append(visited, action.ID)
+ executed = append(executed, action.ID)
+ continue
+ }
+ } else if action.AppName == "Shuffle Workflow" {
+ //log.Printf("SHUFFLE WORKFLOW: %#v", action)
+ branchesFound := 0
+ parentFinished := 0
+
+ for _, item := range workflowExecution.Workflow.Branches {
+ if item.DestinationID == action.ID {
+ branchesFound += 1
+
+ for _, result := range workflowExecution.Results {
+ if result.Action.ID == item.SourceID {
+ // Check for fails etc
+ if result.Status == "SUCCESS" || result.Status == "SKIPPED" {
+ parentFinished += 1
+ } else {
+ log.Printf("Parent %s has status %s", result.Action.Label, result.Status)
+ }
+
+ break
+ }
+ }
+ }
+ }
+
+ log.Printf("[DEBUG] Should execute %s (?). Branches: %d. Parents done: %d", action.AppName, branchesFound, parentFinished)
+ if branchesFound == parentFinished {
+ action.Environment = environment
+ action.AppName = "shuffle-subflow"
+ action.Name = "run_subflow"
+ action.AppVersion = "1.0.0"
+
+ //appname := action.AppName
+ //appversion := action.AppVersion
+ //appname = strings.Replace(appname, ".", "-", -1)
+ //appversion = strings.Replace(appversion, ".", "-", -1)
+ // shuffle-subflow_1.0.0
+
+ //visited = append(visited, action.ID)
+ //executed = append(executed, action.ID)
+
+ trigger := shuffle.Trigger{}
+ for _, innertrigger := range workflowExecution.Workflow.Triggers {
+ if innertrigger.ID == action.ID {
+ trigger = innertrigger
+ break
+ }
+ }
+
+ // FIXME: Add startnode from frontend
+ action.Label = trigger.Label
+ action.Parameters = []shuffle.WorkflowAppActionParameter{}
+ for _, parameter := range trigger.Parameters {
+ parameter.Variant = "STATIC_VALUE"
+ action.Parameters = append(action.Parameters, parameter)
+ }
+
+ action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
+ Name: "source_workflow",
+ Value: workflowExecution.Workflow.ID,
+ })
+
+ action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
+ Name: "source_execution",
+ Value: workflowExecution.ExecutionId,
+ })
+
+ action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
+ Name: "source_node",
+ Value: trigger.ID,
+ })
+
+ action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
+ Name: "source_auth",
+ Value: workflowExecution.Authorization,
+ })
+
+ //trigger.LargeImage = ""
+ //err = handleSubworkflowExecution(client, workflowExecution, trigger, action)
+ //if err != nil {
+ // log.Printf("[ERROR] Failed to execute subworkflow: %s", err)
+ //} else {
+ // log.Printf("[INFO] Executed subworkflow!")
+ //}
+ //continue
+ }
+ } else if action.AppName == "User Input" {
+ log.Printf("[DEBUG] RUNNING USER INPUT!")
+ branchesFound := 0
+ parentFinished := 0
+
+ for _, item := range workflowExecution.Workflow.Branches {
+ if item.DestinationID == action.ID {
+ branchesFound += 1
+
+ for _, result := range workflowExecution.Results {
+ if result.Action.ID == item.SourceID {
+ // Check for fails etc
+ if result.Status == "SUCCESS" || result.Status == "SKIPPED" {
+ parentFinished += 1
+ } else {
+ log.Printf("Parent %s has status %s", result.Action.Label, result.Status)
+ }
+
+ break
+ }
+ }
+ }
+ }
+
+ log.Printf("[DEBUG] Should execute %s (?). Branches: %d. Parents done: %d", action.AppName, branchesFound, parentFinished)
+ if branchesFound == parentFinished {
+
+ if action.ID == workflowExecution.Start {
+ log.Printf("[DEBUG] Skipping user input because it's the startnode")
+ visited = append(visited, action.ID)
+ executed = append(executed, action.ID)
+ continue
+ } else {
+ log.Printf("[DEBUG] Should stop after this iteration because it's user-input based. %#v", action)
+ trigger := shuffle.Trigger{}
+ for _, innertrigger := range workflowExecution.Workflow.Triggers {
+ if innertrigger.ID == action.ID {
+ trigger = innertrigger
+ break
+ }
+ }
+
+ action.Label = action.Label
+ action.Parameters = []shuffle.WorkflowAppActionParameter{}
+ for _, parameter := range trigger.Parameters {
+ action.Parameters = append(action.Parameters, shuffle.WorkflowAppActionParameter{
+ Name: parameter.Name,
+ Value: parameter.Value,
+ })
+ }
+
+ trigger.LargeImage = ""
+ triggerData, err := json.Marshal(trigger)
+ if err != nil {
+ log.Printf("[WARNING] Failed unmarshalling action: %s", err)
+ triggerData = []byte("Failed unmarshalling. Cancel execution!")
+ }
+
+ err = runUserInput(topClient, action, workflowExecution.Workflow.ID, workflowExecution, workflowExecution.Authorization, string(triggerData), dockercli)
+ if err != nil {
+ log.Printf("[ERROR] Failed launching backend magic: %s", err)
+ os.Exit(3)
+ } else {
+ log.Printf("[INFO] Launched user input node succesfully!")
+ os.Exit(3)
+ }
+
+ break
+ }
+ }
+ } else {
+ //log.Printf("Handling action %#v", action)
+ }
+
appname := action.AppName
appversion := action.AppVersion
appname = strings.Replace(appname, ".", "-", -1)
@@ -1408,7 +1456,7 @@ func executionInit(workflowExecution shuffle.WorkflowExecution) error {
nextActions := []string{}
extra := 0
- results = workflowExecution.Results
+ //results = workflowExecution.Results
startAction := workflowExecution.Start
log.Printf("[INFO][%s] STARTACTION: %s", workflowExecution.ExecutionId, startAction)
@@ -1980,7 +2028,7 @@ func handleWorkflowQueue(resp http.ResponseWriter, request *http.Request) {
}
}
- results = append(results, actionResult)
+ //results = append(results, actionResult)
log.Printf("[DEBUG][%s] In workflowQueue with transaction", workflowExecution.ExecutionId)
runWorkflowExecutionTransaction(ctx, 0, workflowExecution.ExecutionId, actionResult, resp)
@@ -2035,9 +2083,9 @@ func runWorkflowExecutionTransaction(ctx context.Context, attempts int64, workfl
log.Printf(`[DEBUG][%s] Got result %s from %s. Execution status: %s. Save: %#v`, actionResult.ExecutionId, actionResult.Status, actionResult.Action.ID, workflowExecution.Status, dbSave)
//dbSave := false
- if len(results) != len(workflowExecution.Results) {
- log.Printf("[DEBUG][%s] There may have been an issue in transaction queue. Result lengths: %d vs %d. Should check which exists the base results, but not in entire execution, then append.", workflowExecution.ExecutionId, len(results), len(workflowExecution.Results))
- }
+ //if len(results) != len(workflowExecution.Results) {
+ // log.Printf("[DEBUG][%s] There may have been an issue in transaction queue. Result lengths: %d vs %d. Should check which exists the base results, but not in entire execution, then append.", workflowExecution.ExecutionId, len(results), len(workflowExecution.Results))
+ //}
// Validating that action results hasn't changed
// Handled using cachhing, so actually pretty fast