summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivan@redhat.com>2021-09-09 17:16:24 +0200
committerGiuseppe Scrivano <gscrivan@redhat.com>2021-09-10 09:03:10 +0200
commit50688da29b4a37006d0a7fafc25aca1a6447c7d9 (patch)
tree18c3d173262d247c8d505a22952ba238942e313e
parent2b85382ca187fdcc000803b1d26d8b46e8cb755f (diff)
downloadpodman-50688da29b4a37006d0a7fafc25aca1a6447c7d9.tar.gz
podman-50688da29b4a37006d0a7fafc25aca1a6447c7d9.tar.bz2
podman-50688da29b4a37006d0a7fafc25aca1a6447c7d9.zip
stats: detect containers restart
if the current cpu usage time is lower than what previously recorded, then it means the container was restarted and now it runs in a new cgroup. When this happens, reset the prevStats. Closes: https://github.com/containers/podman/issues/11469 Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
-rw-r--r--libpod/stats.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/libpod/stats.go b/libpod/stats.go
index 2532b35c2..975152535 100644
--- a/libpod/stats.go
+++ b/libpod/stats.go
@@ -54,6 +54,12 @@ func (c *Container) GetContainerStats(previousStats *define.ContainerStats) (*de
return nil, err
}
+ // If the current total usage in the cgroup is less than what was previously
+ // recorded then it means the container was restarted and runs in a new cgroup
+ if previousStats.Duration > cgroupStats.CPU.Usage.Total {
+ previousStats = &define.ContainerStats{}
+ }
+
previousCPU := previousStats.CPUNano
now := uint64(time.Now().UnixNano())
stats.Duration = cgroupStats.CPU.Usage.Total