aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-06-19 20:44:50 +0200
committerMartin Polden <mpolden@mpolden.no>2020-06-19 20:46:54 +0200
commitb5b4353ad8b1c5535fe592dc6bed03853ba73ccf (patch)
treeb64d76067420cc689f545f336266f72e22ab26f4
parent48ac223f31d4b9bb456f1245529daa52f59a0dab (diff)
http: Support multiple metric formats
-rw-r--r--http/http.go14
-rw-r--r--http/http_test.go2
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},
}