From fd22b7aba57a53f6b04b735e9f3480068ed060a0 Mon Sep 17 00:00:00 2001 From: Jannik Straube Date: Fri, 18 Apr 2025 20:31:48 +0200 Subject: [PATCH 1/2] add status counts to nodes api on orchestrator --- orchestrator/src/api/routes/nodes.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/orchestrator/src/api/routes/nodes.rs b/orchestrator/src/api/routes/nodes.rs index f67d51cc..8eda77f7 100644 --- a/orchestrator/src/api/routes/nodes.rs +++ b/orchestrator/src/api/routes/nodes.rs @@ -9,13 +9,27 @@ use serde_json::json; use shared::security::request_signer::sign_request; use std::str::FromStr; use std::time::Duration; - // Timeout for node operations in seconds const NODE_REQUEST_TIMEOUT: u64 = 30; async fn get_nodes(app_state: Data) -> HttpResponse { let nodes = app_state.store_context.node_store.get_nodes(); - HttpResponse::Ok().json(json!({"success": true, "nodes": nodes})) + + let mut status_counts = json!({}); + for node in &nodes { + let status_str = format!("{:?}", node.status); + if let Some(count) = status_counts.get(&status_str) { + status_counts[status_str] = json!(count.as_u64().unwrap() + 1); + } else { + status_counts[status_str] = json!(1); + } + } + + HttpResponse::Ok().json(json!({ + "success": true, + "nodes": nodes, + "counts": status_counts + })) } async fn restart_node_task(node_id: web::Path, app_state: Data) -> HttpResponse { From 64f1b4321490d60f5e229312c03239f438d2c3ff Mon Sep 17 00:00:00 2001 From: Jannik Straube Date: Fri, 18 Apr 2025 20:36:11 +0200 Subject: [PATCH 2/2] avoid unwrap --- orchestrator/src/api/routes/nodes.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/orchestrator/src/api/routes/nodes.rs b/orchestrator/src/api/routes/nodes.rs index 8eda77f7..29f24776 100644 --- a/orchestrator/src/api/routes/nodes.rs +++ b/orchestrator/src/api/routes/nodes.rs @@ -19,7 +19,11 @@ async fn get_nodes(app_state: Data) -> HttpResponse { for node in &nodes { let status_str = format!("{:?}", node.status); if let Some(count) = status_counts.get(&status_str) { - status_counts[status_str] = json!(count.as_u64().unwrap() + 1); + if let Some(count_value) = count.as_u64() { + status_counts[status_str] = json!(count_value + 1); + } else { + status_counts[status_str] = json!(1); + } } else { status_counts[status_str] = json!(1); }