mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
Merge pull request #14580 from jakecorrenti/stats-on-non-running-container
Non-running containers now report statistics via the `podman stats`
This commit is contained in:
@ -214,10 +214,6 @@ func (s *containerStats) BlockIO() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *containerStats) PIDS() string {
|
func (s *containerStats) PIDS() string {
|
||||||
if s.PIDs == 0 {
|
|
||||||
// If things go bazinga, return a safe value
|
|
||||||
return "--"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%d", s.PIDs)
|
return fmt.Sprintf("%d", s.PIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,7 +227,7 @@ func (s *containerStats) MemUsageBytes() string {
|
|||||||
|
|
||||||
func floatToPercentString(f float64) string {
|
func floatToPercentString(f float64) string {
|
||||||
strippedFloat, err := utils.RemoveScientificNotationFromFloat(f)
|
strippedFloat, err := utils.RemoveScientificNotationFromFloat(f)
|
||||||
if err != nil || strippedFloat == 0 {
|
if err != nil {
|
||||||
// If things go bazinga, return a safe value
|
// If things go bazinga, return a safe value
|
||||||
return "--"
|
return "--"
|
||||||
}
|
}
|
||||||
@ -239,16 +235,10 @@ func floatToPercentString(f float64) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func combineHumanValues(a, b uint64) string {
|
func combineHumanValues(a, b uint64) string {
|
||||||
if a == 0 && b == 0 {
|
|
||||||
return "-- / --"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%s / %s", units.HumanSize(float64(a)), units.HumanSize(float64(b)))
|
return fmt.Sprintf("%s / %s", units.HumanSize(float64(a)), units.HumanSize(float64(b)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func combineBytesValues(a, b uint64) string {
|
func combineBytesValues(a, b uint64) string {
|
||||||
if a == 0 && b == 0 {
|
|
||||||
return "-- / --"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%s / %s", units.BytesSize(float64(a)), units.BytesSize(float64(b)))
|
return fmt.Sprintf("%s / %s", units.BytesSize(float64(a)), units.BytesSize(float64(b)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,8 +34,9 @@ func (c *Container) GetContainerStats(previousStats *define.ContainerStats) (*de
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns stats with the fields' default values respective of their type
|
||||||
if c.state.State != define.ContainerStateRunning && c.state.State != define.ContainerStatePaused {
|
if c.state.State != define.ContainerStateRunning && c.state.State != define.ContainerStatePaused {
|
||||||
return stats, define.ErrCtrStateInvalid
|
return stats, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if previousStats == nil {
|
if previousStats == nil {
|
||||||
|
@ -44,18 +44,6 @@ func StatsContainer(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the container isn't running, then let's not bother and return
|
|
||||||
// immediately.
|
|
||||||
state, err := ctnr.State()
|
|
||||||
if err != nil {
|
|
||||||
utils.InternalServerError(w, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if state != define.ContainerStateRunning {
|
|
||||||
utils.Error(w, http.StatusConflict, define.ErrCtrStateInvalid)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
stats, err := ctnr.GetContainerStats(nil)
|
stats, err := ctnr.GetContainerStats(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.InternalServerError(w, errors.Wrapf(err, "failed to obtain Container %s stats", name))
|
utils.InternalServerError(w, errors.Wrapf(err, "failed to obtain Container %s stats", name))
|
||||||
|
@ -82,7 +82,7 @@ var _ = Describe("Podman pause", func() {
|
|||||||
// check we can read stats for a paused container
|
// check we can read stats for a paused container
|
||||||
result = podmanTest.Podman([]string{"stats", "--no-stream", cid})
|
result = podmanTest.Podman([]string{"stats", "--no-stream", cid})
|
||||||
result.WaitWithDefaultTimeout()
|
result.WaitWithDefaultTimeout()
|
||||||
Expect(result).To(ExitWithError())
|
Expect(result).Should(Exit(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman pause a running container by id", func() {
|
It("podman pause a running container by id", func() {
|
||||||
|
@ -236,4 +236,15 @@ var _ = Describe("Podman stats", func() {
|
|||||||
|
|
||||||
Expect(customLimit).To(BeNumerically("<", defaultLimit))
|
Expect(customLimit).To(BeNumerically("<", defaultLimit))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman stats with a container that is not running", func() {
|
||||||
|
ctr := "created_container"
|
||||||
|
session := podmanTest.Podman([]string{"create", "--name", ctr, ALPINE})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"stats", "--no-stream", ctr})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user