diff --git a/frontend/src/components/Billing.jsx b/frontend/src/components/Billing.jsx index 5ddf7d86..817e6295 100644 --- a/frontend/src/components/Billing.jsx +++ b/frontend/src/components/Billing.jsx @@ -431,6 +431,18 @@ const Billing = (props) => { {top_text} + + {top_text === "Base Cloud Access" && userdata.has_card_available === false ? + + : null} {isCloud && highlight === true && top_text !== "Base Cloud Access" ? { userdata.has_card_available === true ? "While you have a card attached to your account, Shuffle will no longer prevent workflows from running. Billing will occur at the start of each month." : - `You are not subscribed to any plan and are using the free plan with max 10,000 app runs per month. Upgrade to deactivate this limit. Your organisations manager email is ${selectedOrganization.org}.` + `You are not subscribed to any plan and are using the free plan with max 10,000 app runs per month. Upgrade to deactivate this limit.` } + Billing email: {selectedOrganization.org} {/*isCloud ? : null} - {userdata.has_card_available === false ? - - : null} : null} {showSupport ? diff --git a/frontend/src/components/BillingStats.jsx b/frontend/src/components/BillingStats.jsx index e4354db0..e3311986 100644 --- a/frontend/src/components/BillingStats.jsx +++ b/frontend/src/components/BillingStats.jsx @@ -113,8 +113,6 @@ const AppStats = (defaultprops) => { return } - console.log("START TIME", starttime, endtime) - var url = `${globalUrl}/api/v1/workflows/${workflow.id}/executions/count` if (starttime !== "") { @@ -178,8 +176,6 @@ const AppStats = (defaultprops) => { const allData = Promise.all(promises); allData.then((data) => { - console.log("IN ALL DATA") - var total = 0 for (var i = 0; i < data.length; i++) { if (data[i].runcount !== undefined) { diff --git a/frontend/src/components/ParsedAction.jsx b/frontend/src/components/ParsedAction.jsx index 3c4f37d6..ab2ead31 100755 --- a/frontend/src/components/ParsedAction.jsx +++ b/frontend/src/components/ParsedAction.jsx @@ -454,12 +454,7 @@ const ParsedAction = (props) => { } } - // FIXME: Add values from previous executions if they exist - if ( - workflow.execution_variables !== null && - workflow.execution_variables !== undefined && - workflow.execution_variables.length > 0 - ) { + if (workflow.execution_variables !== null && workflow.execution_variables !== undefined && workflow.execution_variables.length > 0) { for (let [key,keyval] in Object.entries(workflow.execution_variables)) { const item = workflow.execution_variables[key]; actionlist.push({ @@ -474,76 +469,85 @@ const ParsedAction = (props) => { } // Loops parent nodes' old results to fix autocomplete - if (getParents !== undefined) { - var parents = getParents(selectedAction); + if (getParents !== undefined) { + var parents = getParents(selectedAction) if (parents.length > 1) { - for (let [key,keyval] in Object.entries(parents)) { - const item = parents[key]; - if (item.label === "Execution Argument") { - continue; + var labels = [] + //for (let [parentkey, parentkeyval] in Object.entries(parents)) { + for (let parentkey in parents) { + const parentNode = parents[parentkey] + if (parentNode.label === "Execution Argument") { + continue } - var exampledata = item.example === undefined || item.example === null ? "" : item.example; + //if (labels.includes(item.label)) { + // continue + //} + + labels.push(parentNode.label) + + var exampledata = parentNode.example === undefined || parentNode.example === null ? "" : parentNode.example // Find previous execution and their variables //exampledata === "" && if (workflowExecutions.length > 0) { // Look for the ID const found = false; - for (let [key,keyval] in Object.entries(workflowExecutions)) { - if ( - workflowExecutions[key].results === undefined || - workflowExecutions[key].results === null - ) { + for (let wfkey in workflowExecutions) { + if (workflowExecutions[wfkey].results === undefined || workflowExecutions[wfkey].results === null) { + continue; } - var foundResult = workflowExecutions[key].results.find( - (result) => result.action.id === item.id - ); + var foundResult = workflowExecutions[wfkey].results.find((result) => result.action.id === parentNode.id) + if (foundResult === undefined || foundResult === null) { - continue; + continue } - if (foundResult.result !== undefined && foundResult.result !== null) { - foundResult = foundResult.result - } + if (foundResult.result !== undefined && foundResult.result !== null) { + foundResult = foundResult.result + } - const valid = validateJson(foundResult) - if (valid.valid) { - if (valid.result.success === false) { - //console.log("Skipping success false autocomplete") - } else { - exampledata = valid.result; - break; - } + const valid = validateJson(foundResult) + if (valid.valid) { + if (valid.result.success === false) { + //console.log("Skipping success false autocomplete") + } else { + + // FIXME: Have a merge system to allow to use kind of any key from that node in the last 10-20 execs + //if (exampledata.length > 0) { + // exampledata = valid.result + //} else { + // exampledata = valid.result + //} + + exampledata = valid.result + break + } } else { - exampledata = foundResult; - } + exampledata = foundResult + } } } // 1. Take - const itemlabelComplete = - item.label === null || item.label === undefined - ? "" - : item.label.split(" ").join("_"); + const itemlabelComplete = parentNode.label === null || parentNode.label === undefined ? "" : parentNode.label.split(" ").join("_"); const actionvalue = { type: "action", - id: item.id, - name: item.label, + id: parentNode.id, + name: parentNode.label, autocomplete: itemlabelComplete, example: exampledata, - }; + } - actionlist.push(actionvalue); + actionlist.push(actionvalue) } } - //console.log("ACTIONLIST: ", actionlist) setActionlist(actionlist); - } + } } }); @@ -672,7 +676,6 @@ const ParsedAction = (props) => { selectedAction.parameters[count]["value_replace"] = paramcheck["value_replace"]; } - console.log("RESULT: ", selectedAction); setSelectedAction(selectedAction); //setUpdate(Math.random()) return; @@ -2550,9 +2553,9 @@ const ParsedAction = (props) => { {datafield} {/*shufflecode*/} {showDropdown && - showDropdownNumber === count && - data.variant === "STATIC_VALUE" && - jsonList.length > 0 ? ( + showDropdownNumber === count && + data.variant === "STATIC_VALUE" && + jsonList.length > 0 ? ( { ) : ( - ); + ) + return ( { return response.json(); }) .then((responseJson) => { - //console.log("RESPONSE: ", responseJson) handleUpdateResults(responseJson, executionRequest); }) .catch((error) => { @@ -1349,12 +1348,10 @@ const AngularWorkflow = (defaultprops) => { const sendStreamRequest = (body) => { //console.log("Stream not activated yet.") if (!isCloud) { - console.log("Stream not activated yet for onprem") return } if (streamDisabled) { - console.log("Stream disabled - send") return } @@ -1365,7 +1362,7 @@ const AngularWorkflow = (defaultprops) => { //const url = ${globalUrl}/api/v1/workflows/${props.match.params.key}/stream //const streamUrl = "http://localhost:5002" - console.log("Stream request: ", body) + //console.log("Stream request: ", body) const streamUrl = "https://stream.shuffler.io" const url = `${streamUrl}/api/v1/workflows/${props.match.params.key}/stream` @@ -1397,7 +1394,7 @@ const AngularWorkflow = (defaultprops) => { return response.json(); }) .then((responseJson) => { - console.log("Stream resp: ", responseJson) + //console.log("Stream resp: ", responseJson) }) .catch((error) => { console.log("Stream send error: ", error.toString()) @@ -1410,11 +1407,21 @@ const AngularWorkflow = (defaultprops) => { var success = false; if (isCloud && !isLoggedIn) { - console.log("Should redirect to register with redirect."); - window.location.href = `/register?view=/workflows/${props.match.params.key}&message=You need sign up to use workflows with Shuffle`; - return; + console.log("Should redirect to register with redirect.") + window.location.href = `/register?view=/workflows/${props.match.params.key}&message=You need sign up to use workflows with Shuffle` + return } + if (curworkflow === undefined || curworkflow === null) { + console.log("No workflow during save") + return + } + + if (curworkflow.actions === undefined || curworkflow.actions === null || curworkflow.actions.length === 0) { + console.log("Can't save without actions") + return + } + setSavingState(2); // This might not be the right course of action, but seems logical, as items could be running already @@ -4467,7 +4474,6 @@ const AngularWorkflow = (defaultprops) => { const foundresult = GetParamMatch(paramname, exampledata, ""); if (foundresult.length > 0) { - console.log("FOUND ReS for field: ", dstdata.parameters[dstdataParamKey].name, foundresult) if (dstdata.parameters[dstdataParamKey].value.length === 0) { dstdata.parameters[dstdataParamKey].value = `$${parentlabel}${foundresult}`; dstdata.parameters[dstdataParamKey].autocompleted = true @@ -4550,7 +4556,6 @@ const AngularWorkflow = (defaultprops) => { if (sourcenode.data("app_name") !== "Shuffle Workflow" && sourcenode.data("app_name") !== "User Input") { setTimeout(() => { const alledges = cy.edges().jsons() - console.log("edges: ", alledges, edge) var targetedge = alledges.findIndex( (data) => data.data.source === edge.source && data.data.id !== edge.id ) @@ -4576,7 +4581,6 @@ const AngularWorkflow = (defaultprops) => { const edgeCurve = calculateEdgeCurve(sourcenode.position(), destinationnode.position()) const currentedge = cy.getElementById(edge.id) if (currentedge !== undefined && currentedge !== null) { - console.log("Setting edge curve: ", edgeCurve) currentedge.style('control-point-distance', edgeCurve.distance) currentedge.style('control-point-weight', edgeCurve.weight) } @@ -4587,7 +4591,6 @@ const AngularWorkflow = (defaultprops) => { (data) => data.id === edge.target ); if (targetnode !== -1) { - console.log("TARGETNODE: ", targetnode); if (workflow.triggers[targetnode].app_name === "User Input" || workflow.triggers[targetnode].app_name === "Shuffle Workflow" || workflow.triggers[targetnode].app_name === "Shuffle Subflow") { } else { toast("Can't have triggers as target of branch"); @@ -4689,7 +4692,6 @@ const AngularWorkflow = (defaultprops) => { /* targetnode = workflow.triggers.findIndex(data => data.id === edge.target) if (targetnode !== -1) { - console.log("TARGETNODE: ", targetnode) if (workflow.triggers[targetnode].app_name === "User Input" || workflow.triggers[targetnode].app_name === "Shuffle Workflow") { } else { toast("Can't have triggers as target of branch") @@ -4883,7 +4885,6 @@ const AngularWorkflow = (defaultprops) => { // toast("Recommendations to show??") //} - console.log("Added to workflow!!") setWorkflow(workflow); fetchRecommendations(workflow) } else if (nodedata.type === "TRIGGER") { @@ -6180,7 +6181,6 @@ const AngularWorkflow = (defaultprops) => { if (inputworkflow.actions !== undefined && inputworkflow.actions !== null && inputworkflow.actions.length > 0) { cy.remove('*') } - console.log("INPUT: ", inputworkflow) } if (inputworkflow.actions === undefined || inputworkflow.actions === null) { @@ -6482,6 +6482,7 @@ const AngularWorkflow = (defaultprops) => { // Get selected node if (selectedNode.data().type === "TRIGGER") { + console.log("Should remove trigger!"); console.log(selectedNode.data()); const triggerindex = workflow.triggers.findIndex( @@ -8780,7 +8781,7 @@ const AngularWorkflow = (defaultprops) => { results.push({ id: allkeys[parentkey], type: "TRIGGER" }); } else { if (handled.includes(currentnode.data().id)) { - continue; + continue } else { handled.push(currentnode.data().id); results.push(currentnode.data()); @@ -8817,11 +8818,12 @@ const AngularWorkflow = (defaultprops) => { } // Remove on the end as we don't want to remove everything - results = results.filter((data) => data.id !== action.id); - results = results.filter((data) => data.type === "ACTION" || data.app_name === "Shuffle Workflow" || data.app_name === "User Input"); - results.push({ label: "Execution Argument", type: "INTERNAL" }); - return results; - }; + results = results.filter((data) => data.id !== action.id) + results = results.filter((data) => data.type === "ACTION" || data.app_name === "Shuffle Workflow" || data.app_name === "User Input") + results.push({ label: "Execution Argument", type: "INTERNAL" }) + + return results + } // BOLD name: type: required? // FORM @@ -10290,7 +10292,6 @@ const AngularWorkflow = (defaultprops) => { return response.json(); }) .then((responseJson) => { - //console.log("RESPONSE: "); setTriggerAuthentication(responseJson); clearInterval(id); newwin.close(); @@ -14290,7 +14291,7 @@ const AngularWorkflow = (defaultprops) => { lastSaved && !workflow.public ? "outlined" : "contained" } onClick={() => { - saveWorkflow() + saveWorkflow(workflow) if (workflow.public === true) { console.log("Public!") @@ -14773,7 +14774,7 @@ const AngularWorkflow = (defaultprops) => { This workflow is public and { - saveWorkflow() + saveWorkflow(workflow) }}>must be saved or exported before use. {Object.getOwnPropertyNames(creatorProfile).length !== 0 && creatorProfile.github_avatar !== undefined && creatorProfile.github_avatar !== null ? @@ -15563,7 +15564,7 @@ const AngularWorkflow = (defaultprops) => { style={{ color: "white", fontSize: 16 }} >

- + All Workflow Runs

@@ -18394,9 +18395,16 @@ const AngularWorkflow = (defaultprops) => { cy.removeListener("drag"); cy.removeListener("free"); cy.removeListener("cxttap"); + + //cy.remove('*') + setElements([]) } - setupGraph(newrevision) + // Remove all cy nodes + setTimeout(() => { + setupGraph(newrevision) + }, 100) + // Re-adding cytoscape triggers if (cy !== undefined && cy !== null) { diff --git a/frontend/src/views/Workflows.jsx b/frontend/src/views/Workflows.jsx index f453c98a..03fab69d 100755 --- a/frontend/src/views/Workflows.jsx +++ b/frontend/src/views/Workflows.jsx @@ -518,7 +518,7 @@ export const validateJson = (showResult) => { } } } catch (e) { - console.log("Failed parsing inside json subvalues: ", e) + //console.log("Failed parsing inside json subvalues: ", e) } } diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index 05697e13..2d761857 100755 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -570,12 +570,10 @@ func deployServiceWorkers(image string) { overrideHttpProxy := os.Getenv("SHUFFLE_INTERNAL_HTTP_PROXY") overrideHttpsProxy := os.Getenv("SHUFFLE_INTERNAL_HTTPS_PROXY") if len(overrideHttpProxy) > 0 { - log.Printf("[DEBUG] Added internal proxy: %s", overrideHttpProxy) serviceSpec.TaskTemplate.ContainerSpec.Env = append(serviceSpec.TaskTemplate.ContainerSpec.Env, fmt.Sprintf("SHUFFLE_INTERNAL_HTTP_PROXY=%s", overrideHttpProxy)) } if len(overrideHttpsProxy) > 0 { - log.Printf("[DEBUG] Added internal proxy: %s", overrideHttpsProxy) serviceSpec.TaskTemplate.ContainerSpec.Env = append(serviceSpec.TaskTemplate.ContainerSpec.Env, fmt.Sprintf("SHUFFLE_INTERNAL_HTTPS_PROXY=%s", overrideHttpsProxy)) } @@ -1758,12 +1756,10 @@ func main() { overrideHttpProxy := os.Getenv("SHUFFLE_INTERNAL_HTTP_PROXY") overrideHttpsProxy := os.Getenv("SHUFFLE_INTERNAL_HTTPS_PROXY") if len(overrideHttpProxy) > 0 { - log.Printf("[DEBUG] Added internal proxy: %s", overrideHttpProxy) env = append(env, fmt.Sprintf("SHUFFLE_INTERNAL_HTTP_PROXY=%s", overrideHttpProxy)) } if len(overrideHttpsProxy) > 0 { - log.Printf("[DEBUG] Added internal proxy: %s", overrideHttpsProxy) env = append(env, fmt.Sprintf("SHUFFLE_INTERNAL_HTTPS_PROXY=%s", overrideHttpsProxy)) }