diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 753849be..a5467f76 100755 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -522,6 +522,7 @@ class AppBase: break else: self.logger.info(f"[ERROR] Bad resp {ret.status_code}: {ret.text}") + time.sleep(sleeptime) except requests.exceptions.RequestException as e: self.logger.info(f"[DEBUG] Request problem: {e}") diff --git a/backend/go-app/go.mod b/backend/go-app/go.mod index 6343a95d..c93d1f5f 100644 --- a/backend/go-app/go.mod +++ b/backend/go-app/go.mod @@ -18,7 +18,7 @@ require ( github.com/gorilla/mux v1.8.0 github.com/h2non/filetype v1.1.3 github.com/satori/go.uuid v1.2.0 - github.com/shuffle/shuffle-shared v0.5.11 + github.com/shuffle/shuffle-shared v0.5.14 golang.org/x/crypto v0.14.0 google.golang.org/api v0.125.0 google.golang.org/grpc v1.55.0 diff --git a/backend/go-app/go.sum b/backend/go-app/go.sum index f31286be..4812fee4 100644 --- a/backend/go-app/go.sum +++ b/backend/go-app/go.sum @@ -416,6 +416,10 @@ github.com/shuffle/shuffle-shared v0.4.97 h1:1c8LdNteMykKNEV97vwP63oSP2tV/Uso3O4 github.com/shuffle/shuffle-shared v0.4.97/go.mod h1:X613gbo0dT3fnYvXDRwjQZyLC+T49T2nSQOrCV5QMlI= github.com/shuffle/shuffle-shared v0.4.98 h1:pgsLdWUpxZ/q+eHpAjOCH9icOsmuO5u2olmirOldy5A= github.com/shuffle/shuffle-shared v0.4.98/go.mod h1:X613gbo0dT3fnYvXDRwjQZyLC+T49T2nSQOrCV5QMlI= +github.com/shuffle/shuffle-shared v0.5.11 h1:Eqbs9o8E49QAL5/6aV6BfFtWSjLIvgET7AL3fa4OQTg= +github.com/shuffle/shuffle-shared v0.5.11/go.mod h1:X613gbo0dT3fnYvXDRwjQZyLC+T49T2nSQOrCV5QMlI= +github.com/shuffle/shuffle-shared v0.5.14 h1:d14u1e4k+qKgnf4Insq4x2S+0MMKlDqdyTTyVP3puRA= +github.com/shuffle/shuffle-shared v0.5.14/go.mod h1:X613gbo0dT3fnYvXDRwjQZyLC+T49T2nSQOrCV5QMlI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= diff --git a/frontend/src/components/RuntimeDebugger.jsx b/frontend/src/components/RuntimeDebugger.jsx index d5df7d4e..1b4f431f 100644 --- a/frontend/src/components/RuntimeDebugger.jsx +++ b/frontend/src/components/RuntimeDebugger.jsx @@ -56,6 +56,7 @@ const RuntimeDebugger = (props) => { const [startTime, setStartTime] = useState("") const [workflow, setWorkflow] = useState({}) + const [ignoreOrg, setIgnoreOrg] = useState(false) const [searchLoading, setSearchLoading] = useState(false) const [rowCursor, setCursor] = useState("") const [rowsPerPage, setRowsPerPage] = useState(10) @@ -85,6 +86,7 @@ const RuntimeDebugger = (props) => { status: status.toUpperCase(), start_time: startTime, end_time: endTime, + ignore_org: ignoreOrg, } fetch(`${globalUrl}/api/v1/workflows/search`, { @@ -185,6 +187,38 @@ const RuntimeDebugger = (props) => { } }, []) + const forceContinue = (execution) => { + console.log(`FORCE CONTINUE execution ${execution.execution_id} for workflow ${execution.workflow.id}`) + + fetch(`${globalUrl}/api/v1/workflows/${execution.workflow.id}/executions/${execution.execution_id}/rerun`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + credentials: "include", + }) + .then((response) => response.json()) + .then((data) => { + if (data.success) { + if (data.reason !== undefined && data.reason !== null && data.reason !== "") { + toast("Successful response: " + data.reason) + } else { + toast("Successfully forced continue") + } + } else { + if (data.reason !== undefined && data.reason !== null && data.reason !== "") { + toast(`Failed to force continue: ${data.reason}`) + } else { + toast("Failed to force continue") + } + } + }) + .catch((error) => { + console.error("Error:", error); + toast(`Failed to force continue: ${error}`) + }) + } + const imageSize = 30 const timenowUnix = Math.floor(Date.now() / 1000) const columns: GridColDef[] = [ @@ -371,7 +405,7 @@ const RuntimeDebugger = (props) => { { field: 'id', headerName: 'Explore', - width: 100, + width: 120, renderCell: (params) => { const parsedResult = params.row.result === null || params.row.result === undefined || params.row.result === "" ? "" : params.row.result @@ -443,31 +477,47 @@ const RuntimeDebugger = (props) => { } return ( - - Workflow result: {errorReason}

- {params.row.result !== null && params.row.result !== undefined && params.row.result !== "" ? - params.row.result - : - null - } - - }> - - - - - { - window.open(`${globalUrl}/api/v1/workflows/search/${params.row.id}`, "_blank") - }} - disabled={!userdata.support} - > - - - -
+
+ + Workflow result: {errorReason}

+ {params.row.result !== null && params.row.result !== undefined && params.row.result !== "" ? + params.row.result + : + null + } + + }> + + + + + +
+ + { + forceContinue(params.row) + + }} + > + + + + + { + window.open(`${globalUrl}/api/v1/workflows/search/${params.row.id}`, "_blank") + }} + disabled={!userdata.support} + > + + + +
) } }, @@ -632,6 +682,19 @@ const RuntimeDebugger = (props) => { : null} + + {userdata.support === true ? + + : null}
{ submitSearch(workflowId, status, startTime, endTime, rowCursor, rowsPerPage) @@ -799,7 +862,7 @@ const RuntimeDebugger = (props) => {