29 lines
825 B
Python
29 lines
825 B
Python
import asyncio
|
|
import time
|
|
|
|
from app.collect import cpu, disks, gpu, mem, power
|
|
from app.state import HistoryStore
|
|
|
|
|
|
def _collect() -> dict[str, float | int | None]:
|
|
sample: dict[str, float | int | None] = {}
|
|
sample.update(cpu.sample())
|
|
sample.update(mem.sample())
|
|
sample.update(gpu.sample())
|
|
sample.update(power.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.update(disks.rates(prev_disk, dt))
|
|
prev_disk = disks.counters()
|
|
prev_t = now
|
|
store.record(sample)
|