class Datadog::Contrib::GRPC::DatadogInterceptor::Client

The DatadogInterceptor::Client implements the tracing strategy for gRPC client-side endpoints. This middleware component will inject trace context information into gRPC metadata prior to sending the request to the server.

Public Instance Methods

trace(keywords) { || ... } click to toggle source
# File lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb, line 16
def trace(keywords)
  keywords[:metadata] ||= {}

  options = {
    span_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
    service: service_name,
    resource: format_resource(keywords[:method])
  }

  tracer.trace(Ext::SPAN_CLIENT, options) do |span|
    annotate!(span, keywords[:metadata])

    yield
  end
end

Private Instance Methods

annotate!(span, metadata) click to toggle source
# File lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb, line 34
def annotate!(span, metadata)
  span.set_tags(metadata)

  # 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?

  Datadog::GRPCPropagator
    .inject!(span.context, metadata)
rescue StandardError => e
  Datadog.logger.debug("GRPC client trace failed: #{e}")
end
format_resource(proto_method) click to toggle source
# File lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb, line 49
def format_resource(proto_method)
  proto_method.downcase
              .split('/')
              .reject(&:empty?)
              .join('.')
end