shirou_gopsutil/cpu/cpu.go

93 lines
2.5 KiB
Go
Raw Normal View History

2014-12-30 21:09:05 +08:00
package cpu
2014-04-18 15:34:47 +08:00
import (
"encoding/json"
"github.com/shirou/gopsutil/internal/common"
2014-04-18 15:34:47 +08:00
"runtime"
"strconv"
"strings"
"sync"
2014-04-18 15:34:47 +08:00
)
type TimesStat struct {
2014-04-30 15:16:07 +08:00
CPU string `json:"cpu"`
User float64 `json:"user"`
System float64 `json:"system"`
Idle float64 `json:"idle"`
Nice float64 `json:"nice"`
Iowait float64 `json:"iowait"`
Irq float64 `json:"irq"`
Softirq float64 `json:"softirq"`
Steal float64 `json:"steal"`
Guest float64 `json:"guest"`
GuestNice float64 `json:"guestNice"`
Stolen float64 `json:"stolen"`
2014-04-18 15:34:47 +08:00
}
type InfoStat struct {
2014-05-16 17:39:17 +08:00
CPU int32 `json:"cpu"`
VendorID string `json:"vendorId"`
2014-05-16 17:39:17 +08:00
Family string `json:"family"`
Model string `json:"model"`
Stepping int32 `json:"stepping"`
PhysicalID string `json:"physicalId"`
CoreID string `json:"coreId"`
2014-05-16 17:39:17 +08:00
Cores int32 `json:"cores"`
ModelName string `json:"modelName"`
2014-05-16 17:39:17 +08:00
Mhz float64 `json:"mhz"`
CacheSize int32 `json:"cacheSize"`
2014-05-16 17:12:18 +08:00
Flags []string `json:"flags"`
}
2016-06-02 05:45:29 +08:00
type lastPercent struct {
sync.Mutex
lastCPUTimes []TimesStat
lastPerCPUTimes []TimesStat
}
2016-06-02 05:45:29 +08:00
var lastCPUPercent lastPercent
var invoke common.Invoker
func init() {
invoke = common.Invoke{}
lastCPUPercent.Lock()
lastCPUPercent.lastCPUTimes, _ = Times(false)
lastCPUPercent.lastPerCPUTimes, _ = Times(true)
lastCPUPercent.Unlock()
}
2014-11-02 11:05:52 +08:00
func Counts(logical bool) (int, error) {
return runtime.NumCPU(), nil
2014-11-02 11:05:52 +08:00
}
func (c TimesStat) String() string {
v := []string{
`"cpu":"` + c.CPU + `"`,
`"user":` + strconv.FormatFloat(c.User, 'f', 1, 64),
`"system":` + strconv.FormatFloat(c.System, 'f', 1, 64),
`"idle":` + strconv.FormatFloat(c.Idle, 'f', 1, 64),
`"nice":` + strconv.FormatFloat(c.Nice, 'f', 1, 64),
`"iowait":` + strconv.FormatFloat(c.Iowait, 'f', 1, 64),
`"irq":` + strconv.FormatFloat(c.Irq, 'f', 1, 64),
`"softirq":` + strconv.FormatFloat(c.Softirq, 'f', 1, 64),
`"steal":` + strconv.FormatFloat(c.Steal, 'f', 1, 64),
`"guest":` + strconv.FormatFloat(c.Guest, 'f', 1, 64),
`"guestNice":` + strconv.FormatFloat(c.GuestNice, 'f', 1, 64),
`"stolen":` + strconv.FormatFloat(c.Stolen, 'f', 1, 64),
}
return `{` + strings.Join(v, ",") + `}`
}
2014-05-16 17:12:18 +08:00
// Total returns the total number of seconds in a CPUTimesStat
func (c TimesStat) Total() float64 {
total := c.User + c.System + c.Nice + c.Iowait + c.Irq + c.Softirq + c.Steal +
c.Guest + c.GuestNice + c.Idle + c.Stolen
return total
}
func (c InfoStat) String() string {
2014-05-16 17:12:18 +08:00
s, _ := json.Marshal(c)
return string(s)
}