sentry-ruby 5.28.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Gemfile +1 -1
 - data/lib/sentry/background_worker.rb +1 -4
 - data/lib/sentry/breadcrumb.rb +1 -1
 - data/lib/sentry/breadcrumb_buffer.rb +2 -2
 - data/lib/sentry/check_in_event.rb +2 -2
 - data/lib/sentry/client.rb +26 -87
 - data/lib/sentry/configuration.rb +74 -75
 - data/lib/sentry/cron/monitor_check_ins.rb +3 -3
 - data/lib/sentry/cron/monitor_config.rb +2 -2
 - data/lib/sentry/cron/monitor_schedule.rb +2 -2
 - data/lib/sentry/envelope/item.rb +1 -2
 - data/lib/sentry/error_event.rb +3 -3
 - data/lib/sentry/event.rb +4 -10
 - data/lib/sentry/hub.rb +3 -4
 - data/lib/sentry/interface.rb +1 -1
 - data/lib/sentry/interfaces/exception.rb +2 -2
 - data/lib/sentry/interfaces/request.rb +2 -0
 - data/lib/sentry/interfaces/single_exception.rb +3 -3
 - data/lib/sentry/interfaces/stacktrace.rb +3 -3
 - data/lib/sentry/interfaces/stacktrace_builder.rb +0 -8
 - data/lib/sentry/interfaces/threads.rb +2 -2
 - data/lib/sentry/log_event.rb +1 -1
 - data/lib/sentry/profiler.rb +4 -5
 - data/lib/sentry/rspec.rb +1 -1
 - data/lib/sentry/span.rb +2 -17
 - data/lib/sentry/std_lib_logger.rb +1 -1
 - data/lib/sentry/test_helper.rb +1 -0
 - data/lib/sentry/transaction.rb +52 -103
 - data/lib/sentry/transaction_event.rb +4 -9
 - data/lib/sentry/transport.rb +2 -5
 - data/lib/sentry/utils/logging_helper.rb +8 -6
 - data/lib/sentry/vernier/profiler.rb +4 -3
 - data/lib/sentry/version.rb +1 -1
 - data/lib/sentry-ruby.rb +2 -30
 - data/sentry-ruby-core.gemspec +1 -1
 - data/sentry-ruby.gemspec +1 -1
 - metadata +7 -17
 - data/lib/sentry/metrics/aggregator.rb +0 -248
 - data/lib/sentry/metrics/configuration.rb +0 -57
 - data/lib/sentry/metrics/counter_metric.rb +0 -25
 - data/lib/sentry/metrics/distribution_metric.rb +0 -25
 - data/lib/sentry/metrics/gauge_metric.rb +0 -35
 - data/lib/sentry/metrics/local_aggregator.rb +0 -53
 - data/lib/sentry/metrics/metric.rb +0 -19
 - data/lib/sentry/metrics/set_metric.rb +0 -28
 - data/lib/sentry/metrics/timing.rb +0 -51
 - data/lib/sentry/metrics.rb +0 -68
 
    
        data/lib/sentry/event.rb
    CHANGED
    
    | 
         @@ -81,12 +81,6 @@ module Sentry 
     | 
|
| 
       81 
81 
     | 
    
         
             
                  @message = (message || "").byteslice(0..MAX_MESSAGE_SIZE_IN_BYTES)
         
     | 
| 
       82 
82 
     | 
    
         
             
                end
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
                # @deprecated This method will be removed in v5.0.0. Please just use Sentry.configuration
         
     | 
| 
       85 
     | 
    
         
            -
                # @return [Configuration]
         
     | 
| 
       86 
     | 
    
         
            -
                def configuration
         
     | 
| 
       87 
     | 
    
         
            -
                  Sentry.configuration
         
     | 
| 
       88 
     | 
    
         
            -
                end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
84 
     | 
    
         
             
                # Sets the event's timestamp.
         
     | 
| 
       91 
85 
     | 
    
         
             
                # @param time [Time, Float]
         
     | 
| 
       92 
86 
     | 
    
         
             
                # @return [void]
         
     | 
| 
         @@ -118,16 +112,16 @@ module Sentry 
     | 
|
| 
       118 
112 
     | 
    
         
             
                end
         
     | 
| 
       119 
113 
     | 
    
         | 
| 
       120 
114 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       121 
     | 
    
         
            -
                def  
     | 
| 
      
 115 
     | 
    
         
            +
                def to_h
         
     | 
| 
       122 
116 
     | 
    
         
             
                  data = serialize_attributes
         
     | 
| 
       123 
     | 
    
         
            -
                  data[:breadcrumbs] = breadcrumbs. 
     | 
| 
       124 
     | 
    
         
            -
                  data[:request] = request. 
     | 
| 
      
 117 
     | 
    
         
            +
                  data[:breadcrumbs] = breadcrumbs.to_h if breadcrumbs
         
     | 
| 
      
 118 
     | 
    
         
            +
                  data[:request] = request.to_h if request
         
     | 
| 
       125 
119 
     | 
    
         
             
                  data
         
     | 
| 
       126 
120 
     | 
    
         
             
                end
         
     | 
| 
       127 
121 
     | 
    
         | 
| 
       128 
122 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       129 
123 
     | 
    
         
             
                def to_json_compatible
         
     | 
