package util import ( "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil/mem" "os/exec" "strconv" "strings" "time" ) // GetCpuPercent cpu总占用率 func GetCpuPercent() float64 { percent, _ := cpu.Percent(time.Second, false) return percent[0] } // GetMemoryPercent 内存总占用率 func GetMemoryPercent() float64 { memory, _ := mem.SwapMemory() return memory.UsedPercent } // GetDiskPercent 磁盘总占用率 func GetDiskPercent() float64 { parts, _ := disk.Partitions(true) diskInfo, _ := disk.Usage(parts[0].Mountpoint) return diskInfo.UsedPercent } // GetDiskUsed 解析 df 命令的输出 // df -B1 /dev/vdb // Filesystem 1B-blocks Used Available Use% Mounted on // /dev/vdb 527371075584 16390344704 484120408064 4% /mnt/disk001 func GetDiskUsed(filesystem string) (uint64, error) { cmd := exec.Command("df", "-B1", filesystem) output, err := cmd.CombinedOutput() if err != nil { return 0, err } lines := strings.Split(string(output), "\n") fields := strings.Fields(lines[1]) parseUint, err := strconv.ParseUint(fields[2], 10, 64) if err != nil { return 0, err } return parseUint, nil } // GetDiskUsagePercent 获取磁盘使用率 func GetDiskUsagePercent() (float64, error) { // 执行 df 命令获取磁盘使用情况 cmd := exec.Command("df", "--total") output, err := cmd.Output() if err != nil { return 0.0, err } // 解析 df 命令输出,计算磁盘占比 lines := strings.Split(string(output), "\n") for _, line := range lines[1:] { fields := strings.Fields(line) if len(fields) >= 6 && fields[0] == "total" { //filesystem := fields[0] total, _ := strconv.ParseFloat(strings.TrimSuffix(fields[1], "G"), 64) used, _ := strconv.ParseFloat(strings.TrimSuffix(fields[2], "G"), 64) usedPercent := (used / total) * 100 //fmt.Printf("文件系统 %s 已使用 %.2f%%\n", filesystem, usedPercent) return usedPercent, err } } return 0.0, nil }