| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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)
- }
|