in xray/aws.go [195:248]
func xrayCompleteHandler(filename string) request.NamedHandler {
whitelistJSON := parseWhitelistJSON(filename)
whitelist := &jsonMap{}
err := json.Unmarshal(whitelistJSON, &whitelist.object)
if err != nil {
panic(err)
}
return request.NamedHandler{
Name: "XRayCompleteHandler",
Fn: func(r *request.Request) {
curseg := GetSegment(r.HTTPRequest.Context())
for curseg != nil && curseg.Namespace != "aws" {
curseg.Close(nil)
curseg = curseg.parent
}
if curseg == nil {
return
}
opseg := curseg
opseg.Lock()
for k, v := range extractRequestParameters(r, whitelist) {
opseg.GetAWS()[strings.ToLower(addUnderScoreBetweenWords(k))] = v
}
for k, v := range extractResponseParameters(r, whitelist) {
opseg.GetAWS()[strings.ToLower(addUnderScoreBetweenWords(k))] = v
}
opseg.GetAWS()["region"] = r.ClientInfo.SigningRegion
opseg.GetAWS()["operation"] = r.Operation.Name
opseg.GetAWS()["retries"] = r.RetryCount
opseg.GetAWS()[RequestIDKey] = r.RequestID
if r.HTTPResponse != nil {
opseg.GetHTTP().GetResponse().Status = r.HTTPResponse.StatusCode
opseg.GetHTTP().GetResponse().ContentLength = int(r.HTTPResponse.ContentLength)
if extendedRequestID := r.HTTPResponse.Header.Get(S3ExtendedRequestIDHeaderKey); extendedRequestID != "" {
opseg.GetAWS()[ExtendedRequestIDKey] = extendedRequestID
}
}
if request.IsErrorThrottle(r.Error) {
opseg.Throttle = true
}
opseg.Unlock()
opseg.Close(r.Error)
},
}
}