diff --git a/lib/stats.go b/lib/stats.go index 591156e7..58fac59d 100644 --- a/lib/stats.go +++ b/lib/stats.go @@ -16,7 +16,7 @@ type ContainerStats struct { Container string CPU float64 CPUNano uint64 - SystemNano uint64 + SystemNano int64 MemUsage uint64 MemLimit uint64 MemPerc float64 @@ -38,6 +38,8 @@ func (c *ContainerServer) GetContainerStats(ctr *oci.Container, previousStats *C cgroupStats := libcontainerStats.CgroupStats stats := new(ContainerStats) stats.Container = ctr.ID() + stats.CPUNano = cgroupStats.CpuStats.CpuUsage.TotalUsage + stats.SystemNano = time.Now().UnixNano() stats.CPU = calculateCPUPercent(libcontainerStats, previousCPU, previousSystem) stats.MemUsage = cgroupStats.MemoryStats.Usage.Usage stats.MemLimit = getMemLimit(cgroupStats.MemoryStats.Usage.Limit) @@ -84,11 +86,11 @@ func getContainerNetIO(stats *libcontainer.Stats) (received uint64, transmitted return } -func calculateCPUPercent(stats *libcontainer.Stats, previousCPU, previousSystem uint64) float64 { +func calculateCPUPercent(stats *libcontainer.Stats, previousCPU uint64, previousSystem int64) float64 { var ( cpuPercent = 0.0 cpuDelta = float64(stats.CgroupStats.CpuStats.CpuUsage.TotalUsage - previousCPU) - systemDelta = float64(uint64(time.Now().UnixNano()) - previousSystem) + systemDelta = float64(uint64(time.Now().UnixNano()) - uint64(previousSystem)) ) if systemDelta > 0.0 && cpuDelta > 0.0 { // gets a ratio of container cpu usage total, multiplies it by the number of cores (4 cores running diff --git a/server/container_stats.go b/server/container_stats.go index 8e6176af..ffffe160 100644 --- a/server/container_stats.go +++ b/server/container_stats.go @@ -39,7 +39,7 @@ func (s *Server) ContainerStats(ctx context.Context, req *pb.ContainerStatsReque }, Cpu: &pb.CpuUsage{ Timestamp: now, - UsageCoreNanoSeconds: &pb.UInt64Value{stats.CPUNano + stats.SystemNano}, + UsageCoreNanoSeconds: &pb.UInt64Value{stats.CPUNano}, }, Memory: &pb.MemoryUsage{ Timestamp: now,