diff options
Diffstat (limited to 'http')
-rw-r--r-- | http/http.go | 14 | ||||
-rw-r--r-- | http/http_test.go | 3 |
2 files changed, 16 insertions, 1 deletions
diff --git a/http/http.go b/http/http.go index 26e5b25..b7f1a86 100644 --- a/http/http.go +++ b/http/http.go @@ -113,6 +113,14 @@ func countFrom(r *http.Request) (int, error) { return n, nil } +func resolutionFrom(r *http.Request) (time.Duration, error) { + param := r.URL.Query().Get("resolution") + if param == "" { + return time.Minute, nil + } + return time.ParseDuration(param) +} + func (s *Server) cacheHandler(w http.ResponseWriter, r *http.Request) (interface{}, *httpError) { count, err := countFrom(r) if err != nil { @@ -165,7 +173,11 @@ func (s *Server) logHandler(w http.ResponseWriter, r *http.Request) (interface{} } func (s *Server) metricHandler(w http.ResponseWriter, r *http.Request) (interface{}, *httpError) { - lstats, err := s.logger.Stats() + resolution, err := resolutionFrom(r) + if err != nil { + return nil, newHTTPBadRequest(err) + } + lstats, err := s.logger.Stats(resolution) if err != nil { return nil, newHTTPError(err) } diff --git a/http/http_test.go b/http/http_test.go index a07a7c4..6fc53d8 100644 --- a/http/http_test.go +++ b/http/http_test.go @@ -105,6 +105,9 @@ 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/?resolution=1m", mr1, 200}, + {http.MethodGet, "/metric/v1/?resolution=0", mr1, 200}, + {http.MethodGet, "/metric/v1/?resolution=foo", `{"status":400,"message":"time: invalid duration foo"}`, 400}, {http.MethodDelete, "/cache/v1/", `{"message":"Cleared cache."}`, 200}, } |