diff --git a/client/stats/cpu.go b/client/stats/cpu.go index 47a9ee3cc..e7d970476 100644 --- a/client/stats/cpu.go +++ b/client/stats/cpu.go @@ -5,6 +5,7 @@ import ( "time" shelpers "github.com/hashicorp/nomad/helper/stats" + "github.com/shirou/gopsutil/cpu" ) // CpuStats calculates cpu usage percentage @@ -59,3 +60,31 @@ func (c *CpuStats) calculatePercent(t1, t2 float64, timeDelta int64) float64 { overall_percent := (vDelta / float64(timeDelta)) * 100.0 return overall_percent } + +func (h *HostStatsCollector) collectCPUStats() (cpus []*CPUStats, totalTicks float64, err error) { + + ticksConsumed := 0.0 + cpuStats, err := cpu.Times(true) + if err != nil { + return nil, 0.0, err + } + cs := make([]*CPUStats, len(cpuStats)) + for idx, cpuStat := range cpuStats { + percentCalculator, ok := h.statsCalculator[cpuStat.CPU] + if !ok { + percentCalculator = NewHostCpuStatsCalculator() + h.statsCalculator[cpuStat.CPU] = percentCalculator + } + idle, user, system, total := percentCalculator.Calculate(cpuStat) + cs[idx] = &CPUStats{ + CPU: cpuStat.CPU, + User: user, + System: system, + Idle: idle, + Total: total, + } + ticksConsumed += (total / 100.0) * (shelpers.TotalTicksAvailable() / float64(len(cpuStats))) + } + + return cs, ticksConsumed, nil +} diff --git a/client/stats/cpu_unix.go b/client/stats/cpu_unix.go deleted file mode 100644 index 3416cd4da..000000000 --- a/client/stats/cpu_unix.go +++ /dev/null @@ -1,36 +0,0 @@ -// +build !windows - -package stats - -import ( - shelpers "github.com/hashicorp/nomad/helper/stats" - "github.com/shirou/gopsutil/cpu" -) - -func (h *HostStatsCollector) collectCPUStats() (cpus []*CPUStats, totalTicks float64, err error) { - - ticksConsumed := 0.0 - cpuStats, err := cpu.Times(true) - if err != nil { - return nil, 0.0, err - } - cs := make([]*CPUStats, len(cpuStats)) - for idx, cpuStat := range cpuStats { - percentCalculator, ok := h.statsCalculator[cpuStat.CPU] - if !ok { - percentCalculator = NewHostCpuStatsCalculator() - h.statsCalculator[cpuStat.CPU] = percentCalculator - } - idle, user, system, total := percentCalculator.Calculate(cpuStat) - cs[idx] = &CPUStats{ - CPU: cpuStat.CPU, - User: user, - System: system, - Idle: idle, - Total: total, - } - ticksConsumed += (total / 100.0) * (shelpers.TotalTicksAvailable() / float64(len(cpuStats))) - } - - return cs, ticksConsumed, nil -} diff --git a/client/stats/cpu_windows.go b/client/stats/cpu_windows.go deleted file mode 100644 index 64b59c093..000000000 --- a/client/stats/cpu_windows.go +++ /dev/null @@ -1,53 +0,0 @@ -// +build windows - -package stats - -import ( - "fmt" - - shelpers "github.com/hashicorp/nomad/helper/stats" - "github.com/shirou/gopsutil/cpu" -) - -func (h *HostStatsCollector) collectCPUStats() (cpus []*CPUStats, totalTicks float64, err error) { - // Get the per cpu stats - cpuStats, err := cpu.Times(true) - if err != nil { - return nil, 0.0, err - } - - cs := make([]*CPUStats, len(cpuStats)) - for idx, cpuStat := range cpuStats { - - // On windows they are already in percent - cs[idx] = &CPUStats{ - CPU: cpuStat.CPU, - User: cpuStat.User, - System: cpuStat.System, - Idle: cpuStat.Idle, - Total: cpuStat.Total(), - } - } - - // Get the number of ticks - allCpu, err := cpu.Times(false) - if err != nil { - return nil, 0.0, err - } - if len(allCpu) != 1 { - return nil, 0.0, fmt.Errorf("unexpected number of cpus (%d)", len(allCpu)) - } - - // We use the calculator because when retrieving against all cpus it is - // returned as ticks. - all := allCpu[0] - percentCalculator, ok := h.statsCalculator[all.CPU] - if !ok { - percentCalculator = NewHostCpuStatsCalculator() - h.statsCalculator[all.CPU] = percentCalculator - } - _, _, _, total := percentCalculator.Calculate(all) - ticks := (total / 100) * shelpers.TotalTicksAvailable() - - return cs, ticks, nil -}