go读取Linux下cpu占用率、cpu温度、内存占用率及磁盘占用率
1. 前言
后续会利用相关界面库来开发一个跨平台的小工具,这里的内容是该小工具的一部分,但是也挺常用的。
2. 代码
package main
import (
"bytes"
"fmt"
"os/exec"
"strconv"
"strings"
"time"
"github.com/shirou/gopsutil/cpu"
"github.com/shirou/gopsutil/disk"
"github.com/shirou/gopsutil/mem"
"github.com/wonderivan/logger"
)
//获取CPU使用率
func GetCpuPercent() (float64, error) {
percent, err := cpu.Percent(time.Second, false)
if err != nil {
logger.Error(err)
return 0, err
}
return percent[0], nil
}
//获取CPU温度
func GetCpuTemp() (string, error) {
cmd := exec.Command("cat", "/sys/class/thermal/thermal_zone0/temp")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
logger.Error(err)
return "", err
}
logger.Debug(out.String())
tempStr := strings.Replace(out.String(), "\n", "", -1)
temp, err := strconv.Atoi(tempStr)
if err != nil {
logger.Error(err)
return "", err
}
temp = temp / 1000
logger.Debug(temp)
return strconv.Itoa(temp), nil
}
//获取内存使用率
func GetMemPercent() (float64, error) {
memInfo, err := mem.VirtualMemory()
if err != nil {
logger.Error(err)
return 0, err
}
return memInfo.UsedPercent, nil
}
//获取硬盘使用率
func GetDiskPercent() (float64, error) {
parts, err := disk.Partitions(true)
if err != nil {
logger.Error(err)
return 0, err
}
diskInfo, err := disk.Usage(parts[0].Mountpoint)
if err != nil {
logger.Error(err)
return 0, err
}
return diskInfo.UsedPercent, nil
}
func main() {
cpuPer, err := GetCpuPercent()
if err != nil {
logger.Error(err)
} else {
cpuPer, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", cpuPer), 64)
cpuPerStr := strconv.FormatFloat(cpuPer, 'f', -1, 64)
logger.Debug("cpu:", cpuPerStr)
}
cpuTemp, err := GetCpuTemp()
if err != nil {
logger.Error(err)
} else {
logger.Debug("cpuTemp:", cpuTemp)
}
diskPer, err := GetDiskPercent()
if err != nil {
logger.Error(err)
} else {
diskPer, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", diskPer), 64)
diskPerStr := strconv.FormatFloat(diskPer, 'f', -1, 64)
logger.Debug("diskPer:", diskPerStr)
}
memPer, err := GetMemPercent()
if err != nil {
logger.Error(err)
} else {
memPer, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", memPer), 64)
memPerStr := strconv.FormatFloat(memPer, 'f', -1, 64)
logger.Debug("memPer:", memPerStr)
}
}
3. 测试结果
2021-08-27 09:48:48 [DEBG] [test.go:82] cpu: 1.01
2021-08-27 09:48:49 [DEBG] [test.go:38] 58000
2021-08-27 09:48:49 [DEBG] [test.go:46] 58
2021-08-27 09:48:49 [DEBG] [test.go:89] cpuTemp: 58
2021-08-27 09:48:49 [DEBG] [test.go:98] diskPer: 23.34
2021-08-27 09:48:49 [DEBG] [test.go:106] memPer: 5.95
4. 编译
$ ./compile.sh "arm"
arm
linux
简单的测试项目上传到csdn:https://download.csdn.net/download/weixin_39510813/21638214