75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| package cpu
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"runtime"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| type CPUTimesStat struct {
 | |
| 	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:"guest_nice"`
 | |
| 	Stolen    float64 `json:"stolen"`
 | |
| }
 | |
| 
 | |
| type CPUInfoStat struct {
 | |
| 	CPU        int32    `json:"cpu"`
 | |
| 	VendorID   string   `json:"vendor_id"`
 | |
| 	Family     string   `json:"family"`
 | |
| 	Model      string   `json:"model"`
 | |
| 	Stepping   int32    `json:"stepping"`
 | |
| 	PhysicalID string   `json:"physical_id"`
 | |
| 	CoreID     string   `json:"core_id"`
 | |
| 	Cores      int32    `json:"cores"`
 | |
| 	ModelName  string   `json:"model_name"`
 | |
| 	Mhz        float64  `json:"mhz"`
 | |
| 	CacheSize  int32    `json:"cache_size"`
 | |
| 	Flags      []string `json:"flags"`
 | |
| }
 | |
| 
 | |
| var lastCPUTimes []CPUTimesStat
 | |
| var lastPerCPUTimes []CPUTimesStat
 | |
| 
 | |
| func CPUCounts(logical bool) (int, error) {
 | |
| 	return runtime.NumCPU(), nil
 | |
| }
 | |
| 
 | |
| func (c CPUTimesStat) 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),
 | |
| 		`"guest_nice":` + strconv.FormatFloat(c.GuestNice, 'f', 1, 64),
 | |
| 		`"stolen":` + strconv.FormatFloat(c.Stolen, 'f', 1, 64),
 | |
| 	}
 | |
| 
 | |
| 	return `{` + strings.Join(v, ",") + `}`
 | |
| }
 | |
| 
 | |
| func (c CPUInfoStat) String() string {
 | |
| 	s, _ := json.Marshal(c)
 | |
| 	return string(s)
 | |
| }
 | |
| 
 | |
| func init() {
 | |
| 	lastCPUTimes, _ = CPUTimes(false)
 | |
| 	lastPerCPUTimes, _ = CPUTimes(true)
 | |
| }
 |