提交 59207b1e 编写于 作者: W WAKAYAMA shirou

implements CPUInfoStat on FreeBSD.

上级 e68563b7
......@@ -21,17 +21,17 @@ type CPUTimesStat struct {
}
type CPUInfoStat struct {
CPU int32 `json:"cpu"`
VendorId string `json:"vendorId"`
Family string `json:"family"`
Model string `json:"model"`
Stepping int32 `json:"stepping"`
PhysicalID string `json:"physicalId"`
CoreID string `json:"coreId"`
Cores int32 `json:"cores"`
ModelName string `json:"modelName"`
Mhz float64 `json:"mhz"`
CacheSize int32 `json:"cacheSize"`
CPU int32 `json:"cpu"`
VendorID string `json:"vendorId"`
Family string `json:"family"`
Model string `json:"model"`
Stepping int32 `json:"stepping"`
PhysicalID string `json:"physicalId"`
CoreID string `json:"coreId"`
Cores int32 `json:"cores"`
ModelName string `json:"modelName"`
Mhz float64 `json:"mhz"`
CacheSize int32 `json:"cacheSize"`
Flags []string `json:"flags"`
}
......
......@@ -3,7 +3,9 @@
package gopsutil
import (
"regexp"
"strconv"
"strings"
)
// sys/resource.h
......@@ -48,3 +50,38 @@ func CPUTimes(percpu bool) ([]CPUTimesStat, error) {
return ret, nil
}
// Returns only one CPUInfoStat on FreeBSD
func CPUInfo() ([]CPUInfoStat, error) {
filename := "/var/run/dmesg.boot"
lines, _ := readLines(filename)
var ret []CPUInfoStat
c := CPUInfoStat{}
for _, line := range lines {
if matches := regexp.MustCompile(`CPU:\s+(.+) \(([\d.]+).+\)`).FindStringSubmatch(line); matches != nil {
c.ModelName = matches[1]
c.Mhz = parseFloat64(matches[2])
} else if matches := regexp.MustCompile(`Origin = "(.+)" Id = (.+) Family = (.+) Model = (.+) Stepping = (.+)`).FindStringSubmatch(line); matches != nil {
c.VendorID = matches[1]
c.Family = matches[3]
c.Model = matches[4]
c.Stepping = parseInt32(matches[5])
} else if matches := regexp.MustCompile(`Features=.+<(.+)>`).FindStringSubmatch(line); matches != nil {
for _, v := range strings.Split(matches[1], ",") {
c.Flags = append(c.Flags, strings.ToLower(v))
}
} else if matches := regexp.MustCompile(`Features2=[a-f\dx]+<(.+)>`).FindStringSubmatch(line); matches != nil {
for _, v := range strings.Split(matches[1], ",") {
c.Flags = append(c.Flags, strings.ToLower(v))
}
} else if matches := regexp.MustCompile(`Logical CPUs per core: (\d+)`).FindStringSubmatch(line); matches != nil {
// FIXME: no this line?
c.Cores = parseInt32(matches[1])
}
}
return append(ret, c), nil
}
......@@ -34,7 +34,7 @@ func CPUInfo() ([]CPUInfoStat, error) {
var c CPUInfoStat
for _, line := range lines {
fields := strings.Split(line, ":")
if len(fields) < 2{
if len(fields) < 2 {
if c.VendorId != "" {
ret = append(ret, c)
}
......@@ -48,7 +48,7 @@ func CPUInfo() ([]CPUInfoStat, error) {
c = CPUInfoStat{}
c.CPU = parseInt32(value)
case "vendor_id":
c.VendorId = value
c.VendorID = value
case "cpu family":
c.Family = value
case "model":
......
......@@ -50,7 +50,8 @@ func TestCpuInfo(t *testing.T) {
t.Errorf("error %v", err)
}
for _, vv := range v {
if vv.ModelName == ""{
fmt.Println(vv)
if vv.ModelName == "" {
t.Errorf("could not get CPU Info: %v", vv)
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册