qmp-testing-suite/golang-producer-consumer/vendor/gitlab-app.eng.qops.net/reporting-framework/ripsaw-logger-golang/transaction.go

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
}