viz.go 1016 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package graph
  2. import (
  3. "strings"
  4. "github.com/docker/docker/engine"
  5. "github.com/docker/docker/image"
  6. )
  7. func (s *TagStore) CmdViz(job *engine.Job) engine.Status {
  8. images, _ := s.graph.Map()
  9. if images == nil {
  10. return engine.StatusOK
  11. }
  12. job.Stdout.Write([]byte("digraph docker {\n"))
  13. var (
  14. parentImage *image.Image
  15. err error
  16. )
  17. for _, image := range images {
  18. parentImage, err = image.GetParent()
  19. if err != nil {
  20. return job.Errorf("Error while getting parent image: %v", err)
  21. }
  22. if parentImage != nil {
  23. job.Stdout.Write([]byte(" \"" + parentImage.ID + "\" -> \"" + image.ID + "\"\n"))
  24. } else {
  25. job.Stdout.Write([]byte(" base -> \"" + image.ID + "\" [style=invis]\n"))
  26. }
  27. }
  28. for id, repos := range s.GetRepoRefs() {
  29. job.Stdout.Write([]byte(" \"" + id + "\" [label=\"" + id + "\\n" + strings.Join(repos, "\\n") + "\",shape=box,fillcolor=\"paleturquoise\",style=\"filled,rounded\"];\n"))
  30. }
  31. job.Stdout.Write([]byte(" base [style=invisible]\n}\n"))
  32. return engine.StatusOK
  33. }