feat: resource_pressure - disk free, CPU freq/throttle/temp, GPU temp via nvidia-smi

This commit is contained in:
AetherForge
2026-05-30 23:22:32 -07:00
parent d010292333
commit 6704933568
13 changed files with 537 additions and 2 deletions

View File

@@ -519,6 +519,17 @@ func (h *WSHub) HandleAgentWS(w http.ResponseWriter, r *http.Request) {
CPUUsagePct float64 `json:"cpu_usage_pct"`
MemoryUsagePct float64 `json:"memory_usage_pct"`
UptimeSeconds int `json:"uptime_seconds"`
// Resource pressure
CPUFreqMHz *int `json:"cpu_freq_mhz,omitempty"`
CPUMaxMHz *int `json:"cpu_max_mhz,omitempty"`
CPUThrottle *bool `json:"cpu_throttle,omitempty"`
CPUTempC *int `json:"cpu_temp_c,omitempty"`
DiskFreeGB *float64 `json:"disk_free_gb,omitempty"`
DiskTotalGB *float64 `json:"disk_total_gb,omitempty"`
DiskFreePct *int `json:"disk_free_pct,omitempty"`
GPUTempC *int `json:"gpu_temp_c,omitempty"`
GPUUsagePct *int `json:"gpu_usage_pct,omitempty"`
// SSH + posture
SSHAvailable *bool `json:"ssh_available,omitempty"`
PostureScore *int `json:"posture_score,omitempty"`
DefenderEnabled *bool `json:"defender_enabled,omitempty"`
@@ -565,6 +576,17 @@ func (h *WSHub) HandleAgentWS(w http.ResponseWriter, r *http.Request) {
"shares_submitted": stats.SharesSubmitted,
"shares_accepted": stats.SharesAccepted,
}
// Resource pressure fields
if stats.CPUFreqMHz != nil { broadcast["cpu_freq_mhz"] = *stats.CPUFreqMHz }
if stats.CPUMaxMHz != nil { broadcast["cpu_max_mhz"] = *stats.CPUMaxMHz }
if stats.CPUThrottle != nil { broadcast["cpu_throttle"] = *stats.CPUThrottle }
if stats.CPUTempC != nil { broadcast["cpu_temp_c"] = *stats.CPUTempC }
if stats.DiskFreeGB != nil { broadcast["disk_free_gb"] = *stats.DiskFreeGB }
if stats.DiskTotalGB != nil { broadcast["disk_total_gb"] = *stats.DiskTotalGB }
if stats.DiskFreePct != nil { broadcast["disk_free_pct"] = *stats.DiskFreePct }
if stats.GPUTempC != nil { broadcast["gpu_temp_c"] = *stats.GPUTempC }
if stats.GPUUsagePct != nil { broadcast["gpu_usage_pct"] = *stats.GPUUsagePct }
if stats.SSHAvailable != nil {
broadcast["ssh_available"] = *stats.SSHAvailable
}