summaryrefslogtreecommitdiff
path: root/makima/src/server/handlers
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-26 15:21:10 +0000
committersoryu <soryu@soryu.co>2026-01-26 15:21:10 +0000
commit1d83595f81fbfcc034c37c2260d695f094f5776e (patch)
tree571a89ab9bb0bb9f2eff8e1c6b098e6363f7151a /makima/src/server/handlers
parentd569985bbf8dbe07f05a76a198a6dd76ef3304e2 (diff)
downloadsoryu-1d83595f81fbfcc034c37c2260d695f094f5776e.tar.gz
soryu-1d83595f81fbfcc034c37c2260d695f094f5776e.zip
Update supervisor tasks page when supervisor spawns a new task
Diffstat (limited to 'makima/src/server/handlers')
-rw-r--r--makima/src/server/handlers/mesh_supervisor.rs22
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;
}