41 lines
966 B
Go
41 lines
966 B
Go
package docker
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
// TopResult represents the list of processes running in a container, as
|
|
// returned by /containers/<id>/top.
|
|
//
|
|
// See https://goo.gl/FLwpPl for more details.
|
|
type TopResult struct {
|
|
Titles []string
|
|
Processes [][]string
|
|
}
|
|
|
|
// TopContainer returns processes running inside a container
|
|
//
|
|
// See https://goo.gl/FLwpPl for more details.
|
|
func (c *Client) TopContainer(id string, psArgs string) (TopResult, error) {
|
|
var args string
|
|
var result TopResult
|
|
if psArgs != "" {
|
|
args = fmt.Sprintf("?ps_args=%s", psArgs)
|
|
}
|
|
path := fmt.Sprintf("/containers/%s/top%s", id, args)
|
|
resp, err := c.do(http.MethodGet, path, doOptions{})
|
|
if err != nil {
|
|
var e *Error
|
|
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
|
return result, &NoSuchContainer{ID: id}
|
|
}
|
|
return result, err
|
|
}
|
|
defer resp.Body.Close()
|
|
err = json.NewDecoder(resp.Body).Decode(&result)
|
|
return result, err
|
|
}
|