7e3e94a08a
Add a comprehensive performance monitoring system that collects CPU, memory, swap, load average, network IO, and GPU stats. Provides both a REST API for the UI and a Prometheus /metrics endpoint. Backend changes: - New internal/perf package with configurable interval-based stats collection - GPU monitoring via LACT (Unix socket) and nvidia-smi fallback on Linux - Ring buffer (internal/ring) for time-series stat storage - Prometheus /metrics endpoint with all system and GPU metrics - Moved LogMonitor to internal/logmon package - New PerformanceConfig for hot-reloadable monitoring settings - REST /api/performance endpoint replacing SSE streaming UI changes: - New Performance page with real-time charts for CPU, memory, GPU, and network - Reusable PerformanceChart component - LLAMA_SWAP_URL environment variable support - Improved capture dialog display Other: - Example Grafana dashboard for Prometheus metrics - monitor-test standalone binary - Config schema and example updates fixes #596
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package perf
|
|
|
|
import "time"
|
|
|
|
type GpuStat struct {
|
|
Timestamp time.Time `json:"timestamp"`
|
|
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
UUID string `json:"uuid"`
|
|
TempC int `json:"temp_c"`
|
|
VramTempC int `json:"vram_temp_c"`
|
|
GpuUtilPct float64 `json:"gpu_util_pct"`
|
|
MemUtilPct float64 `json:"mem_util_pct"`
|
|
MemUsedMB int `json:"mem_used_mb"`
|
|
MemTotalMB int `json:"mem_total_mb"`
|
|
FanSpeedPct float64 `json:"fan_speed_pct"`
|
|
PowerDrawW float64 `json:"power_draw_w"`
|
|
}
|
|
|
|
type NetIOStat struct {
|
|
Name string `json:"name"`
|
|
BytesRecv uint64 `json:"bytes_recv"`
|
|
BytesSent uint64 `json:"bytes_sent"`
|
|
}
|
|
|
|
type SysStat struct {
|
|
Timestamp time.Time `json:"timestamp"`
|
|
|
|
CpuUtilPerCore []float64 `json:"cpu_util_per_core"`
|
|
MemTotalMB int `json:"mem_total_mb"`
|
|
MemUsedMB int `json:"mem_used_mb"`
|
|
MemFreeMB int `json:"mem_free_mb"`
|
|
SwapTotalMB int `json:"swap_total_mb"`
|
|
SwapUsedMB int `json:"swap_used_mb"`
|
|
LoadAvg1 float64 `json:"load_avg_1"`
|
|
LoadAvg5 float64 `json:"load_avg_5"`
|
|
LoadAvg15 float64 `json:"load_avg_15"`
|
|
NetIO []NetIOStat `json:"net_io"`
|
|
}
|