From 6adbe457c4bea62deb23681be34cf128b3f58fe1 Mon Sep 17 00:00:00 2001 From: jenkins Date: Fri, 15 May 2026 14:26:06 -0300 Subject: [PATCH] monitoring: tune testing dashboard and gate rollups --- ci/titan-iac-trivy-waivers.json | 6 + scripts/dashboards_render_atlas.py | 247 +-- scripts/tests/test_dashboards_render_atlas.py | 17 +- .../monitoring/dashboards/atlas-jobs.json | 1364 ++++++++--------- .../monitoring/dashboards/atlas-testing.json | 1364 ++++++++--------- .../monitoring/grafana-dashboard-jobs.yaml | 1364 ++++++++--------- .../monitoring/grafana-dashboard-testing.yaml | 1364 ++++++++--------- .../vmalert-atlas-availability.yaml | 30 +- 8 files changed, 2853 insertions(+), 2903 deletions(-) diff --git a/ci/titan-iac-trivy-waivers.json b/ci/titan-iac-trivy-waivers.json index d6034e4d..433a8b70 100644 --- a/ci/titan-iac-trivy-waivers.json +++ b/ci/titan-iac-trivy-waivers.json @@ -31,6 +31,7 @@ "id": "KSV-0014", "targets": [ "infrastructure/cert-manager/cleanup/cert-manager-cleanup-job.yaml", + "infrastructure/core/node-prefer-noschedule-cronjob.yaml", "infrastructure/core/ntp-sync-daemonset.yaml", "infrastructure/longhorn/adopt/longhorn-helm-adopt-job.yaml", "infrastructure/longhorn/core/longhorn-disk-tags-ensure-job.yaml", @@ -98,6 +99,7 @@ "services/keycloak/oneoffs/ldap-federation-job.yaml", "services/keycloak/oneoffs/logs-oidc-secret-ensure-job.yaml", "services/keycloak/oneoffs/mas-secrets-ensure-job.yaml", + "services/keycloak/oneoffs/metis-node-passwords-secret-ensure-job.yaml", "services/keycloak/oneoffs/metis-oidc-secret-ensure-job.yaml", "services/keycloak/oneoffs/metis-ssh-keys-secret-ensure-job.yaml", "services/keycloak/oneoffs/portal-admin-client-secret-ensure-job.yaml", @@ -152,6 +154,7 @@ "services/monitoring/platform-quality-gateway-deployment.yaml", "services/monitoring/platform-quality-suite-probe-cronjob.yaml", "services/monitoring/postmark-exporter-deployment.yaml", + "services/monitoring/vmalert-atlas-availability.yaml", "services/monitoring/vault-sync-deployment.yaml", "services/nextcloud-mail-sync/cronjob.yaml", "services/nextcloud/collabora.yaml", @@ -247,6 +250,7 @@ "targets": [ "infrastructure/cert-manager/cleanup/cert-manager-cleanup-job.yaml", "infrastructure/core/coredns-deployment.yaml", + "infrastructure/core/node-prefer-noschedule-cronjob.yaml", "infrastructure/core/ntp-sync-daemonset.yaml", "infrastructure/longhorn/adopt/longhorn-helm-adopt-job.yaml", "infrastructure/longhorn/core/longhorn-disk-tags-ensure-job.yaml", @@ -310,6 +314,7 @@ "services/keycloak/oneoffs/ldap-federation-job.yaml", "services/keycloak/oneoffs/logs-oidc-secret-ensure-job.yaml", "services/keycloak/oneoffs/mas-secrets-ensure-job.yaml", + "services/keycloak/oneoffs/metis-node-passwords-secret-ensure-job.yaml", "services/keycloak/oneoffs/metis-oidc-secret-ensure-job.yaml", "services/keycloak/oneoffs/metis-ssh-keys-secret-ensure-job.yaml", "services/keycloak/oneoffs/portal-admin-client-secret-ensure-job.yaml", @@ -364,6 +369,7 @@ "services/monitoring/platform-quality-gateway-deployment.yaml", "services/monitoring/platform-quality-suite-probe-cronjob.yaml", "services/monitoring/postmark-exporter-deployment.yaml", + "services/monitoring/vmalert-atlas-availability.yaml", "services/monitoring/vault-sync-deployment.yaml", "services/nextcloud/collabora.yaml", "services/oauth2-proxy/deployment.yaml", diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index 4e4435f4..e732523b 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -3346,9 +3346,10 @@ def build_jobs_dashboard(): f'/ clamp_min(sum by (suite) (max by (suite, check) (({{{checks_selector}}} > bool 0))), 1)) ' f'or on(suite) ({selected_suite_zero})' ) + success_history_runs = f'sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[$__interval]))' success_history_by_suite = ( - f'100 * (sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_success_selector}}}[$__interval])) ' - f'/ clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[$__interval]))), 1))' + f'(100 * sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_success_selector}}}[$__interval])) ' + f'/ ({success_history_runs})) and on(suite) (({success_history_runs}) > 0)' ) coverage_by_suite = ( f'(max by (suite) ({{{coverage_metric_selector}}})) ' @@ -3357,7 +3358,6 @@ def build_jobs_dashboard(): coverage_with_missing = ( f"({coverage_by_suite}) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d])))) - 1)" ) - coverage_gap = f"clamp_min(95 - ({coverage_by_suite}), 0)" smell_by_suite = f'max by (suite) (platform_quality_gate_source_lines_over_500_total{{{smell_selector}}})' loc_files_by_suite = f'max by (suite) (platform_quality_gate_source_files_total{{{smell_selector}}})' smell_with_missing = ( @@ -3384,6 +3384,14 @@ def build_jobs_dashboard(): f"or on(suite) (100 * (1 - clamp_max(({loc_violations_history}), 1))) " f"or on(suite) ({selected_suite_zero})" ) + coverage_loc_compliance_history = ( + "min by (suite) (" + f'label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}[$__interval]), ' + '"dimension", "coverage", "__name__", ".*") ' + "or " + f'label_replace(({loc_limit_compliance_history}), "dimension", "loc", "__name__", ".*")' + ")" + ) average_coverage = f"(avg(({coverage_by_suite})) or on() vector(0))" suites_loc_violating = f'(sum((({smell_by_suite}) > bool 0)) or on() vector(0))' @@ -3397,39 +3405,36 @@ def build_jobs_dashboard(): def _check_state_series(regex: str, failed: bool) -> str: state = f'result!~"{non_failure}"' if failed else f'result=~"{success}"' - core = ( - f'sum by (suite) (max_over_time(({{{checks_selector},check=~"{regex}",{state}}})[$__interval]))' - ) + core = f'sum by (suite) (increase({{{checks_selector},check=~"{regex}",{state}}}[$__interval]))' return f'({core}) or on(suite) ({selected_suite_zero})' problematic_tests_history_core = ( - f'topk(12, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{{suite=~"{suite_var}",branch=~"{branch_var}",test!="__no_test_cases__",status="failed",{exported}}}[$__interval])))' + f'topk(12, sum by (suite, test) (platform_quality:test_case_status:count_1h{{suite=~"{suite_var}",branch=~"{branch_var}",test!="__no_test_cases__",status="failed"}}))' ) problematic_tests_history = f"({problematic_tests_history_core}) or on() vector(0)" worst_test_per_suite_core = ( - f'topk by (suite) (1, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{{suite=~"{suite_var}",branch=~"{branch_var}",test!="__no_test_cases__",status="failed",{exported}}}[30d])))' + f'topk by (suite) (1, sum by (suite, test) (increase(platform_quality_gate_test_case_result{{suite=~"{suite_var}",branch=~"{branch_var}",test!="__no_test_cases__",status="failed",{exported}}}[30d])))' ) worst_test_per_suite = f"({worst_test_per_suite_core}) or on() vector(0)" selected_test_pass_fail = [ { "refId": "A", - "expr": f'sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{{{test_case_selector},status="passed"}}[$__interval])) or on() vector(0)', - "legendFormat": "passed · {{suite}} · #{{build_number}}", + "expr": f'sum by (suite) (platform_quality:test_case_status:count_1h{{suite=~"{suite_var}",branch=~"{branch_var}",test=~"{test_var}",test!="__no_test_cases__",status="passed"}}) or on() vector(0)', + "legendFormat": "{{suite}} passed", }, { "refId": "B", - "expr": f'sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{{{test_case_selector},status="failed"}}[$__interval])) or on() vector(0)', - "legendFormat": "failed · {{suite}} · #{{build_number}}", + "expr": f'sum by (suite) (platform_quality:test_case_status:count_1h{{suite=~"{suite_var}",branch=~"{branch_var}",test=~"{test_var}",test!="__no_test_cases__",status="failed"}}) or on() vector(0)', + "legendFormat": "{{suite}} failed", }, { "refId": "C", - "expr": f'sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{{{test_case_selector},status="skipped"}}[$__interval])) or on() vector(0)', - "legendFormat": "skipped · {{suite}} · #{{build_number}}", + "expr": f'sum by (suite) (platform_quality:test_case_status:count_1h{{suite=~"{suite_var}",branch=~"{branch_var}",test=~"{test_var}",test!="__no_test_cases__",status="skipped"}}) or on() vector(0)', + "legendFormat": "{{suite}} skipped", }, ] selected_test_pass_rate = ( - f'100 * (sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{{{test_case_selector},status="passed"}}[$__interval]))) ' - f'/ clamp_min((sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{{{test_case_selector},status=~"passed|failed|error|skipped"}}[$__interval]))), 1)' + f'avg by (suite) (platform_quality:test_case_pass_rate:percent_1h{{suite=~"{suite_var}",branch=~"{branch_var}",test=~"{test_var}",test!="__no_test_cases__"}})' ) recent_branch_evidence = ( f'sort_desc(count by (suite, branch) (max_over_time(platform_quality_gate_build_info{{{build_info_selector}}}[30d])))' @@ -3442,70 +3447,70 @@ def build_jobs_dashboard(): missing = f"(({suite_universe}) unless on(suite) {presence_expr})" return f"({missing}) or on(suite) (0 * ({suite_universe}))" - missing_tests_by_suite = _missing_suite_series( + def _present_suite_percent(presence_expr: str) -> str: + present = f"(({suite_universe}) and on(suite) {presence_expr})" + return f"(100 * ({present})) or on(suite) (0 * ({suite_universe}))" + + present_tests_by_suite = _present_suite_percent( f'count by (suite) ({{__name__=~".*_quality_gate_tests_total",{exported}}})' ) - missing_checks_by_suite = _missing_suite_series( + present_checks_by_suite = _present_suite_percent( f'count by (suite) ({{__name__=~".*_quality_gate_checks_total",{exported}}})' ) - missing_coverage_by_suite = _missing_suite_series( + present_coverage_by_suite = _present_suite_percent( f"count by (suite) (platform_quality_gate_workspace_line_coverage_percent{{{exported}}})" ) - missing_loc_by_suite = _missing_suite_series( + present_loc_by_suite = _present_suite_percent( f"count by (suite) (platform_quality_gate_source_lines_over_500_total{{{exported}}}) " f"and on(suite) count by (suite) (platform_quality_gate_source_files_total{{{exported}}})" ) - missing_test_case_by_suite = _missing_suite_series( + present_test_case_by_suite = _present_suite_percent( f"count by (suite) (platform_quality_gate_test_case_result{{{exported}}})" ) - placeholder_test_case_by_suite = _missing_suite_series( + real_test_case_by_suite = _present_suite_percent( f'count by (suite) (platform_quality_gate_test_case_result{{{exported},test!="__no_test_cases__"}})' ) + dark_red = "dark-red" + dark_orange = "dark-orange" + dark_yellow = "dark-yellow" + dark_green = "dark-green" + dark_blue = "dark-blue" success_thresholds = { "mode": "absolute", "steps": [ - {"color": "red", "value": None}, - {"color": "orange", "value": 90}, - {"color": "yellow", "value": 93}, - {"color": "green", "value": 95}, - {"color": "blue", "value": 100}, + {"color": dark_red, "value": None}, + {"color": dark_orange, "value": 90}, + {"color": dark_yellow, "value": 93}, + {"color": dark_green, "value": 95}, + {"color": dark_blue, "value": 100}, ], } coverage_thresholds = success_thresholds failures_thresholds = { "mode": "absolute", "steps": [ - {"color": "green", "value": None}, - {"color": "yellow", "value": 1}, - {"color": "orange", "value": 3}, - {"color": "red", "value": 5}, - ], - } - coverage_gap_thresholds = { - "mode": "absolute", - "steps": [ - {"color": "green", "value": None}, - {"color": "yellow", "value": 1}, - {"color": "orange", "value": 5}, - {"color": "red", "value": 10}, + {"color": dark_green, "value": None}, + {"color": dark_yellow, "value": 1}, + {"color": dark_orange, "value": 3}, + {"color": dark_red, "value": 5}, ], } smell_thresholds = { "mode": "absolute", "steps": [ - {"color": "red", "value": None}, - {"color": "green", "value": 0}, - {"color": "yellow", "value": 1}, - {"color": "orange", "value": 3}, - {"color": "red", "value": 5}, + {"color": dark_red, "value": None}, + {"color": dark_green, "value": 0}, + {"color": dark_yellow, "value": 1}, + {"color": dark_orange, "value": 3}, + {"color": dark_red, "value": 5}, ], } missing_thresholds = { "mode": "absolute", "steps": [ - {"color": "green", "value": None}, - {"color": "red", "value": 1}, + {"color": dark_green, "value": None}, + {"color": dark_red, "value": 1}, ], } @@ -3554,7 +3559,7 @@ def build_jobs_dashboard(): instant=True, thresholds={ "mode": "absolute", - "steps": [{"color": "red", "value": None}, {"color": "green", "value": 1}], + "steps": [{"color": dark_red, "value": None}, {"color": dark_green, "value": 1}], }, ) ) @@ -3620,21 +3625,6 @@ def build_jobs_dashboard(): {"type": "value", "options": {"-1": {"text": "no runs"}}} ] panels.append(reliability_suite_panel) - coverage_gap_panel = bargauge_panel( - 10, - "Coverage Gap to 95% by Suite", - coverage_gap, - {"h": 8, "w": 8, "x": 16, "y": 5}, - unit="percent", - instant=True, - legend="{{suite}}", - sort_order="desc", - thresholds=coverage_gap_thresholds, - decimals=2, - ) - coverage_gap_panel["description"] = "Gap from the 95% target. 0 means the suite is at or above target." - panels.append(coverage_gap_panel) - history_panel = timeseries_panel( 11, "Run Reliability History by Suite", @@ -3676,15 +3666,10 @@ def build_jobs_dashboard(): "expr": f'sum(increase(platform_quality_gate_runs_total{{{runs_failure_selector}}}[$__interval])) or on() vector(0)', "legendFormat": "Failure", }, - { - "refId": "C", - "expr": f'sum(increase(platform_quality_gate_runs_total{{{runs_selector}}}[$__interval])) or on() vector(0)', - "legendFormat": "Total", - }, ], legend_display="list", legend_placement="bottom", - legend_calcs=["lastNotNull", "sum"], + legend_calcs=[], ) ) panels.append( @@ -3697,18 +3682,13 @@ def build_jobs_dashboard(): targets=[ { "refId": "A", - "expr": f'max_over_time(platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}[$__interval])', - "legendFormat": "{{suite}} coverage %", - }, - { - "refId": "B", - "expr": loc_limit_compliance_history, - "legendFormat": "{{suite}} files <=500 LOC %", + "expr": coverage_loc_compliance_history, + "legendFormat": "{{suite}}", }, ], legend_display="list", legend_placement="bottom", - legend_calcs=["lastNotNull", "max"], + legend_calcs=[], ) ) run_mix_panel = pie_panel( @@ -3742,12 +3722,14 @@ def build_jobs_dashboard(): legend="{{suite}}", legend_display="list", legend_placement="bottom", - legend_calcs=["lastNotNull", "max"], + legend_calcs=[], ) panel["description"] = ( - "One line per selected suite. 1 means this check dimension was in that state during the bucket; " - "0 means the suite reported the dimension and it was not in that state." + "One line per selected suite, counting check events in this state during each bucket. " + "Intervals without runs stay at zero rather than being treated as failures." ) + panel["fieldConfig"]["defaults"]["min"] = 0 + panel["fieldConfig"]["defaults"].setdefault("custom", {})["spanNulls"] = True panels.append(panel) for index, (label, regex) in enumerate(check_dimensions[4:]): panel = timeseries_panel( @@ -3759,12 +3741,14 @@ def build_jobs_dashboard(): legend="{{suite}}", legend_display="list", legend_placement="bottom", - legend_calcs=["lastNotNull", "max"], + legend_calcs=[], ) panel["description"] = ( - "One line per selected suite. 1 means this check dimension was in that state during the bucket; " - "0 means the suite reported the dimension and it was not in that state." + "One line per selected suite, counting check events in this state during each bucket. " + "Intervals without runs stay at zero rather than being treated as failures." ) + panel["fieldConfig"]["defaults"]["min"] = 0 + panel["fieldConfig"]["defaults"].setdefault("custom", {})["spanNulls"] = True panels.append(panel) _append_check_trends(130, "Failure Trend", True, 29) @@ -3776,10 +3760,10 @@ def build_jobs_dashboard(): problematic_tests_history, {"h": 8, "w": 12, "x": 0, "y": 57}, unit="none", - legend="{{suite}} · {{test}}", + legend="{{suite}} - {{test}}", legend_display="list", - legend_placement="bottom", - legend_calcs=["lastNotNull", "max", "sum"], + legend_placement="right", + legend_calcs=[], links=jenkins_suite_links(), data_links=jenkins_latest_artifact_data_links(), ) @@ -3810,7 +3794,7 @@ def build_jobs_dashboard(): targets=selected_test_pass_fail, legend_display="list", legend_placement="bottom", - legend_calcs=["lastNotNull", "sum"], + legend_calcs=[], links=jenkins_suite_links(), data_links=jenkins_artifact_data_links(), ) @@ -3821,10 +3805,10 @@ def build_jobs_dashboard(): selected_test_pass_rate, {"h": 8, "w": 12, "x": 12, "y": 65}, unit="percent", - legend="{{suite}} · {{test}}", + legend="{{suite}}", legend_display="list", legend_placement="bottom", - legend_calcs=["lastNotNull", "min"], + legend_calcs=[], links=jenkins_suite_links(), data_links=jenkins_artifact_data_links(), ) @@ -3871,56 +3855,56 @@ def build_jobs_dashboard(): panels.append( bargauge_panel( 27, - "Missing Tests Metrics by Suite", - missing_tests_by_suite, + "Tests Metrics Present by Suite", + present_tests_by_suite, {"h": 7, "w": 6, "x": 0, "y": 81}, - unit="none", + unit="percent", instant=True, legend="{{suite}}", sort_order="desc", - thresholds=missing_thresholds, + thresholds=success_thresholds, decimals=0, ) ) panels.append( bargauge_panel( 28, - "Missing Checks Metrics by Suite", - missing_checks_by_suite, + "Checks Metrics Present by Suite", + present_checks_by_suite, {"h": 7, "w": 6, "x": 6, "y": 81}, - unit="none", + unit="percent", instant=True, legend="{{suite}}", sort_order="desc", - thresholds=missing_thresholds, + thresholds=success_thresholds, decimals=0, ) ) panels.append( bargauge_panel( 29, - "Missing Coverage Metrics by Suite", - missing_coverage_by_suite, + "Coverage Metrics Present by Suite", + present_coverage_by_suite, {"h": 7, "w": 6, "x": 12, "y": 81}, - unit="none", + unit="percent", instant=True, legend="{{suite}}", sort_order="desc", - thresholds=missing_thresholds, + thresholds=success_thresholds, decimals=0, ) ) panels.append( bargauge_panel( 30, - "Missing LOC Compliance Metrics by Suite", - missing_loc_by_suite, + "LOC Compliance Metrics Present by Suite", + present_loc_by_suite, {"h": 7, "w": 6, "x": 18, "y": 81}, - unit="none", + unit="percent", instant=True, legend="{{suite}}", sort_order="desc", - thresholds=missing_thresholds, + thresholds=success_thresholds, decimals=0, ) ) @@ -3935,8 +3919,8 @@ def build_jobs_dashboard(): thresholds={ "mode": "absolute", "steps": [ - {"color": "red", "value": None}, - {"color": "green", "value": 1}, + {"color": dark_red, "value": None}, + {"color": dark_green, "value": 1}, ], }, ) @@ -3988,28 +3972,28 @@ def build_jobs_dashboard(): panels.append( bargauge_panel( 148, - "Missing Test-Case Metrics by Suite", - missing_test_case_by_suite, + "Test-Case Metrics Present by Suite", + present_test_case_by_suite, {"h": 6, "w": 12, "x": 0, "y": 94}, - unit="none", + unit="percent", instant=True, legend="{{suite}}", sort_order="desc", - thresholds=missing_thresholds, + thresholds=success_thresholds, decimals=0, ) ) panels.append( bargauge_panel( 151, - "No Real Test Cases by Suite", - placeholder_test_case_by_suite, + "Real Test Cases Present by Suite", + real_test_case_by_suite, {"h": 6, "w": 12, "x": 12, "y": 94}, - unit="none", + unit="percent", instant=True, legend="{{suite}}", sort_order="desc", - thresholds=missing_thresholds, + thresholds=success_thresholds, decimals=0, ) ) @@ -4055,9 +4039,8 @@ def build_jobs_dashboard(): 5: {"h": 4, "w": 4, "x": 12, "y": 0}, 6: {"h": 4, "w": 4, "x": 16, "y": 0}, 7: {"h": 4, "w": 4, "x": 20, "y": 0}, - 8: {"h": 7, "w": 8, "x": 0, "y": 4}, - 9: {"h": 7, "w": 8, "x": 8, "y": 4}, - 10: {"h": 7, "w": 8, "x": 16, "y": 4}, + 8: {"h": 7, "w": 12, "x": 0, "y": 4}, + 9: {"h": 7, "w": 12, "x": 12, "y": 4}, 17: {"h": 7, "w": 12, "x": 0, "y": 11}, 18: {"h": 7, "w": 12, "x": 12, "y": 11}, } @@ -4070,6 +4053,24 @@ def build_jobs_dashboard(): def children(ids): return [panel_by_id[panel_id] for panel_id in ids] + row_layout = { + 11: {"h": 8, "w": 12, "x": 0, "y": 19}, + 12: {"h": 8, "w": 12, "x": 12, "y": 19}, + 13: {"h": 8, "w": 12, "x": 0, "y": 27}, + 14: {"h": 8, "w": 12, "x": 12, "y": 27}, + 145: {"h": 10, "w": 24, "x": 0, "y": 63}, + 147: {"h": 8, "w": 24, "x": 0, "y": 74}, + 146: {"h": 8, "w": 12, "x": 0, "y": 83}, + 152: {"h": 8, "w": 12, "x": 12, "y": 83}, + 31: {"h": 6, "w": 4, "x": 0, "y": 111}, + 32: {"h": 6, "w": 4, "x": 4, "y": 111}, + 33: {"h": 6, "w": 4, "x": 8, "y": 111}, + 34: {"h": 6, "w": 6, "x": 12, "y": 111}, + 35: {"h": 6, "w": 6, "x": 18, "y": 111}, + } + for panel_id, grid in row_layout.items(): + panel_by_id[panel_id]["gridPos"] = grid + compact_panels.extend( [ row_panel(500, "Reliability And Run History", 18, panels=children([11, 12, 13, 14])), @@ -4093,9 +4094,15 @@ def build_jobs_dashboard(): ), row_panel( 504, - "Telemetry Completeness, SonarQube, And Branches", + "Telemetry Completeness And Branches", 22, - panels=children([27, 28, 29, 30, 31, 32, 33, 34, 35, 148, 151, 149, 150]), + panels=children([27, 28, 29, 30, 148, 151, 149, 150]), + ), + row_panel( + 505, + "SonarQube Project Health", + 23, + panels=children([31, 32, 33, 34, 35]), ), ] ) diff --git a/scripts/tests/test_dashboards_render_atlas.py b/scripts/tests/test_dashboards_render_atlas.py index 3e1dc2e1..e369e525 100644 --- a/scripts/tests/test_dashboards_render_atlas.py +++ b/scripts/tests/test_dashboards_render_atlas.py @@ -133,8 +133,8 @@ def test_jobs_dashboard_bar_gauges_use_solid_threshold_colors(): ) threshold_steps = reliability_panel["fieldConfig"]["defaults"]["thresholds"]["steps"] - assert {"color": "yellow", "value": 93} in threshold_steps - assert {"color": "blue", "value": 100} in threshold_steps + assert {"color": "dark-yellow", "value": 93} in threshold_steps + assert {"color": "dark-blue", "value": 100} in threshold_steps def test_jobs_dashboard_collapses_heavy_drilldowns_for_light_first_paint(): @@ -150,19 +150,24 @@ def test_jobs_dashboard_collapses_heavy_drilldowns_for_light_first_paint(): } assert len(panels) == 16 - assert len(visible_query_panels) == 11 - assert sum(len(panel.get("targets", [])) for panel in visible_query_panels) == 11 + assert len(visible_query_panels) == 10 + assert sum(len(panel.get("targets", [])) for panel in visible_query_panels) == 10 + assert all( + panel["title"] != "Coverage Gap to 95% by Suite" + for panel in visible_query_panels + ) assert [row["title"] for row in rows] == [ "Reliability And Run History", "Failure Trends By Check", "Success Trends By Check", "Test Drilldowns And Problem Tests", - "Telemetry Completeness, SonarQube, And Branches", + "Telemetry Completeness And Branches", + "SonarQube Project Health", ] assert all(row["collapsed"] for row in rows) assert "Failure Trend: Coverage" in nested_panels_by_title assert "Success Trend: Supply Chain" in nested_panels_by_title assert "Selected Test Pass Rate History" in nested_panels_by_title - assert "Missing Coverage Metrics by Suite" in nested_panels_by_title + assert "Coverage Metrics Present by Suite" in nested_panels_by_title assert "SonarQube API Up" in nested_panels_by_title diff --git a/services/monitoring/dashboards/atlas-jobs.json b/services/monitoring/dashboards/atlas-jobs.json index 99806e1f..47516baa 100644 --- a/services/monitoring/dashboards/atlas-jobs.json +++ b/services/monitoring/dashboards/atlas-jobs.json @@ -35,23 +35,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -109,23 +109,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -183,19 +183,19 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -252,11 +252,11 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 1 } ] @@ -313,23 +313,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -387,23 +387,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 0 }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -439,7 +439,7 @@ }, "gridPos": { "h": 7, - "w": 8, + "w": 12, "x": 0, "y": 4 }, @@ -463,23 +463,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -522,8 +522,8 @@ }, "gridPos": { "h": 7, - "w": 8, - "x": 8, + "w": 12, + "x": 12, "y": 4 }, "targets": [ @@ -546,23 +546,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -605,85 +605,6 @@ ], "description": "Rolling CI run success rate. This can stay low after failed/debug runs even when Current Gate Health is green." }, - { - "id": 10, - "type": "bargauge", - "title": "Coverage Gap to 95% by Suite", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 4 - }, - "targets": [ - { - "expr": "sort_desc(clamp_min(95 - ((max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))), 0))", - "refId": "A", - "legendFormat": "{{suite}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 5 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "decimals": 2 - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ], - "description": "Gap from the 95% target. 0 means the suite is at or above target." - }, { "id": 17, "type": "bargauge", @@ -718,23 +639,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -810,23 +731,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -891,13 +812,13 @@ }, "gridPos": { "h": 8, - "w": 24, + "w": 12, "x": 0, - "y": 13 + "y": 19 }, "targets": [ { - "expr": "100 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))", + "expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)", "refId": "A", "legendFormat": "{{suite}}" } @@ -939,9 +860,9 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 0, - "y": 21 + "w": 12, + "x": 12, + "y": 19 }, "targets": [ { @@ -953,11 +874,6 @@ "refId": "B", "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)", "legendFormat": "Failure" - }, - { - "refId": "C", - "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])) or on() vector(0)", - "legendFormat": "Total" } ], "fieldConfig": { @@ -969,11 +885,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -990,20 +902,15 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 8, - "y": 21 + "w": 12, + "x": 0, + "y": 27 }, "targets": [ { "refId": "A", - "expr": "max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])", - "legendFormat": "{{suite}} coverage %" - }, - { - "refId": "B", - "expr": "(100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", - "legendFormat": "{{suite}} files <=500 LOC %" + "expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))", + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -1015,11 +922,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -1036,9 +939,9 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 16, - "y": 21 + "w": 12, + "x": 12, + "y": 27 }, "targets": [ { @@ -1107,31 +1010,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 131, @@ -1149,31 +1052,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 132, @@ -1191,31 +1094,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 133, @@ -1233,31 +1136,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 134, @@ -1275,31 +1178,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 135, @@ -1317,31 +1220,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 136, @@ -1359,31 +1262,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1415,31 +1318,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 139, @@ -1457,31 +1360,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 140, @@ -1499,31 +1402,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 141, @@ -1541,31 +1444,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 142, @@ -1583,31 +1486,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 143, @@ -1625,31 +1528,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 144, @@ -1667,31 +1570,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1716,16 +1619,16 @@ "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, + "h": 10, + "w": 24, "x": 0, - "y": 57 + "y": 63 }, "targets": [ { - "expr": "(topk(12, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[$__interval])))) or on() vector(0)", + "expr": "(topk(12, sum by (suite, test) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}))) or on() vector(0)", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}} - {{test}}" } ], "fieldConfig": { @@ -1749,12 +1652,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max", - "sum" - ] + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1868,13 +1766,13 @@ }, "gridPos": { "h": 8, - "w": 12, - "x": 12, - "y": 57 + "w": 24, + "x": 0, + "y": 74 }, "targets": [ { - "expr": "sort_desc((topk by (suite) (1, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", + "expr": "sort_desc((topk by (suite) (1, sum by (suite, test) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", "refId": "A", "legendFormat": "{{suite}} \u00b7 {{test}}", "instant": true @@ -1892,19 +1790,19 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -2062,23 +1960,23 @@ "h": 8, "w": 12, "x": 0, - "y": 65 + "y": 83 }, "targets": [ { "refId": "A", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval])) or on() vector(0)", - "legendFormat": "passed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"passed\"}) or on() vector(0)", + "legendFormat": "{{suite}} passed" }, { "refId": "B", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"failed\"}[$__interval])) or on() vector(0)", - "legendFormat": "failed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}) or on() vector(0)", + "legendFormat": "{{suite}} failed" }, { "refId": "C", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"skipped\"}[$__interval])) or on() vector(0)", - "legendFormat": "skipped \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"skipped\"}) or on() vector(0)", + "legendFormat": "{{suite}} skipped" } ], "fieldConfig": { @@ -2102,11 +2000,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2222,13 +2116,13 @@ "h": 8, "w": 12, "x": 12, - "y": 65 + "y": 83 }, "targets": [ { - "expr": "100 * (sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval]))) / clamp_min((sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=~\"passed|failed|error|skipped\"}[$__interval]))), 1)", + "expr": "avg by (suite) (platform_quality:test_case_pass_rate:percent_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\"})", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -2252,23 +2146,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -2279,11 +2173,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "min" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2392,7 +2282,7 @@ { "id": 504, "type": "row", - "title": "Telemetry Completeness, SonarQube, And Branches", + "title": "Telemetry Completeness And Branches", "gridPos": { "h": 1, "w": 24, @@ -2404,7 +2294,7 @@ { "id": 27, "type": "bargauge", - "title": "Missing Tests Metrics by Suite", + "title": "Tests Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2417,7 +2307,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2428,19 +2318,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2474,7 +2376,7 @@ { "id": 28, "type": "bargauge", - "title": "Missing Checks Metrics by Suite", + "title": "Checks Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2487,7 +2389,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2498,19 +2400,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2544,7 +2458,7 @@ { "id": 29, "type": "bargauge", - "title": "Missing Coverage Metrics by Suite", + "title": "Coverage Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2557,7 +2471,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2568,19 +2482,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2614,7 +2540,7 @@ { "id": 30, "type": "bargauge", - "title": "Missing LOC Compliance Metrics by Suite", + "title": "LOC Compliance Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2627,7 +2553,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2638,19 +2564,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2681,337 +2619,10 @@ } ] }, - { - "id": 31, - "type": "stat", - "title": "SonarQube API Up", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 0, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_up) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 32, - "type": "stat", - "title": "Sonar Projects (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 4, - "y": 88 - }, - "targets": [ - { - "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 33, - "type": "stat", - "title": "Sonar Gate Fetch Errors", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 8, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 34, - "type": "piechart", - "title": "Sonar Gate Status Mix (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 88 - }, - "targets": [ - { - "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", - "refId": "A", - "legendFormat": "{{status}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "color": { - "mode": "palette-classic" - } - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "list", - "placement": "right" - }, - "pieType": "pie", - "displayLabels": [], - "tooltip": { - "mode": "single" - }, - "colorScheme": "interpolateSpectral", - "colorBy": "value", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - } - }, - { - "id": 35, - "type": "bargauge", - "title": "Projects Failing Sonar Gate", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 88 - }, - "targets": [ - { - "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", - "refId": "A", - "legendFormat": "{{project_key}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "none", - "min": 0, - "max": null, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - } - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, { "id": 148, "type": "bargauge", - "title": "Missing Test-Case Metrics by Suite", + "title": "Test-Case Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3024,7 +2635,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3035,19 +2646,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3081,7 +2704,7 @@ { "id": 151, "type": "bargauge", - "title": "No Real Test Cases by Suite", + "title": "Real Test Cases Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3094,7 +2717,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3105,19 +2728,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3182,11 +2817,11 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "red", + "color": "dark-red", "value": 1 } ] @@ -3349,19 +2984,19 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -3491,6 +3126,347 @@ ] } ] + }, + { + "id": 505, + "type": "row", + "title": "SonarQube Project Health", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "collapsed": true, + "panels": [ + { + "id": 31, + "type": "stat", + "title": "SonarQube API Up", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 0, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_up) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-red", + "value": null + }, + { + "color": "dark-green", + "value": 1 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 32, + "type": "stat", + "title": "Sonar Projects (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 4, + "y": 111 + }, + "targets": [ + { + "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 33, + "type": "stat", + "title": "Sonar Gate Fetch Errors", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 34, + "type": "piechart", + "title": "Sonar Gate Status Mix (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 111 + }, + "targets": [ + { + "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", + "refId": "A", + "legendFormat": "{{status}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "color": { + "mode": "palette-classic" + } + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "list", + "placement": "right" + }, + "pieType": "pie", + "displayLabels": [], + "tooltip": { + "mode": "single" + }, + "colorScheme": "interpolateSpectral", + "colorBy": "value", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + } + }, + { + "id": 35, + "type": "bargauge", + "title": "Projects Failing Sonar Gate", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 111 + }, + "targets": [ + { + "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", + "refId": "A", + "legendFormat": "{{project_key}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "basic", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + } + ] } ], "time": { diff --git a/services/monitoring/dashboards/atlas-testing.json b/services/monitoring/dashboards/atlas-testing.json index 71d3ed57..8a50f5f7 100644 --- a/services/monitoring/dashboards/atlas-testing.json +++ b/services/monitoring/dashboards/atlas-testing.json @@ -35,23 +35,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -109,23 +109,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -183,19 +183,19 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -252,11 +252,11 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 1 } ] @@ -313,23 +313,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -387,23 +387,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 0 }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -439,7 +439,7 @@ }, "gridPos": { "h": 7, - "w": 8, + "w": 12, "x": 0, "y": 4 }, @@ -463,23 +463,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -522,8 +522,8 @@ }, "gridPos": { "h": 7, - "w": 8, - "x": 8, + "w": 12, + "x": 12, "y": 4 }, "targets": [ @@ -546,23 +546,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -605,85 +605,6 @@ ], "description": "Rolling CI run success rate. This can stay low after failed/debug runs even when Current Gate Health is green." }, - { - "id": 10, - "type": "bargauge", - "title": "Coverage Gap to 95% by Suite", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 4 - }, - "targets": [ - { - "expr": "sort_desc(clamp_min(95 - ((max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))), 0))", - "refId": "A", - "legendFormat": "{{suite}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 5 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "decimals": 2 - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ], - "description": "Gap from the 95% target. 0 means the suite is at or above target." - }, { "id": 17, "type": "bargauge", @@ -718,23 +639,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -810,23 +731,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -891,13 +812,13 @@ }, "gridPos": { "h": 8, - "w": 24, + "w": 12, "x": 0, - "y": 13 + "y": 19 }, "targets": [ { - "expr": "100 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))", + "expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)", "refId": "A", "legendFormat": "{{suite}}" } @@ -939,9 +860,9 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 0, - "y": 21 + "w": 12, + "x": 12, + "y": 19 }, "targets": [ { @@ -953,11 +874,6 @@ "refId": "B", "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)", "legendFormat": "Failure" - }, - { - "refId": "C", - "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])) or on() vector(0)", - "legendFormat": "Total" } ], "fieldConfig": { @@ -969,11 +885,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -990,20 +902,15 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 8, - "y": 21 + "w": 12, + "x": 0, + "y": 27 }, "targets": [ { "refId": "A", - "expr": "max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])", - "legendFormat": "{{suite}} coverage %" - }, - { - "refId": "B", - "expr": "(100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", - "legendFormat": "{{suite}} files <=500 LOC %" + "expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))", + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -1015,11 +922,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -1036,9 +939,9 @@ }, "gridPos": { "h": 8, - "w": 8, - "x": 16, - "y": 21 + "w": 12, + "x": 12, + "y": 27 }, "targets": [ { @@ -1107,31 +1010,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 131, @@ -1149,31 +1052,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 132, @@ -1191,31 +1094,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 133, @@ -1233,31 +1136,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 134, @@ -1275,31 +1178,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 135, @@ -1317,31 +1220,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 136, @@ -1359,31 +1262,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1415,31 +1318,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 139, @@ -1457,31 +1360,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 140, @@ -1499,31 +1402,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 141, @@ -1541,31 +1444,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 142, @@ -1583,31 +1486,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 143, @@ -1625,31 +1528,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 144, @@ -1667,31 +1570,31 @@ }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1716,16 +1619,16 @@ "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, + "h": 10, + "w": 24, "x": 0, - "y": 57 + "y": 63 }, "targets": [ { - "expr": "(topk(12, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[$__interval])))) or on() vector(0)", + "expr": "(topk(12, sum by (suite, test) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}))) or on() vector(0)", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}} - {{test}}" } ], "fieldConfig": { @@ -1749,12 +1652,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max", - "sum" - ] + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1868,13 +1766,13 @@ }, "gridPos": { "h": 8, - "w": 12, - "x": 12, - "y": 57 + "w": 24, + "x": 0, + "y": 74 }, "targets": [ { - "expr": "sort_desc((topk by (suite) (1, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", + "expr": "sort_desc((topk by (suite) (1, sum by (suite, test) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", "refId": "A", "legendFormat": "{{suite}} \u00b7 {{test}}", "instant": true @@ -1892,19 +1790,19 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -2062,23 +1960,23 @@ "h": 8, "w": 12, "x": 0, - "y": 65 + "y": 83 }, "targets": [ { "refId": "A", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval])) or on() vector(0)", - "legendFormat": "passed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"passed\"}) or on() vector(0)", + "legendFormat": "{{suite}} passed" }, { "refId": "B", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"failed\"}[$__interval])) or on() vector(0)", - "legendFormat": "failed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}) or on() vector(0)", + "legendFormat": "{{suite}} failed" }, { "refId": "C", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"skipped\"}[$__interval])) or on() vector(0)", - "legendFormat": "skipped \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"skipped\"}) or on() vector(0)", + "legendFormat": "{{suite}} skipped" } ], "fieldConfig": { @@ -2102,11 +2000,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2222,13 +2116,13 @@ "h": 8, "w": 12, "x": 12, - "y": 65 + "y": 83 }, "targets": [ { - "expr": "100 * (sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval]))) / clamp_min((sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=~\"passed|failed|error|skipped\"}[$__interval]))), 1)", + "expr": "avg by (suite) (platform_quality:test_case_pass_rate:percent_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\"})", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -2252,23 +2146,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -2279,11 +2173,7 @@ "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "min" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2392,7 +2282,7 @@ { "id": 504, "type": "row", - "title": "Telemetry Completeness, SonarQube, And Branches", + "title": "Telemetry Completeness And Branches", "gridPos": { "h": 1, "w": 24, @@ -2404,7 +2294,7 @@ { "id": 27, "type": "bargauge", - "title": "Missing Tests Metrics by Suite", + "title": "Tests Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2417,7 +2307,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2428,19 +2318,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2474,7 +2376,7 @@ { "id": 28, "type": "bargauge", - "title": "Missing Checks Metrics by Suite", + "title": "Checks Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2487,7 +2389,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2498,19 +2400,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2544,7 +2458,7 @@ { "id": 29, "type": "bargauge", - "title": "Missing Coverage Metrics by Suite", + "title": "Coverage Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2557,7 +2471,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2568,19 +2482,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2614,7 +2540,7 @@ { "id": 30, "type": "bargauge", - "title": "Missing LOC Compliance Metrics by Suite", + "title": "LOC Compliance Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2627,7 +2553,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2638,19 +2564,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2681,337 +2619,10 @@ } ] }, - { - "id": 31, - "type": "stat", - "title": "SonarQube API Up", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 0, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_up) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 32, - "type": "stat", - "title": "Sonar Projects (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 4, - "y": 88 - }, - "targets": [ - { - "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 33, - "type": "stat", - "title": "Sonar Gate Fetch Errors", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 8, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 34, - "type": "piechart", - "title": "Sonar Gate Status Mix (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 88 - }, - "targets": [ - { - "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", - "refId": "A", - "legendFormat": "{{status}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "color": { - "mode": "palette-classic" - } - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "list", - "placement": "right" - }, - "pieType": "pie", - "displayLabels": [], - "tooltip": { - "mode": "single" - }, - "colorScheme": "interpolateSpectral", - "colorBy": "value", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - } - }, - { - "id": 35, - "type": "bargauge", - "title": "Projects Failing Sonar Gate", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 88 - }, - "targets": [ - { - "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", - "refId": "A", - "legendFormat": "{{project_key}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "none", - "min": 0, - "max": null, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - } - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, { "id": 148, "type": "bargauge", - "title": "Missing Test-Case Metrics by Suite", + "title": "Test-Case Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3024,7 +2635,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3035,19 +2646,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3081,7 +2704,7 @@ { "id": 151, "type": "bargauge", - "title": "No Real Test Cases by Suite", + "title": "Real Test Cases Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3094,7 +2717,7 @@ }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3105,19 +2728,31 @@ "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3182,11 +2817,11 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "red", + "color": "dark-red", "value": 1 } ] @@ -3349,19 +2984,19 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -3491,6 +3126,347 @@ ] } ] + }, + { + "id": 505, + "type": "row", + "title": "SonarQube Project Health", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "collapsed": true, + "panels": [ + { + "id": 31, + "type": "stat", + "title": "SonarQube API Up", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 0, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_up) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-red", + "value": null + }, + { + "color": "dark-green", + "value": 1 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 32, + "type": "stat", + "title": "Sonar Projects (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 4, + "y": 111 + }, + "targets": [ + { + "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 33, + "type": "stat", + "title": "Sonar Gate Fetch Errors", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 34, + "type": "piechart", + "title": "Sonar Gate Status Mix (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 111 + }, + "targets": [ + { + "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", + "refId": "A", + "legendFormat": "{{status}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "color": { + "mode": "palette-classic" + } + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "list", + "placement": "right" + }, + "pieType": "pie", + "displayLabels": [], + "tooltip": { + "mode": "single" + }, + "colorScheme": "interpolateSpectral", + "colorBy": "value", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + } + }, + { + "id": 35, + "type": "bargauge", + "title": "Projects Failing Sonar Gate", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 111 + }, + "targets": [ + { + "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", + "refId": "A", + "legendFormat": "{{project_key}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "basic", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + } + ] } ], "time": { diff --git a/services/monitoring/grafana-dashboard-jobs.yaml b/services/monitoring/grafana-dashboard-jobs.yaml index d0b2270b..b785beec 100644 --- a/services/monitoring/grafana-dashboard-jobs.yaml +++ b/services/monitoring/grafana-dashboard-jobs.yaml @@ -44,23 +44,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -118,23 +118,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -192,19 +192,19 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -261,11 +261,11 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 1 } ] @@ -322,23 +322,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -396,23 +396,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 0 }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -448,7 +448,7 @@ data: }, "gridPos": { "h": 7, - "w": 8, + "w": 12, "x": 0, "y": 4 }, @@ -472,23 +472,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -531,8 +531,8 @@ data: }, "gridPos": { "h": 7, - "w": 8, - "x": 8, + "w": 12, + "x": 12, "y": 4 }, "targets": [ @@ -555,23 +555,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -614,85 +614,6 @@ data: ], "description": "Rolling CI run success rate. This can stay low after failed/debug runs even when Current Gate Health is green." }, - { - "id": 10, - "type": "bargauge", - "title": "Coverage Gap to 95% by Suite", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 4 - }, - "targets": [ - { - "expr": "sort_desc(clamp_min(95 - ((max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))), 0))", - "refId": "A", - "legendFormat": "{{suite}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 5 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "decimals": 2 - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ], - "description": "Gap from the 95% target. 0 means the suite is at or above target." - }, { "id": 17, "type": "bargauge", @@ -727,23 +648,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -819,23 +740,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -900,13 +821,13 @@ data: }, "gridPos": { "h": 8, - "w": 24, + "w": 12, "x": 0, - "y": 13 + "y": 19 }, "targets": [ { - "expr": "100 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))", + "expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)", "refId": "A", "legendFormat": "{{suite}}" } @@ -948,9 +869,9 @@ data: }, "gridPos": { "h": 8, - "w": 8, - "x": 0, - "y": 21 + "w": 12, + "x": 12, + "y": 19 }, "targets": [ { @@ -962,11 +883,6 @@ data: "refId": "B", "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)", "legendFormat": "Failure" - }, - { - "refId": "C", - "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])) or on() vector(0)", - "legendFormat": "Total" } ], "fieldConfig": { @@ -978,11 +894,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -999,20 +911,15 @@ data: }, "gridPos": { "h": 8, - "w": 8, - "x": 8, - "y": 21 + "w": 12, + "x": 0, + "y": 27 }, "targets": [ { "refId": "A", - "expr": "max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])", - "legendFormat": "{{suite}} coverage %" - }, - { - "refId": "B", - "expr": "(100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", - "legendFormat": "{{suite}} files <=500 LOC %" + "expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))", + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -1024,11 +931,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -1045,9 +948,9 @@ data: }, "gridPos": { "h": 8, - "w": 8, - "x": 16, - "y": 21 + "w": 12, + "x": 12, + "y": 27 }, "targets": [ { @@ -1116,31 +1019,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 131, @@ -1158,31 +1061,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 132, @@ -1200,31 +1103,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 133, @@ -1242,31 +1145,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 134, @@ -1284,31 +1187,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 135, @@ -1326,31 +1229,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 136, @@ -1368,31 +1271,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1424,31 +1327,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 139, @@ -1466,31 +1369,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 140, @@ -1508,31 +1411,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 141, @@ -1550,31 +1453,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 142, @@ -1592,31 +1495,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 143, @@ -1634,31 +1537,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 144, @@ -1676,31 +1579,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1725,16 +1628,16 @@ data: "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, + "h": 10, + "w": 24, "x": 0, - "y": 57 + "y": 63 }, "targets": [ { - "expr": "(topk(12, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[$__interval])))) or on() vector(0)", + "expr": "(topk(12, sum by (suite, test) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}))) or on() vector(0)", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}} - {{test}}" } ], "fieldConfig": { @@ -1758,12 +1661,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max", - "sum" - ] + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1877,13 +1775,13 @@ data: }, "gridPos": { "h": 8, - "w": 12, - "x": 12, - "y": 57 + "w": 24, + "x": 0, + "y": 74 }, "targets": [ { - "expr": "sort_desc((topk by (suite) (1, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", + "expr": "sort_desc((topk by (suite) (1, sum by (suite, test) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", "refId": "A", "legendFormat": "{{suite}} \u00b7 {{test}}", "instant": true @@ -1901,19 +1799,19 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -2071,23 +1969,23 @@ data: "h": 8, "w": 12, "x": 0, - "y": 65 + "y": 83 }, "targets": [ { "refId": "A", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval])) or on() vector(0)", - "legendFormat": "passed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"passed\"}) or on() vector(0)", + "legendFormat": "{{suite}} passed" }, { "refId": "B", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"failed\"}[$__interval])) or on() vector(0)", - "legendFormat": "failed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}) or on() vector(0)", + "legendFormat": "{{suite}} failed" }, { "refId": "C", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"skipped\"}[$__interval])) or on() vector(0)", - "legendFormat": "skipped \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"skipped\"}) or on() vector(0)", + "legendFormat": "{{suite}} skipped" } ], "fieldConfig": { @@ -2111,11 +2009,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2231,13 +2125,13 @@ data: "h": 8, "w": 12, "x": 12, - "y": 65 + "y": 83 }, "targets": [ { - "expr": "100 * (sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval]))) / clamp_min((sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=~\"passed|failed|error|skipped\"}[$__interval]))), 1)", + "expr": "avg by (suite) (platform_quality:test_case_pass_rate:percent_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\"})", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -2261,23 +2155,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -2288,11 +2182,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "min" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2401,7 +2291,7 @@ data: { "id": 504, "type": "row", - "title": "Telemetry Completeness, SonarQube, And Branches", + "title": "Telemetry Completeness And Branches", "gridPos": { "h": 1, "w": 24, @@ -2413,7 +2303,7 @@ data: { "id": 27, "type": "bargauge", - "title": "Missing Tests Metrics by Suite", + "title": "Tests Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2426,7 +2316,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2437,19 +2327,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2483,7 +2385,7 @@ data: { "id": 28, "type": "bargauge", - "title": "Missing Checks Metrics by Suite", + "title": "Checks Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2496,7 +2398,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2507,19 +2409,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2553,7 +2467,7 @@ data: { "id": 29, "type": "bargauge", - "title": "Missing Coverage Metrics by Suite", + "title": "Coverage Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2566,7 +2480,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2577,19 +2491,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2623,7 +2549,7 @@ data: { "id": 30, "type": "bargauge", - "title": "Missing LOC Compliance Metrics by Suite", + "title": "LOC Compliance Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2636,7 +2562,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2647,19 +2573,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2690,337 +2628,10 @@ data: } ] }, - { - "id": 31, - "type": "stat", - "title": "SonarQube API Up", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 0, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_up) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 32, - "type": "stat", - "title": "Sonar Projects (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 4, - "y": 88 - }, - "targets": [ - { - "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 33, - "type": "stat", - "title": "Sonar Gate Fetch Errors", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 8, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 34, - "type": "piechart", - "title": "Sonar Gate Status Mix (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 88 - }, - "targets": [ - { - "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", - "refId": "A", - "legendFormat": "{{status}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "color": { - "mode": "palette-classic" - } - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "list", - "placement": "right" - }, - "pieType": "pie", - "displayLabels": [], - "tooltip": { - "mode": "single" - }, - "colorScheme": "interpolateSpectral", - "colorBy": "value", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - } - }, - { - "id": 35, - "type": "bargauge", - "title": "Projects Failing Sonar Gate", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 88 - }, - "targets": [ - { - "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", - "refId": "A", - "legendFormat": "{{project_key}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "none", - "min": 0, - "max": null, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - } - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, { "id": 148, "type": "bargauge", - "title": "Missing Test-Case Metrics by Suite", + "title": "Test-Case Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3033,7 +2644,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3044,19 +2655,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3090,7 +2713,7 @@ data: { "id": 151, "type": "bargauge", - "title": "No Real Test Cases by Suite", + "title": "Real Test Cases Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3103,7 +2726,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3114,19 +2737,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3191,11 +2826,11 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "red", + "color": "dark-red", "value": 1 } ] @@ -3358,19 +2993,19 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -3500,6 +3135,347 @@ data: ] } ] + }, + { + "id": 505, + "type": "row", + "title": "SonarQube Project Health", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "collapsed": true, + "panels": [ + { + "id": 31, + "type": "stat", + "title": "SonarQube API Up", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 0, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_up) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-red", + "value": null + }, + { + "color": "dark-green", + "value": 1 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 32, + "type": "stat", + "title": "Sonar Projects (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 4, + "y": 111 + }, + "targets": [ + { + "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 33, + "type": "stat", + "title": "Sonar Gate Fetch Errors", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 34, + "type": "piechart", + "title": "Sonar Gate Status Mix (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 111 + }, + "targets": [ + { + "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", + "refId": "A", + "legendFormat": "{{status}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "color": { + "mode": "palette-classic" + } + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "list", + "placement": "right" + }, + "pieType": "pie", + "displayLabels": [], + "tooltip": { + "mode": "single" + }, + "colorScheme": "interpolateSpectral", + "colorBy": "value", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + } + }, + { + "id": 35, + "type": "bargauge", + "title": "Projects Failing Sonar Gate", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 111 + }, + "targets": [ + { + "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", + "refId": "A", + "legendFormat": "{{project_key}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "basic", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + } + ] } ], "time": { diff --git a/services/monitoring/grafana-dashboard-testing.yaml b/services/monitoring/grafana-dashboard-testing.yaml index 1100dc33..321d9ea5 100644 --- a/services/monitoring/grafana-dashboard-testing.yaml +++ b/services/monitoring/grafana-dashboard-testing.yaml @@ -44,23 +44,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -118,23 +118,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -192,19 +192,19 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -261,11 +261,11 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 1 } ] @@ -322,23 +322,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -396,23 +396,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "green", + "color": "dark-green", "value": 0 }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -448,7 +448,7 @@ data: }, "gridPos": { "h": 7, - "w": 8, + "w": 12, "x": 0, "y": 4 }, @@ -472,23 +472,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -531,8 +531,8 @@ data: }, "gridPos": { "h": 7, - "w": 8, - "x": 8, + "w": 12, + "x": 12, "y": 4 }, "targets": [ @@ -555,23 +555,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -614,85 +614,6 @@ data: ], "description": "Rolling CI run success rate. This can stay low after failed/debug runs even when Current Gate Health is green." }, - { - "id": 10, - "type": "bargauge", - "title": "Coverage Gap to 95% by Suite", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 4 - }, - "targets": [ - { - "expr": "sort_desc(clamp_min(95 - ((max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))), 0))", - "refId": "A", - "legendFormat": "{{suite}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 5 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "decimals": 2 - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ], - "description": "Gap from the 95% target. 0 means the suite is at or above target." - }, { "id": 17, "type": "bargauge", @@ -727,23 +648,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -819,23 +740,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -900,13 +821,13 @@ data: }, "gridPos": { "h": 8, - "w": 24, + "w": 12, "x": 0, - "y": 13 + "y": 19 }, "targets": [ { - "expr": "100 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))", + "expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)", "refId": "A", "legendFormat": "{{suite}}" } @@ -948,9 +869,9 @@ data: }, "gridPos": { "h": 8, - "w": 8, - "x": 0, - "y": 21 + "w": 12, + "x": 12, + "y": 19 }, "targets": [ { @@ -962,11 +883,6 @@ data: "refId": "B", "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)", "legendFormat": "Failure" - }, - { - "refId": "C", - "expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])) or on() vector(0)", - "legendFormat": "Total" } ], "fieldConfig": { @@ -978,11 +894,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -999,20 +911,15 @@ data: }, "gridPos": { "h": 8, - "w": 8, - "x": 8, - "y": 21 + "w": 12, + "x": 0, + "y": 27 }, "targets": [ { "refId": "A", - "expr": "max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])", - "legendFormat": "{{suite}} coverage %" - }, - { - "refId": "B", - "expr": "(100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", - "legendFormat": "{{suite}} files <=500 LOC %" + "expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))", + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -1024,11 +931,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -1045,9 +948,9 @@ data: }, "gridPos": { "h": 8, - "w": 8, - "x": 16, - "y": 21 + "w": 12, + "x": 12, + "y": 27 }, "targets": [ { @@ -1116,31 +1019,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 131, @@ -1158,31 +1061,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 132, @@ -1200,31 +1103,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 133, @@ -1242,31 +1145,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 134, @@ -1284,31 +1187,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 135, @@ -1326,31 +1229,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 136, @@ -1368,31 +1271,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result!~\"ok|passed|success|not_applicable|skipped|na|n/a\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1424,31 +1327,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"tests|unit|build\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 139, @@ -1466,31 +1369,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"coverage\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 140, @@ -1508,31 +1411,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"loc|smell\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 141, @@ -1550,31 +1453,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"docs|naming|hygiene|lint|docs_naming|style\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 142, @@ -1592,31 +1495,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"gate|glue|gate_glue\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 143, @@ -1634,31 +1537,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"sonarqube|sonar\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." }, { "id": 144, @@ -1676,31 +1579,31 @@ data: }, "targets": [ { - "expr": "(sum by (suite) (max_over_time(({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"})[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", + "expr": "(sum by (suite) (increase({__name__=~\".*_quality_gate_checks_total\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\",result=~\"ok|passed|success\"}[$__interval]))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))", "refId": "A", "legendFormat": "{{suite}}" } ], "fieldConfig": { "defaults": { - "unit": "none" + "unit": "none", + "min": 0, + "custom": { + "spanNulls": true + } }, "overrides": [] }, "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" } }, - "description": "One line per selected suite. 1 means this check dimension was in that state during the bucket; 0 means the suite reported the dimension and it was not in that state." + "description": "One line per selected suite, counting check events in this state during each bucket. Intervals without runs stay at zero rather than being treated as failures." } ] }, @@ -1725,16 +1628,16 @@ data: "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, + "h": 10, + "w": 24, "x": 0, - "y": 57 + "y": 63 }, "targets": [ { - "expr": "(topk(12, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[$__interval])))) or on() vector(0)", + "expr": "(topk(12, sum by (suite, test) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}))) or on() vector(0)", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}} - {{test}}" } ], "fieldConfig": { @@ -1758,12 +1661,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max", - "sum" - ] + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1877,13 +1775,13 @@ data: }, "gridPos": { "h": 8, - "w": 12, - "x": 12, - "y": 57 + "w": 24, + "x": 0, + "y": 74 }, "targets": [ { - "expr": "sort_desc((topk by (suite) (1, sum by (suite, test, jenkins_job) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", + "expr": "sort_desc((topk by (suite) (1, sum by (suite, test) (increase(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test!=\"__no_test_cases__\",status=\"failed\",exported_job=\"platform-quality-ci\"}[30d])))) or on() vector(0))", "refId": "A", "legendFormat": "{{suite}} \u00b7 {{test}}", "instant": true @@ -1901,19 +1799,19 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -2071,23 +1969,23 @@ data: "h": 8, "w": 12, "x": 0, - "y": 65 + "y": 83 }, "targets": [ { "refId": "A", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval])) or on() vector(0)", - "legendFormat": "passed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"passed\"}) or on() vector(0)", + "legendFormat": "{{suite}} passed" }, { "refId": "B", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"failed\"}[$__interval])) or on() vector(0)", - "legendFormat": "failed \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}) or on() vector(0)", + "legendFormat": "{{suite}} failed" }, { "refId": "C", - "expr": "sum by (suite, test, status, jenkins_job, build_number) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"skipped\"}[$__interval])) or on() vector(0)", - "legendFormat": "skipped \u00b7 {{suite}} \u00b7 #{{build_number}}" + "expr": "sum by (suite) (platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"skipped\"}) or on() vector(0)", + "legendFormat": "{{suite}} skipped" } ], "fieldConfig": { @@ -2111,11 +2009,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "sum" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2231,13 +2125,13 @@ data: "h": 8, "w": 12, "x": 12, - "y": 65 + "y": 83 }, "targets": [ { - "expr": "100 * (sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=\"passed\"}[$__interval]))) / clamp_min((sum by (suite, test) (max_over_time(platform_quality_gate_test_case_result{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",exported_job=\"platform-quality-ci\",status=~\"passed|failed|error|skipped\"}[$__interval]))), 1)", + "expr": "avg by (suite) (platform_quality:test_case_pass_rate:percent_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\",test=~\"${test:regex}\",test!=\"__no_test_cases__\"})", "refId": "A", - "legendFormat": "{{suite}} \u00b7 {{test}}" + "legendFormat": "{{suite}}" } ], "fieldConfig": { @@ -2261,23 +2155,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "dark-red", "value": null }, { - "color": "orange", + "color": "dark-orange", "value": 90 }, { - "color": "yellow", + "color": "dark-yellow", "value": 93 }, { - "color": "green", + "color": "dark-green", "value": 95 }, { - "color": "blue", + "color": "dark-blue", "value": 100 } ] @@ -2288,11 +2182,7 @@ data: "options": { "legend": { "displayMode": "list", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "min" - ] + "placement": "bottom" }, "tooltip": { "mode": "multi" @@ -2401,7 +2291,7 @@ data: { "id": 504, "type": "row", - "title": "Telemetry Completeness, SonarQube, And Branches", + "title": "Telemetry Completeness And Branches", "gridPos": { "h": 1, "w": 24, @@ -2413,7 +2303,7 @@ data: { "id": 27, "type": "bargauge", - "title": "Missing Tests Metrics by Suite", + "title": "Tests Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2426,7 +2316,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2437,19 +2327,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2483,7 +2385,7 @@ data: { "id": 28, "type": "bargauge", - "title": "Missing Checks Metrics by Suite", + "title": "Checks Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2496,7 +2398,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2507,19 +2409,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2553,7 +2467,7 @@ data: { "id": 29, "type": "bargauge", - "title": "Missing Coverage Metrics by Suite", + "title": "Coverage Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2566,7 +2480,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2577,19 +2491,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2623,7 +2549,7 @@ data: { "id": 30, "type": "bargauge", - "title": "Missing LOC Compliance Metrics by Suite", + "title": "LOC Compliance Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -2636,7 +2562,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -2647,19 +2573,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -2690,337 +2628,10 @@ data: } ] }, - { - "id": 31, - "type": "stat", - "title": "SonarQube API Up", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 0, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_up) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 32, - "type": "stat", - "title": "Sonar Projects (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 4, - "y": 88 - }, - "targets": [ - { - "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 33, - "type": "stat", - "title": "Sonar Gate Fetch Errors", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 8, - "y": 88 - }, - "targets": [ - { - "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - } - }, - { - "id": 34, - "type": "piechart", - "title": "Sonar Gate Status Mix (Selected)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 88 - }, - "targets": [ - { - "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", - "refId": "A", - "legendFormat": "{{status}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "color": { - "mode": "palette-classic" - } - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "list", - "placement": "right" - }, - "pieType": "pie", - "displayLabels": [], - "tooltip": { - "mode": "single" - }, - "colorScheme": "interpolateSpectral", - "colorBy": "value", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - } - }, - { - "id": 35, - "type": "bargauge", - "title": "Projects Failing Sonar Gate", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 88 - }, - "targets": [ - { - "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", - "refId": "A", - "legendFormat": "{{project_key}}", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "unit": "none", - "min": 0, - "max": null, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "orange", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - } - }, - "overrides": [] - }, - "options": { - "displayMode": "basic", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, { "id": 148, "type": "bargauge", - "title": "Missing Test-Case Metrics by Suite", + "title": "Test-Case Metrics Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3033,7 +2644,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3044,19 +2655,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3090,7 +2713,7 @@ data: { "id": 151, "type": "bargauge", - "title": "No Real Test Cases by Suite", + "title": "Real Test Cases Present by Suite", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -3103,7 +2726,7 @@ data: }, "targets": [ { - "expr": "sort_desc((((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) unless on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"}))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", + "expr": "sort_desc((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\"))))", "refId": "A", "legendFormat": "{{suite}}", "instant": true @@ -3114,19 +2737,31 @@ data: "color": { "mode": "thresholds" }, - "unit": "none", + "unit": "percent", "min": 0, - "max": null, + "max": 100, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-red", "value": null }, { - "color": "red", - "value": 1 + "color": "dark-orange", + "value": 90 + }, + { + "color": "dark-yellow", + "value": 93 + }, + { + "color": "dark-green", + "value": 95 + }, + { + "color": "dark-blue", + "value": 100 } ] }, @@ -3191,11 +2826,11 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "red", + "color": "dark-red", "value": 1 } ] @@ -3358,19 +2993,19 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "dark-green", "value": null }, { - "color": "yellow", + "color": "dark-yellow", "value": 1 }, { - "color": "orange", + "color": "dark-orange", "value": 3 }, { - "color": "red", + "color": "dark-red", "value": 5 } ] @@ -3500,6 +3135,347 @@ data: ] } ] + }, + { + "id": 505, + "type": "row", + "title": "SonarQube Project Health", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "collapsed": true, + "panels": [ + { + "id": 31, + "type": "stat", + "title": "SonarQube API Up", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 0, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_up) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-red", + "value": null + }, + { + "color": "dark-green", + "value": 1 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 32, + "type": "stat", + "title": "Sonar Projects (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 4, + "y": 111 + }, + "targets": [ + { + "expr": "(count(sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 33, + "type": "stat", + "title": "Sonar Gate Fetch Errors", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 111 + }, + "targets": [ + { + "expr": "(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 34, + "type": "piechart", + "title": "Sonar Gate Status Mix (Selected)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 111 + }, + "targets": [ + { + "expr": "count by (status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})", + "refId": "A", + "legendFormat": "{{status}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "color": { + "mode": "palette-classic" + } + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "list", + "placement": "right" + }, + "pieType": "pie", + "displayLabels": [], + "tooltip": { + "mode": "single" + }, + "colorScheme": "interpolateSpectral", + "colorBy": "value", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + } + }, + { + "id": 35, + "type": "bargauge", + "title": "Projects Failing Sonar Gate", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 111 + }, + "targets": [ + { + "expr": "sort_desc((sort_desc(count by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\",status!~\"OK|ok\"})) or on() label_replace(vector(0), \"project_key\", \"none\", \"__name__\", \".*\")))", + "refId": "A", + "legendFormat": "{{project_key}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + }, + { + "color": "dark-yellow", + "value": 1 + }, + { + "color": "dark-orange", + "value": 3 + }, + { + "color": "dark-red", + "value": 5 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "basic", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + } + ] } ], "time": { diff --git a/services/monitoring/vmalert-atlas-availability.yaml b/services/monitoring/vmalert-atlas-availability.yaml index 09a5cf29..3e82baf3 100644 --- a/services/monitoring/vmalert-atlas-availability.yaml +++ b/services/monitoring/vmalert-atlas-availability.yaml @@ -139,6 +139,34 @@ data: labels: scope: atlas rollup: yearly + platform-quality.yaml: | + groups: + - name: platform.quality + interval: 15m + rules: + - record: platform_quality:test_case_status:count_1h + expr: | + sum by (suite, branch, test, status) ( + max_over_time(platform_quality_gate_test_case_result{job="platform-quality-ci",test!="__no_test_cases__"}[1h]) + ) + labels: + rollup: hourly + - record: platform_quality:test_case_pass_rate:percent_1h + expr: | + 100 * ( + sum by (suite, branch, test) ( + max_over_time(platform_quality_gate_test_case_result{job="platform-quality-ci",test!="__no_test_cases__",status="passed"}[1h]) + ) + ) + / + clamp_min( + sum by (suite, branch, test) ( + max_over_time(platform_quality_gate_test_case_result{job="platform-quality-ci",test!="__no_test_cases__",status=~"passed|failed|error|skipped"}[1h]) + ), + 1 + ) + labels: + rollup: hourly --- @@ -168,7 +196,7 @@ spec: labels: app: vmalert-atlas-availability annotations: - bstein.dev/rules-revision: "2026-05-10-availability-rollup-v6" + bstein.dev/rules-revision: "2026-05-15-platform-quality-rollups-v1" spec: serviceAccountName: vmalert-atlas-availability affinity: