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  }