X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f159fab8f9d6bc4254192ce43432defd5bd400aa..2e74236fa27822addd856f194befc28382990ce0:/sdk/go/httpserver/metrics.go diff --git a/sdk/go/httpserver/metrics.go b/sdk/go/httpserver/metrics.go index b52068e957..f3291f6c5e 100644 --- a/sdk/go/httpserver/metrics.go +++ b/sdk/go/httpserver/metrics.go @@ -10,11 +10,12 @@ import ( "strings" "time" - "git.curoverse.com/arvados.git/sdk/go/stats" - "github.com/Sirupsen/logrus" + "git.arvados.org/arvados.git/sdk/go/auth" + "git.arvados.org/arvados.git/sdk/go/stats" "github.com/gogo/protobuf/jsonpb" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" + "github.com/sirupsen/logrus" ) type Handler interface { @@ -23,7 +24,7 @@ type Handler interface { // Returns an http.Handler that serves the Handler's metrics // data at /metrics and /metrics.json, and passes other // requests through to next. - ServeAPI(next http.Handler) http.Handler + ServeAPI(token string, next http.Handler) http.Handler } type metrics struct { @@ -73,19 +74,24 @@ func (m *metrics) ServeHTTP(w http.ResponseWriter, req *http.Request) { // metrics API endpoints (currently "GET /metrics(.json)?") and passes // other requests through to next. // +// If the given token is not empty, that token must be supplied by a +// client in order to access the metrics endpoints. +// // Typical example: // // m := Instrument(...) -// srv := http.Server{Handler: m.ServeAPI(m)} -func (m *metrics) ServeAPI(next http.Handler) http.Handler { +// srv := http.Server{Handler: m.ServeAPI("secrettoken", m)} +func (m *metrics) ServeAPI(token string, next http.Handler) http.Handler { + jsonMetrics := auth.RequireLiteralToken(token, http.HandlerFunc(m.exportJSON)) + plainMetrics := auth.RequireLiteralToken(token, m.exportProm) return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { switch { case req.Method != "GET" && req.Method != "HEAD": next.ServeHTTP(w, req) case req.URL.Path == "/metrics.json": - m.exportJSON(w, req) + jsonMetrics.ServeHTTP(w, req) case req.URL.Path == "/metrics": - m.exportProm.ServeHTTP(w, req) + plainMetrics.ServeHTTP(w, req) default: next.ServeHTTP(w, req) } @@ -98,7 +104,7 @@ func (m *metrics) ServeAPI(next http.Handler) http.Handler { // // For the metrics to be accurate, the caller must ensure every // request passed to the Handler also passes through -// LogRequests(logger, ...), and vice versa. +// LogRequests(...), and vice versa. // // If registry is nil, a new registry is created. //