mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 10:25:42 +03:00
Refactored hoststats collector
This commit is contained in:
@@ -141,8 +141,6 @@ type Client struct {
|
||||
|
||||
// HostStatsCollector collects host resource usage stats
|
||||
hostStatsCollector *stats.HostStatsCollector
|
||||
resourceUsage *stats.HostStats
|
||||
resourceUsageLock sync.RWMutex
|
||||
|
||||
shutdown bool
|
||||
shutdownCh chan struct{}
|
||||
@@ -481,9 +479,7 @@ func (c *Client) GetAllocStats(allocID string) (AllocStatsReporter, error) {
|
||||
|
||||
// HostStats returns all the stats related to a Nomad client
|
||||
func (c *Client) LatestHostStats() *stats.HostStats {
|
||||
c.resourceUsageLock.RLock()
|
||||
defer c.resourceUsageLock.RUnlock()
|
||||
return c.resourceUsage
|
||||
return c.hostStatsCollector.Stats()
|
||||
}
|
||||
|
||||
// GetAllocFS returns the AllocFS interface for the alloc dir of an allocation
|
||||
@@ -2104,20 +2100,16 @@ func (c *Client) collectHostStats() {
|
||||
for {
|
||||
select {
|
||||
case <-next.C:
|
||||
ru, err := c.hostStatsCollector.Collect()
|
||||
err := c.hostStatsCollector.Collect()
|
||||
next.Reset(c.config.StatsCollectionInterval)
|
||||
if err != nil {
|
||||
c.logger.Printf("[WARN] client: error fetching host resource usage stats: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
c.resourceUsageLock.Lock()
|
||||
c.resourceUsage = ru
|
||||
c.resourceUsageLock.Unlock()
|
||||
|
||||
// Publish Node metrics if operator has opted in
|
||||
if c.config.PublishNodeMetrics {
|
||||
c.emitStats(ru)
|
||||
c.emitStats(c.hostStatsCollector.Stats())
|
||||
}
|
||||
case <-c.shutdownCh:
|
||||
return
|
||||
|
||||
@@ -163,6 +163,7 @@ func (a *AllocGarbageCollector) MakeRoomFor(allocations []*structs.Allocation) e
|
||||
|
||||
ar := gcAlloc.allocRunner
|
||||
alloc := ar.Alloc()
|
||||
a.logger.Printf("[INFO] client: garbage collecting allocation %v", alloc.ID)
|
||||
ar.Destroy()
|
||||
diskCleared += alloc.Resources.DiskMB
|
||||
if diskCleared >= totalResource.DiskMB {
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"log"
|
||||
"math"
|
||||
"runtime"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
@@ -58,6 +59,8 @@ type HostStatsCollector struct {
|
||||
numCores int
|
||||
statsCalculator map[string]*HostCpuStatsCalculator
|
||||
logger *log.Logger
|
||||
hostStats *HostStats
|
||||
hostStatsLock sync.RWMutex
|
||||
}
|
||||
|
||||
// NewHostStatsCollector returns a HostStatsCollector
|
||||
@@ -73,11 +76,11 @@ func NewHostStatsCollector(logger *log.Logger) *HostStatsCollector {
|
||||
}
|
||||
|
||||
// Collect collects stats related to resource usage of a host
|
||||
func (h *HostStatsCollector) Collect() (*HostStats, error) {
|
||||
func (h *HostStatsCollector) Collect() error {
|
||||
hs := &HostStats{Timestamp: time.Now().UTC().UnixNano()}
|
||||
memStats, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return err
|
||||
}
|
||||
hs.Memory = &MemoryStats{
|
||||
Total: memStats.Total,
|
||||
@@ -89,7 +92,7 @@ func (h *HostStatsCollector) Collect() (*HostStats, error) {
|
||||
ticksConsumed := 0.0
|
||||
cpuStats, err := cpu.Times(true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return err
|
||||
}
|
||||
cs := make([]*CPUStats, len(cpuStats))
|
||||
for idx, cpuStat := range cpuStats {
|
||||
@@ -113,7 +116,7 @@ func (h *HostStatsCollector) Collect() (*HostStats, error) {
|
||||
|
||||
partitions, err := disk.Partitions(false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return err
|
||||
}
|
||||
var diskStats []*DiskStats
|
||||
for _, partition := range partitions {
|
||||
@@ -143,11 +146,20 @@ func (h *HostStatsCollector) Collect() (*HostStats, error) {
|
||||
|
||||
uptime, err := host.Uptime()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return err
|
||||
}
|
||||
hs.Uptime = uptime
|
||||
|
||||
return hs, nil
|
||||
h.hostStatsLock.Lock()
|
||||
defer h.hostStatsLock.Unlock()
|
||||
h.hostStats = hs
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *HostStatsCollector) Stats() *HostStats {
|
||||
h.hostStatsLock.RLock()
|
||||
defer h.hostStatsLock.RUnlock()
|
||||
return h.hostStats
|
||||
}
|
||||
|
||||
// HostCpuStatsCalculator calculates cpu usage percentages
|
||||
|
||||
Reference in New Issue
Block a user