diff --git a/orion-server/src/api.rs b/orion-server/src/api.rs index 1868ecd12..333ca301d 100644 --- a/orion-server/src/api.rs +++ b/orion-server/src/api.rs @@ -14,6 +14,7 @@ use axum::{ response::{IntoResponse, Sse, sse::Event, sse::KeepAlive}, routing::{any, get}, }; +use chrono::{DateTime, Utc}; use dashmap::DashMap; use futures_util::{SinkExt, Stream, StreamExt, stream}; use orion::ws::WSMessage; @@ -350,7 +351,7 @@ pub async fn task_handler( build_id: Set(task_id), output_file: Set(format!("{}/{}", get_build_log_dir(), task_id)), exit_code: Set(None), - start_at: Set(chrono::Utc::now()), + start_at: Set(chrono::Utc::now().naive_utc()), end_at: Set(None), repo_name: Set(req.repo.clone()), target: Set(target.clone()), @@ -441,7 +442,7 @@ async fn handle_immediate_task_dispatch( build_id: Set(task_id), output_file: Set(format!("{}/{}", get_build_log_dir(), task_id)), exit_code: Set(None), - start_at: Set(build_info.start_at), + start_at: Set(build_info.start_at.naive_utc()), end_at: Set(None), repo_name: Set(build_info.repo.clone()), target: Set(build_info.target.clone()), @@ -636,7 +637,7 @@ async fn process_message( ); } WSMessage::Heartbeat => { - if let Some(mut worker) = state.scheduler.workers.get_mut(current_worker_id) { + if let Some(mut worker) = state.scheduler.workers.get_mut(current_worker_id) { worker.last_heartbeat = chrono::Utc::now(); tracing::debug!("Received heartbeat from {current_worker_id}"); } @@ -677,7 +678,7 @@ async fn process_message( let _ = builds::Entity::update_many() .set(builds::ActiveModel { exit_code: Set(exit_code), - end_at: Set(Some(chrono::Utc::now())), + end_at: Set(Some(chrono::Utc::now().naive_utc())), ..Default::default() }) .filter(builds::Column::BuildId.eq(id.parse::().unwrap())) @@ -725,8 +726,8 @@ impl BuildDTO { build_id: model.build_id.to_string(), output_file: model.output_file, exit_code: model.exit_code, - start_at: model.start_at.to_rfc3339(), - end_at: model.end_at.map(|dt| dt.to_rfc3339()), + start_at: DateTime::::from_naive_utc_and_offset(model.start_at, Utc).to_rfc3339(), + end_at: model.end_at.map(|dt| DateTime::::from_naive_utc_and_offset(dt, Utc).to_rfc3339()), repo_name: model.repo_name, target: model.target, arguments: model.arguments, @@ -798,8 +799,8 @@ impl TaskInfoDTO { build_id: model.build_id.to_string(), output_file: model.output_file, exit_code: model.exit_code, - start_at: model.start_at.to_rfc3339(), - end_at: model.end_at.map(|dt| dt.to_rfc3339()), + start_at: DateTime::::from_naive_utc_and_offset(model.start_at, Utc).to_rfc3339(), + end_at: model.end_at.map(|dt| DateTime::::from_naive_utc_and_offset(dt, Utc).to_rfc3339()), repo_name: model.repo_name, target: model.target, arguments: model.arguments, diff --git a/orion-server/src/model/builds.rs b/orion-server/src/model/builds.rs index ce109f835..d3eff06aa 100644 --- a/orion-server/src/model/builds.rs +++ b/orion-server/src/model/builds.rs @@ -8,16 +8,16 @@ use serde::Serialize; pub struct Model { #[sea_orm(primary_key, auto_increment = false)] pub build_id: Uuid, - pub output_file: String, - /// Exit code of the build process. None if process was terminated by signal on Unix pub exit_code: Option, - pub start_at: DateTimeUtc, - pub end_at: Option, + pub start_at: DateTime, + pub end_at: Option, pub repo_name: String, - /// Build target specification (e.g., "//:main") pub target: String, + #[sea_orm(column_type = "Text")] + pub output_file: String, + #[sea_orm(column_type = "Text")] pub arguments: String, - /// Merge request identifier + #[sea_orm(column_type = "Text")] pub mr: String, } @@ -26,6 +26,7 @@ pub enum Relation {} impl ActiveModelBehavior for ActiveModel {} + impl Model { /// Retrieves a build record by its UUID from the database pub async fn get_by_build_id(build_id: Uuid, conn: &DatabaseConnection) -> Option { diff --git a/orion-server/src/scheduler.rs b/orion-server/src/scheduler.rs index d322b329d..9959487c9 100644 --- a/orion-server/src/scheduler.rs +++ b/orion-server/src/scheduler.rs @@ -368,7 +368,7 @@ impl TaskScheduler { build_id: Set(pending_task.task_id), output_file: Set(format!("{}/{}", get_build_log_dir(), pending_task.task_id)), exit_code: Set(None), - start_at: Set(build_info.start_at), + start_at: Set(build_info.start_at.naive_utc()), end_at: Set(None), repo_name: Set(build_info.repo.clone()), target: Set(build_info.target.clone()), diff --git a/orion-server/src/server.rs b/orion-server/src/server.rs index f7ee3b53d..cbe4f6938 100644 --- a/orion-server/src/server.rs +++ b/orion-server/src/server.rs @@ -140,7 +140,7 @@ async fn start_health_check_task(state: AppState) { let update_res = builds::Entity::update_many() .set(builds::ActiveModel { - end_at: Set(Some(chrono::Utc::now())), + end_at: Set(Some(chrono::Utc::now().naive_utc())), ..Default::default() }) .filter(builds::Column::BuildId.eq(task_id.parse::().unwrap()))