github.com/grafana/pyroscope@v1.18.0/pkg/querier/stats/time_middleware.go (about) 1 // SPDX-License-Identifier: AGPL-3.0-only 2 // Provenance-includes-location: https://github.com/cortexproject/cortex/blob/master/pkg/querier/stats/time_middleware.go 3 // Provenance-includes-license: Apache-2.0 4 // Provenance-includes-copyright: The Cortex Authors. 5 6 package stats 7 8 import ( 9 "net/http" 10 "time" 11 ) 12 13 // WallTimeMiddleware tracks the wall time. 14 type WallTimeMiddleware struct{} 15 16 // NewWallTimeMiddleware makes a new WallTimeMiddleware. 17 func NewWallTimeMiddleware() WallTimeMiddleware { 18 return WallTimeMiddleware{} 19 } 20 21 // Wrap implements middleware.Interface. 22 func (m WallTimeMiddleware) Wrap(next http.Handler) http.Handler { 23 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 24 if !IsEnabled(r.Context()) { 25 next.ServeHTTP(w, r) 26 return 27 } 28 29 startTime := time.Now() 30 next.ServeHTTP(w, r) 31 32 stats := FromContext(r.Context()) 33 stats.AddWallTime(time.Since(startTime)) 34 }) 35 }