module Sentry::Net::HTTP
def request(req, body = nil, &block)
```
end
# .....
end
}
return request(req, body, &block) # <- request will be called for the second time from the first call
req['connection'] ||= 'close'
start {
unless started?
def request(req, body = nil, &block)
```
Here's part of its definition. As you can see, it usually calls itself inside a #start block
To explain how the entire thing works, we need to know how the original Net::HTTP#request works
def request(req, body = nil, &block) return super unless started? && Sentry.initialized? return super if from_sentry_sdk? Sentry.with_child_span(op: OP_NAME, start_timestamp: Sentry.utc_now.to_f) do |sentry_span| set_sentry_trace_header(req, sentry_span) super.tap do |res| record_sentry_breadcrumb(req, res) if sentry_span request_info = extract_request_info(req) sentry_span.set_description("#{request_info[:method]} #{request_info[:url]}") sentry_span.set_data('url', request_info[:url]) sentry_span.set_data('http.method', request_info[:method]) sentry_span.set_data('http.query', request_info[:query]) if request_info[:query] sentry_span.set_data('status', res.code.to_i) end end end end