module Datadog::Quantization::HTTP
Quantization
for HTTP
resources
Constants
- PLACEHOLDER
Public Instance Methods
collect_query(query, options = {}) { |key, value, delims| ... }
click to toggle source
Iterate over each key value pair, yielding to the block given. Accepts :uniq option, which keeps uniq copies of keys without values. e.g. Reduces “foo&bar=bar&bar=bar&foo” to “foo&bar=bar&bar=bar”
# File lib/ddtrace/quantization/http.rb, line 62 def collect_query(query, options = {}) return query unless block_given? uniq = options[:uniq].nil? ? false : options[:uniq] keys = Set.new delims = query.scan(/(^|&|;)/).flatten query.split(/[&;]/).collect.with_index do |pairs, i| key, value = pairs.split('=', 2) key, value = yield(key, value, delims[i]) if uniq && keys.include?(key) '' elsif key && value "#{delims[i]}#{key}=#{value}" elsif key "#{delims[i]}#{key}".tap { keys << key } else '' end end.join.sub(/^[&;]/, '') end
query(query, options = {})
click to toggle source
# File lib/ddtrace/quantization/http.rb, line 33 def query(query, options = {}) query!(query, options) rescue StandardError options[:placeholder] || PLACEHOLDER end
query!(query, options = {})
click to toggle source
# File lib/ddtrace/quantization/http.rb, line 39 def query!(query, options = {}) options ||= {} options[:show] = options[:show] || [] options[:exclude] = options[:exclude] || [] # Short circuit if query string is meant to exclude everything # or if the query string is meant to include everything return '' if options[:exclude] == :all return query if options[:show] == :all collect_query(query, uniq: true) do |key, value| if options[:exclude].include?(key) [nil, nil] else value = options[:show].include?(key) ? value : nil [key, value] end end end
url(url, options = {})
click to toggle source
# File lib/ddtrace/quantization/http.rb, line 12 def url(url, options = {}) url!(url, options) rescue StandardError options[:placeholder] || PLACEHOLDER end
url!(url, options = {})
click to toggle source
# File lib/ddtrace/quantization/http.rb, line 18 def url!(url, options = {}) options ||= {} URI.parse(url).tap do |uri| # Format the query string if uri.query query = query(uri.query, options[:query]) uri.query = (!query.nil? && query.empty? ? nil : query) end # Remove any URI framents uri.fragment = nil unless options[:fragment] == :show end.to_s end