Sha256: 1160dc5352dd9f4fe3ba99dc926dc8142f85119e20e7b099df8d141a7cd2e6bc
Contents?: true
Size: 1.75 KB
Versions: 4
Compression:
Stored size: 1.75 KB
Contents
# frozen_string_literal: true require "cgi" module Sentry # A {https://www.w3.org/TR/baggage W3C Baggage Header} implementation. class Baggage SENTRY_PREFIX = "sentry-" SENTRY_PREFIX_REGEX = /^sentry-/.freeze # @return [Hash] attr_reader :items # @return [Boolean] attr_reader :mutable def initialize(items, mutable: true) @items = items @mutable = mutable end # Creates a Baggage object from an incoming W3C Baggage header string. # # Sentry items are identified with the 'sentry-' prefix and stored in a hash. # The presence of a Sentry item makes the baggage object immutable. # # @param header [String] The incoming Baggage header string. # @return [Baggage, nil] def self.from_incoming_header(header) items = {} mutable = true header.split(",").each do |item| item = item.strip key, val = item.split("=") next unless key && val next unless key =~ SENTRY_PREFIX_REGEX baggage_key = key.split("-")[1] next unless baggage_key items[CGI.unescape(baggage_key)] = CGI.unescape(val) mutable = false end new(items, mutable: mutable) end # Make the Baggage immutable. # @return [void] def freeze! @mutable = false end # A {https://develop.sentry.dev/sdk/performance/dynamic-sampling-context/#envelope-header Dynamic Sampling Context} # hash to be used in the trace envelope header. # @return [Hash] def dynamic_sampling_context @items end # Serialize the Baggage object back to a string. # @return [String] def serialize items = @items.map { |k, v| "#{SENTRY_PREFIX}#{CGI.escape(k)}=#{CGI.escape(v)}" } items.join(",") end end end
Version data entries
4 entries across 4 versions & 2 rubygems
Version | Path |
---|---|
sentry-ruby-5.20.1 | lib/sentry/baggage.rb |
sentry-ruby-core-5.20.1 | lib/sentry/baggage.rb |
sentry-ruby-5.20.0 | lib/sentry/baggage.rb |
sentry-ruby-core-5.20.0 | lib/sentry/baggage.rb |