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