docker_api_stats.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/docker/docker/api/types"
  6. "github.com/go-check/check"
  7. "strings"
  8. "time"
  9. )
  10. func (s *DockerSuite) TestCliStatsNoStreamGetCpu(c *check.C) {
  11. out, _ := dockerCmd(c, "run", "-d", "--cpu-quota=2000", "busybox", "/bin/sh", "-c", "while true;do echo 'Hello';done")
  12. id := strings.TrimSpace(out)
  13. if err := waitRun(id); err != nil {
  14. c.Fatal(err)
  15. }
  16. ch := make(chan error)
  17. var v *types.Stats
  18. go func() {
  19. _, body, err := sockRequestRaw("GET", fmt.Sprintf("/containers/%s/stats?stream=1", id), nil, "")
  20. if err != nil {
  21. ch <- err
  22. }
  23. dec := json.NewDecoder(body)
  24. if err := dec.Decode(&v); err != nil {
  25. ch <- err
  26. }
  27. ch <- nil
  28. }()
  29. select {
  30. case e := <-ch:
  31. if e == nil {
  32. var cpuPercent = 0.0
  33. cpuDelta := float64(v.CpuStats.CpuUsage.TotalUsage - v.PreCpuStats.CpuUsage.TotalUsage)
  34. systemDelta := float64(v.CpuStats.SystemUsage - v.PreCpuStats.SystemUsage)
  35. cpuPercent = (cpuDelta / systemDelta) * float64(len(v.CpuStats.CpuUsage.PercpuUsage)) * 100.0
  36. if cpuPercent < 1.8 || cpuPercent > 2.2 {
  37. c.Fatal("docker stats with no-stream get cpu usage failed")
  38. }
  39. }
  40. case <-time.After(4 * time.Second):
  41. c.Fatal("docker stats with no-stream timeout")
  42. }
  43. }