diff --git a/command/agent/http.go b/command/agent/http.go index 792055b6bf..a254ecf195 100644 --- a/command/agent/http.go +++ b/command/agent/http.go @@ -1,7 +1,6 @@ package agent import ( - "bytes" "encoding/json" "github.com/hashicorp/consul/consul/structs" "github.com/mitchellh/mapstructure" @@ -138,15 +137,23 @@ func (s *HTTPServer) wrap(handler func(resp http.ResponseWriter, req *http.Reque return } + prettyPrint := false + if req.URL.Query().Get("pretty") != "" { + prettyPrint = true + } // Write out the JSON object if obj != nil { - var buf bytes.Buffer - enc := json.NewEncoder(&buf) - if err = enc.Encode(obj); err != nil { + var buf []byte + if prettyPrint { + buf, err = json.MarshalIndent(obj, "", " ") + } else { + buf, err = json.Marshal(obj) + } + if err != nil { goto HAS_ERR } resp.Header().Set("Content-Type", "application/json") - resp.Write(buf.Bytes()) + resp.Write(buf) } } return f diff --git a/website/source/docs/agent/http.html.markdown b/website/source/docs/agent/http.html.markdown index c95662b05b..d5757fa58c 100644 --- a/website/source/docs/agent/http.html.markdown +++ b/website/source/docs/agent/http.html.markdown @@ -79,6 +79,12 @@ which is the last time a server was contacted by the leader node in milliseconds. The "X-Consul-KnownLeader" also indicates if there is a known leader. These can be used to gauge if a stale read should be used. +## Formatted JSON Output + +By default, the output of all HTTP API requests return minimized JSON with all +whitespace removed. By adding "?pretty=true" to the HTTP request URL, +formatted JSON will be returned. + ## KV The KV endpoint is used to expose a simple key/value store. This can be used