diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index b34d70a1..6ee85e20 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -474,11 +474,33 @@ PLATFORM_TEST_SUCCESS_RATE_ANANKE_SERIES = ( f'100 * ({ANANKE_SUITE_OK_INTERVAL}) / clamp_min(({ANANKE_SUITE_TOTAL_INTERVAL}), 1)' ) +PLATFORM_TEST_GENERIC_SUITE_NAMES = [ + "atlasbot", + "lesavka", + "pegasus", + "soteria", + "titan-iac", + "bstein-home", + "arcanagon", +] +PLATFORM_TEST_GENERIC_SUITE_TARGETS = [ + { + "refId": chr(ord("D") + index), + "expr": ( + f'100 * (sum(increase(platform_quality_gate_runs_total{{suite="{suite}",status=~"ok|passed|success"}}' + f'[{PLATFORM_TEST_ROLLING_WINDOW}]))) / ' + f'clamp_min((sum(increase(platform_quality_gate_runs_total{{suite="{suite}"}}[{PLATFORM_TEST_ROLLING_WINDOW}]))), 1)' + ), + "legendFormat": suite, + } + for index, suite in enumerate(PLATFORM_TEST_GENERIC_SUITE_NAMES) +] + PLATFORM_TEST_SUCCESS_RATE_SUITE_TARGETS = [ {"refId": "A", "expr": PLATFORM_TEST_SUCCESS_RATE_ARIADNE_SERIES, "legendFormat": "ariadne"}, {"refId": "B", "expr": PLATFORM_TEST_SUCCESS_RATE_METIS_SERIES, "legendFormat": "metis"}, {"refId": "C", "expr": PLATFORM_TEST_SUCCESS_RATE_ANANKE_SERIES, "legendFormat": "ananke"}, -] +] + PLATFORM_TEST_GENERIC_SUITE_TARGETS ANANKE_SELECTOR = 'job="ananke-power"' ANANKE_UPS_DB_NAME = "Pyrphoros" ANANKE_UPS_DB_NODE = "titan-db" @@ -1510,7 +1532,7 @@ def build_overview(): test_success["fieldConfig"]["defaults"]["min"] = 0 test_success["fieldConfig"]["defaults"]["max"] = 100 test_success["description"] = ( - "Application-level rolling pass rate (0-100) over the last 30 days. One line per suite (ariadne, metis, ananke)." + "Application-level rolling pass rate (0-100) over the last 30 days. Includes Ariadne/Metis/Ananke and auto-picks additional suite lines when platform_quality_gate_runs_total is emitted." ) panels.append(test_success) test_failures = stat_panel( @@ -2989,7 +3011,7 @@ def build_jobs_dashboard(): suite_panel["fieldConfig"]["defaults"]["min"] = 0 suite_panel["fieldConfig"]["defaults"]["max"] = 100 suite_panel["description"] = ( - "Application-level rolling pass percentage over the last 30 days. One series per suite: ariadne, metis, ananke." + "Application-level rolling pass percentage over the last 30 days. Existing suites: ariadne, metis, ananke; additional suites appear automatically when platform_quality_gate_runs_total is published." ) panels.append(suite_panel) diff --git a/services/monitoring/dashboards/atlas-jobs.json b/services/monitoring/dashboards/atlas-jobs.json index 492e0574..aded6768 100644 --- a/services/monitoring/dashboards/atlas-jobs.json +++ b/services/monitoring/dashboards/atlas-jobs.json @@ -1265,6 +1265,41 @@ "refId": "C", "expr": "100 * (sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\",status=\"ok\"}[30d]))) / clamp_min((sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\"}[30d]))), 1)", "legendFormat": "ananke" + }, + { + "refId": "D", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[30d]))), 1)", + "legendFormat": "atlasbot" + }, + { + "refId": "E", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[30d]))), 1)", + "legendFormat": "lesavka" + }, + { + "refId": "F", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[30d]))), 1)", + "legendFormat": "pegasus" + }, + { + "refId": "G", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"soteria\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[30d]))), 1)", + "legendFormat": "soteria" + }, + { + "refId": "H", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[30d]))), 1)", + "legendFormat": "titan-iac" + }, + { + "refId": "I", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[30d]))), 1)", + "legendFormat": "bstein-home" + }, + { + "refId": "J", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[30d]))), 1)", + "legendFormat": "arcanagon" } ], "fieldConfig": { @@ -1284,7 +1319,7 @@ "mode": "multi" } }, - "description": "Application-level rolling pass percentage over the last 30 days. One series per suite: ariadne, metis, ananke." + "description": "Application-level rolling pass percentage over the last 30 days. Existing suites: ariadne, metis, ananke; additional suites appear automatically when platform_quality_gate_runs_total is published." } ], "time": { diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index fad82534..85e212fa 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -1832,6 +1832,41 @@ "refId": "C", "expr": "100 * (sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\",status=\"ok\"}[30d]))) / clamp_min((sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\"}[30d]))), 1)", "legendFormat": "ananke" + }, + { + "refId": "D", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[30d]))), 1)", + "legendFormat": "atlasbot" + }, + { + "refId": "E", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[30d]))), 1)", + "legendFormat": "lesavka" + }, + { + "refId": "F", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[30d]))), 1)", + "legendFormat": "pegasus" + }, + { + "refId": "G", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"soteria\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[30d]))), 1)", + "legendFormat": "soteria" + }, + { + "refId": "H", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[30d]))), 1)", + "legendFormat": "titan-iac" + }, + { + "refId": "I", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[30d]))), 1)", + "legendFormat": "bstein-home" + }, + { + "refId": "J", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[30d]))), 1)", + "legendFormat": "arcanagon" } ], "fieldConfig": { @@ -1861,7 +1896,7 @@ "targetBlank": true } ], - "description": "Application-level rolling pass rate (0-100) over the last 30 days. One line per suite (ariadne, metis, ananke)." + "description": "Application-level rolling pass rate (0-100) over the last 30 days. Includes Ariadne/Metis/Ananke and auto-picks additional suite lines when platform_quality_gate_runs_total is emitted." }, { "id": 47, diff --git a/services/monitoring/grafana-dashboard-jobs.yaml b/services/monitoring/grafana-dashboard-jobs.yaml index a7979509..f1a49b3e 100644 --- a/services/monitoring/grafana-dashboard-jobs.yaml +++ b/services/monitoring/grafana-dashboard-jobs.yaml @@ -1274,6 +1274,41 @@ data: "refId": "C", "expr": "100 * (sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\",status=\"ok\"}[30d]))) / clamp_min((sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\"}[30d]))), 1)", "legendFormat": "ananke" + }, + { + "refId": "D", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[30d]))), 1)", + "legendFormat": "atlasbot" + }, + { + "refId": "E", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[30d]))), 1)", + "legendFormat": "lesavka" + }, + { + "refId": "F", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[30d]))), 1)", + "legendFormat": "pegasus" + }, + { + "refId": "G", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"soteria\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[30d]))), 1)", + "legendFormat": "soteria" + }, + { + "refId": "H", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[30d]))), 1)", + "legendFormat": "titan-iac" + }, + { + "refId": "I", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[30d]))), 1)", + "legendFormat": "bstein-home" + }, + { + "refId": "J", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[30d]))), 1)", + "legendFormat": "arcanagon" } ], "fieldConfig": { @@ -1293,7 +1328,7 @@ data: "mode": "multi" } }, - "description": "Application-level rolling pass percentage over the last 30 days. One series per suite: ariadne, metis, ananke." + "description": "Application-level rolling pass percentage over the last 30 days. Existing suites: ariadne, metis, ananke; additional suites appear automatically when platform_quality_gate_runs_total is published." } ], "time": { diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index a803c9a3..ac10331c 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -1841,6 +1841,41 @@ data: "refId": "C", "expr": "100 * (sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\",status=\"ok\"}[30d]))) / clamp_min((sum(increase(ananke_quality_gate_runs_total{suite=\"ananke\"}[30d]))), 1)", "legendFormat": "ananke" + }, + { + "refId": "D", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[30d]))), 1)", + "legendFormat": "atlasbot" + }, + { + "refId": "E", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[30d]))), 1)", + "legendFormat": "lesavka" + }, + { + "refId": "F", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[30d]))), 1)", + "legendFormat": "pegasus" + }, + { + "refId": "G", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"soteria\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[30d]))), 1)", + "legendFormat": "soteria" + }, + { + "refId": "H", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[30d]))), 1)", + "legendFormat": "titan-iac" + }, + { + "refId": "I", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[30d]))), 1)", + "legendFormat": "bstein-home" + }, + { + "refId": "J", + "expr": "100 * (sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\",status=~\"ok|passed|success\"}[30d]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[30d]))), 1)", + "legendFormat": "arcanagon" } ], "fieldConfig": { @@ -1870,7 +1905,7 @@ data: "targetBlank": true } ], - "description": "Application-level rolling pass rate (0-100) over the last 30 days. One line per suite (ariadne, metis, ananke)." + "description": "Application-level rolling pass rate (0-100) over the last 30 days. Includes Ariadne/Metis/Ananke and auto-picks additional suite lines when platform_quality_gate_runs_total is emitted." }, { "id": 47,