github.com/lingyao2333/mo-zero@v1.4.1/rest/handler/metrichandler.go (about)

     1  package handler
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/lingyao2333/mo-zero/core/stat"
     7  	"github.com/lingyao2333/mo-zero/core/timex"
     8  )
     9  
    10  // MetricHandler returns a middleware that stat the metrics.
    11  func MetricHandler(metrics *stat.Metrics) func(http.Handler) http.Handler {
    12  	return func(next http.Handler) http.Handler {
    13  		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    14  			startTime := timex.Now()
    15  			defer func() {
    16  				metrics.Add(stat.Task{
    17  					Duration: timex.Since(startTime),
    18  				})
    19  			}()
    20  
    21  			next.ServeHTTP(w, r)
    22  		})
    23  	}
    24  }