Browse code

move "images -viz" to client

Nate Jones authored on 2013/10/08 22:41:44
Showing 3 changed files
... ...
@@ -203,13 +203,6 @@ func getImagesJSON(srv *Server, version float64, w http.ResponseWriter, r *http.
203 203
 	}
204 204
 }
205 205
 
206
-func getImagesViz(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
207
-	if err := srv.ImagesViz(w); err != nil {
208
-		return err
209
-	}
210
-	return nil
211
-}
212
-
213 206
 func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
214 207
 	return writeJSON(w, http.StatusOK, srv.DockerInfo())
215 208
 }
... ...
@@ -1046,7 +1039,6 @@ func createRouter(srv *Server, logging bool) (*mux.Router, error) {
1046 1046
 			"/info":                           getInfo,
1047 1047
 			"/version":                        getVersion,
1048 1048
 			"/images/json":                    getImagesJSON,
1049
-			"/images/viz":                     getImagesViz,
1050 1049
 			"/images/search":                  getImagesSearch,
1051 1050
 			"/images/{name:.*}/history":       getImagesHistory,
1052 1051
 			"/images/{name:.*}/json":          getImagesByName,
... ...
@@ -1067,11 +1067,31 @@ func (cli *DockerCli) CmdImages(args ...string) error {
1067 1067
 	}
1068 1068
 
1069 1069
 	if *flViz {
1070
-		body, _, err := cli.call("GET", "/images/viz", false)
1070
+		body, _, err := cli.call("GET", "/images/json?all=1", nil)
1071 1071
 		if err != nil {
1072 1072
 			return err
1073 1073
 		}
1074
-		fmt.Fprintf(cli.out, "%s", body)
1074
+
1075
+		var outs []APIImages
1076
+		err = json.Unmarshal(body, &outs)
1077
+		if err != nil {
1078
+			return err
1079
+		}
1080
+
1081
+		fmt.Fprintf(cli.out, "digraph docker {\n")
1082
+
1083
+		for _, image := range outs {
1084
+			if image.ParentId == "" {
1085
+				fmt.Fprintf(cli.out, " base -> \"%s\" [style=invis]\n", utils.TruncateID(image.ID))
1086
+			} else {
1087
+				fmt.Fprintf(cli.out, " \"%s\" -> \"%s\"\n", utils.TruncateID(image.ParentId), utils.TruncateID(image.ID))
1088
+			}
1089
+			if image.RepoTags[0] != "<none>:<none>" {
1090
+				fmt.Fprintf(cli.out, " \"%s\" [label=\"%s\\n%s\",shape=box,fillcolor=\"paleturquoise\",style=\"filled,rounded\"];\n", utils.TruncateID(image.ID), utils.TruncateID(image.ID), strings.Join(image.RepoTags, "\\n"))
1091
+			}
1092
+		}
1093
+
1094
+		fmt.Fprintf(cli.out, " base [style=invisible]\n}\n")
1075 1095
 	} else {
1076 1096
 		v := url.Values{}
1077 1097
 		if cmd.NArg() == 1 {
... ...
@@ -233,44 +233,6 @@ func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils.
233 233
 	return img.ShortID(), nil
234 234
 }
235 235
 
236
-func (srv *Server) ImagesViz(out io.Writer) error {
237
-	images, _ := srv.runtime.graph.Map()
238
-	if images == nil {
239
-		return nil
240
-	}
241
-	out.Write([]byte("digraph docker {\n"))
242
-
243
-	var (
244
-		parentImage *Image
245
-		err         error
246
-	)
247
-	for _, image := range images {
248
-		parentImage, err = image.GetParent()
249
-		if err != nil {
250
-			return err
251
-		}
252
-		if parentImage != nil {
253
-			out.Write([]byte(" \"" + parentImage.ShortID() + "\" -> \"" + image.ShortID() + "\"\n"))
254
-		} else {
255
-			out.Write([]byte(" base -> \"" + image.ShortID() + "\" [style=invis]\n"))
256
-		}
257
-	}
258
-
259
-	reporefs := make(map[string][]string)
260
-
261
-	for name, repository := range srv.runtime.repositories.Repositories {
262
-		for tag, id := range repository {
263
-			reporefs[utils.TruncateID(id)] = append(reporefs[utils.TruncateID(id)], fmt.Sprintf("%s:%s", name, tag))
264
-		}
265
-	}
266
-
267
-	for id, repos := range reporefs {
268
-		out.Write([]byte(" \"" + id + "\" [label=\"" + id + "\\n" + strings.Join(repos, "\\n") + "\",shape=box,fillcolor=\"paleturquoise\",style=\"filled,rounded\"];\n"))
269
-	}
270
-	out.Write([]byte(" base [style=invisible]\n}\n"))
271
-	return nil
272
-}
273
-
274 236
 func (srv *Server) Images(all bool, filter string) ([]APIImages, error) {
275 237
 	var (
276 238
 		allImages map[string]*Image
... ...
@@ -330,6 +292,7 @@ func (srv *Server) Images(all bool, filter string) ([]APIImages, error) {
330 330
 		for _, image := range allImages {
331 331
 			var out APIImages
332 332
 			out.ID = image.ID
333
+			out.ParentId = image.Parent
333 334
 			out.RepoTags = []string{"<none>:<none>"}
334 335
 			out.Created = image.Created.Unix()
335 336
 			out.Size = image.Size