diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-01-15 23:33:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-15 23:33:10 +0100 |
commit | 741e29caf39c57551724a48265f6d9641f8f6fe0 (patch) | |
tree | 402ec832106bdc4da02fcc30927c465152b1fe72 /pkg/api/handlers | |
parent | 0870e88ff48eaf6b5624044b7cd2bc35cff85150 (diff) | |
parent | 69bd57f518cbc7c97808a663d76066d0d247ac0f (diff) | |
download | podman-741e29caf39c57551724a48265f6d9641f8f6fe0.tar.gz podman-741e29caf39c57551724a48265f6d9641f8f6fe0.tar.bz2 podman-741e29caf39c57551724a48265f6d9641f8f6fe0.zip |
Merge pull request #4860 from vrothberg/v2-top
v2 api: top improvements
Diffstat (limited to 'pkg/api/handlers')
-rw-r--r-- | pkg/api/handlers/containers_top.go | 21 | ||||
-rw-r--r-- | pkg/api/handlers/generic/containers_stats.go | 2 | ||||
-rw-r--r-- | pkg/api/handlers/types.go | 1 | ||||
-rw-r--r-- | pkg/api/handlers/utils/handler.go | 16 |
4 files changed, 20 insertions, 20 deletions
diff --git a/pkg/api/handlers/containers_top.go b/pkg/api/handlers/containers_top.go index bab559da1..6b7688eb0 100644 --- a/pkg/api/handlers/containers_top.go +++ b/pkg/api/handlers/containers_top.go @@ -5,7 +5,6 @@ import ( "strings" "github.com/containers/libpod/libpod" - "github.com/containers/libpod/libpod/define" "github.com/containers/libpod/pkg/api/handlers/utils" "github.com/gorilla/mux" "github.com/gorilla/schema" @@ -16,10 +15,14 @@ func TopContainer(w http.ResponseWriter, r *http.Request) { runtime := r.Context().Value("runtime").(*libpod.Runtime) decoder := r.Context().Value("decoder").(*schema.Decoder) + defaultValue := "-ef" + if utils.IsLibpodRequest(r) { + defaultValue = "" + } query := struct { PsArgs string `schema:"ps_args"` }{ - PsArgs: "-ef", + PsArgs: defaultValue, } if err := decoder.Decode(&query, r.URL.Query()); err != nil { utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, @@ -28,23 +31,13 @@ func TopContainer(w http.ResponseWriter, r *http.Request) { } name := mux.Vars(r)["name"] - ctnr, err := runtime.LookupContainer(name) + c, err := runtime.LookupContainer(name) if err != nil { utils.ContainerNotFound(w, name, err) return } - state, err := ctnr.State() - if err != nil { - utils.InternalServerError(w, err) - return - } - if state != define.ContainerStateRunning { - utils.ContainerNotRunning(w, name, errors.Errorf("Container %s must be running to perform top operation", name)) - return - } - - output, err := ctnr.Top([]string{}) + output, err := c.Top([]string{query.PsArgs}) if err != nil { utils.InternalServerError(w, err) return diff --git a/pkg/api/handlers/generic/containers_stats.go b/pkg/api/handlers/generic/containers_stats.go index 26c8efa15..e33d37606 100644 --- a/pkg/api/handlers/generic/containers_stats.go +++ b/pkg/api/handlers/generic/containers_stats.go @@ -43,7 +43,7 @@ func StatsContainer(w http.ResponseWriter, r *http.Request) { return } - // If the container isn't returning, then let's not bother and return + // If the container isn't running, then let's not bother and return // immediately. state, err := ctnr.State() if err != nil { diff --git a/pkg/api/handlers/types.go b/pkg/api/handlers/types.go index 9edbbdccc..2526a3317 100644 --- a/pkg/api/handlers/types.go +++ b/pkg/api/handlers/types.go @@ -135,7 +135,6 @@ type Stats struct { type ContainerTopOKBody struct { dockerContainer.ContainerTopOKBody - ID string `json:"Id"` } type PodCreateConfig struct { diff --git a/pkg/api/handlers/utils/handler.go b/pkg/api/handlers/utils/handler.go index 65698bfd3..2fd9bffba 100644 --- a/pkg/api/handlers/utils/handler.go +++ b/pkg/api/handlers/utils/handler.go @@ -6,10 +6,18 @@ import ( "io" "net/http" "os" + "strings" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" ) +// IsLibpodRequest returns true if the request related to a libpod endpoint +// (e.g., /v2/libpod/...). +func IsLibpodRequest(r *http.Request) bool { + split := strings.Split(r.URL.String(), "/") + return len(split) >= 3 && split[2] == "libpod" +} + // WriteResponse encodes the given value as JSON or string and renders it for http client func WriteResponse(w http.ResponseWriter, code int, value interface{}) { switch v := value.(type) { @@ -18,14 +26,14 @@ func WriteResponse(w http.ResponseWriter, code int, value interface{}) { w.WriteHeader(code) if _, err := fmt.Fprintln(w, v); err != nil { - log.Errorf("unable to send string response: %q", err) + logrus.Errorf("unable to send string response: %q", err) } case *os.File: w.Header().Set("Content-Type", "application/octet; charset=us-ascii") w.WriteHeader(code) if _, err := io.Copy(w, v); err != nil { - log.Errorf("unable to copy to response: %q", err) + logrus.Errorf("unable to copy to response: %q", err) } default: WriteJSON(w, code, value) @@ -40,6 +48,6 @@ func WriteJSON(w http.ResponseWriter, code int, value interface{}) { coder := json.NewEncoder(w) coder.SetEscapeHTML(true) if err := coder.Encode(value); err != nil { - log.Errorf("unable to write json: %q", err) + logrus.Errorf("unable to write json: %q", err) } } |