honeybadger 4.5.6 → 4.6.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/CHANGELOG.md +9 -0
- data/lib/honeybadger/agent.rb +2 -0
- data/lib/honeybadger/config/defaults.rb +7 -2
- data/lib/honeybadger/plugins/faktory.rb +52 -0
- data/lib/honeybadger/plugins/sidekiq.rb +17 -7
- data/lib/honeybadger/version.rb +1 -1
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a0a903cc9a64fe0e5b5bcbfef32b81656217d38316ffc66d368d8cc8982bdc04
         | 
| 4 | 
            +
              data.tar.gz: fd4ff117b94da660a2039ebc106e7c29430834f3c691c6940cc1bc483dcbc0ac
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e3f58753fa625545ffba12aaa7d9a86e3f8c7c8e3dc6ca1eaa518dd69e1636ef03d4a4b8a71677f34d8816166700102962e94288cb4e82913d1f5c2c0b6564f7
         | 
| 7 | 
            +
              data.tar.gz: 33459d61b1eae5ab575f65a0ff6b1b7e64a891538b4f5508fe3a45b72fa8c47830a55007858f8aaef97b1c5eaf22a6efdfa3e9147e53eda9a9cde8e854335f7f
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -5,6 +5,15 @@ adheres to [Semantic Versioning](http://semver.org/). | |
| 5 5 |  | 
| 6 6 | 
             
            ## [Unreleased]
         | 
| 7 7 |  | 
| 8 | 
            +
            ## [4.6.0] - 2020-03-12
         | 
| 9 | 
            +
            ### Fixed
         | 
| 10 | 
            +
            - Fixed issue where Sidekiq.attempt_threshold was triggering 2 attempts ahead
         | 
| 11 | 
            +
              of the setting
         | 
| 12 | 
            +
            - Dup notify opts before mutating (#345)
         | 
| 13 | 
            +
            ### Changed
         | 
| 14 | 
            +
            - Breadcrumbs on by default
         | 
| 15 | 
            +
            - Added Faktory plugin -@scottrobertson
         | 
| 16 | 
            +
             | 
| 8 17 | 
             
            ## [4.5.6] - 2020-01-08
         | 
| 9 18 | 
             
            ### Fixed
         | 
| 10 19 | 
             
            - Fix remaining Ruby 2.7 deprecation warnings
         | 
    
        data/lib/honeybadger/agent.rb
    CHANGED
    
    | @@ -115,6 +115,8 @@ module Honeybadger | |
| 115 115 | 
             
                # @return [String] UUID reference to the notice within Honeybadger.
         | 
| 116 116 | 
             
                # @return [false] when ignored.
         | 
| 117 117 | 
             
                def notify(exception_or_opts, opts = {})
         | 
| 118 | 
            +
                  opts = opts.dup
         | 
| 119 | 
            +
             | 
| 118 120 | 
             
                  if exception_or_opts.is_a?(Exception)
         | 
| 119 121 | 
             
                    opts[:exception] = exception_or_opts
         | 
| 120 122 | 
             
                  elsif exception_or_opts.respond_to?(:to_hash)
         | 
| @@ -279,6 +279,11 @@ module Honeybadger | |
| 279 279 | 
             
                    default: 0,
         | 
| 280 280 | 
             
                    type: Integer
         | 
| 281 281 | 
             
                  },
         | 
| 282 | 
            +
                  :'faktory.attempt_threshold' => {
         | 
| 283 | 
            +
                    description: 'The number of attempts before notifications will be sent.',
         | 
| 284 | 
            +
                    default: 0,
         | 
| 285 | 
            +
                    type: Integer
         | 
| 286 | 
            +
                  },
         | 
| 282 287 | 
             
                  :'sidekiq.use_component' => {
         | 
| 283 288 | 
             
                    description: 'Automatically set the component to the class of the job. Helps with grouping.',
         | 
| 284 289 | 
             
                    default: true,
         | 
| @@ -295,8 +300,8 @@ module Honeybadger | |
| 295 300 | 
             
                    type: Boolean
         | 
| 296 301 | 
             
                  },
         | 
| 297 302 | 
             
                  :'breadcrumbs.enabled' => {
         | 
| 298 | 
            -
                    description: ' | 
| 299 | 
            -
                    default:  | 
| 303 | 
            +
                    description: 'Disable breadcrumb functionality.',
         | 
| 304 | 
            +
                    default: true,
         | 
| 300 305 | 
             
                    type: Boolean
         | 
| 301 306 | 
             
                  },
         | 
| 302 307 | 
             
                  :'breadcrumbs.active_support_notifications' => {
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            require 'honeybadger/plugin'
         | 
| 2 | 
            +
            require 'honeybadger/ruby'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Honeybadger
         | 
| 5 | 
            +
              module Plugins
         | 
| 6 | 
            +
                module Faktory
         | 
| 7 | 
            +
                  class Middleware
         | 
| 8 | 
            +
                    def call(worker, job)
         | 
| 9 | 
            +
                      Honeybadger.clear!
         | 
| 10 | 
            +
                      yield
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  Plugin.register do
         | 
| 15 | 
            +
                    requirement { defined?(::Faktory) }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    execution do
         | 
| 18 | 
            +
                      ::Faktory.configure_worker do |faktory|
         | 
| 19 | 
            +
                        faktory.worker_middleware do |chain|
         | 
| 20 | 
            +
                          chain.prepend Middleware
         | 
| 21 | 
            +
                        end
         | 
| 22 | 
            +
                      end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                      ::Faktory.configure_worker do |faktory|
         | 
| 25 | 
            +
                        faktory.error_handlers << lambda do |ex, params|
         | 
| 26 | 
            +
                          opts = {parameters: params}
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                          if job = params[:job]
         | 
| 29 | 
            +
                            if (threshold = config[:'faktory.attempt_threshold'].to_i) > 0
         | 
| 30 | 
            +
                              # If job.failure is nil, it is the first attempt. The first
         | 
| 31 | 
            +
                              # retry has a job.failure.retry_count of 0, which would be
         | 
| 32 | 
            +
                              # the second attempt in our case.
         | 
| 33 | 
            +
                              retry_count = job.dig('failure', 'retry_count')
         | 
| 34 | 
            +
                              attempt = retry_count ? retry_count + 1 : 0
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                              limit = [job['retry'].to_i, threshold].min
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                              return if attempt < limit
         | 
| 39 | 
            +
                            end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                            opts[:component] = job['jobtype']
         | 
| 42 | 
            +
                            opts[:action] = 'perform'
         | 
| 43 | 
            +
                          end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                          Honeybadger.notify(ex, opts)
         | 
| 46 | 
            +
                        end
         | 
| 47 | 
            +
                      end
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
| @@ -25,20 +25,30 @@ module Honeybadger | |
| 25 25 | 
             
                        ::Sidekiq.configure_server do |sidekiq|
         | 
| 26 26 | 
             
                          sidekiq.error_handlers << lambda {|ex, params|
         | 
| 27 27 | 
             
                            job = params[:job] || params
         | 
| 28 | 
            -
                             | 
| 29 | 
            -
             | 
| 30 | 
            -
                             | 
| 31 | 
            -
                               | 
| 32 | 
            -
             | 
| 33 | 
            -
                               | 
| 28 | 
            +
                            job_retry = job['retry'.freeze]
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                            if (threshold = config[:'sidekiq.attempt_threshold'].to_i) > 0 && job_retry
         | 
| 31 | 
            +
                              # We calculate the job attempts to determine the need to
         | 
| 32 | 
            +
                              # skip. Sidekiq's first job execution will have nil for the
         | 
| 33 | 
            +
                              # 'retry_count' job key. The first retry will have 0 set for
         | 
| 34 | 
            +
                              # the 'retry_count' key, incrementing on each execution
         | 
| 35 | 
            +
                              # afterwards.
         | 
| 36 | 
            +
                              retry_count = job['retry_count'.freeze]
         | 
| 37 | 
            +
                              attempt = retry_count ? retry_count + 1 : 0
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                              # Ensure we account for modified max_retries setting
         | 
| 40 | 
            +
                              retry_limit = job_retry == true ? (sidekiq.options[:max_retries] || 25) : job_retry.to_i
         | 
| 41 | 
            +
                              limit = [retry_limit, threshold].min
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                              return if attempt < limit
         | 
| 34 44 | 
             
                            end
         | 
| 35 45 |  | 
| 36 | 
            -
                            return if retry_opt && retry_count < max_retries
         | 
| 37 46 | 
             
                            opts = {parameters: params}
         | 
| 38 47 | 
             
                            if config[:'sidekiq.use_component']
         | 
| 39 48 | 
             
                              opts[:component] = job['wrapped'.freeze] || job['class'.freeze]
         | 
| 40 49 | 
             
                              opts[:action] = 'perform' if opts[:component]
         | 
| 41 50 | 
             
                            end
         | 
| 51 | 
            +
             | 
| 42 52 | 
             
                            Honeybadger.notify(ex, opts)
         | 
| 43 53 | 
             
                          }
         | 
| 44 54 | 
             
                        end
         | 
    
        data/lib/honeybadger/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: honeybadger
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4. | 
| 4 | 
            +
              version: 4.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Honeybadger Industries LLC
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-03-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: Make managing application errors a more pleasant experience.
         | 
| 14 14 | 
             
            email:
         | 
| @@ -65,6 +65,7 @@ files: | |
| 65 65 | 
             
            - lib/honeybadger/plugins/breadcrumbs.rb
         | 
| 66 66 | 
             
            - lib/honeybadger/plugins/delayed_job.rb
         | 
| 67 67 | 
             
            - lib/honeybadger/plugins/delayed_job/plugin.rb
         | 
| 68 | 
            +
            - lib/honeybadger/plugins/faktory.rb
         | 
| 68 69 | 
             
            - lib/honeybadger/plugins/lambda.rb
         | 
| 69 70 | 
             
            - lib/honeybadger/plugins/local_variables.rb
         | 
| 70 71 | 
             
            - lib/honeybadger/plugins/passenger.rb
         | 
| @@ -152,8 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 152 153 | 
             
                - !ruby/object:Gem::Version
         | 
| 153 154 | 
             
                  version: '0'
         | 
| 154 155 | 
             
            requirements: []
         | 
| 155 | 
            -
             | 
| 156 | 
            -
            rubygems_version: 2.7.6.2
         | 
| 156 | 
            +
            rubygems_version: 3.0.1
         | 
| 157 157 | 
             
            signing_key: 
         | 
| 158 158 | 
             
            specification_version: 4
         | 
| 159 159 | 
             
            summary: Error reports you can be happy about.
         |