Private
Public Access
1
0

fix: cast compliance_pct to numeric for PostgreSQL ROUND()
All checks were successful
CI Pipeline / Rust Format Check (push) Successful in 5s
CI Pipeline / Clippy Lints (push) Successful in 56s
CI Pipeline / Rust Unit Tests (push) Successful in 1m16s
CI Pipeline / Security Audit (push) Successful in 4s
CI Pipeline / Frontend Lint & Type Check (push) Successful in 15s
CI Pipeline / Build .deb & Release (push) Has been skipped

This commit is contained in:
2026-05-12 20:10:21 +00:00
parent 2bbc03b937
commit a1852fd55a
2 changed files with 8 additions and 8 deletions

View File

@ -30,7 +30,7 @@ SELECT
COALESCE(jsonb_array_length(pd.installed_packages), 0) AS total_packages, COALESCE(jsonb_array_length(pd.installed_packages), 0) AS total_packages,
COALESCE(pd.patch_count, 0) AS pending_patches, COALESCE(pd.patch_count, 0) AS pending_patches,
CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages), 0) = 0 THEN 100.0 CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages), 0) = 0 THEN 100.0
ELSE ROUND((1.0 - pd.patch_count::float / NULLIF(jsonb_array_length(pd.installed_packages), 0)) * 100, 1) ELSE ROUND(CAST((1.0 - pd.patch_count::float / NULLIF(jsonb_array_length(pd.installed_packages), 0)) * 100 AS numeric), 1)
END AS compliance_pct, END AS compliance_pct,
COALESCE(string_agg(DISTINCT g.name, ', '), '') AS group_names COALESCE(string_agg(DISTINCT g.name, ', '), '') AS group_names
FROM hosts h FROM hosts h
@ -40,7 +40,7 @@ LEFT JOIN groups g ON g.id = hg.group_id
WHERE h.id IN ( WHERE h.id IN (
SELECT host_id FROM host_groups WHERE group_id = $1 SELECT host_id FROM host_groups WHERE group_id = $1
) )
GROUP BY h.id, pd.installed_packages, pd.patch_count GROUP BY h.id, h.health_status, pd.installed_packages, pd.patch_count
ORDER BY compliance_pct ASC ORDER BY compliance_pct ASC
", ",
) )
@ -60,14 +60,14 @@ SELECT
COALESCE(jsonb_array_length(pd.installed_packages), 0) AS total_packages, COALESCE(jsonb_array_length(pd.installed_packages), 0) AS total_packages,
COALESCE(pd.patch_count, 0) AS pending_patches, COALESCE(pd.patch_count, 0) AS pending_patches,
CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages), 0) = 0 THEN 100.0 CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages), 0) = 0 THEN 100.0
ELSE ROUND((1.0 - pd.patch_count::float / NULLIF(jsonb_array_length(pd.installed_packages), 0)) * 100, 1) ELSE ROUND(CAST((1.0 - pd.patch_count::float / NULLIF(jsonb_array_length(pd.installed_packages), 0)) * 100 AS numeric), 1)
END AS compliance_pct, END AS compliance_pct,
COALESCE(string_agg(DISTINCT g.name, ', '), '') AS group_names COALESCE(string_agg(DISTINCT g.name, ', '), '') AS group_names
FROM hosts h FROM hosts h
LEFT JOIN host_patch_data pd ON pd.host_id = h.id LEFT JOIN host_patch_data pd ON pd.host_id = h.id
LEFT JOIN host_groups hg ON hg.host_id = h.id LEFT JOIN host_groups hg ON hg.host_id = h.id
LEFT JOIN groups g ON g.id = hg.group_id LEFT JOIN groups g ON g.id = hg.group_id
GROUP BY h.id, pd.installed_packages, pd.patch_count GROUP BY h.id, h.health_status, pd.installed_packages, pd.patch_count
ORDER BY compliance_pct ASC ORDER BY compliance_pct ASC
", ",
) )

View File

@ -253,12 +253,12 @@ SELECT h.display_name, h.fqdn,
COALESCE(jsonb_array_length(pd.installed_packages),0) AS total_packages, COALESCE(jsonb_array_length(pd.installed_packages),0) AS total_packages,
COALESCE(pd.patch_count,0) AS pending_patches, COALESCE(pd.patch_count,0) AS pending_patches,
CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages),0)=0 THEN 100.0 CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages),0)=0 THEN 100.0
ELSE ROUND((1.0-pd.patch_count::float/NULLIF(jsonb_array_length(pd.installed_packages),0))*100,1) ELSE ROUND(CAST((1.0-pd.patch_count::float/NULLIF(jsonb_array_length(pd.installed_packages),0))*100 AS numeric),1)
END AS compliance_pct, END AS compliance_pct,
h.health_status::text AS health_status h.health_status::text AS health_status
FROM hosts h LEFT JOIN host_patch_data pd ON pd.host_id=h.id FROM hosts h LEFT JOIN host_patch_data pd ON pd.host_id=h.id
WHERE h.id IN (SELECT host_id FROM host_groups WHERE group_id=$1) WHERE h.id IN (SELECT host_id FROM host_groups WHERE group_id=$1)
GROUP BY h.id, pd.installed_packages, pd.patch_count GROUP BY h.id, h.health_status, pd.installed_packages, pd.patch_count
ORDER BY compliance_pct ASC", ORDER BY compliance_pct ASC",
) )
.bind(gid) .bind(gid)
@ -272,11 +272,11 @@ SELECT h.display_name, h.fqdn,
COALESCE(jsonb_array_length(pd.installed_packages),0) AS total_packages, COALESCE(jsonb_array_length(pd.installed_packages),0) AS total_packages,
COALESCE(pd.patch_count,0) AS pending_patches, COALESCE(pd.patch_count,0) AS pending_patches,
CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages),0)=0 THEN 100.0 CASE WHEN COALESCE(jsonb_array_length(pd.installed_packages),0)=0 THEN 100.0
ELSE ROUND((1.0-pd.patch_count::float/NULLIF(jsonb_array_length(pd.installed_packages),0))*100,1) ELSE ROUND(CAST((1.0-pd.patch_count::float/NULLIF(jsonb_array_length(pd.installed_packages),0))*100 AS numeric),1)
END AS compliance_pct, END AS compliance_pct,
h.health_status::text AS health_status h.health_status::text AS health_status
FROM hosts h LEFT JOIN host_patch_data pd ON pd.host_id=h.id FROM hosts h LEFT JOIN host_patch_data pd ON pd.host_id=h.id
GROUP BY h.id, pd.installed_packages, pd.patch_count GROUP BY h.id, h.health_status, pd.installed_packages, pd.patch_count
ORDER BY compliance_pct ASC", ORDER BY compliance_pct ASC",
) )
.fetch_all(pool) .fetch_all(pool)