github.com/manicqin/nomad@v0.9.5/client/stats/cpu_unix.go (about) 1 // +build !windows 2 3 package stats 4 5 import ( 6 "fmt" 7 8 shelpers "github.com/hashicorp/nomad/helper/stats" 9 "github.com/shirou/gopsutil/cpu" 10 ) 11 12 func (h *HostStatsCollector) collectCPUStats() (cpus []*CPUStats, totalTicks float64, err error) { 13 14 ticksConsumed := 0.0 15 cpuStats, err := cpu.Times(true) 16 if err != nil { 17 return nil, 0.0, fmt.Errorf("failed to collect cpu.Times: %v", err) 18 } 19 cs := make([]*CPUStats, len(cpuStats)) 20 for idx, cpuStat := range cpuStats { 21 percentCalculator, ok := h.statsCalculator[cpuStat.CPU] 22 if !ok { 23 percentCalculator = NewHostCpuStatsCalculator() 24 h.statsCalculator[cpuStat.CPU] = percentCalculator 25 } 26 idle, user, system, total := percentCalculator.Calculate(cpuStat) 27 cs[idx] = &CPUStats{ 28 CPU: cpuStat.CPU, 29 User: user, 30 System: system, 31 Idle: idle, 32 Total: total, 33 } 34 ticksConsumed += (total / 100.0) * (shelpers.TotalTicksAvailable() / float64(len(cpuStats))) 35 } 36 37 return cs, ticksConsumed, nil 38 }