github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/middleware/request_id.go (about)

     1  package middleware
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/gofrs/uuid"
     7  	"github.com/hellofresh/janus/pkg/observability"
     8  )
     9  
    10  type reqIDKeyType int
    11  
    12  const (
    13  	reqIDKey        reqIDKeyType = iota
    14  	requestIDHeader              = "X-Request-ID"
    15  )
    16  
    17  // RequestID middleware
    18  func RequestID(handler http.Handler) http.Handler {
    19  	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    20  		requestID := r.Header.Get(requestIDHeader)
    21  		if requestID == "" {
    22  			requestID = uuid.Must(uuid.NewV4()).String()
    23  		}
    24  
    25  		r.Header.Set(requestIDHeader, requestID)
    26  		w.Header().Set(requestIDHeader, requestID)
    27  
    28  		handler.ServeHTTP(w, r.WithContext(observability.RequestIDToContext(r.Context(), requestID)))
    29  	})
    30  }