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 45 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 77 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 95 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 31 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 22 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 37 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 68 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 141 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 145 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 103 def datadog_tag_request span = @datadog_span method = Ext::NOT_APPLICABLE_METHOD method = @datadog_method.to_s if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil? span.resource = method # Tag as an external peer service span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service) # Set analytics sample rate Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled? this_uri = uri return unless this_uri span.set_tag(Datadog::Ext::HTTP::URL, this_uri.path) span.set_tag(Datadog::Ext::HTTP::METHOD, method) span.set_tag(Datadog::Ext::NET::TARGET_HOST, this_uri.host) span.set_tag(Datadog::Ext::NET::TARGET_PORT, this_uri.port) end
load_datadog_configuration_for(host = :default)
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 133 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 122 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 137 def tracer_enabled? datadog_configuration[:tracer].enabled end
uri()
click to toggle source
# File lib/ddtrace/contrib/ethon/easy_patch.rb, line 128 def uri URI.parse(url) rescue URI::InvalidURIError end