lib/ddtrace/contrib/http/patcher.rb in ddtrace-0.13.0.beta1 vs lib/ddtrace/contrib/http/patcher.rb in ddtrace-0.13.0
- old
+ new
@@ -46,10 +46,12 @@
# Patcher enables patching of 'net/http' module.
module Patcher
include Base
register_as :http, auto_patch: true
option :distributed_tracing, default: false
+ option :service_name, default: SERVICE
+ option :tracer, default: Datadog.tracer
@patched = false
module_function
@@ -62,50 +64,50 @@
require 'ddtrace/ext/app_types'
require 'ddtrace/ext/http'
require 'ddtrace/ext/net'
require 'ddtrace/ext/distributed'
- patch_http()
+ patch_http
@patched = true
rescue StandardError => e
Datadog::Tracer.log.error("Unable to apply net/http integration: #{e}")
end
end
@patched
end
- # patched? tells wether patch has been successfully applied
+ # patched? tells whether patch has been successfully applied
def patched?
@patched
end
# rubocop:disable Metrics/MethodLength
# rubocop:disable Metrics/BlockLength
# rubocop:disable Metrics/AbcSize
def patch_http
::Net::HTTP.class_eval do
- alias_method :initialize_without_datadog, :initialize
- Datadog::Patcher.without_warnings do
- remove_method :initialize
- end
-
- def initialize(*args)
- pin = Datadog::Pin.new(SERVICE, app: APP, app_type: Datadog::Ext::AppTypes::WEB)
- pin.onto(self)
- initialize_without_datadog(*args)
- end
-
alias_method :request_without_datadog, :request
remove_method :request
+ def datadog_pin
+ @datadog_pindatadog_pin ||= begin
+ service = Datadog.configuration[:http][:service_name]
+ tracer = Datadog.configuration[:http][:tracer]
+
+ Datadog::Pin.new(service, app: APP, app_type: Datadog::Ext::AppTypes::WEB, tracer: tracer)
+ end
+ end
+
def request(req, body = nil, &block) # :yield: +response+
- pin = Datadog::Pin.get_from(self)
+ pin = datadog_pin
return request_without_datadog(req, body, &block) unless pin && pin.tracer
transport = pin.tracer.writer.transport
- return request_without_datadog(req, body, &block) if
- Datadog::Contrib::HTTP.should_skip_tracing?(req, @address, @port, transport, pin)
+
+ if Datadog::Contrib::HTTP.should_skip_tracing?(req, @address, @port, transport, pin)
+ return request_without_datadog(req, body, &block)
+ end
pin.tracer.trace(NAME) do |span|
begin
span.service = pin.service
span.span_type = Datadog::Ext::HTTP::TYPE