diff options
author | Valentin Rothberg <rothberg@redhat.com> | 2020-01-15 16:51:46 +0100 |
---|---|---|
committer | Valentin Rothberg <rothberg@redhat.com> | 2020-01-15 17:08:22 +0100 |
commit | a65068aff8d0cd9fdb8993c20e609364eb1213af (patch) | |
tree | 5758bdaaff7fe9ac72cdd9fc2363ef85537c50b8 /pkg | |
parent | 9d54815c2690353a295b602b67084fd1f3c095e8 (diff) | |
download | podman-a65068aff8d0cd9fdb8993c20e609364eb1213af.tar.gz podman-a65068aff8d0cd9fdb8993c20e609364eb1213af.tar.bz2 podman-a65068aff8d0cd9fdb8993c20e609364eb1213af.zip |
api: utils: add an `IsLibpodRequest` handler
Add a hanlder to figure out if the specified http request came through
a libpod endpoint. A first user is the top endpoint which has a
different default value for `ps_args` depending if the request came
through the docker or libpod endpoint.
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/api/handlers/containers_top.go | 6 | ||||
-rw-r--r-- | pkg/api/handlers/utils/handler.go | 16 |
2 files changed, 17 insertions, 5 deletions
diff --git a/pkg/api/handlers/containers_top.go b/pkg/api/handlers/containers_top.go index 1a310262c..6b7688eb0 100644 --- a/pkg/api/handlers/containers_top.go +++ b/pkg/api/handlers/containers_top.go @@ -15,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, 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) } } |