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  }