sentry-ruby 4.0.1 → 4.1.4
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/CHANGELOG.md +79 -0
- data/Gemfile +2 -2
- data/README.md +45 -11
- data/lib/sentry-ruby.rb +91 -33
- data/lib/sentry/background_worker.rb +37 -0
- data/lib/sentry/backtrace.rb +3 -5
- data/lib/sentry/client.rb +26 -10
- data/lib/sentry/configuration.rb +14 -5
- data/lib/sentry/event.rb +22 -28
- data/lib/sentry/hub.rb +13 -7
- data/lib/sentry/integrable.rb +24 -0
- data/lib/sentry/interfaces/request.rb +51 -33
- data/lib/sentry/interfaces/stacktrace.rb +39 -6
- data/lib/sentry/rack.rb +2 -3
- data/lib/sentry/rack/capture_exceptions.rb +68 -0
- data/lib/sentry/rack/deprecations.rb +19 -0
- data/lib/sentry/rake.rb +2 -2
- data/lib/sentry/scope.rb +4 -8
- data/lib/sentry/span.rb +6 -28
- data/lib/sentry/transaction.rb +45 -1
- data/lib/sentry/transport.rb +12 -21
- data/lib/sentry/transport/http_transport.rb +3 -6
- data/lib/sentry/utils/argument_checking_helper.rb +11 -0
- data/lib/sentry/utils/request_id.rb +2 -2
- data/lib/sentry/version.rb +1 -1
- data/sentry-ruby.gemspec +1 -0
- metadata +27 -5
- data/lib/sentry/rack/capture_exception.rb +0 -45
- data/lib/sentry/rack/tracing.rb +0 -39
- data/lib/sentry/transport/state.rb +0 -40
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            module Sentry
         | 
| 2 | 
            +
              module ArgumentCheckingHelper
         | 
| 3 | 
            +
                private
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def check_argument_type!(argument, expected_type)
         | 
| 6 | 
            +
                  unless argument.is_a?(expected_type)
         | 
| 7 | 
            +
                    raise ArgumentError, "expect the argument to be a #{expected_type}, got #{argument.class} (#{argument.inspect})"
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -4,9 +4,9 @@ module Sentry | |
| 4 4 | 
             
                  REQUEST_ID_HEADERS = %w(action_dispatch.request_id HTTP_X_REQUEST_ID).freeze
         | 
| 5 5 |  | 
| 6 6 | 
             
                  # Request ID based on ActionDispatch::RequestId
         | 
