aboutsummaryrefslogtreecommitdiffstats
path: root/http
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-01-12 11:18:14 +0100
committerMartin Polden <mpolden@mpolden.no>2020-01-12 11:33:09 +0100
commit0353ae6a9e6d39d39ea4a8f754ae27fd99f84166 (patch)
treebd0e649c2a87678ea80abd7d8ce11adee040ea22 /http
parentaa4ed6f02282a7269ae6c2f8e078f34515e4a5b9 (diff)
Support resolution of request data points
Diffstat (limited to 'http')
-rw-r--r--http/http.go14
-rw-r--r--http/http_test.go3
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},
}