35 lines
1.7 KiB
Python
35 lines
1.7 KiB
Python
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
|