| 
       130 
     | 
    
         
            -
                  JSON.parse(JSON.generate( 
     | 
| 
      
 124 
     | 
    
         
            +
                  JSON.parse(JSON.generate(to_h))
         
     | 
| 
       131 
125 
     | 
    
         
             
                end
         
     | 
| 
       132 
126 
     | 
    
         | 
| 
       133 
127 
     | 
    
         
             
                private
         
     | 
    
        data/lib/sentry/hub.rb
    CHANGED
    
    | 
         @@ -116,10 +116,10 @@ module Sentry 
     | 
|
| 
       116 
116 
     | 
    
         
             
                  return unless configuration.tracing_enabled?
         
     | 
| 
       117 
117 
     | 
    
         
             
                  return unless instrumenter == configuration.instrumenter
         
     | 
| 
       118 
118 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                  transaction ||= Transaction.new(**options 
     | 
| 
      
 119 
     | 
    
         
            +
                  transaction ||= Transaction.new(**options)
         
     | 
| 
       120 
120 
     | 
    
         | 
| 
       121 
121 
     | 
    
         
             
                  sampling_context = {
         
     | 
| 
       122 
     | 
    
         
            -
                    transaction_context: transaction. 
     | 
| 
      
 122 
     | 
    
         
            +
                    transaction_context: transaction.to_h,
         
     | 
| 
       123 
123 
     | 
    
         
             
                    parent_sampled: transaction.parent_sampled,
         
     | 
| 
       124 
124 
     | 
    
         
             
                    parent_sample_rate: transaction.parent_sample_rate
         
     | 
| 
       125 
125 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -218,7 +218,7 @@ module Sentry 
     | 
|
| 
       218 
218 
     | 
    
         
             
                end
         
     | 
| 
       219 
219 
     | 
    
         | 
| 
       220 
220 
     | 
    
         
             
                def capture_log_event(message, **options)
         
     | 
| 
       221 
     | 
    
         
            -
                  return unless current_client
         
     | 
| 
      
 221 
     | 
    
         
            +
                  return unless current_client && current_client.configuration.enable_logs
         
     | 
| 
       222 
222 
     | 
    
         | 
| 
       223 
223 
     | 
    
         
             
                  event = current_client.event_from_log(message, **options)
         
     | 
| 
       224 
224 
     | 
    
         | 
| 
         @@ -353,7 +353,6 @@ module Sentry 
     | 
|
| 
       353 
353 
     | 
    
         
             
                  return nil unless propagation_context.incoming_trace
         
     | 
| 
       354 
354 
     | 
    
         | 
| 
       355 
355 
     | 
    
         
             
                  Transaction.new(
         
     | 
| 
       356 
     | 
    
         
            -
                    hub: self,
         
     | 
| 
       357 
356 
     | 
    
         
             
                    trace_id: propagation_context.trace_id,
         
     | 
| 
       358 
357 
     | 
    
         
             
                    parent_span_id: propagation_context.parent_span_id,
         
     | 
| 
       359 
358 
     | 
    
         
             
                    parent_sampled: propagation_context.parent_sampled,
         
     | 
    
        data/lib/sentry/interface.rb
    CHANGED
    
    
| 
         @@ -32,10 +32,10 @@ module Sentry 
     | 
|
| 
       32 
32 
     | 
    
         
             
                  @mechanism = mechanism
         
     | 
| 
       33 
33 
     | 
    
         
             
                end
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
                def  
     | 
| 
      
 35 
     | 
    
         
            +
                def to_h
         
     | 
| 
       36 
36 
     | 
    
         
             
                  data = super
         
     | 
| 
       37 
     | 
    
         
            -
                  data[:stacktrace] = data[:stacktrace]. 
     | 
| 
       38 
     | 
    
         
            -
                  data[:mechanism] = data[:mechanism]. 
     | 
| 
      
 37 
     | 
    
         
            +
                  data[:stacktrace] = data[:stacktrace].to_h if data[:stacktrace]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  data[:mechanism] = data[:mechanism].to_h
         
     | 
| 
       39 
39 
     | 
    
         
             
                  data
         
     | 
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
         @@ -11,8 +11,8 @@ module Sentry 
     | 
|
| 
       11 
11 
     | 
    
         
             
                end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       14 
     | 
    
         
            -
                def  
     | 
| 
       15 
     | 
    
         
            -
                  { frames: @frames.map(&: 
     | 
| 
      
 14 
     | 
    
         
            +
                def to_h
         
     | 
| 
      
 15 
     | 
    
         
            +
                  { frames: @frames.map(&:to_h) }
         
     | 
| 
       16 
16 
     | 
    
         
             
                end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                # @return [String]
         
     | 
| 
         @@ -66,7 +66,7 @@ module Sentry 
     | 
|
| 
       66 
66 
     | 
    
         
             
                        linecache.get_file_context(abs_path, lineno, context_lines)
         
     | 
| 
       67 
67 
     | 
    
         
             
                  end
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
                  def  
     | 
| 
      
 69 
     | 
    
         
            +
                  def to_h(*args)
         
     | 
| 
       70 
70 
     | 
    
         
             
                    data = super(*args)
         
     | 
| 
       71 
71 
     | 
    
         
             
                    data.delete(:vars) unless vars && !vars.empty?
         
     | 
| 
       72 
72 
     | 
    
         
             
                    data.delete(:pre_context) unless pre_context && !pre_context.empty?
         
     | 
| 
         @@ -75,14 +75,6 @@ module Sentry 
     | 
|
| 
       75 
75 
     | 
    
         
             
                  StacktraceInterface.new(frames: frames)
         
     | 
| 
       76 
76 
     | 
    
         
             
                end
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                # Get the code location hash for a single line for where metrics where added.
         
     | 
| 
       79 
     | 
    
         
            -
                # @return [Hash]
         
     | 
| 
       80 
     | 
    
         
            -
                def metrics_code_location(unparsed_line)
         
     | 
| 
       81 
     | 
    
         
            -
                  parsed_line = Backtrace::Line.parse(unparsed_line)
         
     | 
| 
       82 
     | 
    
         
            -
                  frame = convert_parsed_line_into_frame(parsed_line)
         
     | 
| 
       83 
     | 
    
         
            -
                  frame.to_hash.reject { |k, _| %i[project_root in_app].include?(k) }
         
     | 
| 
       84 
     | 
    
         
            -
                end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
78 
     | 
    
         
             
                private
         
     | 
| 
       87 
79 
     | 
    
         | 
| 
       88 
80 
     | 
    
         
             
                def convert_parsed_line_into_frame(line)
         
     | 
| 
         @@ -13,7 +13,7 @@ module Sentry 
     | 
|
| 
       13 
13 
     | 
    
         
             
                end
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       16 
     | 
    
         
            -
                def  
     | 
| 
      
 16 
     | 
    
         
            +
                def to_h
         
     | 
| 
       17 
17 
     | 
    
         
             
                  {
         
     | 
| 
       18 
18 
     | 
    
         
             
                    values: [
         
     | 
| 
       19 
19 
     | 
    
         
             
                      {
         
     | 
| 
         @@ -21,7 +21,7 @@ module Sentry 
     | 
|
| 
       21 
21 
     | 
    
         
             
                        name: @name,
         
     | 
| 
       22 
22 
     | 
    
         
             
                        crashed: @crashed,
         
     | 
| 
       23 
23 
     | 
    
         
             
                        current: @current,
         
     | 
| 
       24 
     | 
    
         
            -
                        stacktrace: @stacktrace&. 
     | 
| 
      
 24 
     | 
    
         
            +
                        stacktrace: @stacktrace&.to_h
         
     | 
| 
       25 
25 
     | 
    
         
             
                      }
         
     | 
| 
       26 
26 
     | 
    
         
             
                    ]
         
     | 
| 
       27 
27 
     | 
    
         
             
                  }
         
     | 
    
        data/lib/sentry/log_event.rb
    CHANGED
    
    
    
        data/lib/sentry/profiler.rb
    CHANGED
    
    | 
         @@ -10,8 +10,6 @@ module Sentry 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                VERSION = "1"
         
     | 
| 
       12 
12 
     | 
    
         
             
                PLATFORM = "ruby"
         
     | 
| 
       13 
     | 
    
         
            -
                # 101 Hz in microseconds
         
     | 
| 
       14 
     | 
    
         
            -
                DEFAULT_INTERVAL = 1e6 / 101
         
     | 
| 
       15 
13 
     | 
    
         
             
                MICRO_TO_NANO_SECONDS = 1e3
         
     | 
| 
       16 
14 
     | 
    
         
             
                MIN_SAMPLES_REQUIRED = 2
         
     | 
| 
       17 
15 
     | 
    
         | 
| 
         @@ -24,6 +22,7 @@ module Sentry 
     | 
|
| 
       24 
22 
     | 
    
         | 
| 
       25 
23 
     | 
    
         
             
                  @profiling_enabled = defined?(StackProf) && configuration.profiling_enabled?
         
     | 
| 
       26 
24 
     | 
    
         
             
                  @profiles_sample_rate = configuration.profiles_sample_rate
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @profiles_sample_interval = configuration.profiles_sample_interval
         
     | 
| 
       27 
26 
     | 
    
         
             
                  @project_root = configuration.project_root
         
     | 
| 
       28 
27 
     | 
    
         
             
                  @app_dirs_pattern = configuration.app_dirs_pattern
         
     | 
| 
       29 
28 
     | 
    
         
             
                  @in_app_pattern = Regexp.new("^(#{@project_root}/)?#{@app_dirs_pattern}")
         
     | 
| 
         @@ -32,7 +31,7 @@ module Sentry 
     | 
|
| 
       32 
31 
     | 
    
         
             
                def start
         
     | 
| 
       33 
32 
     | 
    
         
             
                  return unless @sampled
         
     | 
| 
       34 
33 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
                  @started = StackProf.start(interval:  
     | 
| 
      
 34 
     | 
    
         
            +
                  @started = StackProf.start(interval: @profiles_sample_interval,
         
     | 
| 
       36 
35 
     | 
    
         
             
                                             mode: :wall,
         
     | 
| 
       37 
36 
     | 
    
         
             
                                             raw: true,
         
     | 
| 
       38 
37 
     | 
    
         
             
                                             aggregate: false)
         
     | 
| 
         @@ -81,9 +80,9 @@ module Sentry 
     | 
|
| 
       81 
80 
     | 
    
         
             
                  log("Discarding profile due to sampling decision") unless @sampled
         
     | 
| 
       82 
81 
     | 
    
         
             
                end
         
     | 
| 
       83 
82 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
                def  
     | 
| 
      
 83 
     | 
    
         
            +
                def to_h
         
     | 
| 
       85 
84 
     | 
    
         
             
                  unless @sampled
         
     | 
| 
       86 
     | 
    
         
            -
                    record_lost_event(:sample_rate)
         
     | 
| 
      
 85 
     | 
    
         
            +
                    record_lost_event(:sample_rate) if @profiling_enabled
         
     | 
| 
       87 
86 
     | 
    
         
             
                    return {}
         
     | 
| 
       88 
87 
     | 
    
         
             
                  end
         
     | 
| 
       89 
88 
     | 
    
         | 
    
        data/lib/sentry/rspec.rb
    CHANGED
    
    | 
         @@ -70,7 +70,7 @@ RSpec::Matchers.define :include_sentry_event do |event_message = "", **opts| 
     | 
|
| 
       70 
70 
     | 
    
         
             
              end
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
       72 
72 
     | 
    
         
             
              def dump_events(sentry_events)
         
     | 
| 
       73 
     | 
    
         
            -
                sentry_events.map( 
     | 
| 
      
 73 
     | 
    
         
            +
                sentry_events.map(&:to_h).map do |hash|
         
     | 
| 
       74 
74 
     | 
    
         
             
                  hash.select { |k, _| [:message, :contexts, :tags, :exception].include?(k) }
         
     | 
| 
       75 
75 
     | 
    
         
             
                end.map do |hash|
         
     | 
| 
       76 
76 
     | 
    
         
             
                  JSON.pretty_generate(hash)
         
     | 
    
        data/lib/sentry/span.rb
    CHANGED
    
    | 
         @@ -1,7 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require "securerandom"
         
     | 
| 
       4 
     | 
    
         
            -
            require "sentry/metrics/local_aggregator"
         
     | 
| 
       5 
4 
     | 
    
         
             
            require "sentry/utils/uuid"
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
            module Sentry
         
     | 
| 
         @@ -173,8 +172,8 @@ module Sentry 
     | 
|
| 
       173 
172 
     | 
    
         
             
                end
         
     | 
| 
       174 
173 
     | 
    
         | 
| 
       175 
174 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       176 
     | 
    
         
            -
                def  
     | 
| 
       177 
     | 
    
         
            -
                   
     | 
| 
      
 175 
     | 
    
         
            +
                def to_h
         
     | 
| 
      
 176 
     | 
    
         
            +
                  {
         
     | 
| 
       178 
177 
     | 
    
         
             
                    trace_id: @trace_id,
         
     | 
| 
       179 
178 
     | 
    
         
             
                    span_id: @span_id,
         
     | 
| 
       180 
179 
     | 
    
         
             
                    parent_span_id: @parent_span_id,
         
     | 
| 
         @@ -187,11 +186,6 @@ module Sentry 
     | 
|
| 
       187 
186 
     | 
    
         
             
                    data: @data,
         
     | 
| 
       188 
187 
     | 
    
         
             
                    origin: @origin
         
     | 
| 
       189 
188 
     | 
    
         
             
                  }
         
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
                  summary = metrics_summary
         
     | 
| 
       192 
     | 
    
         
            -
                  hash[:_metrics_summary] = summary if summary
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                  hash
         
     | 
| 
       195 
189 
     | 
    
         
             
                end
         
     | 
| 
       196 
190 
     | 
    
         | 
| 
       197 
191 
     | 
    
         
             
                # Returns the span's context that can be used to embed in an Event.
         
     | 
| 
         @@ -307,14 +301,5 @@ module Sentry 
     | 
|
| 
       307 
301 
     | 
    
         
             
                def set_origin(origin)
         
     | 
| 
       308 
302 
     | 
    
         
             
                  @origin = origin
         
     | 
| 
       309 
303 
     | 
    
         
             
                end
         
     | 
| 
       310 
     | 
    
         
            -
             
     | 
| 
       311 
     | 
    
         
            -
                # Collects gauge metrics on the span for metric summaries.
         
     | 
| 
       312 
     | 
    
         
            -
                def metrics_local_aggregator
         
     | 
| 
       313 
     | 
    
         
            -
                  @metrics_local_aggregator ||= Sentry::Metrics::LocalAggregator.new
         
     | 
| 
       314 
     | 
    
         
            -
                end
         
     | 
| 
       315 
     | 
    
         
            -
             
     | 
| 
       316 
     | 
    
         
            -
                def metrics_summary
         
     | 
| 
       317 
     | 
    
         
            -
                  @metrics_local_aggregator&.to_hash
         
     | 
| 
       318 
     | 
    
         
            -
                end
         
     | 
| 
       319 
304 
     | 
    
         
             
              end
         
     | 
| 
       320 
305 
     | 
    
         
             
            end
         
     | 
    
        data/lib/sentry/test_helper.rb
    CHANGED
    
    | 
         @@ -27,6 +27,7 @@ module Sentry 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  # set transport to DummyTransport, so we can easily intercept the captured events
         
     | 
| 
       28 
28 
     | 
    
         
             
                  dummy_config.transport.transport_class = Sentry::DummyTransport
         
     | 
| 
       29 
29 
     | 
    
         
             
                  # make sure SDK allows sending under the current environment
         
     | 
| 
      
 30 
     | 
    
         
            +
                  dummy_config.enabled_environments ||= []
         
     | 
| 
       30 
31 
     | 
    
         
             
                  dummy_config.enabled_environments += [dummy_config.environment] unless dummy_config.enabled_environments.include?(dummy_config.environment)
         
     | 
| 
       31 
32 
     | 
    
         
             
                  # disble async event sending
         
     | 
| 
       32 
33 
     | 
    
         
             
                  dummy_config.background_worker_threads = 0
         
     | 
    
        data/lib/sentry/transaction.rb
    CHANGED
    
    | 
         @@ -7,9 +7,6 @@ require "sentry/propagation_context" 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            module Sentry
         
     | 
| 
       9 
9 
     | 
    
         
             
              class Transaction < Span
         
     | 
| 
       10 
     | 
    
         
            -
                # @deprecated Use Sentry::PropagationContext::SENTRY_TRACE_REGEXP instead.
         
     | 
| 
       11 
     | 
    
         
            -
                SENTRY_TRACE_REGEXP = PropagationContext::SENTRY_TRACE_REGEXP
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
10 
     | 
    
         
             
                UNLABELD_NAME = "<unlabeled transaction>"
         
     | 
| 
       14 
11 
     | 
    
         
             
                MESSAGE_PREFIX = "[Tracing]"
         
     | 
| 
       15 
12 
     | 
    
         | 
| 
         @@ -40,12 +37,6 @@ module Sentry 
     | 
|
| 
       40 
37 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       41 
38 
     | 
    
         
             
                attr_reader :measurements
         
     | 
| 
       42 
39 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                # @deprecated Use Sentry.get_current_hub instead.
         
     | 
| 
       44 
     | 
    
         
            -
                attr_reader :hub
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                # @deprecated Use Sentry.configuration instead.
         
     | 
| 
       47 
     | 
    
         
            -
                attr_reader :configuration
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
40 
     | 
    
         
             
                # The effective sample rate at which this transaction was sampled.
         
     | 
| 
       50 
41 
     | 
    
         
             
                # @return [Float, nil]
         
     | 
| 
       51 
42 
     | 
    
         
             
                attr_reader :effective_sample_rate
         
     | 
| 
         @@ -63,7 +54,6 @@ module Sentry 
     | 
|
| 
       63 
54 
     | 
    
         
             
                attr_reader :sample_rand
         
     | 
| 
       64 
55 
     | 
    
         | 
| 
       65 
56 
     | 
    
         
             
                def initialize(
         
     | 
| 
       66 
     | 
    
         
            -
                  hub:,
         
     | 
| 
       67 
57 
     | 
    
         
             
                  name: nil,
         
     | 
| 
       68 
58 
     | 
    
         
             
                  source: :custom,
         
     | 
| 
       69 
59 
     | 
    
         
             
                  parent_sampled: nil,
         
     | 
| 
         @@ -75,26 +65,14 @@ module Sentry 
     | 
|
| 
       75 
65 
     | 
    
         | 
| 
       76 
66 
     | 
    
         
             
                  set_name(name, source: source)
         
     | 
| 
       77 
67 
     | 
    
         
             
                  @parent_sampled = parent_sampled
         
     | 
| 
       78 
     | 
    
         
            -
                  @hub = hub
         
     | 
| 
       79 
68 
     | 
    
         
             
                  @baggage = baggage
         
     | 
| 
       80 
     | 
    
         
            -
                  @configuration = hub.configuration # to be removed
         
     | 
| 
       81 
     | 
    
         
            -
                  @tracing_enabled = hub.configuration.tracing_enabled?
         
     | 
| 
       82 
     | 
    
         
            -
                  @traces_sampler = hub.configuration.traces_sampler
         
     | 
| 
       83 
     | 
    
         
            -
                  @traces_sample_rate = hub.configuration.traces_sample_rate
         
     | 
| 
       84 
     | 
    
         
            -
                  @sdk_logger = hub.configuration.sdk_logger
         
     | 
| 
       85 
     | 
    
         
            -
                  @release = hub.configuration.release
         
     | 
| 
       86 
     | 
    
         
            -
                  @environment = hub.configuration.environment
         
     | 
| 
       87 
     | 
    
         
            -
                  @dsn = hub.configuration.dsn
         
     | 
| 
       88 
69 
     | 
    
         
             
                  @effective_sample_rate = nil
         
     | 
| 
       89 
70 
     | 
    
         
             
                  @contexts = {}
         
     | 
| 
       90 
71 
     | 
    
         
             
                  @measurements = {}
         
     | 
| 
       91 
72 
     | 
    
         
             
                  @sample_rand = sample_rand
         
     | 
| 
       92 
73 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
                  unless @hub.profiler_running?
         
     | 
| 
       94 
     | 
    
         
            -
                    @profiler = @configuration.profiler_class.new(@configuration)
         
     | 
| 
       95 
     | 
    
         
            -
                  end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
74 
     | 
    
         
             
                  init_span_recorder
         
     | 
| 
      
 75 
     | 
    
         
            +
                  init_profiler
         
     | 
| 
       98 
76 
     | 
    
         | 
| 
       99 
77 
     | 
    
         
             
                  unless @sample_rand
         
     | 
| 
       100 
78 
     | 
    
         
             
                    generator = Utils::SampleRand.new(trace_id: @trace_id)
         
     | 
| 
         @@ -102,65 +80,8 @@ module Sentry 
     | 
|
| 
       102 
80 
     | 
    
         
             
                  end
         
     | 
| 
       103 
81 
     | 
    
         
             
                end
         
     | 
| 
       104 
82 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
                # @deprecated use Sentry.continue_trace instead.
         
     | 
| 
       106 
     | 
    
         
            -
                #
         
     | 
| 
       107 
     | 
    
         
            -
                # Initalizes a Transaction instance with a Sentry trace string from another transaction (usually from an external request).
         
     | 
| 
       108 
     | 
    
         
            -
                #
         
     | 
| 
       109 
     | 
    
         
            -
                # The original transaction will become the parent of the new Transaction instance. And they will share the same `trace_id`.
         
     | 
| 
       110 
     | 
    
         
            -
                #
         
     | 
| 
       111 
     | 
    
         
            -
                # The child transaction will also store the parent's sampling decision in its `parent_sampled` attribute.
         
     | 
| 
       112 
     | 
    
         
            -
                # @param sentry_trace [String] the trace string from the previous transaction.
         
     | 
| 
       113 
     | 
    
         
            -
                # @param baggage [String, nil] the incoming baggage header string.
         
     | 
| 
       114 
     | 
    
         
            -
                # @param hub [Hub] the hub that'll be responsible for sending this transaction when it's finished.
         
     | 
| 
       115 
     | 
    
         
            -
                # @param options [Hash] the options you want to use to initialize a Transaction instance.
         
     | 
| 
       116 
     | 
    
         
            -
                # @return [Transaction, nil]
         
     | 
| 
       117 
     | 
    
         
            -
                def self.from_sentry_trace(sentry_trace, baggage: nil, hub: Sentry.get_current_hub, **options)
         
     | 
| 
       118 
     | 
    
         
            -
                  return unless hub.configuration.tracing_enabled?
         
     | 
| 
       119 
     | 
    
         
            -
                  return unless sentry_trace
         
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
                  sentry_trace_data = extract_sentry_trace(sentry_trace)
         
     | 
| 
       122 
     | 
    
         
            -
                  return unless sentry_trace_data
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
                  trace_id, parent_span_id, parent_sampled = sentry_trace_data
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                  baggage =
         
     | 
| 
       127 
     | 
    
         
            -
                    if baggage && !baggage.empty?
         
     | 
| 
       128 
     | 
    
         
            -
                      Baggage.from_incoming_header(baggage)
         
     | 
| 
       129 
     | 
    
         
            -
                    else
         
     | 
| 
       130 
     | 
    
         
            -
                      # If there's an incoming sentry-trace but no incoming baggage header,
         
     | 
| 
       131 
     | 
    
         
            -
                      # for instance in traces coming from older SDKs,
         
     | 
| 
       132 
     | 
    
         
            -
                      # baggage will be empty and frozen and won't be populated as head SDK.
         
     | 
| 
       133 
     | 
    
         
            -
                      Baggage.new({})
         
     | 
| 
       134 
     | 
    
         
            -
                    end
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
                  baggage.freeze!
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
                  sample_rand = extract_sample_rand_from_baggage(baggage, trace_id, parent_sampled)
         
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
                  new(
         
     | 
| 
       141 
     | 
    
         
            -
                    trace_id: trace_id,
         
     | 
| 
       142 
     | 
    
         
            -
                    parent_span_id: parent_span_id,
         
     | 
| 
       143 
     | 
    
         
            -
                    parent_sampled: parent_sampled,
         
     | 
| 
       144 
     | 
    
         
            -
                    hub: hub,
         
     | 
| 
       145 
     | 
    
         
            -
                    baggage: baggage,
         
     | 
| 
       146 
     | 
    
         
            -
                    sample_rand: sample_rand,
         
     | 
| 
       147 
     | 
    
         
            -
                    **options
         
     | 
| 
       148 
     | 
    
         
            -
                  )
         
     | 
| 
       149 
     | 
    
         
            -
                end
         
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
                # @deprecated Use Sentry::PropagationContext.extract_sentry_trace instead.
         
     | 
| 
       152 
     | 
    
         
            -
                # @return [Array, nil]
         
     | 
| 
       153 
     | 
    
         
            -
                def self.extract_sentry_trace(sentry_trace)
         
     | 
| 
       154 
     | 
    
         
            -
                  PropagationContext.extract_sentry_trace(sentry_trace)
         
     | 
| 
       155 
     | 
    
         
            -
                end
         
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
                def self.extract_sample_rand_from_baggage(baggage, trace_id, parent_sampled)
         
     | 
| 
       158 
     | 
    
         
            -
                  PropagationContext.extract_sample_rand_from_baggage(baggage, trace_id) ||
         
     | 
| 
       159 
     | 
    
         
            -
                    PropagationContext.generate_sample_rand(baggage, trace_id, parent_sampled)
         
     | 
| 
       160 
     | 
    
         
            -
                end
         
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
83 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       163 
     | 
    
         
            -
                def  
     | 
| 
      
 84 
     | 
    
         
            +
                def to_h
         
     | 
| 
       164 
85 
     | 
    
         
             
                  hash = super
         
     | 
| 
       165 
86 
     | 
    
         | 
| 
       166 
87 
     | 
    
         
             
                  hash.merge!(
         
     | 
| 
         @@ -207,7 +128,9 @@ module Sentry 
     | 
|
| 
       207 
128 
     | 
    
         
             
                # @param sampling_context [Hash] a context Hash that'll be passed to `traces_sampler` (if provided).
         
     | 
| 
       208 
129 
     | 
    
         
             
                # @return [void]
         
     | 
| 
       209 
130 
     | 
    
         
             
                def set_initial_sample_decision(sampling_context:)
         
     | 
| 
       210 
     | 
    
         
            -
                   
     | 
| 
      
 131 
     | 
    
         
            +
                  configuration = Sentry.configuration
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                  unless configuration && configuration.tracing_enabled?
         
     | 
| 
       211 
134 
     | 
    
         
             
                    @sampled = false
         
     | 
| 
       212 
135 
     | 
    
         
             
                    return
         
     | 
| 
       213 
136 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -218,12 +141,12 @@ module Sentry 
     | 
|
| 
       218 
141 
     | 
    
         
             
                  end
         
     | 
| 
       219 
142 
     | 
    
         | 
| 
       220 
143 
     | 
    
         
             
                  sample_rate =
         
     | 
| 
       221 
     | 
    
         
            -
                    if  
     | 
| 
       222 
     | 
    
         
            -
                       
     | 
| 
      
 144 
     | 
    
         
            +
                    if configuration.traces_sampler.is_a?(Proc)
         
     | 
| 
      
 145 
     | 
    
         
            +
                      configuration.traces_sampler.call(sampling_context)
         
     | 
| 
       223 
146 
     | 
    
         
             
                    elsif !sampling_context[:parent_sampled].nil?
         
     | 
| 
       224 
147 
     | 
    
         
             
                      sampling_context[:parent_sampled]
         
     | 
| 
       225 
148 
     | 
    
         
             
                    else
         
     | 
| 
       226 
     | 
    
         
            -
                       
     | 
| 
      
 149 
     | 
    
         
            +
                      configuration.traces_sample_rate
         
     | 
| 
       227 
150 
     | 
    
         
             
                    end
         
     | 
| 
       228 
151 
     | 
    
         | 
| 
       229 
152 
     | 
    
         
             
                  transaction_description = generate_transaction_description
         
     | 
| 
         @@ -265,29 +188,28 @@ module Sentry 
     | 
|
| 
       265 
188 
     | 
    
         
             
                end
         
     | 
| 
       266 
189 
     | 
    
         | 
| 
       267 
190 
     | 
    
         
             
                # Finishes the transaction's recording and send it to Sentry.
         
     | 
| 
       268 
     | 
    
         
            -
                # @param hub [Hub] the hub that'll send this transaction. (Deprecated)
         
     | 
| 
       269 
191 
     | 
    
         
             
                # @return [TransactionEvent]
         
     | 
| 
       270 
     | 
    
         
            -
                def finish( 
     | 
| 
       271 
     | 
    
         
            -
                  if hub
         
     | 
| 
       272 
     | 
    
         
            -
                    log_warn(
         
     | 
| 
       273 
     | 
    
         
            -
                      <<~MSG
         
     | 
| 
       274 
     | 
    
         
            -
                        Specifying a different hub in `Transaction#finish` will be deprecated in version 5.0.
         
     | 
| 
       275 
     | 
    
         
            -
                        Please use `Hub#start_transaction` with the designated hub.
         
     | 
| 
       276 
     | 
    
         
            -
                      MSG
         
     | 
| 
       277 
     | 
    
         
            -
                    )
         
     | 
| 
       278 
     | 
    
         
            -
                  end
         
     | 
| 
       279 
     | 
    
         
            -
             
     | 
| 
       280 
     | 
    
         
            -
                  hub ||= @hub
         
     | 
| 
       281 
     | 
    
         
            -
             
     | 
| 
      
 192 
     | 
    
         
            +
                def finish(end_timestamp: nil)
         
     | 
| 
       282 
193 
     | 
    
         
             
                  super(end_timestamp: end_timestamp)
         
     | 
| 
       283 
194 
     | 
    
         | 
| 
       284 
195 
     | 
    
         
             
                  if @name.nil?
         
     | 
| 
       285 
196 
     | 
    
         
             
                    @name = UNLABELD_NAME
         
     | 
| 
       286 
197 
     | 
    
         
             
                  end
         
     | 
| 
       287 
198 
     | 
    
         | 
| 
       288 
     | 
    
         
            -
                   
     | 
| 
      
 199 
     | 
    
         
            +
                  hub = Sentry.get_current_hub
         
     | 
| 
      
 200 
     | 
    
         
            +
                  return unless hub
         
     | 
| 
       289 
201 
     | 
    
         | 
| 
       290 
     | 
    
         
            -
                   
     | 
| 
      
 202 
     | 
    
         
            +
                  hub.stop_profiler!(self)
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
                  if @sampled && ignore_status_code?
         
     | 
| 
      
 205 
     | 
    
         
            +
                    @sampled = false
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
                    status_code = get_http_status_code
         
     | 
| 
      
 208 
     | 
    
         
            +
                    log_debug("#{MESSAGE_PREFIX} Discarding #{generate_transaction_description} due to ignored HTTP status code: #{status_code}")
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
                    hub.current_client.transport.record_lost_event(:event_processor, "transaction")
         
     | 
| 
      
 211 
     | 
    
         
            +
                    hub.current_client.transport.record_lost_event(:event_processor, "span")
         
     | 
| 
      
 212 
     | 
    
         
            +
                  elsif @sampled
         
     | 
| 
       291 
213 
     | 
    
         
             
                    event = hub.current_client.event_from_transaction(self)
         
     | 
| 
       292 
214 
     | 
    
         
             
                    hub.capture_event(event)
         
     | 
| 
       293 
215 
     | 
    
         
             
                  else
         
     | 
| 
         @@ -345,6 +267,15 @@ module Sentry 
     | 
|
| 
       345 
267 
     | 
    
         
             
                  @span_recorder.add(self)
         
     | 
| 
       346 
268 
     | 
    
         
             
                end
         
     | 
| 
       347 
269 
     | 
    
         | 
| 
      
 270 
     | 
    
         
            +
                def init_profiler
         
     | 
| 
      
 271 
     | 
    
         
            +
                  hub = Sentry.get_current_hub
         
     | 
| 
      
 272 
     | 
    
         
            +
                  return unless hub
         
     | 
| 
      
 273 
     | 
    
         
            +
             
     | 
| 
      
 274 
     | 
    
         
            +
                  unless hub.profiler_running?
         
     | 
| 
      
 275 
     | 
    
         
            +
                    @profiler = hub.configuration.profiler_class.new(hub.configuration)
         
     | 
| 
      
 276 
     | 
    
         
            +
                  end
         
     | 
| 
      
 277 
     | 
    
         
            +
                end
         
     | 
| 
      
 278 
     | 
    
         
            +
             
     | 
| 
       348 
279 
     | 
    
         
             
                private
         
     | 
| 
       349 
280 
     | 
    
         | 
| 
       350 
281 
     | 
    
         
             
                def generate_transaction_description
         
     | 
| 
         @@ -355,14 +286,16 @@ module Sentry 
     | 
|
| 
       355 
286 
     | 
    
         
             
                end
         
     | 
| 
       356 
287 
     | 
    
         | 
| 
       357 
288 
     | 
    
         
             
                def populate_head_baggage
         
     | 
| 
      
 289 
     | 
    
         
            +
                  configuration = Sentry.configuration
         
     | 
| 
      
 290 
     | 
    
         
            +
             
     | 
| 
       358 
291 
     | 
    
         
             
                  items = {
         
     | 
| 
       359 
292 
     | 
    
         
             
                    "trace_id" => trace_id,
         
     | 
| 
       360 
293 
     | 
    
         
             
                    "sample_rate" => effective_sample_rate&.to_s,
         
     | 
| 
       361 
294 
     | 
    
         
             
                    "sample_rand" => Utils::SampleRand.format(@sample_rand),
         
     | 
| 
       362 
295 
     | 
    
         
             
                    "sampled" => sampled&.to_s,
         
     | 
| 
       363 
     | 
    
         
            -
                    "environment" =>  
     | 
| 
       364 
     | 
    
         
            -
                    "release" =>  
     | 
| 
       365 
     | 
    
         
            -
                    "public_key" =>  
     | 
| 
      
 296 
     | 
    
         
            +
                    "environment" => configuration&.environment,
         
     | 
| 
      
 297 
     | 
    
         
            +
                    "release" => configuration&.release,
         
     | 
| 
      
 298 
     | 
    
         
            +
                    "public_key" => configuration&.dsn&.public_key
         
     | 
| 
       366 
299 
     | 
    
         
             
                  }
         
     | 
| 
       367 
300 
     | 
    
         | 
| 
       368 
301 
     | 
    
         
             
                  items["transaction"] = name unless source_low_quality?
         
     | 
| 
         @@ -371,6 +304,22 @@ module Sentry 
     | 
|
| 
       371 
304 
     | 
    
         
             
                  @baggage = Baggage.new(items, mutable: false)
         
     | 
| 
       372 
305 
     | 
    
         
             
                end
         
     | 
| 
       373 
306 
     | 
    
         | 
| 
      
 307 
     | 
    
         
            +
                def ignore_status_code?
         
     | 
| 
      
 308 
     | 
    
         
            +
                  trace_ignore_status_codes = Sentry.configuration&.trace_ignore_status_codes
         
     | 
| 
      
 309 
     | 
    
         
            +
                  return false unless trace_ignore_status_codes
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
                  status_code = get_http_status_code
         
     | 
| 
      
 312 
     | 
    
         
            +
                  return false unless status_code
         
     | 
| 
      
 313 
     | 
    
         
            +
             
     | 
| 
      
 314 
     | 
    
         
            +
                  trace_ignore_status_codes.any? do |ignored|
         
     | 
| 
      
 315 
     | 
    
         
            +
                    ignored.is_a?(Range) ? ignored.include?(status_code) : status_code == ignored
         
     | 
| 
      
 316 
     | 
    
         
            +
                  end
         
     | 
| 
      
 317 
     | 
    
         
            +
                end
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
                def get_http_status_code
         
     | 
| 
      
 320 
     | 
    
         
            +
                  @data && @data[Span::DataConventions::HTTP_STATUS_CODE]
         
     | 
| 
      
 321 
     | 
    
         
            +
                end
         
     | 
| 
      
 322 
     | 
    
         
            +
             
     | 
| 
       374 
323 
     | 
    
         
             
                class SpanRecorder
         
     | 
| 
       375 
324 
     | 
    
         
             
                  attr_reader :max_length, :spans
         
     | 
| 
       376 
325 
     | 
    
         | 
| 
         @@ -17,9 +17,6 @@ module Sentry 
     | 
|
| 
       17 
17 
     | 
    
         
             
                # @return [Hash, nil]
         
     | 
| 
       18 
18 
     | 
    
         
             
                attr_accessor :profile
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                # @return [Hash, nil]
         
     | 
| 
       21 
     | 
    
         
            -
                attr_accessor :metrics_summary
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
20 
     | 
    
         
             
                def initialize(transaction:, **options)
         
     | 
| 
       24 
21 
     | 
    
         
             
                  super(**options)
         
     | 
| 
       25 
22 
     | 
    
         | 
| 
         @@ -32,10 +29,9 @@ module Sentry 
     | 
|
| 
       32 
29 
     | 
    
         
             
                  self.tags = transaction.tags
         
     | 
| 
       33 
30 
     | 
    
         
             
                  self.dynamic_sampling_context = transaction.get_baggage.dynamic_sampling_context
         
     | 
| 
       34 
31 
     | 
    
         
             
                  self.measurements = transaction.measurements
         
     | 
| 
       35 
     | 
    
         
            -
                  self.metrics_summary = transaction.metrics_summary
         
     | 
| 
       36 
32 
     | 
    
         | 
| 
       37 
33 
     | 
    
         
             
                  finished_spans = transaction.span_recorder.spans.select { |span| span.timestamp && span != transaction }
         
     | 
| 
       38 
     | 
    
         
            -
                  self.spans = finished_spans.map(&: 
     | 
| 
      
 34 
     | 
    
         
            +
                  self.spans = finished_spans.map(&:to_h)
         
     | 
| 
       39 
35 
     | 
    
         | 
| 
       40 
36 
     | 
    
         
             
                  populate_profile(transaction)
         
     | 
| 
       41 
37 
     | 
    
         
             
                end
         
     | 
| 
         @@ -48,12 +44,11 @@ module Sentry 
     | 
|
| 
       48 
44 
     | 
    
         
             
                end
         
     | 
| 
       49 
45 
     | 
    
         | 
| 
       50 
46 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       51 
     | 
    
         
            -
                def  
     | 
| 
      
 47 
     | 
    
         
            +
                def to_h
         
     | 
| 
       52 
48 
     | 
    
         
             
                  data = super
         
     | 
| 
       53 
     | 
    
         
            -
                  data[:spans] = @spans.map(&: 
     | 
| 
      
 49 
     | 
    
         
            +
                  data[:spans] = @spans.map(&:to_h) if @spans
         
     | 
| 
       54 
50 
     | 
    
         
             
                  data[:start_timestamp] = @start_timestamp
         
     | 
| 
       55 
51 
     | 
    
         
             
                  data[:measurements] = @measurements
         
     | 
| 
       56 
     | 
    
         
            -
                  data[:_metrics_summary] = @metrics_summary if @metrics_summary
         
     | 
| 
       57 
52 
     | 
    
         
             
                  data
         
     | 
| 
       58 
53 
     | 
    
         
             
                end
         
     | 
| 
       59 
54 
     | 
    
         | 
| 
         @@ -62,7 +57,7 @@ module Sentry 
     | 
|
| 
       62 
57 
     | 
    
         
             
                EMPTY_PROFILE = {}.freeze
         
     | 
| 
       63 
58 
     | 
    
         | 
| 
       64 
59 
     | 
    
         
             
                def populate_profile(transaction)
         
     | 
| 
       65 
     | 
    
         
            -
                  profile_hash = transaction.profiler&. 
     | 
| 
      
 60 
     | 
    
         
            +
                  profile_hash = transaction.profiler&.to_h || EMPTY_PROFILE
         
     | 
| 
       66 
61 
     | 
    
         | 
| 
       67 
62 
     | 
    
         
             
                  return if profile_hash.empty?
         
     | 
| 
       68 
63 
     | 
    
         | 
    
        data/lib/sentry/transport.rb
    CHANGED
    
    | 
         @@ -113,7 +113,7 @@ module Sentry 
     | 
|
| 
       113 
113 
     | 
    
         | 
| 
       114 
114 
     | 
    
         
             
                def envelope_from_event(event)
         
     | 
| 
       115 
115 
     | 
    
         
             
                  # Convert to hash
         
     | 
| 
       116 
     | 
    
         
            -
                  event_payload = event. 
     | 
| 
      
 116 
     | 
    
         
            +
                  event_payload = event.to_h
         
     | 
| 
       117 
117 
     | 
    
         
             
                  event_id = event_payload[:event_id] || event_payload["event_id"]
         
     | 
| 
       118 
118 
     | 
    
         
             
                  item_type = event_payload[:type] || event_payload["type"]
         
     | 
| 
       119 
119 
     | 
    
         | 
| 
         @@ -124,10 +124,7 @@ module Sentry 
     | 
|
| 
       124 
124 
     | 
    
         
             
                    sent_at: Sentry.utc_now.iso8601
         
     | 
| 
       125 
125 
     | 
    
         
             
                  }
         
     | 
| 
       126 
126 
     | 
    
         | 
| 
       127 
     | 
    
         
            -
                   
     | 
| 
       128 
     | 
    
         
            -
                    envelope_headers[:trace] = event.dynamic_sampling_context
         
     | 
| 
       129 
     | 
    
         
            -
                  end
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
      
 127 
     | 
    
         
            +
                  envelope_headers[:trace] = event.dynamic_sampling_context if event.dynamic_sampling_context
         
     | 
| 
       131 
128 
     | 
    
         
             
                  envelope = Envelope.new(envelope_headers)
         
     | 
| 
       132 
129 
     | 
    
         | 
| 
       133 
130 
     | 
    
         
             
                  if event.is_a?(LogEvent)
         
     | 
| 
         @@ -3,27 +3,29 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Sentry
         
     | 
| 
       4 
4 
     | 
    
         
             
              # @private
         
     | 
| 
       5 
5 
     | 
    
         
             
              module LoggingHelper
         
     | 
| 
       6 
     | 
    
         
            -
                # @!visibility private
         
     | 
| 
       7 
     | 
    
         
            -
                attr_reader :sdk_logger
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
6 
     | 
    
         
             
                # @!visibility private
         
     | 
| 
       10 
7 
     | 
    
         
             
                def log_error(message, exception, debug: false)
         
     | 
| 
       11 
8 
     | 
    
         
             
                  message = "#{message}: #{exception.message}"
         
     | 
| 
       12 
9 
     | 
    
         
             
                  message += "\n#{exception.backtrace.join("\n")}" if debug
         
     | 
| 
       13 
10 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                  sdk_logger 
     | 
| 
      
 11 
     | 
    
         
            +
                  sdk_logger&.error(LOGGER_PROGNAME) do
         
     | 
| 
       15 
12 
     | 
    
         
             
                    message
         
     | 
| 
       16 
13 
     | 
    
         
             
                  end
         
     | 
| 
       17 
14 
     | 
    
         
             
                end
         
     | 
| 
       18 
15 
     | 
    
         | 
| 
       19 
16 
     | 
    
         
             
                # @!visibility private
         
     | 
| 
       20 
17 
     | 
    
         
             
                def log_debug(message)
         
     | 
| 
       21 
     | 
    
         
            -
                  sdk_logger 
     | 
| 
      
 18 
     | 
    
         
            +
                  sdk_logger&.debug(LOGGER_PROGNAME) { message }
         
     | 
| 
       22 
19 
     | 
    
         
             
                end
         
     | 
| 
       23 
20 
     | 
    
         | 
| 
       24 
21 
     | 
    
         
             
                # @!visibility private
         
     | 
| 
       25 
22 
     | 
    
         
             
                def log_warn(message)
         
     | 
| 
       26 
     | 
    
         
            -
                  sdk_logger 
     | 
| 
      
 23 
     | 
    
         
            +
                  sdk_logger&.warn(LOGGER_PROGNAME) { message }
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                # @!visibility private
         
     | 
| 
      
 27 
     | 
    
         
            +
                def sdk_logger
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @sdk_logger ||= Sentry.sdk_logger
         
     | 
| 
       27 
29 
     | 
    
         
             
                end
         
     | 
| 
       28 
30 
     | 
    
         
             
              end
         
     | 
| 
       29 
31 
     | 
    
         
             
            end
         
     | 
| 
         @@ -20,6 +20,7 @@ module Sentry 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                    @profiling_enabled = defined?(Vernier) && configuration.profiling_enabled?
         
     | 
| 
       22 
22 
     | 
    
         
             
                    @profiles_sample_rate = configuration.profiles_sample_rate
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @profiles_sample_interval = configuration.profiles_sample_interval
         
     | 
| 
       23 
24 
     | 
    
         
             
                    @project_root = configuration.project_root
         
     | 
| 
       24 
25 
     | 
    
         
             
                    @app_dirs_pattern = configuration.app_dirs_pattern
         
     | 
| 
       25 
26 
     | 
    
         
             
                    @in_app_pattern = Regexp.new("^(#{@project_root}/)?#{@app_dirs_pattern}")
         
     | 
| 
         @@ -56,7 +57,7 @@ module Sentry 
     | 
|
| 
       56 
57 
     | 
    
         
             
                    return unless @sampled
         
     | 
| 
       57 
58 
     | 
    
         
             
                    return if @started
         
     | 
| 
       58 
59 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                    @started = ::Vernier.start_profile
         
     | 
| 
      
 60 
     | 
    
         
            +
                    @started = ::Vernier.start_profile(interval: @profiles_sample_interval)
         
     | 
| 
       60 
61 
     | 
    
         | 
| 
       61 
62 
     | 
    
         
             
                    log("Started")
         
     | 
| 
       62 
63 
     | 
    
         | 
| 
         @@ -90,9 +91,9 @@ module Sentry 
     | 
|
| 
       90 
91 
     | 
    
         
             
                    Thread.current.object_id
         
     | 
| 
       91 
92 
     | 
    
         
             
                  end
         
     | 
| 
       92 
93 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
                  def  
     | 
| 
      
 94 
     | 
    
         
            +
                  def to_h
         
     | 
| 
       94 
95 
     | 
    
         
             
                    unless @sampled
         
     | 
| 
       95 
     | 
    
         
            -
                      record_lost_event(:sample_rate)
         
     | 
| 
      
 96 
     | 
    
         
            +
                      record_lost_event(:sample_rate) if @profiling_enabled
         
     | 
| 
       96 
97 
     | 
    
         
             
                      return EMPTY_RESULT
         
     | 
| 
       97 
98 
     | 
    
         
             
                    end
         
     | 
| 
       98 
99 
     | 
    
         | 
    
        data/lib/sentry/version.rb
    CHANGED