exception_hunter 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ba4ba0c2e1205126ac00e8d0c27b9b98cc3b932dff902e6d7552b7bb640e681
4
- data.tar.gz: 49b05057f76bb754bec371065918aeb0cb087208794326c78b837fb894af2fad
3
+ metadata.gz: 7fb03df52c56c0849ab0400679af9ce9a7711c0eab80c42f4d79f59ff3613ace
4
+ data.tar.gz: 181ba4a3cfb249ac1a02f7ec55548f4d306ee4eb902cace8ef741d271aed394b
5
5
  SHA512:
6
- metadata.gz: dfd7faf102765439718b72f1c643593d48c6f1613db7ea573a4cb0ea66206819d6fcf5f17eb9f229beb31efa20f76901e995539703ed266073986cdae5795712
7
- data.tar.gz: b9711187a6887b4542973bc5f1c687a9e6034dc5b136cc6755fec9126d4ccce4311bbad8eafdfd49c53be7e437c63f69f505b4868f46da3abf387e3e6bc02ab1
6
+ metadata.gz: 4379274f01ea33abbc12e696c137cfbd8fac013a052f2d34bfe86db804904bfbf1008a6d43b88c5b3768ddfd3373b56dc23b05739c21ae66c0233e861f6ce888
7
+ data.tar.gz: 60213532b0048da8de7b00383e8bf049f3a82143765add61099a8cf7f005ad1474970e4cbbc8415701b2efa2bf4a3095c60e52050a62bcedbe30742bc124ce81
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # ExceptionHunter
2
2
 
3
+ ![CI](https://github.com/rootstrap/exception_hunter/workflows/Rails%20tests/badge.svg)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/86f6aaa2377c894f8ee4/maintainability)](https://codeclimate.com/github/rootstrap/exception_hunter/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/86f6aaa2377c894f8ee4/test_coverage)](https://codeclimate.com/github/rootstrap/exception_hunter/test_coverage)
6
+
3
7
  ![Index screenshot](doc/screenshot.png)
4
8
 
5
9
  Exception Hunter is a Rails engine meant to track errors in your Rails project. It works
@@ -21,7 +25,7 @@ project, and MVP or something else.
21
25
  Add Exception Hunter to your application's Gemfile:
22
26
 
23
27
  ```ruby
24
- gem 'exception_hunter', '~> 0.3.0'
28
+ gem 'exception_hunter', '~> 0.4.0'
25
29
  ```
26
30
 
27
31
  You may also need to add [Devise](https://github.com/heartcombo/devise) to your Gemfile
@@ -2,7 +2,6 @@ require 'pagy'
2
2
 
3
3
  require 'exception_hunter/engine'
4
4
  require 'exception_hunter/middleware/request_hunter'
5
- require 'exception_hunter/middleware/sidekiq_hunter' if defined?(Sidekiq)
6
5
  require 'exception_hunter/config'
7
6
  require 'exception_hunter/error_creator'
8
7
  require 'exception_hunter/error_reaper'
@@ -12,5 +12,10 @@ module ExceptionHunter
12
12
  app.config.assets.precompile << 'exception_hunter/application.css'
13
13
  app.config.assets.precompile << 'exception_hunter/logo.png'
14
14
  end
15
+
16
+ initializer 'exception_hunter.load_middleware', group: :all do
17
+ require 'exception_hunter/middleware/sidekiq_hunter' if defined?(Sidekiq)
18
+ require 'exception_hunter/middleware/delayed_job_hunter' if defined?(Delayed)
19
+ end
15
20
  end
16
21
  end
@@ -0,0 +1,69 @@
1
+ require 'delayed_job'
2
+
3
+ module ExceptionHunter
4
+ module Middleware
5
+ class DelayedJobHunter < ::Delayed::Plugin
6
+ TRACK_AT_RETRY = [0, 3, 6, 10].freeze
7
+ JOB_TRACKED_DATA = %w[
8
+ attempts
9
+ ].freeze
10
+ ARGS_TRACKED_DATA = %w[
11
+ queue_name
12
+ job_class
13
+ job_id
14
+ arguments
15
+ enqueued_at
16
+ ].freeze
17
+
18
+ callbacks do |lifecycle|
19
+ lifecycle.around(:invoke_job) do |job, *args, &block|
20
+ block.call(job, *args)
21
+
22
+ rescue Exception => exception # rubocop:disable Lint/RescueException
23
+ track_exception(exception, job)
24
+
25
+ raise exception
26
+ end
27
+ end
28
+
29
+ def self.track_exception(exception, job)
30
+ return unless should_track?(job.attempts)
31
+
32
+ ErrorCreator.call(
33
+ tag: ErrorCreator::WORKER_TAG,
34
+ class_name: exception.class.to_s,
35
+ message: exception.message,
36
+ environment_data: environment_data(job),
37
+ backtrace: exception.backtrace
38
+ )
39
+ end
40
+
41
+ def self.environment_data(job)
42
+ job_data =
43
+ JOB_TRACKED_DATA.each_with_object({}) do |data_param, dict|
44
+ dict.merge(data_param => job.try(data_param))
45
+ end
46
+
47
+ job_class = if job.payload_object.class.name == 'ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper'
48
+ # support for Rails 4.2 ActiveJob
49
+ job.payload_object.job_data['job_class']
50
+ elsif job.payload_object.object.is_a?(Class)
51
+ job.payload_object.object.name
52
+ else
53
+ job.payload_object.object.class.name
54
+ end
55
+ args_data = (job.payload_object.try(:job_data) || {}).select { |key, _value| ARGS_TRACKED_DATA.include?(key) }
56
+
57
+ args_data['job_class'] = job_class || job.payload_object.class.name if args_data['job_class'].nil?
58
+
59
+ job_data.merge(args_data)
60
+ end
61
+
62
+ def self.should_track?(attempts)
63
+ TRACK_AT_RETRY.include?(attempts)
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ Delayed::Worker.plugins << ExceptionHunter::Middleware::DelayedJobHunter
@@ -1,3 +1,3 @@
1
1
  module ExceptionHunter
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exception_hunter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Vezoli
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-06-10 00:00:00.000000000 Z
12
+ date: 2020-07-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pagy
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '3.8'
20
+ version: '3'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '3.8'
27
+ version: '3'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: brakeman
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -115,14 +115,14 @@ dependencies:
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: 0.18.5
118
+ version: 0.17.1
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: 0.18.5
125
+ version: 0.17.1
126
126
  description:
127
127
  email:
128
128
  - bruno.vezoli@rootstrap.com
@@ -175,6 +175,7 @@ files:
175
175
  - lib/exception_hunter/engine.rb
176
176
  - lib/exception_hunter/error_creator.rb
177
177
  - lib/exception_hunter/error_reaper.rb
178
+ - lib/exception_hunter/middleware/delayed_job_hunter.rb
178
179
  - lib/exception_hunter/middleware/request_hunter.rb
179
180
  - lib/exception_hunter/middleware/sidekiq_hunter.rb
180
181
  - lib/exception_hunter/tracking.rb
@@ -207,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
207
208
  - !ruby/object:Gem::Version
208
209
  version: '0'
209
210
  requirements: []
210
- rubygems_version: 3.1.2
211
+ rubygems_version: 3.0.8
211
212
  signing_key:
212
213
  specification_version: 4
213
214
  summary: Exception tracking engine