49 lines
1.3 KiB
Go
Executable File
49 lines
1.3 KiB
Go
Executable File
package ripsawlogger
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/satori/go.uuid"
|
|
)
|
|
|
|
func EnsureTransactionHeaders(handler http.Handler) http.Handler {
|
|
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
// ensure an X-Transaction-ID header
|
|
if _, ok := r.Header[http.CanonicalHeaderKey("X-Transaction-ID")]; !ok {
|
|
r.Header.Set(http.CanonicalHeaderKey("X-Transaction-ID"), uuid.NewV4().String())
|
|
}
|
|
|
|
// ensure an X-Request-ID header
|
|
if _, ok := r.Header[http.CanonicalHeaderKey("X-Request-ID")]; !ok {
|
|
r.Header.Set(http.CanonicalHeaderKey("X-Request-ID"), uuid.NewV4().String())
|
|
}
|
|
|
|
// set outgoing headers
|
|
w.Header().Set("X-Transaction-ID", r.Header.Get("X-Transaction-ID"))
|
|
w.Header().Set("X-Request-ID", r.Header.Get("X-Request-ID"))
|
|
|
|
handler.ServeHTTP(w, r)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
func GetTransactionToken(key string, r *http.Request) interface{} {
|
|
if key == "transactionId" {
|
|
if transactionId := r.Header.Get("X-Transaction-ID"); len(transactionId) > 0 {
|
|
return transactionId
|
|
}
|
|
} else if key == "requestId" {
|
|
if requestId := r.Header.Get("X-Request-ID"); len(requestId) > 0 {
|
|
return requestId
|
|
}
|
|
} else if key == "parentRequestId" {
|
|
if parentRequestId := r.Header.Get("X-Parent-Request-ID"); len(parentRequestId) > 0 {
|
|
return parentRequestId
|
|
}
|
|
}
|
|
return nil
|
|
}
|