in module/apmot/span.go [226:293]
func (s *otSpan) setTransactionContext() {
var (
component string
httpMethod string
httpStatusCode = -1
httpURL string
isError bool
)
for k, v := range s.tags {
switch k {
case "component":
component = stringify(v)
case "http.method":
httpMethod = stringify(v)
case "http.status_code":
if code, ok := v.(uint16); ok {
httpStatusCode = int(code)
}
case "http.url":
httpURL = stringify(v)
case "error":
isError, _ = v.(bool)
// Elastic APM-specific tags:
case "type":
s.ctx.tx.Type = stringify(v)
case "result":
s.ctx.tx.Result = stringify(v)
case "user.id":
s.ctx.tx.Context.SetUserID(stringify(v))
case "user.email":
s.ctx.tx.Context.SetUserEmail(stringify(v))
case "user.username":
s.ctx.tx.Context.SetUsername(stringify(v))
default:
s.ctx.tx.Context.SetLabel(k, stringify(v))
}
}
if s.ctx.tx.Type == "" {
if httpURL != "" {
s.ctx.tx.Type = "request"
} else if component != "" {
s.ctx.tx.Type = component
} else {
s.ctx.tx.Type = "custom"
}
}
if s.ctx.tx.Result == "" {
if httpStatusCode != -1 {
s.ctx.tx.Result = apmhttp.StatusCodeResult(httpStatusCode)
s.ctx.tx.Context.SetHTTPStatusCode(httpStatusCode)
} else if isError {
s.ctx.tx.Result = "error"
}
}
if httpURL != "" {
uri, err := url.ParseRequestURI(httpURL)
if err == nil {
var req http.Request
req.ProtoMajor = 1 // Assume HTTP/1.1
req.ProtoMinor = 1
req.Method = httpMethod
req.URL = uri
s.ctx.tx.Context.SetHTTPRequest(&req)
}
}
}