debian-mirror-gitlab/debian/gems-compat/jaeger-client-0.10.0/lib/jaeger/injectors.rb
2019-03-14 13:21:19 +05:30

69 lines
2.1 KiB
Ruby

# frozen_string_literal: true
module Jaeger
module Injectors
def self.context_as_jaeger_string(span_context)
[
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
class JaegerTextMapCodec
def self.inject(span_context, carrier)
carrier['uber-trace-id'] = Injectors.context_as_jaeger_string(span_context)
span_context.baggage.each do |key, value|
carrier["uberctx-#{key}"] = value
end
end
end
class JaegerRackCodec
def self.inject(span_context, carrier)
carrier['uber-trace-id'] =
CGI.escape(Injectors.context_as_jaeger_string(span_context))
span_context.baggage.each do |key, value|
carrier["uberctx-#{key}"] = CGI.escape(value)
end
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::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 => JaegerRackCodec
}.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