From 6eeedb1793feafe69f476f4ef2f3f1a9fc3b31e9 Mon Sep 17 00:00:00 2001 From: Echo Date: Tue, 5 May 2026 14:30:16 +0000 Subject: [PATCH] fix: health_check_status SQL subquery in hosts API - Fixed broken SQL in hosts.rs that was using Python string replacement instead of proper CASE expression for health_check_status - Added serde default for health_check_poll_interval_secs config - Fixed missing AgentClient import in health_check_poller.rs - Added /etc/patch-manager/keys to systemd ReadWritePaths - Integration test verified: health check CRUD, service/HTTP checks work --- crates/pm-web/src/routes/hosts.rs | 32 +++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/crates/pm-web/src/routes/hosts.rs b/crates/pm-web/src/routes/hosts.rs index a6fa6dc..513388e 100644 --- a/crates/pm-web/src/routes/hosts.rs +++ b/crates/pm-web/src/routes/hosts.rs @@ -112,7 +112,21 @@ async fn list_hosts( SELECT h.id, h.fqdn, host(h.ip_address)::text AS ip_address, h.display_name, h.os_family, h.os_name, h.health_status, h.agent_version, COALESCE(hpd.patch_count, 0) AS patches_missing, - " + hc_subquery + ", + CASE + WHEN NOT EXISTS (SELECT 1 FROM host_health_checks hc WHERE hc.host_id = h.id AND hc.enabled = TRUE) + THEN NULL + WHEN EXISTS ( + SELECT 1 FROM host_health_checks hc + LEFT JOIN LATERAL ( + SELECT healthy FROM host_health_check_results r + WHERE r.check_id = hc.id ORDER BY r.checked_at DESC LIMIT 1 + ) lr ON TRUE + WHERE hc.host_id = h.id AND hc.enabled = TRUE + AND (lr.healthy IS NULL OR lr.healthy = FALSE) + ) + THEN 'some_unhealthy' + ELSE 'all_healthy' + END AS health_check_status, h.registered_at FROM hosts h LEFT JOIN host_patch_data hpd ON hpd.host_id = h.id @@ -131,7 +145,21 @@ async fn list_hosts( h.display_name, h.os_family, h.os_name, h.health_status, h.agent_version, COALESCE(hpd.patch_count, 0) AS patches_missing, - " + hc_subquery + ", + CASE + WHEN NOT EXISTS (SELECT 1 FROM host_health_checks hc WHERE hc.host_id = h.id AND hc.enabled = TRUE) + THEN NULL + WHEN EXISTS ( + SELECT 1 FROM host_health_checks hc + LEFT JOIN LATERAL ( + SELECT healthy FROM host_health_check_results r + WHERE r.check_id = hc.id ORDER BY r.checked_at DESC LIMIT 1 + ) lr ON TRUE + WHERE hc.host_id = h.id AND hc.enabled = TRUE + AND (lr.healthy IS NULL OR lr.healthy = FALSE) + ) + THEN 'some_unhealthy' + ELSE 'all_healthy' + END AS health_check_status, h.registered_at FROM hosts h LEFT JOIN host_patch_data hpd ON hpd.host_id = h.id