diff options
Diffstat (limited to 'makima/src/server')
| -rw-r--r-- | makima/src/server/handlers/mesh_supervisor.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/makima/src/server/handlers/mesh_supervisor.rs b/makima/src/server/handlers/mesh_supervisor.rs index 1b5e376..1b476ef 100644 --- a/makima/src/server/handlers/mesh_supervisor.rs +++ b/makima/src/server/handlers/mesh_supervisor.rs @@ -19,7 +19,7 @@ use crate::db::repository; use crate::server::auth::Authenticated; use crate::server::handlers::mesh::{extract_auth, AuthSource}; use crate::server::messages::ApiError; -use crate::server::state::{DaemonCommand, SharedState, TaskOutputNotification}; +use crate::server::state::{DaemonCommand, SharedState, TaskOutputNotification, TaskUpdateNotification}; // ============================================================================= // Request/Response Types @@ -650,6 +650,16 @@ pub async fn spawn_task( }), ).await; + // Broadcast task creation notification to WebSocket subscribers + state.broadcast_task_update(TaskUpdateNotification { + task_id: task.id, + owner_id: Some(owner_id), + version: task.version, + status: task.status.clone(), + updated_fields: vec!["created".to_string()], + updated_by: "supervisor".to_string(), + }); + // Start task on a daemon // Find a daemon that belongs to this owner let mut updated_task = task; @@ -714,6 +724,16 @@ pub async fn spawn_task( let _ = repository::update_task_for_owner(pool, updated_task.id, owner_id, rollback_req).await; } else { tracing::info!(task_id = %updated_task.id, daemon_id = %daemon.id, repo_url = ?repo_url, "Task spawn command sent"); + + // Broadcast task status update notification to WebSocket subscribers + state.broadcast_task_update(TaskUpdateNotification { + task_id: updated_task.id, + owner_id: Some(owner_id), + version: updated_task.version, + status: "starting".to_string(), + updated_fields: vec!["status".to_string(), "daemon_id".to_string()], + updated_by: "supervisor".to_string(), + }); } break; } |
