2025-12-14 14:15:19 -03:00
|
|
|
import importlib.util
|
|
|
|
|
import pathlib
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def load_module():
|
|
|
|
|
path = pathlib.Path(__file__).resolve().parents[1] / "dashboards_render_atlas.py"
|
2026-04-22 15:31:36 -03:00
|
|
|
spec = importlib.util.spec_from_file_location("scripts.dashboards_render_atlas", path)
|
2025-12-14 14:15:19 -03:00
|
|
|
module = importlib.util.module_from_spec(spec)
|
|
|
|
|
assert spec.loader is not None
|
|
|
|
|
spec.loader.exec_module(module)
|
|
|
|
|
return module
|
|
|
|
|
|
|
|
|
|
|
2026-04-22 16:56:52 -03:00
|
|
|
def flatten_panels(panels):
|
|
|
|
|
flat = []
|
|
|
|
|
for panel in panels:
|
|
|
|
|
flat.append(panel)
|
|
|
|
|
flat.extend(panel.get("panels", []))
|
|
|
|
|
return flat
|
|
|
|
|
|
|
|
|
|
|
2025-12-14 14:15:19 -03:00
|
|
|
def test_table_panel_options_and_filterable():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
panel = mod.table_panel(
|
|
|
|
|
1,
|
|
|
|
|
"test",
|
|
|
|
|
"metric",
|
|
|
|
|
{"h": 1, "w": 1, "x": 0, "y": 0},
|
|
|
|
|
unit="percent",
|
|
|
|
|
transformations=[{"id": "labelsToFields", "options": {}}],
|
|
|
|
|
instant=True,
|
|
|
|
|
options={"showColumnFilters": False},
|
|
|
|
|
filterable=False,
|
|
|
|
|
footer={"show": False, "fields": "", "calcs": []},
|
|
|
|
|
format="table",
|
|
|
|
|
)
|
|
|
|
|
assert panel["fieldConfig"]["defaults"]["unit"] == "percent"
|
|
|
|
|
assert panel["fieldConfig"]["defaults"]["custom"]["filterable"] is False
|
|
|
|
|
assert panel["options"]["showHeader"] is True
|
|
|
|
|
assert panel["targets"][0]["format"] == "table"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_node_filter_and_expr_helpers():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
expr = mod.node_filter("titan-.*")
|
|
|
|
|
assert "label_replace" in expr
|
|
|
|
|
cpu_expr = mod.node_cpu_expr("titan-.*")
|
|
|
|
|
mem_expr = mod.node_mem_expr("titan-.*")
|
|
|
|
|
assert "node_cpu_seconds_total" in cpu_expr
|
|
|
|
|
assert "node_memory_MemAvailable_bytes" in mem_expr
|
|
|
|
|
|
|
|
|
|
|
2026-05-10 15:40:12 -03:00
|
|
|
def test_overview_availability_panel_uses_recorded_365d_rollup():
|
2026-05-10 14:40:55 -03:00
|
|
|
mod = load_module()
|
|
|
|
|
dashboard = mod.build_overview()
|
|
|
|
|
panel = next(panel for panel in flatten_panels(dashboard["panels"]) if panel["id"] == 27)
|
|
|
|
|
|
2026-05-10 15:40:12 -03:00
|
|
|
assert panel["title"] == "Atlas Availability (365d)"
|
2026-05-15 22:07:41 -03:00
|
|
|
assert panel["targets"][0]["expr"] == 'last_over_time(atlas:availability:ratio_365d{scope="atlas"}[24h])'
|
2026-05-10 14:40:55 -03:00
|
|
|
assert panel["targets"][0]["instant"] is True
|
2026-05-10 15:40:12 -03:00
|
|
|
assert "precomputed" in panel["description"]
|
2026-05-15 22:07:41 -03:00
|
|
|
assert "last successful rollup for up to 24h" in panel["description"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_overview_uses_readable_quality_power_and_gitops_panels():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
dashboard = mod.build_overview()
|
|
|
|
|
panels_by_title = {panel["title"]: panel for panel in flatten_panels(dashboard["panels"])}
|
|
|
|
|
|
2026-05-16 02:56:52 -03:00
|
|
|
assert dashboard["links"] == [
|
2026-05-16 05:08:09 -03:00
|
|
|
{"title": "Atlas Testing", "url": "/d/atlas-testing", "targetBlank": True}
|
2026-05-16 02:56:52 -03:00
|
|
|
]
|
2026-05-16 03:04:27 -03:00
|
|
|
assert "atlas-jobs" not in repr(dashboard)
|
2026-05-15 22:07:41 -03:00
|
|
|
assert "Platform Test Success Rate" not in panels_by_title
|
2026-05-16 05:08:09 -03:00
|
|
|
assert panels_by_title["Gate Checks Passing by Suite"]["type"] == "state-timeline"
|
|
|
|
|
assert panels_by_title["Gate Checks Passing by Suite"]["gridPos"] == {"h": 6, "w": 6, "x": 15, "y": 13}
|
|
|
|
|
assert panels_by_title["Gate Checks Passing by Suite"]["targets"][0]["legendFormat"] == "{{suite}}"
|
2026-05-16 03:31:04 -03:00
|
|
|
assert panels_by_title["UPS History (Power Draw)"]["gridPos"] == {"h": 6, "w": 6, "x": 3, "y": 7}
|
|
|
|
|
assert panels_by_title["Ariadne Run Volume"]["gridPos"] == {"h": 6, "w": 6, "x": 9, "y": 7}
|
|
|
|
|
assert panels_by_title["Pyrphoros UPS Current"]["gridPos"]["w"] == 3
|
|
|
|
|
assert panels_by_title["Current Enclosure Climate"]["gridPos"]["w"] == 3
|
2026-05-16 05:58:59 -03:00
|
|
|
assert panels_by_title["UPS History (Power Draw)"]["options"]["legend"]["placement"] == "bottom"
|
2026-05-16 06:11:22 -03:00
|
|
|
assert panels_by_title["UPS History (Power Draw)"]["options"]["legend"]["displayMode"] == "list"
|
|
|
|
|
assert panels_by_title["UPS History (Power Draw)"]["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "line"
|
|
|
|
|
assert panels_by_title["UPS History (Power Draw)"]["fieldConfig"]["defaults"]["custom"]["fillOpacity"] == 18
|
2026-05-16 05:08:09 -03:00
|
|
|
ups_overrides = panels_by_title["UPS History (Power Draw)"]["fieldConfig"]["overrides"]
|
2026-05-16 05:18:53 -03:00
|
|
|
ups_override_by_name = {override["matcher"]["options"]: override for override in ups_overrides}
|
|
|
|
|
assert ups_override_by_name["Pyrphoros"]["properties"] == [
|
|
|
|
|
{"id": "color", "value": {"mode": "fixed", "fixedColor": "dark-blue"}},
|
|
|
|
|
]
|
|
|
|
|
assert ups_override_by_name["Statera"]["properties"] == [
|
|
|
|
|
{"id": "color", "value": {"mode": "fixed", "fixedColor": "dark-yellow"}},
|
|
|
|
|
]
|
2026-05-15 22:07:41 -03:00
|
|
|
assert panels_by_title["Ariadne Run Volume"]["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "bars"
|
2026-05-16 05:58:59 -03:00
|
|
|
assert panels_by_title["Ariadne Run Volume"]["options"]["legend"]["placement"] == "bottom"
|
|
|
|
|
assert panels_by_title["Ariadne Run Volume"]["options"]["legend"]["displayMode"] == "list"
|
2026-05-16 05:08:09 -03:00
|
|
|
assert "Fan History (0-10)" not in panels_by_title
|
|
|
|
|
assert panels_by_title["Fan Intensity History"]["type"] == "state-timeline"
|
|
|
|
|
assert panels_by_title["Fan Intensity History"]["gridPos"] == {"h": 6, "w": 6, "x": 9, "y": 13}
|
|
|
|
|
assert panels_by_title["Fan Intensity History"]["fieldConfig"]["defaults"]["max"] == 10
|
|
|
|
|
assert panels_by_title["Fan Intensity History"]["targets"][0]["legendFormat"] == "{{fan}}"
|
2026-05-16 05:18:53 -03:00
|
|
|
fan_steps = panels_by_title["Fan Intensity History"]["fieldConfig"]["defaults"]["thresholds"]["steps"]
|
2026-05-16 05:34:24 -03:00
|
|
|
assert [step["value"] for step in fan_steps] == [None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|
|
|
|
assert fan_steps[0]["color"] == "#1f60c4"
|
|
|
|
|
assert fan_steps[5]["color"] == "#d4b106"
|
|
|
|
|
assert fan_steps[-1]["color"] == "#8f1d1d"
|
2026-05-16 06:11:22 -03:00
|
|
|
assert panels_by_title["Fan Intensity History"]["options"]["legend"]["displayMode"] == "list"
|
|
|
|
|
assert panels_by_title["Fan Intensity History"]["options"]["mergeValues"] is False
|
|
|
|
|
assert panels_by_title["Fan Intensity History"]["options"]["showValue"] == "auto"
|
2026-05-15 22:07:41 -03:00
|
|
|
|
2026-05-15 22:43:44 -03:00
|
|
|
assert panels_by_title["Flux Source"]["type"] == "stat"
|
2026-05-16 03:31:04 -03:00
|
|
|
assert panels_by_title["Flux Source"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 7}
|
2026-05-16 02:21:05 -03:00
|
|
|
assert panels_by_title["Flux Source"]["targets"][0]["legendFormat"] == "{{branch}}"
|
2026-05-16 03:31:04 -03:00
|
|
|
assert panels_by_title["Run Reliability (24h)"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 9}
|
|
|
|
|
assert panels_by_title["Fresh Suites (24h)"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 13}
|
|
|
|
|
assert panels_by_title["LOC Clean Suites"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 17}
|
2026-05-16 05:08:09 -03:00
|
|
|
assert panels_by_title["GitOps Health"]["type"] == "state-timeline"
|
|
|
|
|
assert panels_by_title["GitOps Health"]["gridPos"] == {"h": 6, "w": 6, "x": 15, "y": 7}
|
2026-05-16 02:21:05 -03:00
|
|
|
gitops_expr = panels_by_title["GitOps Health"]["targets"][0]["expr"]
|
|
|
|
|
assert "Kustomizations Not Suspended" in gitops_expr
|
|
|
|
|
assert "HelmReleases Not Suspended" in gitops_expr
|
2026-05-16 05:18:53 -03:00
|
|
|
assert panels_by_title["Gate Checks Passing by Suite"]["options"]["legend"]["displayMode"] == "hidden"
|
2026-05-16 06:11:22 -03:00
|
|
|
assert panels_by_title["Gate Checks Passing by Suite"]["options"]["mergeValues"] is False
|
|
|
|
|
assert panels_by_title["Gate Checks Passing by Suite"]["options"]["showValue"] == "auto"
|
2026-05-16 05:34:24 -03:00
|
|
|
assert "rowHeight" not in panels_by_title["Gate Checks Passing by Suite"]["options"]
|
2026-05-10 14:40:55 -03:00
|
|
|
|
2026-05-16 05:08:09 -03:00
|
|
|
pvc_backup_expr = panels_by_title["PVC Backup Health / Age"]["targets"][0]["expr"]
|
|
|
|
|
assert "backup-telemetry-missing" in pvc_backup_expr
|
|
|
|
|
assert 'pvc_backup_(count|last_success_timestamp_seconds|health_reason)' in pvc_backup_expr
|
|
|
|
|
|
2026-05-16 05:58:59 -03:00
|
|
|
gpu_expr = panels_by_title["Namespace GPU Share"]["targets"][0]["expr"]
|
|
|
|
|
assert 'resource=~"nvidia(_com_|[.]com/)gpu.*"' in gpu_expr
|
|
|
|
|
assert "/ on(node) group_left() clamp_min" in gpu_expr
|
|
|
|
|
assert "kube_node_status_allocatable" in gpu_expr
|
|
|
|
|
assert "kube_node_labels" not in gpu_expr
|
|
|
|
|
|
2026-05-10 14:40:55 -03:00
|
|
|
|
2025-12-14 14:15:19 -03:00
|
|
|
def test_render_configmap_writes(tmp_path):
|
|
|
|
|
mod = load_module()
|
|
|
|
|
mod.DASHBOARD_DIR = tmp_path / "dash"
|
|
|
|
|
mod.ROOT = tmp_path
|
|
|
|
|
uid = "atlas-test"
|
|
|
|
|
info = {"configmap": tmp_path / "cm.yaml"}
|
|
|
|
|
data = {"title": "Atlas Test"}
|
|
|
|
|
mod.write_json(uid, data)
|
|
|
|
|
mod.render_configmap(uid, info)
|
|
|
|
|
json_path = mod.DASHBOARD_DIR / f"{uid}.json"
|
|
|
|
|
assert json_path.exists()
|
|
|
|
|
content = (tmp_path / "cm.yaml").read_text()
|
|
|
|
|
assert "kind: ConfigMap" in content
|
|
|
|
|
assert f"{uid}.json" in content
|
2026-04-22 15:31:36 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_testing_suite_variable_uses_canonical_values_only():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
variable = mod.testing_suite_variable()
|
|
|
|
|
canonical_matcher = "|".join(mod.PLATFORM_TEST_SUITE_NAMES)
|
|
|
|
|
legacy_names = {"bstein-home", "data-prepper", "titan-iac", "pegasus-health"}
|
|
|
|
|
|
|
|
|
|
assert variable["allValue"] == canonical_matcher
|
|
|
|
|
assert not any(alias in variable["query"] for alias in legacy_names)
|
|
|
|
|
assert not any(alias in variable["allValue"] for alias in legacy_names)
|
|
|
|
|
assert [option["value"] for option in variable["options"]] == mod.PLATFORM_TEST_SUITE_NAMES
|
|
|
|
|
|
|
|
|
|
|
2026-05-16 02:56:52 -03:00
|
|
|
def test_testing_dashboard_is_public_but_jobs_dashboard_remains_internal():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
jobs = mod.build_jobs_dashboard()
|
|
|
|
|
testing = mod.build_testing_dashboard()
|
|
|
|
|
|
|
|
|
|
assert jobs["folderUid"] == mod.PRIVATE_FOLDER
|
|
|
|
|
assert jobs["editable"] is True
|
|
|
|
|
assert testing["uid"] == "atlas-testing"
|
|
|
|
|
assert testing["folderUid"] == mod.PUBLIC_DASHBOARD_FOLDER
|
|
|
|
|
assert testing["editable"] is False
|
|
|
|
|
|
|
|
|
|
|
2026-04-22 15:31:36 -03:00
|
|
|
def test_jobs_dashboard_separates_current_gate_health_from_reliability():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
dashboard = mod.build_jobs_dashboard()
|
2026-04-22 16:56:52 -03:00
|
|
|
panels_by_title = {panel["title"]: panel for panel in flatten_panels(dashboard["panels"])}
|
2026-04-22 15:31:36 -03:00
|
|
|
|
|
|
|
|
assert "Current Gate Health by Suite" in panels_by_title
|
|
|
|
|
assert "Run Reliability by Suite (24h)" in panels_by_title
|
2026-05-15 20:00:40 -03:00
|
|
|
assert "Run Reliability by Suite (7d rolling)" in panels_by_title
|
|
|
|
|
assert "Daily Run Volume (Selected Scope)" in panels_by_title
|
|
|
|
|
assert "Coverage History by Suite" in panels_by_title
|
|
|
|
|
assert "Files <=500 LOC History by Suite" in panels_by_title
|
|
|
|
|
assert "Run Reliability History by Suite" not in panels_by_title
|
|
|
|
|
assert "Coverage & LOC Compliance History" not in panels_by_title
|
|
|
|
|
assert "Run Status Mix (30d)" not in panels_by_title
|
2026-04-22 15:31:36 -03:00
|
|
|
assert "Failures by Suite (24h)" not in panels_by_title
|
|
|
|
|
assert "Success Rate by Suite (24h)" not in panels_by_title
|
|
|
|
|
|
|
|
|
|
current_gate_expr = panels_by_title["Current Gate Health by Suite"]["targets"][0]["expr"]
|
|
|
|
|
assert 'check)' in current_gate_expr
|
|
|
|
|
assert 'result=~"ok|passed|success|not_applicable|skipped|na|n/a"' in current_gate_expr
|
|
|
|
|
|
|
|
|
|
reliability_panel = panels_by_title["Run Reliability by Suite (24h)"]
|
|
|
|
|
reliability_expr = reliability_panel["targets"][0]["expr"]
|
|
|
|
|
assert "platform_quality_gate_runs_total" in reliability_expr
|
|
|
|
|
assert "> 0" in reliability_expr
|
|
|
|
|
assert "- 1" in reliability_expr
|
|
|
|
|
assert reliability_panel["fieldConfig"]["defaults"]["mappings"] == [
|
|
|
|
|
{"type": "value", "options": {"-1": {"text": "no runs"}}}
|
|
|
|
|
]
|
2026-04-22 16:56:52 -03:00
|
|
|
|
2026-05-15 20:00:40 -03:00
|
|
|
rolling_panel = panels_by_title["Run Reliability by Suite (7d rolling)"]
|
|
|
|
|
assert rolling_panel["type"] == "state-timeline"
|
|
|
|
|
assert "[7d]" in rolling_panel["targets"][0]["expr"]
|
|
|
|
|
|
|
|
|
|
coverage_panel = panels_by_title["Coverage History by Suite"]
|
|
|
|
|
loc_panel = panels_by_title["Files <=500 LOC History by Suite"]
|
|
|
|
|
assert coverage_panel["type"] == "state-timeline"
|
|
|
|
|
assert loc_panel["type"] == "state-timeline"
|
|
|
|
|
assert coverage_panel["targets"][0]["expr"] != loc_panel["targets"][0]["expr"]
|
|
|
|
|
|
|
|
|
|
run_volume_panel = panels_by_title["Daily Run Volume (Selected Scope)"]
|
|
|
|
|
assert run_volume_panel["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "bars"
|
|
|
|
|
assert "[$__interval]" not in run_volume_panel["targets"][0]["expr"]
|
|
|
|
|
|
2026-04-22 16:56:52 -03:00
|
|
|
|
2026-05-11 01:01:46 -03:00
|
|
|
def test_jobs_dashboard_bar_gauges_use_solid_threshold_colors():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
dashboard = mod.build_jobs_dashboard()
|
|
|
|
|
panels = flatten_panels(dashboard["panels"])
|
|
|
|
|
bar_gauges = [panel for panel in panels if panel["type"] == "bargauge"]
|
|
|
|
|
|
|
|
|
|
assert bar_gauges
|
|
|
|
|
assert all(panel["options"]["displayMode"] == "basic" for panel in bar_gauges)
|
|
|
|
|
assert all(
|
|
|
|
|
panel["fieldConfig"]["defaults"]["color"]["mode"] == "thresholds"
|
|
|
|
|
for panel in bar_gauges
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
reliability_panel = next(
|
|
|
|
|
panel for panel in panels if panel["title"] == "Run Reliability by Suite (24h)"
|
|
|
|
|
)
|
|
|
|
|
threshold_steps = reliability_panel["fieldConfig"]["defaults"]["thresholds"]["steps"]
|
|
|
|
|
|
2026-05-15 14:26:06 -03:00
|
|
|
assert {"color": "dark-yellow", "value": 93} in threshold_steps
|
|
|
|
|
assert {"color": "dark-blue", "value": 100} in threshold_steps
|
2026-05-11 01:01:46 -03:00
|
|
|
|
|
|
|
|
|
2026-04-22 16:56:52 -03:00
|
|
|
def test_jobs_dashboard_collapses_heavy_drilldowns_for_light_first_paint():
|
|
|
|
|
mod = load_module()
|
|
|
|
|
dashboard = mod.build_jobs_dashboard()
|
|
|
|
|
panels = dashboard["panels"]
|
|
|
|
|
rows = [panel for panel in panels if panel["type"] == "row"]
|
|
|
|
|
visible_query_panels = [panel for panel in panels if panel["type"] != "row"]
|
|
|
|
|
nested_panels_by_title = {
|
|
|
|
|
child["title"]: child
|
|
|
|
|
for row in rows
|
|
|
|
|
for child in row.get("panels", [])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert len(panels) == 16
|
2026-05-15 14:26:06 -03:00
|
|
|
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
|
|
|
|
|
)
|
2026-04-22 16:56:52 -03:00
|
|
|
assert [row["title"] for row in rows] == [
|
|
|
|
|
"Reliability And Run History",
|
2026-05-15 19:52:46 -03:00
|
|
|
"Check Failure Rates By Suite",
|
|
|
|
|
"Check Healthy Rates By Suite",
|
2026-04-22 16:56:52 -03:00
|
|
|
"Test Drilldowns And Problem Tests",
|
2026-05-15 14:26:06 -03:00
|
|
|
"Telemetry Completeness And Branches",
|
|
|
|
|
"SonarQube Project Health",
|
2026-04-22 16:56:52 -03:00
|
|
|
]
|
|
|
|
|
assert all(row["collapsed"] for row in rows)
|
|
|
|
|
|
2026-05-15 19:52:46 -03:00
|
|
|
assert "Coverage Failure Rate" in nested_panels_by_title
|
|
|
|
|
assert "Supply Chain Healthy Rate" in nested_panels_by_title
|
2026-04-22 16:56:52 -03:00
|
|
|
assert "Selected Test Pass Rate History" in nested_panels_by_title
|
2026-05-15 14:26:06 -03:00
|
|
|
assert "Coverage Metrics Present by Suite" in nested_panels_by_title
|
2026-04-22 16:56:52 -03:00
|
|
|
assert "SonarQube API Up" in nested_panels_by_title
|
2026-05-15 19:52:46 -03:00
|
|
|
|
|
|
|
|
failure_rate_panel = nested_panels_by_title["Coverage Failure Rate"]
|
2026-05-15 21:05:13 -03:00
|
|
|
assert failure_rate_panel["type"] == "state-timeline"
|
2026-05-15 19:52:46 -03:00
|
|
|
assert failure_rate_panel["fieldConfig"]["defaults"]["unit"] == "percent"
|
|
|
|
|
assert failure_rate_panel["fieldConfig"]["defaults"]["max"] == 100
|
2026-05-15 22:43:44 -03:00
|
|
|
assert failure_rate_panel["fieldConfig"]["defaults"]["thresholds"]["steps"][0]["color"] == "dark-blue"
|
2026-05-15 19:52:46 -03:00
|
|
|
assert "increase(" not in failure_rate_panel["targets"][0]["expr"]
|
2026-05-15 22:07:41 -03:00
|
|
|
assert "0 *" in failure_rate_panel["targets"][0]["expr"]
|
2026-05-16 02:21:05 -03:00
|
|
|
assert "and on(suite)" not in failure_rate_panel["targets"][0]["expr"]
|
2026-05-15 19:52:46 -03:00
|
|
|
|
|
|
|
|
pass_rate_panel = nested_panels_by_title["Selected Test Pass Rate History"]
|
2026-05-15 21:05:13 -03:00
|
|
|
assert pass_rate_panel["type"] == "state-timeline"
|
|
|
|
|
assert "platform_quality:test_case_pass_rate:percent_1h" in pass_rate_panel["targets"][0]["expr"]
|
|
|
|
|
assert "platform_quality_gate_test_case_result" not in pass_rate_panel["targets"][0]["expr"]
|
|
|
|
|
|
|
|
|
|
pass_fail_panel = nested_panels_by_title["Selected Test Pass/Fail History"]
|
|
|
|
|
assert pass_fail_panel["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "bars"
|
|
|
|
|
assert all(
|
|
|
|
|
"platform_quality:test_case_status:count_1h" in target["expr"]
|
|
|
|
|
for target in pass_fail_panel["targets"]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
problematic_panel = nested_panels_by_title["Problematic Tests Over Time (Top failures)"]
|
|
|
|
|
assert problematic_panel["type"] == "state-timeline"
|
2026-05-15 22:07:41 -03:00
|
|
|
assert problematic_panel["gridPos"]["w"] == 24
|
2026-05-15 21:05:13 -03:00
|
|
|
assert 'test!=""' in problematic_panel["targets"][0]["expr"]
|
|
|
|
|
assert "vector(0)" not in problematic_panel["targets"][0]["expr"]
|
|
|
|
|
|
|
|
|
|
sonar_mix_panel = nested_panels_by_title["Sonar Gate Status Mix (Selected)"]
|
2026-05-15 22:07:41 -03:00
|
|
|
sonar_health_panel = nested_panels_by_title["Sonar Gate Health by Project"]
|
2026-05-15 21:05:13 -03:00
|
|
|
assert sonar_mix_panel["gridPos"]["w"] == 4
|
2026-05-15 22:07:41 -03:00
|
|
|
assert sonar_health_panel["gridPos"]["w"] == 8
|
|
|
|
|
assert sonar_health_panel["type"] == "state-timeline"
|
|
|
|
|
assert "100 * max by (project_key)" in sonar_health_panel["targets"][0]["expr"]
|
|
|
|
|
|
|
|
|
|
branch_panel = nested_panels_by_title["Primary Branch Clean by Suite (30d)"]
|
|
|
|
|
assert branch_panel["fieldConfig"]["defaults"]["unit"] == "percent"
|
|
|
|
|
assert "unless on(suite)" in branch_panel["targets"][0]["expr"]
|
|
|
|
|
assert "> bool 0" in branch_panel["targets"][0]["expr"]
|