55 lines
1.6 KiB
Python
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
|