Sha256: 2c6f72bbecf64e03cde338533c1e88a423cd16bbb0eace8789c67ff7ef5ca5f1

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

module Jaeger
  module Client
    module Injectors
      class JaegerTextMapCodec
        def self.inject(span_context, carrier)
          carrier['uber-trace-id'] = [
            span_context.trace_id.to_s(16),
            span_context.span_id.to_s(16),
            span_context.parent_id.to_s(16),
            span_context.flags.to_s(16)
          ].join(':')
        end
      end

      class JaegerBinaryCodec
        def self.inject(_span_context, _carrier)
          warn 'Jaeger::Client with binary format is not supported yet'
        end
      end

      class B3RackCodec
        def self.inject(span_context, carrier)
          carrier['x-b3-traceid'] = TraceId.to_hex(span_context.trace_id)
          carrier['x-b3-spanid'] = TraceId.to_hex(span_context.span_id)
          carrier['x-b3-parentspanid'] = TraceId.to_hex(span_context.parent_id)

          # flags (for debug) and sampled headers are mutually exclusive
          if span_context.flags == Jaeger::Client::SpanContext::Flags::DEBUG
            carrier['x-b3-flags'] = '1'
          else
            carrier['x-b3-sampled'] = span_context.flags.to_s(16)
          end
        end
      end

      DEFAULT_INJECTORS = {
        OpenTracing::FORMAT_TEXT_MAP => JaegerTextMapCodec,
        OpenTracing::FORMAT_BINARY => JaegerBinaryCodec,
        OpenTracing::FORMAT_RACK => JaegerTextMapCodec
      }.freeze

      def self.prepare(extractors)
        DEFAULT_INJECTORS.reduce(extractors) do |acc, (format, default)|
          provided_extractors = Array(extractors[format])
          provided_extractors += [default] if provided_extractors.empty?

          acc.merge(format => provided_extractors)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jaeger-client-0.7.1 lib/jaeger/client/injectors.rb
jaeger-client-0.7.0 lib/jaeger/client/injectors.rb