diff --git a/backend/.sqlx/query-efc22aae27c30894f3d8ad9484f48439711707dba1f3112b495b1b18cbd31b31.json b/backend/.sqlx/query-efc22aae27c30894f3d8ad9484f48439711707dba1f3112b495b1b18cbd31b31.json new file mode 100644 index 0000000000..024d164a7e --- /dev/null +++ b/backend/.sqlx/query-efc22aae27c30894f3d8ad9484f48439711707dba1f3112b495b1b18cbd31b31.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT CONCAT(coalesce(queue.logs, ''), coalesce(job_logs.logs, '')) \n FROM queue \n LEFT JOIN job_logs ON job_logs.job_id = queue.id \n WHERE queue.id = $1 AND queue.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "concat", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "efc22aae27c30894f3d8ad9484f48439711707dba1f3112b495b1b18cbd31b31" +} diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index a03e5df946..1995f8d9f1 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -598,8 +598,22 @@ async fn get_job_logs( .fetch_optional(&db) .await? .flatten(); - let text = not_found_if_none(text, "Job Logs", id.to_string())?; - Ok(text) + if let Some(text) = text { + Ok(text) + } else { + let text = sqlx::query_scalar!( + "SELECT CONCAT(coalesce(queue.logs, ''), coalesce(job_logs.logs, '')) + FROM queue + LEFT JOIN job_logs ON job_logs.job_id = queue.id + WHERE queue.id = $1 AND queue.workspace_id = $2", + id, + w_id + ) + .fetch_one(&db) + .await?; + let text = not_found_if_none(text, "Job Logs", id.to_string())?; + Ok(text) + } } #[derive(Debug, sqlx::FromRow, Serialize)] diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index ffb8b49571..c980d59467 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -2716,6 +2716,15 @@ async fn handle_queued_job( #[cfg(feature = "prometheus")] timer.map(|x| x.stop_and_record()); } else { + if job.logs.as_ref().is_some_and(|x| !x.is_empty()) { + append_logs( + job.id, + job.workspace_id.clone(), + job.logs.clone().unwrap(), + db, + ) + .await; + } let mut logs = "".to_string(); let mut mem_peak: i32 = 0; let mut canceled_by: Option = None;