Sha256: 18f46eea6a49a4543234bc0143297bc2217780b046e02821625744917a89e502

Contents?: true

Size: 1.98 KB

Versions: 4

Compression:

Stored size: 1.98 KB

Contents

# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
# frozen_string_literal: true

DependencyDetection.defer do
  named :excon

  # We instrument Excon 0.19.0 and above using the middleware mechanism
  #
  # EXCON_MIN_VERSION is the minimum version we attempt to instrument at all.
  #
  # Why don't we use Excon.defaults[:instrumentor]?
  # While this might seem a perfect fit, it unfortunately isn't suitable in
  # current form. Someone might reasonably set the default instrumentor to
  # something else after we install our instrumentation. Ideally, excon would
  # itself conform to the #subscribe interface of ActiveSupport::Notifications,
  # so we could safely subscribe and not be clobbered by future subscribers,
  # but alas, it does not yet.

  # TODO: MAJOR VERSION - update min version to 0.56.0
  EXCON_MIN_VERSION = Gem::Version.new('0.19.0')

  depends_on do
    defined?(Excon) && defined?(Excon::VERSION)
  end

  executes do
    excon_version = Gem::Version.new(Excon::VERSION)
    if excon_version >= EXCON_MIN_VERSION
      install_excon_instrumentation(excon_version)
    else
      NewRelic::Agent.logger.warn("Excon instrumentation requires at least version #{EXCON_MIN_VERSION}")
    end
  end

  def install_excon_instrumentation(excon_version)
    require 'new_relic/agent/distributed_tracing/cross_app_tracing'
    require 'new_relic/agent/http_clients/excon_wrappers'

    install_middleware_excon_instrumentation
  end

  def install_middleware_excon_instrumentation
    NewRelic::Agent.logger.info('Installing middleware-based Excon instrumentation')
    require 'new_relic/agent/instrumentation/excon/middleware'
    defaults = Excon.defaults

    if defaults[:middlewares]
      defaults[:middlewares] << Excon::Middleware::NewRelicCrossAppTracing
    else
      NewRelic::Agent.logger.warn('Did not find :middlewares key in Excon.defaults, skipping Excon instrumentation')
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
newrelic_rpm-9.16.0 lib/new_relic/agent/instrumentation/excon.rb
newrelic_rpm-9.15.0 lib/new_relic/agent/instrumentation/excon.rb
newrelic_rpm-9.14.0 lib/new_relic/agent/instrumentation/excon.rb
newrelic_rpm-9.13.0 lib/new_relic/agent/instrumentation/excon.rb