package monitor import ( "fmt" "strconv" "github.com/shirou/gopsutil/v3/cpu" ) // CPU CPU 采集信息 type CPU struct { CPU int32 `json:"cpu"` VendorID string `json:"vendorId"` ModelName string `json:"modelName"` Mhz float64 `json:"mhz"` Cores int32 `json:"cores"` } // CpuBaseInfo CPU 基本信息(型号/核心数/频率等,gopsutil cpu.Info) type CpuBaseInfo struct { Core int `json:"core"` Logic int `json:"logic"` Info []CPU `json:"info"` } // CpuInfo 每逻辑核心使用率 type CpuInfo struct { CpuBaseInfo CpuUsedInfo } // CpuUsedInfo CPU 使用率明细(含用户/系统/空闲等占比) type CpuUsedInfo struct { UsedPercent float64 `json:"usedPercent"` Used []float64 `json:"used"` } // CpuInfoLite 精简版 CPU 信息 type CpuInfoLite struct { Core int `json:"core"` Logic int `json:"logic"` Name []string `json:"name"` UsedPercent float64 `json:"usedPercent"` Used []float64 `json:"used"` } // getCpuInfo 采集 CPU 基础信息与每核心使用率 func getCpuInfo() (CpuInfo, error) { info := CpuInfo{} cpuInfo, err := cpu.Info() if err != nil { return info, err } info.Info = make([]CPU, len(cpuInfo)) for i, v := range cpuInfo { info.Info[i].CPU = v.CPU info.Info[i].VendorID = v.VendorID info.Info[i].ModelName = v.ModelName info.Info[i].Mhz = v.Mhz info.Info[i].Cores = v.Cores } core, err := cpu.Counts(false) if err != nil { return info, err } logic, err := cpu.Counts(true) if err != nil { return info, err } info.Core = core info.Logic = logic return info, nil } // getCpuUsed 采集 CPU 使用率明细 func getCpuUsed() (CpuUsedInfo, error) { info := CpuUsedInfo{} percent, err := cpu.Percent(0, true) if err != nil { return info, err } var usedPercent float64 = 0.0 for i, v := range percent { percent[i], _ = strconv.ParseFloat(fmt.Sprintf("%.1f", v), 64) usedPercent += v } usedPercent, _ = strconv.ParseFloat(fmt.Sprintf("%.1f", usedPercent/float64(len(percent))), 64) info.Used = percent info.UsedPercent = usedPercent return info, nil }