From 65c6e123cf5accd6110ad69b3e7fe4d8cffbd72c Mon Sep 17 00:00:00 2001 From: jenkins Date: Sun, 17 May 2026 05:52:06 -0300 Subject: [PATCH] monitoring(testing): prefer fresh suite quality samples --- scripts/dashboards_render_atlas.py | 80 ++++++++++++++++--- .../monitoring/dashboards/atlas-overview.json | 4 +- .../monitoring/dashboards/atlas-testing.json | 12 +-- .../grafana-dashboard-overview.yaml | 4 +- .../monitoring/grafana-dashboard-testing.yaml | 12 +-- 5 files changed, 84 insertions(+), 28 deletions(-) diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index 5ed3974c..7be64122 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -57,6 +57,20 @@ def apply_global_status_palette(value, parent_key=None): return GLOBAL_STATUS_COLOR_TONES.get(value, value) return value + +def latest_suite_value( + selector: str, window: str, success_selector: str | None = None +) -> str: + """Return the newest sample per suite, ignoring stale Pushgateway scrape instances.""" + sample = f"last_over_time({selector}[{window}])" + sample_time = f"tlast_over_time({selector}[{window}])" + if success_selector: + successful_run = f"(last_over_time({success_selector}[{window}]) > 0)" + sample = f"(({sample}) and ignoring(status) ({successful_run}))" + sample_time = f"(({sample_time}) and ignoring(status) ({successful_run}))" + latest_series = f"topk by (suite) (1, {sample_time})" + return f"max by (suite) (({sample}) and ({latest_series}))" + PERCENT_THRESHOLDS = { "mode": "absolute", "steps": [ @@ -622,11 +636,20 @@ PLATFORM_TEST_SUCCESS_RATE_24H_BY_SUITE = ( f'/ clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",{PLATFORM_TEST_EXPORT_FILTER}}}[24h]))), 1))' ) QUALITY_GATE_SUITE_INDEX_30D = ( - f'sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",{PLATFORM_TEST_EXPORT_FILTER}}}[30d]))' + f'sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_CANONICAL_MATCHER}",{PLATFORM_TEST_EXPORT_FILTER}}}[30d]))' ) QUALITY_GATE_COVERAGE_BY_SUITE = ( - f'(max by (suite) (last_over_time({{__name__=~".*_quality_gate_coverage_percent",{PLATFORM_TEST_EXPORT_FILTER}}}[{PLATFORM_TEST_LATEST_WINDOW}]))) ' - f'or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{{{PLATFORM_TEST_EXPORT_FILTER}}}[{PLATFORM_TEST_LATEST_WINDOW}])))' + latest_suite_value( + f'{{__name__=~".*_quality_gate_coverage_percent",suite=~"{PLATFORM_TEST_SUITE_CANONICAL_MATCHER}",{PLATFORM_TEST_EXPORT_FILTER}}}', + PLATFORM_TEST_LATEST_WINDOW, + f"platform_quality_gate_runs_total{{suite=~\"{PLATFORM_TEST_SUITE_CANONICAL_MATCHER}\",status=~\"{PLATFORM_TEST_SUCCESS_STATUS}\",{PLATFORM_TEST_EXPORT_FILTER}}}", + ) + + " or on(suite) " + + latest_suite_value( + f"platform_quality_gate_workspace_line_coverage_percent{{suite=~\"{PLATFORM_TEST_SUITE_CANONICAL_MATCHER}\",{PLATFORM_TEST_EXPORT_FILTER}}}", + PLATFORM_TEST_LATEST_WINDOW, + f"platform_quality_gate_runs_total{{suite=~\"{PLATFORM_TEST_SUITE_CANONICAL_MATCHER}\",status=~\"{PLATFORM_TEST_SUCCESS_STATUS}\",{PLATFORM_TEST_EXPORT_FILTER}}}", + ) ) QUALITY_GATE_COVERAGE_BY_SUITE_WITH_MISSING = ( f"({QUALITY_GATE_COVERAGE_BY_SUITE}) or on(suite) (0 * ({QUALITY_GATE_SUITE_INDEX_30D}) - 1)" @@ -635,7 +658,10 @@ QUALITY_GATE_COVERAGE_GAP_BY_SUITE = ( f"clamp_min(95 - ({QUALITY_GATE_COVERAGE_BY_SUITE}), 0)" ) QUALITY_GATE_SMELL_INFRACTIONS_BY_SUITE = ( - f"max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{{{PLATFORM_TEST_EXPORT_FILTER}}}[{PLATFORM_TEST_LATEST_WINDOW}]))" + latest_suite_value( + f"platform_quality_gate_source_lines_over_500_total{{suite=~\"{PLATFORM_TEST_SUITE_CANONICAL_MATCHER}\",{PLATFORM_TEST_EXPORT_FILTER}}}", + PLATFORM_TEST_LATEST_WINDOW, + ) ) QUALITY_GATE_SMELL_INFRACTIONS_BY_SUITE_WITH_MISSING = ( f"({QUALITY_GATE_SMELL_INFRACTIONS_BY_SUITE}) or on(suite) (0 * ({QUALITY_GATE_SUITE_INDEX_30D}) - 1)" @@ -3809,27 +3835,57 @@ def build_jobs_dashboard(): f'sum(increase(platform_quality_gate_runs_total{{{runs_failure_selector}}}[24h])) or on() vector(0)' ) coverage_by_suite = ( - f'(max by (suite) (last_over_time({{{coverage_metric_selector}}}[{PLATFORM_TEST_LATEST_WINDOW}]))) ' - f'or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}[{PLATFORM_TEST_LATEST_WINDOW}])))' + latest_suite_value( + f"{{{coverage_metric_selector}}}", + PLATFORM_TEST_LATEST_WINDOW, + f"platform_quality_gate_runs_total{{{runs_success_selector}}}", + ) + + " or on(suite) " + + latest_suite_value( + f"platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}", + PLATFORM_TEST_LATEST_WINDOW, + f"platform_quality_gate_runs_total{{{runs_success_selector}}}", + ) ) coverage_history_by_suite = ( - f'(max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}[{PLATFORM_TEST_FRESH_WINDOW}]))) ' - f'or on(suite) (max by (suite) (last_over_time({{{coverage_metric_selector}}}[{PLATFORM_TEST_FRESH_WINDOW}])))' + latest_suite_value( + f"platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}", + PLATFORM_TEST_FRESH_WINDOW, + f"platform_quality_gate_runs_total{{{runs_success_selector}}}", + ) + + " or on(suite) " + + latest_suite_value( + f"{{{coverage_metric_selector}}}", + PLATFORM_TEST_FRESH_WINDOW, + f"platform_quality_gate_runs_total{{{runs_success_selector}}}", + ) ) coverage_with_missing = ( f"({coverage_by_suite}) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d])))) - 1)" ) smell_by_suite = ( - f'max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{{{smell_selector}}}[{PLATFORM_TEST_LATEST_WINDOW}]))' + latest_suite_value( + f"platform_quality_gate_source_lines_over_500_total{{{smell_selector}}}", + PLATFORM_TEST_LATEST_WINDOW, + ) ) loc_files_by_suite = ( - f'max by (suite) (last_over_time(platform_quality_gate_source_files_total{{{smell_selector}}}[{PLATFORM_TEST_LATEST_WINDOW}]))' + latest_suite_value( + f"platform_quality_gate_source_files_total{{{smell_selector}}}", + PLATFORM_TEST_LATEST_WINDOW, + ) ) smell_history_by_suite = ( - f'max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{{{smell_selector}}}[{PLATFORM_TEST_FRESH_WINDOW}]))' + latest_suite_value( + f"platform_quality_gate_source_lines_over_500_total{{{smell_selector}}}", + PLATFORM_TEST_FRESH_WINDOW, + ) ) loc_files_history_by_suite = ( - f'max by (suite) (last_over_time(platform_quality_gate_source_files_total{{{smell_selector}}}[{PLATFORM_TEST_FRESH_WINDOW}]))' + latest_suite_value( + f"platform_quality_gate_source_files_total{{{smell_selector}}}", + PLATFORM_TEST_FRESH_WINDOW, + ) ) smell_with_missing = ( f"({smell_by_suite}) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d])))) - 1)" diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index 1492b16e..0dead016 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -2377,7 +2377,7 @@ }, "targets": [ { - "expr": "(avg(((max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",exported_job=\"platform-quality-ci\"}[30d]))) or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"}[30d]))))) or on() vector(0))", + "expr": "(avg((max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))))) or on(suite) max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))))))) or on() vector(0))", "refId": "A", "instant": true } @@ -2463,7 +2463,7 @@ }, "targets": [ { - "expr": "(sum((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}[30d]))) == bool 0) or on() vector(0))", + "expr": "(sum((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d]))))) == bool 0) or on() vector(0))", "refId": "A", "instant": true } diff --git a/services/monitoring/dashboards/atlas-testing.json b/services/monitoring/dashboards/atlas-testing.json index eacf5c01..3e744658 100644 --- a/services/monitoring/dashboards/atlas-testing.json +++ b/services/monitoring/dashboards/atlas-testing.json @@ -306,7 +306,7 @@ }, "targets": [ { - "expr": "(avg(((max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) or on() vector(0))", + "expr": "(avg((max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))))) or on(suite) max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))))))) or on() vector(0))", "refId": "A", "instant": true } @@ -381,7 +381,7 @@ }, "targets": [ { - "expr": "(sum(((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) > bool 0)) or on() vector(0))", + "expr": "(sum(((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) > bool 0)) or on() vector(0))", "refId": "A", "instant": true } @@ -641,7 +641,7 @@ }, "targets": [ { - "expr": "sort(((max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", + "expr": "sort((max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))))) or on(suite) max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0))))))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -734,7 +734,7 @@ }, "targets": [ { - "expr": "sort(((100 * clamp_min((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) - (max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))), 0) / (max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) and on(suite) ((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", + "expr": "sort(((100 * clamp_min((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) - (max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))), 0) / (max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))))) and on(suite) ((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -1163,7 +1163,7 @@ }, "targets": [ { - "expr": "(max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))) or on(suite) (max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])))", + "expr": "max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0)))))) or on(suite) max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0))))))", "refId": "A", "legendFormat": "{{suite}}" } @@ -1239,7 +1239,7 @@ }, "targets": [ { - "expr": "(100 * clamp_min((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))) - (max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))), 0) / (max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])))) and on(suite) ((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))), 1)))", + "expr": "(100 * clamp_min((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))) - (max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))), 0) / (max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])))))) and on(suite) ((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))), 1)))", "refId": "A", "legendFormat": "{{suite}}" } diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index 13c5baf1..0c5fa4ce 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -2386,7 +2386,7 @@ data: }, "targets": [ { - "expr": "(avg(((max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",exported_job=\"platform-quality-ci\"}[30d]))) or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"}[30d]))))) or on() vector(0))", + "expr": "(avg((max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))))) or on(suite) max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[30d]) > 0)))))))) or on() vector(0))", "refId": "A", "instant": true } @@ -2472,7 +2472,7 @@ data: }, "targets": [ { - "expr": "(sum((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}[30d]))) == bool 0) or on() vector(0))", + "expr": "(sum((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan_iac|typhon|bstein_home|data_prepper\",exported_job=\"platform-quality-ci\"}[30d]))))) == bool 0) or on() vector(0))", "refId": "A", "instant": true } diff --git a/services/monitoring/grafana-dashboard-testing.yaml b/services/monitoring/grafana-dashboard-testing.yaml index dd1241dc..ac1bbee6 100644 --- a/services/monitoring/grafana-dashboard-testing.yaml +++ b/services/monitoring/grafana-dashboard-testing.yaml @@ -315,7 +315,7 @@ data: }, "targets": [ { - "expr": "(avg(((max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) or on() vector(0))", + "expr": "(avg((max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))))) or on(suite) max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))))))) or on() vector(0))", "refId": "A", "instant": true } @@ -390,7 +390,7 @@ data: }, "targets": [ { - "expr": "(sum(((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) > bool 0)) or on() vector(0))", + "expr": "(sum(((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) > bool 0)) or on() vector(0))", "refId": "A", "instant": true } @@ -650,7 +650,7 @@ data: }, "targets": [ { - "expr": "sort(((max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) or on(suite) (max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", + "expr": "sort((max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))))) or on(suite) max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30d]) > 0))))))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -743,7 +743,7 @@ data: }, "targets": [ { - "expr": "sort(((100 * clamp_min((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) - (max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))), 0) / (max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) and on(suite) ((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", + "expr": "sort(((100 * clamp_min((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) - (max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))), 0) / (max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))))) and on(suite) ((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])))) - 1))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -1172,7 +1172,7 @@ data: }, "targets": [ { - "expr": "(max by (suite) (last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))) or on(suite) (max by (suite) (last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])))", + "expr": "max by (suite) ((((last_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0)))) and (topk by (suite) (1, ((tlast_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0)))))) or on(suite) max by (suite) ((((last_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0)))) and (topk by (suite) (1, ((tlast_over_time({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and ignoring(status) ((last_over_time(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[30h]) > 0))))))", "refId": "A", "legendFormat": "{{suite}}" } @@ -1248,7 +1248,7 @@ data: }, "targets": [ { - "expr": "(100 * clamp_min((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))) - (max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))), 0) / (max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])))) and on(suite) ((max by (suite) (last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))), 1)))", + "expr": "(100 * clamp_min((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))) - (max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))), 0) / (max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])))))) and on(suite) ((max by (suite) ((last_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) ((last_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h])) and (topk by (suite) (1, tlast_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30h]))))), 1)))", "refId": "A", "legendFormat": "{{suite}}" }