Sha256: 4da86d6055ef9964b1f84b4b7b1f8a45cb7aede9773558b766ae786e546f7963

Contents?: true

Size: 1.86 KB

Versions: 39

Compression:

Stored size: 1.86 KB

Contents

require 'ddtrace/context'
require 'ddtrace/ext/distributed'

module Datadog
  # opentracing.io compliant methods for distributing trace context
  # between two or more distributed services. Note this is very close
  # to the HTTPPropagator; the key difference is the way gRPC handles
  # header information (called "metadata") as it operates over HTTP2
  module GRPCPropagator
    include Ext::DistributedTracing

    def self.inject!(context, metadata)
      metadata[GRPC_METADATA_TRACE_ID] = context.trace_id.to_s
      metadata[GRPC_METADATA_PARENT_ID] = context.span_id.to_s
      metadata[GRPC_METADATA_SAMPLING_PRIORITY] = context.sampling_priority.to_s if context.sampling_priority
      metadata[GRPC_METADATA_ORIGIN] = context.origin.to_s if context.origin
    end

    def self.extract(metadata)
      metadata = Carrier.new(metadata)
      return Datadog::Context.new unless metadata.valid?
      Datadog::Context.new(trace_id: metadata.trace_id,
                           span_id: metadata.parent_id,
                           sampling_priority: metadata.sampling_priority,
                           origin: metadata.origin)
    end

    # opentracing.io compliant carrier object
    class Carrier
      include Ext::DistributedTracing

      def initialize(metadata = {})
        @metadata = metadata || {}
      end

      def valid?
        trace_id && parent_id
      end

      def trace_id
        value = @metadata[GRPC_METADATA_TRACE_ID].to_i
        value if (1..Span::MAX_ID).cover? value
      end

      def parent_id
        value = @metadata[GRPC_METADATA_PARENT_ID].to_i
        value if (1..Span::MAX_ID).cover? value
      end

      def sampling_priority
        value = @metadata[GRPC_METADATA_SAMPLING_PRIORITY]
        value && value.to_i
      end

      def origin
        value = @metadata[GRPC_METADATA_ORIGIN]
        value if value != ''
      end
    end
  end
end

Version data entries

39 entries across 39 versions & 2 rubygems

Version Path
ls-trace-0.2.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.40.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.39.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.38.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.37.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.36.0 lib/ddtrace/propagation/grpc_propagator.rb
ls-trace-0.1.2 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.35.2 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.35.1 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.35.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.34.2 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.34.1 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.34.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.33.1 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.33.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.32.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.31.1 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.31.0 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.30.1 lib/ddtrace/propagation/grpc_propagator.rb
ddtrace-0.30.0 lib/ddtrace/propagation/grpc_propagator.rb