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.
This commit is contained in:
Christoffer Martinsson 2025-10-16 00:10:17 +02:00
parent 925988896a
commit 3a959e55ed

View File

@ -448,10 +448,10 @@ impl MetricCollector for SystemCollector {
// Extract CPU load data // Extract CPU load data
if let Some(summary) = full_data.data.get("summary") { if let Some(summary) = full_data.data.get("summary") {
Ok(json!({ Ok(json!({
"cpu_load_1": summary.get("cpu_load_1"), "cpu_load_1": summary.get("cpu_load_1").cloned().unwrap_or(json!(0)),
"cpu_load_5": summary.get("cpu_load_5"), "cpu_load_5": summary.get("cpu_load_5").cloned().unwrap_or(json!(0)),
"cpu_load_15": summary.get("cpu_load_15"), "cpu_load_15": summary.get("cpu_load_15").cloned().unwrap_or(json!(0)),
"timestamp": full_data.data.get("timestamp") "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null))
})) }))
} else { } else {
Ok(json!({"cpu_load_1": 0, "cpu_load_5": 0, "cpu_load_15": 0, "timestamp": null})) 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 // Extract CPU temperature data
if let Some(summary) = full_data.data.get("summary") { if let Some(summary) = full_data.data.get("summary") {
Ok(json!({ Ok(json!({
"cpu_temp_c": summary.get("cpu_temp_c"), "cpu_temp_c": summary.get("cpu_temp_c").cloned().unwrap_or(json!(null)),
"timestamp": full_data.data.get("timestamp") "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null))
})) }))
} else { } else {
Ok(json!({"cpu_temp_c": null, "timestamp": null})) Ok(json!({"cpu_temp_c": null, "timestamp": null}))
@ -472,9 +472,9 @@ impl MetricCollector for SystemCollector {
// Extract memory data // Extract memory data
if let Some(summary) = full_data.data.get("summary") { if let Some(summary) = full_data.data.get("summary") {
Ok(json!({ Ok(json!({
"system_memory_used_mb": summary.get("system_memory_used_mb"), "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"), "system_memory_total_mb": summary.get("system_memory_total_mb").cloned().unwrap_or(json!(0)),
"timestamp": full_data.data.get("timestamp") "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null))
})) }))
} else { } else {
Ok(json!({"system_memory_used_mb": 0, "system_memory_total_mb": 0, "timestamp": null})) Ok(json!({"system_memory_used_mb": 0, "system_memory_total_mb": 0, "timestamp": null}))
@ -483,23 +483,23 @@ impl MetricCollector for SystemCollector {
"top_processes" => { "top_processes" => {
// Extract top processes data // Extract top processes data
Ok(json!({ Ok(json!({
"top_cpu_process": full_data.data.get("top_cpu_process"), "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"), "top_memory_process": full_data.data.get("top_memory_process").cloned().unwrap_or(json!(null)),
"timestamp": full_data.data.get("timestamp") "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null))
})) }))
}, },
"cstate" => { "cstate" => {
// Extract C-state data // Extract C-state data
Ok(json!({ Ok(json!({
"cstate": full_data.data.get("cstate"), "cstate": full_data.data.get("cstate").cloned().unwrap_or(json!(null)),
"timestamp": full_data.data.get("timestamp") "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null))
})) }))
}, },
"users" => { "users" => {
// Extract logged in users data // Extract logged in users data
Ok(json!({ Ok(json!({
"logged_in_users": full_data.data.get("logged_in_users"), "logged_in_users": full_data.data.get("logged_in_users").cloned().unwrap_or(json!(null)),
"timestamp": full_data.data.get("timestamp") "timestamp": full_data.data.get("timestamp").cloned().unwrap_or(json!(null))
})) }))
}, },
_ => Err(CollectorError::ConfigError { _ => Err(CollectorError::ConfigError {