| 7 | 
            -
                  def self.read_from( | 
| 7 | 
            +
                  def self.read_from(env)
         | 
| 8 8 | 
             
                    REQUEST_ID_HEADERS.each do |key|
         | 
| 9 | 
            -
                      request_id =  | 
| 9 | 
            +
                      request_id = env[key]
         | 
| 10 10 | 
             
                      return request_id if request_id
         | 
| 11 11 | 
             
                    end
         | 
| 12 12 | 
             
                    nil
         | 
    
        data/lib/sentry/version.rb
    CHANGED
    
    
    
        data/sentry-ruby.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sentry-ruby
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4. | 
| 4 | 
            +
              version: 4.1.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sentry Team
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-01-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faraday
         | 
| @@ -24,6 +24,26 @@ dependencies: | |
| 24 24 | 
             
                - - ">="
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: '1.0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: concurrent-ruby
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '1.0'
         | 
| 34 | 
            +
                - - ">="
         | 
| 35 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 36 | 
            +
                    version: 1.0.2
         | 
| 37 | 
            +
              type: :runtime
         | 
| 38 | 
            +
              prerelease: false
         | 
| 39 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 40 | 
            +
                requirements:
         | 
| 41 | 
            +
                - - "~>"
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            +
                    version: '1.0'
         | 
| 44 | 
            +
                - - ">="
         | 
| 45 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 46 | 
            +
                    version: 1.0.2
         | 
| 27 47 | 
             
            description: A gem that provides a client interface for the Sentry error logger
         | 
| 28 48 | 
             
            email: accounts@sentry.io
         | 
| 29 49 | 
             
            executables: []
         | 
| @@ -45,6 +65,7 @@ files: | |
| 45 65 | 
             
            - bin/console
         | 
| 46 66 | 
             
            - bin/setup
         | 
| 47 67 | 
             
            - lib/sentry-ruby.rb
         | 
| 68 | 
            +
            - lib/sentry/background_worker.rb
         | 
| 48 69 | 
             
            - lib/sentry/backtrace.rb
         | 
| 49 70 | 
             
            - lib/sentry/benchmarks/benchmark_transport.rb
         | 
| 50 71 | 
             
            - lib/sentry/breadcrumb.rb
         | 
| @@ -57,6 +78,7 @@ files: | |
| 57 78 | 
             
            - lib/sentry/dsn.rb
         | 
| 58 79 | 
             
            - lib/sentry/event.rb
         | 
| 59 80 | 
             
            - lib/sentry/hub.rb
         | 
| 81 | 
            +
            - lib/sentry/integrable.rb
         | 
| 60 82 | 
             
            - lib/sentry/interface.rb
         | 
| 61 83 | 
             
            - lib/sentry/interfaces/exception.rb
         | 
| 62 84 | 
             
            - lib/sentry/interfaces/request.rb
         | 
| @@ -65,8 +87,8 @@ files: | |
| 65 87 | 
             
            - lib/sentry/linecache.rb
         | 
| 66 88 | 
             
            - lib/sentry/logger.rb
         | 
| 67 89 | 
             
            - lib/sentry/rack.rb
         | 
| 68 | 
            -
            - lib/sentry/rack/ | 
| 69 | 
            -
            - lib/sentry/rack/ | 
| 90 | 
            +
            - lib/sentry/rack/capture_exceptions.rb
         | 
| 91 | 
            +
            - lib/sentry/rack/deprecations.rb
         | 
| 70 92 | 
             
            - lib/sentry/rake.rb
         | 
| 71 93 | 
             
            - lib/sentry/scope.rb
         | 
| 72 94 | 
             
            - lib/sentry/span.rb
         | 
| @@ -76,7 +98,7 @@ files: | |
| 76 98 | 
             
            - lib/sentry/transport/configuration.rb
         | 
| 77 99 | 
             
            - lib/sentry/transport/dummy_transport.rb
         | 
| 78 100 | 
             
            - lib/sentry/transport/http_transport.rb
         | 
| 79 | 
            -
            - lib/sentry/ | 
| 101 | 
            +
            - lib/sentry/utils/argument_checking_helper.rb
         | 
| 80 102 | 
             
            - lib/sentry/utils/exception_cause_chain.rb
         | 
| 81 103 | 
             
            - lib/sentry/utils/real_ip.rb
         | 
| 82 104 | 
             
            - lib/sentry/utils/request_id.rb
         | 
| @@ -1,45 +0,0 @@ | |
| 1 | 
            -
            module Sentry
         | 
| 2 | 
            -
              module Rack
         | 
| 3 | 
            -
                class CaptureException
         | 
| 4 | 
            -
                  def initialize(app)
         | 
| 5 | 
            -
                    @app = app
         | 
| 6 | 
            -
                  end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  def call(env)
         | 
| 9 | 
            -
                    # this call clones the main (global) hub
         | 
| 10 | 
            -
                    # and assigns it to the current thread's Sentry#get_current_hub
         | 
| 11 | 
            -
                    # it's essential for multi-thread servers (e.g. puma)
         | 
| 12 | 
            -
                    Sentry.clone_hub_to_current_thread unless Sentry.get_current_hub
         | 
| 13 | 
            -
                    # this call creates an isolated scope for every request
         | 
| 14 | 
            -
                    # it's essential for multi-process servers (e.g. unicorn)
         | 
| 15 | 
            -
                    Sentry.with_scope do |scope|
         | 
| 16 | 
            -
                      # there could be some breadcrumbs already stored in the top-level scope
         | 
| 17 | 
            -
                      # and for request information, we don't need those breadcrumbs
         | 
| 18 | 
            -
                      scope.clear_breadcrumbs
         | 
| 19 | 
            -
                      env['sentry.client'] = Sentry.get_current_client
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                      scope.set_transaction_name(env["PATH_INFO"]) if env["PATH_INFO"]
         | 
| 22 | 
            -
                      scope.set_rack_env(env)
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                      begin
         | 
| 25 | 
            -
                        response = @app.call(env)
         | 
| 26 | 
            -
                      rescue Sentry::Error
         | 
| 27 | 
            -
                        raise # Don't capture Sentry errors
         | 
| 28 | 
            -
                      rescue Exception => e
         | 
| 29 | 
            -
                        Sentry.capture_exception(e)
         | 
| 30 | 
            -
                        raise
         | 
| 31 | 
            -
                      end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                      exception = collect_exception(env)
         | 
| 34 | 
            -
                      Sentry.capture_exception(exception) if exception
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                      response
         | 
| 37 | 
            -
                    end
         | 
| 38 | 
            -
                  end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                  def collect_exception(env)
         | 
| 41 | 
            -
                    env['rack.exception'] || env['sinatra.error']
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
                end
         | 
| 44 | 
            -
              end
         | 
| 45 | 
            -
            end
         | 
    
        data/lib/sentry/rack/tracing.rb
    DELETED
    
    | @@ -1,39 +0,0 @@ | |
| 1 | 
            -
            module Sentry
         | 
| 2 | 
            -
              module Rack
         | 
| 3 | 
            -
                class Tracing
         | 
| 4 | 
            -
                  def initialize(app)
         | 
| 5 | 
            -
                    @app = app
         | 
| 6 | 
            -
                  end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  def call(env)
         | 
| 9 | 
            -
                    Sentry.clone_hub_to_current_thread unless Sentry.get_current_hub
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                    if Sentry.configuration.traces_sample_rate.to_f == 0.0
         | 
| 12 | 
            -
                      return @app.call(env)
         | 
| 13 | 
            -
                    end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                    Sentry.with_scope do |scope|
         | 
| 16 | 
            -
                      scope.clear_breadcrumbs
         | 
| 17 | 
            -
                      scope.set_transaction_name(env["PATH_INFO"]) if env["PATH_INFO"]
         | 
| 18 | 
            -
                      span = Sentry.start_transaction(name: scope.transaction_name, op: "rack.request")
         | 
| 19 | 
            -
                      scope.set_span(span)
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                      begin
         | 
| 22 | 
            -
                        response = @app.call(env)
         | 
| 23 | 
            -
                      rescue
         | 
| 24 | 
            -
                        finish_span(span, 500)
         | 
| 25 | 
            -
                        raise
         | 
| 26 | 
            -
                      end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                      finish_span(span, response[0])
         | 
| 29 | 
            -
                      response
         | 
| 30 | 
            -
                    end
         | 
| 31 | 
            -
                  end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                  def finish_span(span, status_code)
         | 
| 34 | 
            -
                    span.set_http_status(status_code)
         | 
| 35 | 
            -
                    span.finish
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
              end
         | 
| 39 | 
            -
            end
         | 
| @@ -1,40 +0,0 @@ | |
| 1 | 
            -
            module Sentry
         | 
| 2 | 
            -
              class Transport
         | 
| 3 | 
            -
                class State
         | 
| 4 | 
            -
                  def initialize
         | 
| 5 | 
            -
                    reset
         | 
| 6 | 
            -
                  end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  def should_try?
         | 
| 9 | 
            -
                    return true if @status == :online
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                    interval = @retry_after || [@retry_number, 6].min**2
         | 
| 12 | 
            -
                    return true if Sentry.utc_now - @last_check >= interval
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                    false
         | 
| 15 | 
            -
                  end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                  def failure(retry_after = nil)
         | 
| 18 | 
            -
                    @status = :error
         | 
| 19 | 
            -
                    @retry_number += 1
         | 
| 20 | 
            -
                    @last_check = Sentry.utc_now
         | 
| 21 | 
            -
                    @retry_after = retry_after
         | 
| 22 | 
            -
                  end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                  def success
         | 
| 25 | 
            -
                    reset
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  def reset
         | 
| 29 | 
            -
                    @status = :online
         | 
| 30 | 
            -
                    @retry_number = 0
         | 
| 31 | 
            -
                    @last_check = nil
         | 
| 32 | 
            -
                    @retry_after = nil
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  def failed?
         | 
| 36 | 
            -
                    @status == :error
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
                end
         | 
| 39 | 
            -
              end
         | 
| 40 | 
            -
            end
         |