222 lines
12 KiB
Python
222 lines
12 KiB
Python
"""Atlas overview dashboard rendering contracts."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from test_dashboard_render_support import (
|
|
flatten_panels,
|
|
load_module,
|
|
)
|
|
|
|
|
|
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 "clamp_max(clamp_min(" in cpu_expr
|
|
assert "* 100, 0), 100)" in cpu_expr
|
|
assert "node_memory_MemAvailable_bytes" in mem_expr
|
|
|
|
def test_overview_availability_panel_uses_recorded_365d_rollup():
|
|
mod = load_module()
|
|
dashboard = mod.build_overview()
|
|
panel = next(panel for panel in flatten_panels(dashboard["panels"]) if panel["id"] == 27)
|
|
|
|
assert panel["title"] == "Atlas Availability (365d)"
|
|
availability_expr = panel["targets"][0]["expr"]
|
|
assert (
|
|
'last_over_time(atlas:availability:ratio_365d{scope="atlas",definition="request-v4"}[48h])'
|
|
in availability_expr
|
|
)
|
|
assert 'code=~"5.."' in availability_expr
|
|
assert 'code=~"[1-5].."' in availability_expr
|
|
assert "atlas:availability:failures_1d" not in availability_expr
|
|
assert "atlas:availability:requests_1d" not in availability_expr
|
|
assert "sum_over_time" not in availability_expr
|
|
assert "kube_node_status_condition" not in availability_expr
|
|
assert "kube_deployment_status_replicas_available" not in availability_expr
|
|
assert panel["targets"][0]["instant"] is True
|
|
assert "Every server-side 5xx" in panel["description"]
|
|
assert "Replica counts, Grafana health" in panel["description"]
|
|
assert "daily rollup job publishes one annual sample" in panel["description"]
|
|
assert "keeps it for up to 48 hours" 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"])}
|
|
|
|
assert dashboard["links"] == [
|
|
{"title": "Atlas Testing", "url": "/d/atlas-testing", "targetBlank": True}
|
|
]
|
|
assert "atlas-jobs" not in repr(dashboard)
|
|
assert "Platform Test Success Rate" not in panels_by_title
|
|
assert panels_by_title["Test Category Health"]["type"] == "state-timeline"
|
|
assert panels_by_title["Test Category Health"]["gridPos"] == {"h": 6, "w": 6, "x": 15, "y": 13}
|
|
assert panels_by_title["Test Category Health"]["targets"][0]["legendFormat"] == "{{category}}"
|
|
assert panels_by_title["Test Category Health"]["targets"][0]["format"] == "time_series"
|
|
assert panels_by_title["Test Category Health"]["targets"][0]["range"] is True
|
|
assert "${overview_suite:regex}" not in panels_by_title["Test Category Health"]["targets"][0]["expr"]
|
|
assert mod.PLATFORM_TEST_SUITE_CANONICAL_MATCHER in panels_by_title["Test Category Health"]["targets"][0]["expr"]
|
|
assert "platform_quality:test_category_health_rate:percent_1h" in panels_by_title["Test Category Health"]["targets"][0]["expr"]
|
|
assert panels_by_title["Test Category Health"]["timeFrom"] == "24h"
|
|
assert f'category=~"{mod.PLATFORM_TEST_OVERVIEW_CATEGORY_REGEX}"' in panels_by_title["Test Category Health"]["targets"][0]["expr"]
|
|
assert "manual" not in mod.PLATFORM_TEST_OVERVIEW_CATEGORY_REGEX
|
|
assert "unit" not in mod.PLATFORM_TEST_OVERVIEW_CATEGORY_REGEX
|
|
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
|
|
assert panels_by_title["UPS History (Power Draw)"]["options"]["legend"]["placement"] == "bottom"
|
|
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"] == 22
|
|
assert all(target["expr"].startswith("max(") for target in panels_by_title["UPS History (Power Draw)"]["targets"])
|
|
ups_overrides = panels_by_title["UPS History (Power Draw)"]["fieldConfig"]["overrides"]
|
|
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"}},
|
|
]
|
|
assert panels_by_title["Ariadne Run Volume"]["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "bars"
|
|
assert panels_by_title["Ariadne Run Volume"]["options"]["legend"]["placement"] == "bottom"
|
|
assert panels_by_title["Ariadne Run Volume"]["options"]["legend"]["displayMode"] == "list"
|
|
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}}"
|
|
fan_steps = panels_by_title["Fan Intensity History"]["fieldConfig"]["defaults"]["thresholds"]["steps"]
|
|
assert [step["value"] for step in fan_steps] == [None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|
assert fan_steps[0]["color"] == "#8f1d1d"
|
|
assert fan_steps[5]["color"] == "#d4b106"
|
|
assert fan_steps[-1]["color"] == "#1f60c4"
|
|
fan_mappings = panels_by_title["Fan Intensity History"]["fieldConfig"]["defaults"]["mappings"][0]["options"]
|
|
assert fan_mappings["0"]["text"] == "Off"
|
|
assert fan_mappings["10"]["text"] == "10"
|
|
assert "Tent Interior" in panels_by_title["Fan Intensity History"]["targets"][0]["expr"]
|
|
assert panels_by_title["Fan Intensity History"]["options"]["legend"]["displayMode"] == "list"
|
|
assert panels_by_title["Fan Intensity History"]["options"]["legend"]["showLegend"] is False
|
|
assert panels_by_title["Fan Intensity History"]["options"]["mergeValues"] is False
|
|
assert panels_by_title["Fan Intensity History"]["options"]["showValue"] == "auto"
|
|
|
|
assert panels_by_title["Flux Source"]["type"] == "stat"
|
|
assert panels_by_title["Flux Source"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 7}
|
|
assert panels_by_title["Flux Source"]["targets"][0]["legendFormat"] == "{{branch}}"
|
|
assert panels_by_title["Current Gate Health"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 9}
|
|
assert "platform_quality:test_category_health_rate:percent_1h" in panels_by_title["Current Gate Health"]["targets"][0]["expr"]
|
|
assert panels_by_title["CI Run Success (24h)"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 11}
|
|
assert panels_by_title["Suites With Runs (24h)"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 15}
|
|
suites_reporting_expr = panels_by_title["Suites With Runs (24h)"]["targets"][0]["expr"]
|
|
assert "> bool 0" in suites_reporting_expr
|
|
assert mod.PLATFORM_TEST_SUITE_CANONICAL_MATCHER in suites_reporting_expr
|
|
assert "bstein-home" not in suites_reporting_expr
|
|
assert "published quality-gate run" in panels_by_title["Suites With Runs (24h)"]["description"]
|
|
assert panels_by_title["Avg Coverage"]["gridPos"] == {"h": 2, "w": 3, "x": 21, "y": 17}
|
|
assert "LOC Clean Suites" not in panels_by_title
|
|
assert panels_by_title["GitOps Health"]["type"] == "state-timeline"
|
|
assert panels_by_title["GitOps Health"]["gridPos"] == {"h": 6, "w": 6, "x": 15, "y": 7}
|
|
gitops_expr = panels_by_title["GitOps Health"]["targets"][0]["expr"]
|
|
assert "Kustomizations Not Suspended" in gitops_expr
|
|
assert "HelmReleases Not Suspended" in gitops_expr
|
|
assert panels_by_title["Test Category Health"]["type"] == "state-timeline"
|
|
assert panels_by_title["Test Category Health"]["options"]["legend"]["showLegend"] is False
|
|
assert panels_by_title["Test Category Health"]["options"]["mergeValues"] is False
|
|
assert panels_by_title["Test Category Health"]["options"]["showValue"] == "auto"
|
|
assert panels_by_title["Test Category Health"]["options"]["rowHeight"] == 0.9
|
|
assert panels_by_title["Test Category Health"]["targets"][0]["legendFormat"] == "{{category}}"
|
|
assert 'label_set(vector(0), "category", "none")' in panels_by_title["Test Category Health"]["targets"][0]["expr"]
|
|
assert not any(variable["name"] == "overview_suite" for variable in dashboard["templating"]["list"])
|
|
|
|
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
|
|
|
|
gpu_expr = panels_by_title["Namespace GPU Utilization"]["targets"][0]["expr"]
|
|
assert "nvidia_namespace_gpu_sm_util_percent" in gpu_expr
|
|
assert "nvidia_gpu_device_utilization_percent" in gpu_expr
|
|
assert "jetson_gr3d_active_seconds_total" in gpu_expr
|
|
assert "increase" in gpu_expr
|
|
assert "sum_over_time" not in gpu_expr
|
|
assert "count_over_time" not in gpu_expr
|
|
assert "avg_over_time" in gpu_expr
|
|
assert "$__range" in gpu_expr
|
|
assert "$__range_s" in gpu_expr
|
|
assert "sum by (namespace)" in gpu_expr
|
|
assert 'namespace", "shared"' not in gpu_expr
|
|
assert "kube_pod_container_resource_requests" in gpu_expr
|
|
assert mod.GPU_RESOURCE_REGEX in gpu_expr
|
|
assert '"gpu_source", "nvidia"' in gpu_expr
|
|
assert '"gpu_source", "jetson"' in gpu_expr
|
|
assert "100 *" in gpu_expr
|
|
assert "100 -" not in gpu_expr
|
|
assert 'namespace", "unattributed"' in gpu_expr
|
|
assert 'namespace", "idle"' in gpu_expr
|
|
assert panels_by_title["Namespace GPU Utilization"]["targets"][0]["instant"] is True
|
|
assert "selected time range" in panels_by_title["Namespace GPU Utilization"]["description"]
|
|
assert "continuously sampled" in panels_by_title["Namespace GPU Utilization"]["description"]
|
|
assert "Kubernetes shared-GPU allocations" in panels_by_title["Namespace GPU Utilization"]["description"]
|
|
|
|
def test_gpu_node_panel_prefers_stable_process_metrics_and_covers_all_gpu_families():
|
|
mod = load_module()
|
|
dashboard = mod.build_gpu_dashboard()
|
|
panels_by_title = {panel["title"]: panel for panel in flatten_panels(dashboard["panels"])}
|
|
|
|
node_expr = panels_by_title["GPU Util by Node"]["targets"][0]["expr"]
|
|
assert "nvidia_gpu_device_utilization_percent" in node_expr
|
|
assert "DCGM_FI_DEV_GPU_UTIL" in node_expr
|
|
assert "jetson_gr3d_freq_percent" in node_expr
|
|
assert "unless on(node)" in node_expr
|
|
assert mod.GPU_NODES == ["titan-20", "titan-21", "titan-22", "titan-24"]
|
|
|
|
process_expr = panels_by_title["GPU Processes by Pod"]["targets"][0]["expr"]
|
|
assert "nvidia_process_gpu_sm_util_percent" in process_expr
|
|
assert "DCGM_FI_DEV_GPU_UTIL" not in process_expr
|
|
|
|
def test_overview_and_testing_panels_all_have_concise_descriptions():
|
|
mod = load_module()
|
|
|
|
for dashboard in [mod.build_overview(), mod.build_jobs_dashboard(), mod.build_testing_dashboard()]:
|
|
panels = flatten_panels(dashboard["panels"])
|
|
assert all(panel.get("description") for panel in panels if panel["type"] != "row")
|
|
assert "85.7" not in repr(dashboard)
|
|
|
|
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
|