module Datadog::Contrib::Ethon::EasyPatch::InstanceMethods
InstanceMethods
- implementing instrumentation
Attributes
datadog_configuration[R]
Public Instance Methods
complete()
click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 42 def complete return super unless tracer_enabled? begin response_options = mirror.options response_code = (response_options[:response_code] || response_options[:code]).to_i if response_code.zero? return_code = response_options[:return_code] message = return_code ? ::Ethon::Curl.easy_strerror(return_code) : 'unknown reason' set_span_error_message("Request has failed: #{message}") else @datadog_span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response_code) if Datadog::Ext::HTTP::ERROR_RANGE.cover?(response_code) set_span_error_message("Request has failed with HTTP error: #{response_code}") end end ensure @datadog_span.finish @datadog_span = nil end super end
datadog_before_request(parent_span: nil)
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 73 def datadog_before_request(parent_span: nil) load_datadog_configuration_for(url) @datadog_span = datadog_configuration[:tracer].trace( Ext::SPAN_REQUEST, service: uri ? service_name(uri.host, datadog_configuration) : datadog_configuration[:service_name], span_type: Datadog::Ext::HTTP::TYPE_OUTBOUND ) @datadog_span.parent = parent_span unless parent_span.nil? datadog_tag_request if datadog_configuration[:distributed_tracing] @datadog_original_headers ||= {} Datadog::HTTPPropagator.inject!(@datadog_span.context, @datadog_original_headers) self.headers = @datadog_original_headers end end
datadog_span_started?()
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 91 def datadog_span_started? instance_variable_defined?(:@datadog_span) && !@datadog_span.nil? end
headers=(headers)
click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 29 def headers=(headers) # Store headers to call this method again when span is ready @datadog_original_headers = headers super end
http_request(url, action_name, options = {})
click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 20 def http_request(url, action_name, options = {}) load_datadog_configuration_for(url) return super unless tracer_enabled? # It's tricky to get HTTP method from libcurl @datadog_method = action_name.to_s.upcase super end
perform()
click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 35 def perform load_datadog_configuration_for(url) return super unless tracer_enabled? datadog_before_request super end
reset()
click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 64 def reset super ensure @datadog_span = nil @datadog_method = nil @datadog_original_headers = nil @datadog_configuration = nil end
Private Instance Methods
analytics_enabled?()
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 137 def analytics_enabled? Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled]) end
analytics_sample_rate()
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 141 def analytics_sample_rate datadog_configuration[:analytics_sample_rate] end
datadog_tag_request()
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 99 def datadog_tag_request span = @datadog_span method = 'N/A' if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil? method = @datadog_method.to_s end span.resource = method # Set analytics sample rate Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled? return unless uri span.set_tag(Datadog::Ext::HTTP::URL, uri.path) span.set_tag(Datadog::Ext::HTTP::METHOD, method) span.set_tag(Datadog::Ext::NET::TARGET_HOST, uri.host) span.set_tag(Datadog::Ext::NET::TARGET_PORT, uri.port) end
load_datadog_configuration_for(host = :default)
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 129 def load_datadog_configuration_for(host = :default) @datadog_configuration = Datadog.configuration[:ethon, host] end
set_span_error_message(message)
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 117 def set_span_error_message(message) # Sets span error from message, in case there is no exception available @datadog_span.status = Datadog::Ext::Errors::STATUS @datadog_span.set_tag(Datadog::Ext::Errors::MSG, message) end
tracer_enabled?()
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 133 def tracer_enabled? datadog_configuration[:tracer].enabled end
uri()
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 123 def uri URI.parse(url) # rubocop:disable Lint/HandleExceptions rescue URI::InvalidURIError end