lib/sentry/envelope.rb in sentry-ruby-5.20.1 vs lib/sentry/envelope.rb in sentry-ruby-5.21.0

- old
+ new

@@ -1,95 +1,10 @@ # frozen_string_literal: true module Sentry # @api private class Envelope - class Item - STACKTRACE_FRAME_LIMIT_ON_OVERSIZED_PAYLOAD = 500 - MAX_SERIALIZED_PAYLOAD_SIZE = 1024 * 1000 - - attr_accessor :headers, :payload - - def initialize(headers, payload) - @headers = headers - @payload = payload - end - - def type - @headers[:type] || "event" - end - - # rate limits and client reports use the data_category rather than envelope item type - def self.data_category(type) - case type - when "session", "attachment", "transaction", "profile", "span" then type - when "sessions" then "session" - when "check_in" then "monitor" - when "statsd", "metric_meta" then "metric_bucket" - when "event" then "error" - when "client_report" then "internal" - else "default" - end - end - - def data_category - self.class.data_category(type) - end - - def to_s - [JSON.generate(@headers), @payload.is_a?(String) ? @payload : JSON.generate(@payload)].join("\n") - end - - def serialize - result = to_s - - if result.bytesize > MAX_SERIALIZED_PAYLOAD_SIZE - remove_breadcrumbs! - result = to_s - end - - if result.bytesize > MAX_SERIALIZED_PAYLOAD_SIZE - reduce_stacktrace! - result = to_s - end - - [result, result.bytesize > MAX_SERIALIZED_PAYLOAD_SIZE] - end - - def size_breakdown - payload.map do |key, value| - "#{key}: #{JSON.generate(value).bytesize}" - end.join(", ") - end - - private - - def remove_breadcrumbs! - if payload.key?(:breadcrumbs) - payload.delete(:breadcrumbs) - elsif payload.key?("breadcrumbs") - payload.delete("breadcrumbs") - end - end - - def reduce_stacktrace! - if exceptions = payload.dig(:exception, :values) || payload.dig("exception", "values") - exceptions.each do |exception| - # in most cases there is only one exception (2 or 3 when have multiple causes), so we won't loop through this double condition much - traces = exception.dig(:stacktrace, :frames) || exception.dig("stacktrace", "frames") - - if traces && traces.size > STACKTRACE_FRAME_LIMIT_ON_OVERSIZED_PAYLOAD - size_on_both_ends = STACKTRACE_FRAME_LIMIT_ON_OVERSIZED_PAYLOAD / 2 - traces.replace( - traces[0..(size_on_both_ends - 1)] + traces[-size_on_both_ends..-1], - ) - end - end - end - end - end - attr_accessor :headers, :items def initialize(headers = {}) @headers = headers @items = [] @@ -106,5 +21,7 @@ def event_id @headers[:event_id] end end end + +require_relative "envelope/item"