From 3a959e55ed3daa1297808052cdc1480c3f173814 Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Thu, 16 Oct 2025 00:10:17 +0200 Subject: [PATCH] Fix critical JSON data extraction issue in SystemCollector The MetricCollector implementation was returning JSON with null values because it was incorrectly extracting Option<&Value> instead of the actual values. Fixed by using .cloned().unwrap_or() to properly extract and default the JSON values. This should resolve the 'No data received' issue as the dashboard will now receive properly formatted metric data instead of null values. --- agent/src/collectors/system.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/agent/src/collectors/system.rs b/agent/src/collectors/system.rs index 76bd2e1..afb0a72 100644 --- a/agent/src/collectors/system.rs +++ b/agent/src/collectors/system.rs @@ -448,10 +448,10 @@ impl MetricCollector for SystemCollector { // Extract CPU load data if let Some(summary) = full_data.data.get("summary") { Ok(json!({ - "cpu_load_1": summary.get("cpu_load_1"), - "cpu_load_5": summary.get("cpu_load_5"), - "cpu_load_15": summary.get("cpu_load_15"), - "timestamp": full_data.data.get("timestamp") + "cpu_load_1": summary.get("cpu_load_1").cloned().unwrap_or(json!(0)), + "cpu_load_5": summary.get("cpu_load_5").cloned().unwrap_or(json!(0)), + "cpu_load_15": summary.get("cpu_load_15").cloned().unwrap_or(json!(0)), + "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null)) })) } else { Ok(json!({"cpu_load_1": 0, "cpu_load_5": 0, "cpu_load_15": 0, "timestamp": null})) @@ -461,8 +461,8 @@ impl MetricCollector for SystemCollector { // Extract CPU temperature data if let Some(summary) = full_data.data.get("summary") { Ok(json!({ - "cpu_temp_c": summary.get("cpu_temp_c"), - "timestamp": full_data.data.get("timestamp") + "cpu_temp_c": summary.get("cpu_temp_c").cloned().unwrap_or(json!(null)), + "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null)) })) } else { Ok(json!({"cpu_temp_c": null, "timestamp": null})) @@ -472,9 +472,9 @@ impl MetricCollector for SystemCollector { // Extract memory data if let Some(summary) = full_data.data.get("summary") { Ok(json!({ - "system_memory_used_mb": summary.get("system_memory_used_mb"), - "system_memory_total_mb": summary.get("system_memory_total_mb"), - "timestamp": full_data.data.get("timestamp") + "system_memory_used_mb": summary.get("system_memory_used_mb").cloned().unwrap_or(json!(0)), + "system_memory_total_mb": summary.get("system_memory_total_mb").cloned().unwrap_or(json!(0)), + "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null)) })) } else { Ok(json!({"system_memory_used_mb": 0, "system_memory_total_mb": 0, "timestamp": null})) @@ -483,23 +483,23 @@ impl MetricCollector for SystemCollector { "top_processes" => { // Extract top processes data Ok(json!({ - "top_cpu_process": full_data.data.get("top_cpu_process"), - "top_memory_process": full_data.data.get("top_memory_process"), - "timestamp": full_data.data.get("timestamp") + "top_cpu_process": full_data.data.get("top_cpu_process").cloned().unwrap_or(json!(null)), + "top_memory_process": full_data.data.get("top_memory_process").cloned().unwrap_or(json!(null)), + "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null)) })) }, "cstate" => { // Extract C-state data Ok(json!({ - "cstate": full_data.data.get("cstate"), - "timestamp": full_data.data.get("timestamp") + "cstate": full_data.data.get("cstate").cloned().unwrap_or(json!(null)), + "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null)) })) }, "users" => { // Extract logged in users data Ok(json!({ - "logged_in_users": full_data.data.get("logged_in_users"), - "timestamp": full_data.data.get("timestamp") + "logged_in_users": full_data.data.get("logged_in_users").cloned().unwrap_or(json!(null)), + "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null)) })) }, _ => Err(CollectorError::ConfigError {