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 }