From def09763f5cf136bfb705cd27d2bda40592dfd00 Mon Sep 17 00:00:00 2001 From: bramhanandlingala Date: Sun, 19 Jul 2026 21:40:34 +0530 Subject: [PATCH] fix(sonarqube): correct aggregate coverage formula in Grafana dashboards --- grafana/dashboards/mysql/Sonarqube.json | 2 +- grafana/dashboards/mysql/sonar-qube-cloud.json | 2 +- grafana/dashboards/postgresql/Sonarqube.json | 2 +- grafana/dashboards/postgresql/sonar-qube-cloud.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/grafana/dashboards/mysql/Sonarqube.json b/grafana/dashboards/mysql/Sonarqube.json index 2dac28c9f21..7f68a5cdc0e 100644 --- a/grafana/dashboards/mysql/Sonarqube.json +++ b/grafana/dashboards/mysql/Sonarqube.json @@ -530,7 +530,7 @@ "editorMode": "code", "format": "table", "rawQuery": true, - "rawSql": "SELECT\n CONCAT(ROUND((sum(lines_to_cover) - sum(uncovered_lines)) / sum(lines_to_cover) * 100, 1), '% ', 'Coverage on ', ROUND(sum(lines_to_cover) / 1000, 0),'k Lines to cover')\nFROM cq_file_metrics\nWHERE\n project_key in (${project_id})\n", + "rawSql": "SELECT\n CONCAT(ROUND(SUM(coverage * lines_to_cover) / NULLIF(SUM(lines_to_cover), 0), 1), '% ', 'Coverage on ', ROUND(sum(lines_to_cover) / 1000, 0),'k Lines to cover')\nFROM cq_file_metrics\nWHERE\n project_key in (${project_id})\n", "refId": "A", "sql": { "columns": [ diff --git a/grafana/dashboards/mysql/sonar-qube-cloud.json b/grafana/dashboards/mysql/sonar-qube-cloud.json index 8cb1939a5eb..6a212652ee7 100644 --- a/grafana/dashboards/mysql/sonar-qube-cloud.json +++ b/grafana/dashboards/mysql/sonar-qube-cloud.json @@ -634,7 +634,7 @@ "editorMode": "code", "format": "table", "rawQuery": true, - "rawSql": "SELECT\n CONCAT(ROUND((sum(lines_to_cover) - sum(uncovered_lines)) / sum(lines_to_cover) * 100, 1), '% ', 'Coverage on ', ROUND(sum(lines_to_cover) / 1000, 0),'k Lines to cover')\nFROM cq_file_metrics\nWHERE\n project_key in (${project_id})\n", + "rawSql": "SELECT\n CONCAT(ROUND(SUM(coverage * lines_to_cover) / NULLIF(SUM(lines_to_cover), 0), 1), '% ', 'Coverage on ', ROUND(sum(lines_to_cover) / 1000, 0),'k Lines to cover')\nFROM cq_file_metrics\nWHERE\n project_key in (${project_id})\n", "refId": "A", "sql": { "columns": [ diff --git a/grafana/dashboards/postgresql/Sonarqube.json b/grafana/dashboards/postgresql/Sonarqube.json index 1bae97b37a0..6a65f568a5f 100644 --- a/grafana/dashboards/postgresql/Sonarqube.json +++ b/grafana/dashboards/postgresql/Sonarqube.json @@ -530,7 +530,7 @@ "editorMode": "code", "format": "table", "rawQuery": true, - "rawSql": "SELECT ROUND(CAST((SUM(lines_to_cover) - SUM(uncovered_lines)) AS NUMERIC) / NULLIF(SUM(lines_to_cover), 0) * 100, 1) || '% ' || 'Coverage on ' || ROUND(CAST(CAST(SUM(lines_to_cover) AS NUMERIC) / NULLIF(1000, 0) AS DECIMAL), 0) || 'k Lines to cover' FROM cq_file_metrics WHERE ('${project_id:csv}' = '' OR project_key::text = ANY(ARRAY[${project_id:singlequote}]::text[]))", + "rawSql": "SELECT ROUND(CAST(SUM(coverage * lines_to_cover) AS NUMERIC) / NULLIF(SUM(lines_to_cover), 0), 1) || '% ' || 'Coverage on ' || ROUND(CAST(CAST(SUM(lines_to_cover) AS NUMERIC) / NULLIF(1000, 0) AS DECIMAL), 0) || 'k Lines to cover' FROM cq_file_metrics WHERE ('${project_id:csv}' = '' OR project_key::text = ANY(ARRAY[${project_id:singlequote}]::text[]))", "refId": "A", "sql": { "columns": [ diff --git a/grafana/dashboards/postgresql/sonar-qube-cloud.json b/grafana/dashboards/postgresql/sonar-qube-cloud.json index 08cd7359e16..84630bd8dc0 100644 --- a/grafana/dashboards/postgresql/sonar-qube-cloud.json +++ b/grafana/dashboards/postgresql/sonar-qube-cloud.json @@ -634,7 +634,7 @@ "editorMode": "code", "format": "table", "rawQuery": true, - "rawSql": "SELECT ROUND(CAST((SUM(lines_to_cover) - SUM(uncovered_lines)) AS NUMERIC) / NULLIF(SUM(lines_to_cover), 0) * 100, 1) || '% ' || 'Coverage on ' || ROUND(CAST(CAST(SUM(lines_to_cover) AS NUMERIC) / NULLIF(1000, 0) AS DECIMAL), 0) || 'k Lines to cover' FROM cq_file_metrics WHERE ('${project_id:csv}' = '' OR project_key::text = ANY(ARRAY[${project_id:singlequote}]::text[]))", + "rawSql": "SELECT ROUND(CAST(SUM(coverage * lines_to_cover) AS NUMERIC) / NULLIF(SUM(lines_to_cover), 0), 1) || '% ' || 'Coverage on ' || ROUND(CAST(CAST(SUM(lines_to_cover) AS NUMERIC) / NULLIF(1000, 0) AS DECIMAL), 0) || 'k Lines to cover' FROM cq_file_metrics WHERE ('${project_id:csv}' = '' OR project_key::text = ANY(ARRAY[${project_id:singlequote}]::text[]))", "refId": "A", "sql": { "columns": [