diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-06-19 20:44:50 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-06-19 20:46:54 +0200 |
commit | b5b4353ad8b1c5535fe592dc6bed03853ba73ccf (patch) | |
tree | b64d76067420cc689f545f336266f72e22ab26f4 | |
parent | 48ac223f31d4b9bb456f1245529daa52f59a0dab (diff) |
http: Support multiple metric formats
-rw-r--r-- | http/http.go | 14 | ||||
-rw-r--r-- | http/http_test.go | 2 |
2 files changed, 15 insertions, 1 deletions
diff --git a/http/http.go b/http/http.go index 7eb7184..8a219dc 100644 --- a/http/http.go +++ b/http/http.go @@ -181,7 +181,7 @@ func (s *Server) logHandler(w http.ResponseWriter, r *http.Request) (interface{} return entries, nil } -func (s *Server) metricHandler(w http.ResponseWriter, r *http.Request) (interface{}, *httpError) { +func (s *Server) basicMetricHandler(w http.ResponseWriter, r *http.Request) (interface{}, *httpError) { resolution, err := resolutionFrom(r) if err != nil { return nil, newHTTPBadRequest(err) @@ -220,6 +220,18 @@ func (s *Server) metricHandler(w http.ResponseWriter, r *http.Request) (interfac }, nil } +func (s *Server) metricHandler(w http.ResponseWriter, r *http.Request) (interface{}, *httpError) { + format := "" + if formatParams := r.URL.Query()["format"]; len(formatParams) > 0 { + format = formatParams[0] + } + switch format { + case "", "basic": + return s.basicMetricHandler(w, r) + } + return nil, newHTTPBadRequest(fmt.Errorf("invalid metric format: %s", format)) +} + // Close shuts down the HTTP server. func (s *Server) Close() error { return s.server.Shutdown(context.TODO()) } diff --git a/http/http_test.go b/http/http_test.go index 9608fcd..37db737 100644 --- a/http/http_test.go +++ b/http/http_test.go @@ -106,8 +106,10 @@ func TestRequests(t *testing.T) { {http.MethodGet, "/cache/v1/?n=foo", `{"status":400,"message":"invalid value for parameter n: foo"}`, 400}, {http.MethodGet, "/cache/v1/?n=1", cr2, 200}, {http.MethodGet, "/metric/v1/", mr1, 200}, + {http.MethodGet, "/metric/v1/?format=basic", mr1, 200}, {http.MethodGet, "/metric/v1/?resolution=1m", mr1, 200}, {http.MethodGet, "/metric/v1/?resolution=0", mr1, 200}, + {http.MethodGet, "/metric/v1/?format=foo", `{"status":400,"message":"invalid metric format: foo"}`, 400}, {http.MethodGet, "/metric/v1/?resolution=foo", `{"status":400,"message":"time: invalid duration foo"}`, 400}, {http.MethodDelete, "/cache/v1/", `{"message":"Cleared cache."}`, 200}, } |