| 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, ",") + `}` |
| } |
| |
| // Total returns the total number of seconds in a CPUTimesStat |
| func (c CPUTimesStat) 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 CPUInfoStat) String() string { |
| s, _ := json.Marshal(c) |
| return string(s) |
| } |