func xrayCompleteHandler()

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)
		},
	}
}