atlas-iac/testing/tests/test_jetson_tegrastats_exporter.py

55 lines
1.6 KiB
Python

"""Tests for continuous Jetson GPU activity accounting."""
from __future__ import annotations
import importlib.util
from pathlib import Path
SCRIPT = (
Path(__file__).parents[2]
/ "services"
/ "monitoring"
/ "scripts"
/ "jetson_tegrastats_exporter.py"
)
def load_module():
spec = importlib.util.spec_from_file_location("jetson_tegrastats_exporter", SCRIPT)
assert spec and spec.loader
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def test_metric_store_retains_gpu_work_between_scrapes():
module = load_module()
store = module.MetricStore()
store.record("GR3D_FREQ 0% GPU@40C RAM 1/2MB", now=10.0)
store.record("GR3D_FREQ 100% GPU@41C RAM 1/2MB", now=10.25)
store.record("GR3D_FREQ 0% GPU@40C RAM 1/2MB", now=11.0)
snapshot = store.snapshot(now=15.0)
assert snapshot["gr3d_freq_percent"] == 0
assert snapshot["gr3d_active_seconds_total"] == 0.75
assert snapshot["tegrastats_samples_total"] == 3
assert snapshot["last_sample_timestamp_seconds"] == 11.0
assert snapshot["last_scrape_ts"] == 15.0
def test_activity_metrics_are_exported_as_counters():
module = load_module()
body = module.render_metrics(
{
"gr3d_freq_percent": 0,
"gr3d_active_seconds_total": 0.75,
"tegrastats_samples_total": 3,
}
)
assert "# TYPE jetson_gr3d_freq_percent gauge" in body
assert "# TYPE jetson_gr3d_active_seconds_total counter" in body
assert "# TYPE jetson_tegrastats_samples_total counter" in body