From 389dee0f3ca9340598d2760ab298681d22e1195d Mon Sep 17 00:00:00 2001 From: Bradley Cicenas Date: Sat, 10 Jun 2017 13:00:54 +0000 Subject: [PATCH] add percent helper method to metrics --- metrics/docker.go | 2 +- metrics/main.go | 24 ++++++++++++++++-------- metrics/mock.go | 2 +- metrics/proc.go | 1 + metrics/runc.go | 2 +- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/metrics/docker.go b/metrics/docker.go index 070ddcd..8f11b51 100644 --- a/metrics/docker.go +++ b/metrics/docker.go @@ -86,7 +86,7 @@ func (c *Docker) ReadCPU(stats *api.Stats) { func (c *Docker) ReadMem(stats *api.Stats) { c.MemUsage = int64(stats.MemoryStats.Usage) c.MemLimit = int64(stats.MemoryStats.Limit) - c.MemPercent = round((float64(c.MemUsage) / float64(c.MemLimit)) * 100) + c.MemPercent = percent(float64(c.MemUsage), float64(c.MemLimit)) } func (c *Docker) ReadNet(stats *api.Stats) { diff --git a/metrics/main.go b/metrics/main.go index 387b01d..6ed90ba 100644 --- a/metrics/main.go +++ b/metrics/main.go @@ -22,14 +22,14 @@ type Metrics struct { func NewMetrics() Metrics { return Metrics{ - CPUUtil: -1, - NetTx: -1, - NetRx: -1, - MemUsage: -1, - MemPercent: -1, - IOBytesRead: -1, - IOBytesWrite: -1, - Pids: -1, + CPUUtil: -1, + NetTx: -1, + NetRx: -1, + MemUsage: -1, + MemPercent: -1, + IOBytesRead: -1, + IOBytesWrite: -1, + Pids: -1, } } @@ -43,3 +43,11 @@ type Collector interface { func round(num float64) int { return int(num + math.Copysign(0.5, num)) } + +// return rounded percentage +func percent(val float64, total float64) int { + if total <= 0 { + return 0 + } + return round((val / total) * 100) +} diff --git a/metrics/mock.go b/metrics/mock.go index deb3749..0cb47fd 100644 --- a/metrics/mock.go +++ b/metrics/mock.go @@ -60,7 +60,7 @@ func (c *Mock) run() { if c.MemUsage > c.MemLimit { c.MemUsage = 0 } - c.MemPercent = round((float64(c.MemUsage) / float64(c.MemLimit)) * 100) + c.MemPercent = percent(float64(c.MemUsage), float64(c.MemLimit)) c.stream <- c.Metrics if c.done { break diff --git a/metrics/proc.go b/metrics/proc.go index 5a0b81c..457585f 100644 --- a/metrics/proc.go +++ b/metrics/proc.go @@ -19,6 +19,7 @@ func getSysMemTotal() int64 { return int64(stat.MemTotal * 1024) } +// return cumulative system cpu usage in nanoseconds func getSysCPUUsage() uint64 { stat, err := linuxproc.ReadStat("/proc/stat") if err != nil { diff --git a/metrics/runc.go b/metrics/runc.go index 25420e7..44188bb 100644 --- a/metrics/runc.go +++ b/metrics/runc.go @@ -95,7 +95,7 @@ func (c *Runc) ReadMem(stats *cgroups.Stats) { if c.MemLimit > sysMemTotal && sysMemTotal > 0 { c.MemLimit = sysMemTotal } - c.MemPercent = round((float64(c.MemUsage) / float64(c.MemLimit)) * 100) + c.MemPercent = percent(float64(c.MemUsage), float64(c.MemLimit)) } func (c *Runc) ReadNet(interfaces []*libcontainer.NetworkInterface) {