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  }