30 lines
782 B
Python
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)
|