module Sentry::Utils::HttpTracing
def build_nested_query(value, prefix = nil)
def build_nested_query(value, prefix = nil) case value when Array value.map { |v| build_nested_query(v, "#{prefix}[]") }.join("&") when Hash value.map { |k, v| build_nested_query(v, prefix ? "#{prefix}[#{k}]" : k) }.delete_if(&:empty?).join("&") when nil URI.encode_www_form_component(prefix) else raise ArgumentError, "value must be a Hash" if prefix.nil? "#{URI.encode_www_form_component(prefix)}=#{URI.encode_www_form_component(value)}" end end
def get_level(status)
def get_level(status) return :info unless status && status.is_a?(Integer) tus >= 500 or status >= 400 ning o end
def propagate_trace?(url)
def propagate_trace?(url) url && Sentry.initialized? && Sentry.configuration.propagate_traces && Sentry.configuration.trace_propagation_targets.any? { |target| url.match?(target) } end
def record_sentry_breadcrumb(request_info, response_status)
def record_sentry_breadcrumb(request_info, response_status) crumb = Sentry::Breadcrumb.new( level: get_level(response_status), category: self.class::BREADCRUMB_CATEGORY, type: "info", data: { status: response_status, **request_info } ) Sentry.add_breadcrumb(crumb) end
def record_sentry_breadcrumb?
def record_sentry_breadcrumb? Sentry.initialized? && Sentry.configuration.breadcrumbs_logger.include?(:http_logger) end
def set_propagation_headers(req)
def set_propagation_headers(req) Sentry.get_trace_propagation_headers&.each { |k, v| req[k] = v } end
def set_span_info(sentry_span, request_info, response_status)
def set_span_info(sentry_span, request_info, response_status) sentry_span.set_description("#{request_info[:method]} #{request_info[:url]}") sentry_span.set_data(Span::DataConventions::URL, request_info[:url]) sentry_span.set_data(Span::DataConventions::HTTP_METHOD, request_info[:method]) sentry_span.set_data(Span::DataConventions::HTTP_QUERY, request_info[:query]) if request_info[:query] sentry_span.set_data(Span::DataConventions::HTTP_STATUS_CODE, response_status) end