Sha256: a828ed4dc6efb6105e814b4d8e8cd6b5d01f13936dddd560f36b0c12a9064846

Contents?: true

Size: 1.53 KB

Versions: 17

Compression:

Stored size: 1.53 KB

Contents

# requirements should be kept minimal as Patcher is a shared requirement.

module Datadog
  module Contrib
    module GRPC
      SERVICE = 'grpc'.freeze

      # Patcher enables patching of 'grpc' module.
      module Patcher
        include Base
        register_as :grpc, auto_patch: true
        option :tracer, default: Datadog.tracer
        option :service_name, default: SERVICE

        @patched = false

        module_function

        def patch
          return false unless compatible?
          return @patched if @patched

          require 'ddtrace/ext/grpc'
          require 'ddtrace/propagation/grpc_propagator'
          require 'ddtrace/contrib/grpc/datadog_interceptor'
          require 'ddtrace/contrib/grpc/intercept_with_datadog'

          add_pin
          prepend_interceptor

          @patched = true
        rescue StandardError => e
          Datadog::Tracer.log.error("Unable to apply gRPC integration: #{e}")
        ensure
          @patched
        end

        def compatible?
          defined?(::GRPC::VERSION) && Gem::Version.new(::GRPC::VERSION) >= Gem::Version.new('0.10.0')
        end

        def patched?
          @patched
        end

        def add_pin
          Pin.new(
            get_option(:service_name),
            app: 'grpc',
            app_type: 'grpc',
            tracer: get_option(:tracer)
          ).onto(::GRPC)
        end

        def prepend_interceptor
          ::GRPC::InterceptionContext
            .prepend(Datadog::Contrib::GRPC::InterceptWithDatadog)
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
ddtrace-0.16.1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.15.0.internaltracinfeature1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.16.0 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.2.disableprotocolversion4 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.15.0 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.2.withoutpriorityparsing1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.2 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.15.0.beta1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.0 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.0.rc1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.13.2 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.0.beta2 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.14.0.beta1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.13.1 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.13.0 lib/ddtrace/contrib/grpc/patcher.rb
ddtrace-0.13.0.beta1 lib/ddtrace/contrib/grpc/patcher.rb