Sha256: 05a431264a3a53c3adabfff559606b02e9b4a016ce5143a9054055919957acf0

Contents?: true

Size: 1.38 KB

Versions: 17

Compression:

Stored size: 1.38 KB

Contents

module Datadog
  module Contrib
    module GRPC
      module DatadogInterceptor
        # The DatadogInterceptor::Client implements the tracing strategy
        # for gRPC client-side endpoitns. This middleware compoent will
        # inject trace context information into gRPC metadata prior to
        # sending the request to the server.
        class Client < Base
          def trace(keywords)
            keywords[:metadata] ||= {}

            options = {
              span_type: Datadog::Ext::GRPC::TYPE,
              service: datadog_pin.service_name,
              resource: format_resource(keywords[:method])
            }

            tracer.trace('grpc.client', options) do |span|
              annotate!(span, keywords[:metadata])

              yield
            end
          end

          private

          def annotate!(span, metadata)
            metadata.each do |header, value|
              span.set_tag(header, value)
            end

            Datadog::GRPCPropagator
              .inject!(span.context, metadata)
          rescue StandardError => e
            Datadog::Tracer.log.debug("GRPC client trace failed: #{e}")
          end

          def format_resource(proto_method)
            proto_method.downcase
                        .split('/')
                        .reject(&:empty?)
                        .join('.')
          end
        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/datadog_interceptor/client.rb
ddtrace-0.15.0.internaltracinfeature1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.16.0 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.2.disableprotocolversion4 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.15.0 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.2.withoutpriorityparsing1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.2 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.15.0.beta1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.0 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.0.rc1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.13.2 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.0.beta2 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.14.0.beta1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.13.1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.13.0 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
ddtrace-0.13.0.beta1 lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb