dashboard/app/sample.py

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