dashboard/app/sampling.py

30 lines
782 B
Python

import asyncio
import time
from app.collect import cpu, disks, gpu, mem, power
from app.sample import Sample
from app.state import HistoryStore
def _collect() -> Sample:
sample = Sample()
cpu.fill(sample)
mem.fill(sample)
gpu.fill(sample)
power.fill(sample)
return sample
async def sampler_loop(store: HistoryStore, sample_interval: float) -> None:
cpu.prime()
prev_disk = disks.counters()
prev_t = time.monotonic()
while True:
await asyncio.sleep(sample_interval)
sample = await asyncio.to_thread(_collect)
now = time.monotonic()
dt = now - prev_t
sample.io_read, sample.io_write = disks.rates(prev_disk, dt)
prev_disk = disks.counters()
prev_t = now
store.record(sample)