mirror of
				https://github.com/3ybactuk/marketplace-go-service-project.git
				synced 2025-10-31 22:43:45 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			748 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			748 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package middlewares
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 	"strconv"
 | |
| 	"time"
 | |
| 
 | |
| 	"route256/cart/internal/infra/http/metrics"
 | |
| )
 | |
| 
 | |
| type statusWriter struct {
 | |
| 	http.ResponseWriter
 | |
| 	statusCode int
 | |
| }
 | |
| 
 | |
| func (w *statusWriter) WriteHeader(code int) {
 | |
| 	w.statusCode = code
 | |
| 	w.ResponseWriter.WriteHeader(code)
 | |
| }
 | |
| 
 | |
| func NewMetricsMiddleware(h http.Handler) http.Handler {
 | |
| 	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | |
| 		sw := &statusWriter{
 | |
| 			ResponseWriter: w,
 | |
| 			statusCode:     http.StatusOK,
 | |
| 		}
 | |
| 
 | |
| 		start := time.Now()
 | |
| 
 | |
| 		h.ServeHTTP(sw, r)
 | |
| 
 | |
| 		path := r.URL.Path
 | |
| 		status := strconv.Itoa(sw.statusCode)
 | |
| 
 | |
| 		metrics.IncRequestHandlerCount(r.Method, path, status)
 | |
| 		metrics.StoreHandlerRequestDuration(r.Method, path, status, time.Since(start))
 | |
| 	})
 | |
| }
 | 
