From a14cc80dfe2b36b01a2340a4fcbb00caa9fc674d Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 14 Jan 2023 15:08:47 +0100 Subject: [PATCH] improve error handling --- backend/tests/worker.rs | 4 ++-- backend/windmill-worker/src/worker.rs | 4 +++- backend/windmill-worker/src/worker_flow.rs | 13 +++++++++++-- .../lib/components/propertyPicker/PropPicker.svelte | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/backend/tests/worker.rs b/backend/tests/worker.rs index 18015529bc..b62da003bb 100644 --- a/backend/tests/worker.rs +++ b/backend/tests/worker.rs @@ -685,7 +685,7 @@ def main(error, port): json!({ "recv": 42, "from failure module": { - "error": "Error during execution of the script:\n\nTraceback (most recent call last):\n File \"/tmp/main.py\", line 15, in \n res = inner_script.main(**kwargs)\n File \"/tmp/inner.py\", line 5, in main\n return sock.recv(1)[0]\nIndexError: index out of range", + "error": "Traceback (most recent call last):\n File \"/tmp/main.py\", line 15, in \n res = inner_script.main(**kwargs)\n File \"/tmp/inner.py\", line 5, in main\n return sock.recv(1)[0]\nIndexError: index out of range", } }) ); @@ -2083,7 +2083,7 @@ async fn test_branchall_skip_failure(db: Pool) { assert_eq!( result, - serde_json::json!([{"error": "Error during execution of the script:\n\nerror: Uncaught (in promise) Error: failure\nexport function main(){ throw Error('failure') }\n ^\n at main (file:///tmp/inner.ts:1:31)\n at run (file:///tmp/main.ts:9:26)\n at file:///tmp/main.ts:14:1"}, [1,3]]) + serde_json::json!([{"error": "error: Uncaught (in promise) Error: failure\nexport function main(){ throw Error('failure') }\n ^\n at main (file:///tmp/inner.ts:1:31)\n at run (file:///tmp/main.ts:9:26)\n at file:///tmp/main.ts:14:1"}, [1,3]]) ); let flow: FlowValue = serde_json::from_value(json!({ diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index 7571174c21..750ece4868 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -875,11 +875,13 @@ async fn handle_queued_job( .split("CODE EXECUTION ---") .last() .unwrap_or(&logs); - format!("Error during execution of the script:\n{}", log_lines) + log_lines.to_string().trim().to_string() } err @ _ => format!("error before termination: {err:#?}"), }; + tracing::info!("job {} failed: {}", job.id, error_message); + let (_, output_map) = add_completed_job_error( db, &job, diff --git a/backend/windmill-worker/src/worker_flow.rs b/backend/windmill-worker/src/worker_flow.rs index e2f66d60dc..2013fb74a2 100644 --- a/backend/windmill-worker/src/worker_flow.rs +++ b/backend/windmill-worker/src/worker_flow.rs @@ -303,7 +303,6 @@ pub async fn update_flow_status_after_job_completion( .fetch_one(&mut tx) .await?; - tracing::info!("setting failure module for flow XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX {parent_module:?}"); sqlx::query!( " UPDATE queue @@ -687,13 +686,19 @@ async fn transform_input( } } + let lresult = last_result.clone(); + let error = if let Some(error) = lresult.as_object() { + error.get("error") + } else { + None + }; for (key, val) in input_transforms.into_iter() { match val { InputTransform::Static { value: _ } => (), InputTransform::Javascript { expr } => { let flow_input = flow_args.clone().unwrap_or_else(|| json!({})); let previous_result = last_result.clone(); - let context = vec![ + let mut context = vec![ ("params".to_string(), json!(mapped)), ("previous_result".to_string(), previous_result), ("flow_input".to_string(), flow_input), @@ -705,6 +710,10 @@ async fn transform_input( ("approvers".to_string(), json!(approvers.clone())), ]; + if error.is_some() { + context.push(("error".to_string(), error.unwrap().clone())); + } + let v = eval_timeout( expr.to_string(), context, diff --git a/frontend/src/lib/components/propertyPicker/PropPicker.svelte b/frontend/src/lib/components/propertyPicker/PropPicker.svelte index 5c0e3e575b..d20dfa6114 100644 --- a/frontend/src/lib/components/propertyPicker/PropPicker.svelte +++ b/frontend/src/lib/components/propertyPicker/PropPicker.svelte @@ -101,7 +101,7 @@