package common import ( "sync/atomic" "time" "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/mem" ) // DiskSpaceInfo 磁盘空间信息 type DiskSpaceInfo struct { // 总空间(字节) Total uint64 `json:"total"` // 可用空间(字节) Free uint64 `json:"free"` // 已用空间(字节) Used uint64 `json:"used"` // 使用百分比 UsedPercent float64 `json:"used_percent"` } // SystemStatus 系统状态信息 type SystemStatus struct { CPUUsage float64 MemoryUsage float64 DiskUsage float64 } var latestSystemStatus atomic.Value func init() { latestSystemStatus.Store(SystemStatus{}) } // StartSystemMonitor 启动系统监控 func StartSystemMonitor() { go func() { for { config := GetPerformanceMonitorConfig() if !config.Enabled { time.Sleep(30 * time.Second) continue } updateSystemStatus() time.Sleep(5 * time.Second) } }() } func updateSystemStatus() { var status SystemStatus // CPU // 注意:cpu.Percent(0, false) 返回自上次调用以来的 CPU 使用率 // 如果是第一次调用,可能会返回错误或不准确的值,但在循环中会逐渐正常 percents, err := cpu.Percent(0, false) if err == nil && len(percents) > 0 { status.CPUUsage = percents[0] } // Memory memInfo, err := mem.VirtualMemory() if err == nil { status.MemoryUsage = memInfo.UsedPercent } // Disk diskInfo := GetDiskSpaceInfo() if diskInfo.Total > 0 { status.DiskUsage = diskInfo.UsedPercent } latestSystemStatus.Store(status) } // GetSystemStatus 获取当前系统状态 func GetSystemStatus() SystemStatus { return latestSystemStatus.Load().(SystemStatus) }