class ElasticAPM::Traceparent
@api private
def self.from_transaction(transaction)
def self.from_transaction(transaction) new.tap do |t| t.trace_id = SecureRandom.hex(16) t.recorded = transaction.sampled? end end
def self.parse(header)
def self.parse(header) raise InvalidTraceparentHeader unless header.length == 55 raise InvalidTraceparentHeader unless header[0..1] == VERSION new.tap do |t| t.version, t.trace_id, t.span_id, t.flags = header.split('-').tap do |values| values[-1] = Util.hex_to_bits(values[-1]) end raise InvalidTraceparentHeader if HEX_REGEX =~ t.trace_id raise InvalidTraceparentHeader if HEX_REGEX =~ t.span_id end end
def flags
def flags format('0000000%d', recorded? ? 1 : 0) end
def flags=(flags)
def flags=(flags) @flags = flags self.recorded = flags[7] == '1' end
def hex_flags
def hex_flags format('%02x', flags.to_i(2)) end
def initialize
def initialize @version = VERSION end
def to_header(span_id: nil)
def to_header(span_id: nil) span_id ||= self.span_id format('%s-%s-%s-%s', version, trace_id, span_id, hex_flags) end