Sfoglia il codice sorgente

Implement docker top with standalone client lib.

Signed-off-by: David Calavera <david.calavera@gmail.com>
David Calavera 9 anni fa
parent
commit
7573c153c5
2 ha cambiato i file con 32 aggiunte e 13 eliminazioni
  1. 29 0
      api/client/lib/container_top.go
  2. 3 13
      api/client/top.go

+ 29 - 0
api/client/lib/container_top.go

@@ -0,0 +1,29 @@
+package lib
+
+import (
+	"encoding/json"
+	"net/url"
+	"strings"
+
+	"github.com/docker/docker/api/types"
+)
+
+// ContainerTop shows process information from within a container.
+func (cli *Client) ContainerTop(containerID string, arguments []string) (types.ContainerProcessList, error) {
+	var (
+		query    url.Values
+		response types.ContainerProcessList
+	)
+	if len(arguments) > 0 {
+		query.Set("ps_args", strings.Join(arguments, " "))
+	}
+
+	resp, err := cli.get("/containers/"+containerID+"/top", query, nil)
+	if err != nil {
+		return response, err
+	}
+	defer ensureReaderClosed(resp)
+
+	err = json.NewDecoder(resp.body).Decode(&response)
+	return response, err
+}

+ 3 - 13
api/client/top.go

@@ -1,13 +1,10 @@
 package client
 
 import (
-	"encoding/json"
 	"fmt"
-	"net/url"
 	"strings"
 	"text/tabwriter"
 
-	"github.com/docker/docker/api/types"
 	Cli "github.com/docker/docker/cli"
 	flag "github.com/docker/docker/pkg/mflag"
 )
@@ -21,23 +18,16 @@ func (cli *DockerCli) CmdTop(args ...string) error {
 
 	cmd.ParseFlags(args, true)
 
-	val := url.Values{}
+	var arguments []string
 	if cmd.NArg() > 1 {
-		val.Set("ps_args", strings.Join(cmd.Args()[1:], " "))
+		arguments = cmd.Args()[1:]
 	}
 
-	serverResp, err := cli.call("GET", "/containers/"+cmd.Arg(0)+"/top?"+val.Encode(), nil, nil)
+	procList, err := cli.client.ContainerTop(cmd.Arg(0), arguments)
 	if err != nil {
 		return err
 	}
 
-	defer serverResp.body.Close()
-
-	procList := types.ContainerProcessList{}
-	if err := json.NewDecoder(serverResp.body).Decode(&procList); err != nil {
-		return err
-	}
-
 	w := tabwriter.NewWriter(cli.out, 20, 1, 3, ' ', 0)
 	fmt.Fprintln(w, strings.Join(procList.Titles, "\t"))