in context.go [174:226]
func (c *Context) SetHTTPRequest(req *http.Request) {
// Special cases to avoid calling into fmt.Sprintf in most cases.
var httpVersion string
switch {
case req.ProtoMajor == 1 && req.ProtoMinor == 1:
httpVersion = "1.1"
case req.ProtoMajor == 2 && req.ProtoMinor == 0:
httpVersion = "2.0"
default:
httpVersion = fmt.Sprintf("%d.%d", req.ProtoMajor, req.ProtoMinor)
}
c.httpRequest = req
c.request = model.Request{
Body: c.request.Body,
URL: apmhttputil.RequestURL(req),
Method: truncateString(req.Method),
HTTPVersion: httpVersion,
Cookies: req.Cookies(),
}
c.model.Request = &c.request
if c.captureHeaders {
for k, values := range req.Header {
if k == "Cookie" {
// We capture cookies in the request structure.
continue
}
c.request.Headers = append(c.request.Headers, model.Header{
Key: k, Values: values,
})
}
}
c.requestSocket = model.RequestSocket{
RemoteAddress: apmhttputil.RemoteAddr(req),
}
if c.requestSocket != (model.RequestSocket{}) {
c.request.Socket = &c.requestSocket
}
if c.model.User == nil {
username, _, ok := req.BasicAuth()
if !ok && req.URL.User != nil {
username = req.URL.User.Username()
}
c.user.Username = truncateString(username)
if c.user.Username != "" {
c.model.User = &c.user
}
}
}