github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/metric/http.go (about) 1 package metric 2 3 import ( 4 "net/http" 5 6 "code.cloudfoundry.org/lager" 7 "github.com/felixge/httpsnoop" 8 ) 9 10 type MetricsHandler struct { 11 Logger lager.Logger 12 Route string 13 Handler http.Handler 14 Monitor *Monitor 15 } 16 17 func WrapHandler( 18 logger lager.Logger, 19 monitor *Monitor, 20 route string, 21 handler http.Handler, 22 ) http.Handler { 23 return MetricsHandler{ 24 Logger: logger, 25 Monitor: monitor, 26 Route: route, 27 Handler: handler, 28 } 29 } 30 31 func (handler MetricsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 32 metrics := httpsnoop.CaptureMetrics(handler.Handler, w, r) 33 34 HTTPResponseTime{ 35 Route: handler.Route, 36 Path: r.URL.Path, 37 Method: r.Method, 38 StatusCode: metrics.Code, 39 Duration: metrics.Duration, 40 }.Emit(handler.Logger, handler.Monitor) 41 }