from dataclasses import dataclass @dataclass class Sample: """One point of system state, sampled every `sample_interval` seconds. Byte fields are in bytes, percentage fields are 0-100, temperatures are degrees Celsius. A `None` value means the data is not available on this machine (no GPU, no battery, no temperature sensor, ...). """ ts: float = 0.0 # unix time of the sample, set by HistoryStore.record cpu: float = 0.0 # aggregate CPU usage percent, 0-100 cpu_temp: float | None = None # CPU temperature °C, None = no sensor found load1: float = 0.0 # 1-minute load average load5: float = 0.0 # 5-minute load average load15: float = 0.0 # 15-minute load average mem_used: int = 0 # used RAM, bytes mem_total: int = 0 # total RAM, bytes mem_pct: float = 0.0 # used RAM percent, 0-100 swap_used: int = 0 # used swap, bytes swap_total: int = 0 # total swap, bytes swap_pct: float = 0.0 # used swap percent, 0-100 gpu: float | None = None # GPU utilization percent, 0-100, None = no GPU vram_used: int | None = None # used VRAM, bytes vram_total: int | None = None # total VRAM, bytes vram_pct: float | None = None # used VRAM percent, 0-100 gpu_temp: float | None = None # GPU temperature °C gpu_name: str = "no GPU detected" # display name (shortened lspci / nvidia-smi name) battery: int | None = None # battery capacity percent, 0-100, None = no battery battery_status: str | None = None # "Charging" / "Discharging" / "Full" / ... ac_online: bool | None = None # True/False when a mains/USB supply exists, None otherwise io_read: float = 0.0 # aggregate disk read rate, bytes/s io_write: float = 0.0 # aggregate disk write rate, bytes/s