sentry-sidekiq 4.1.2 → 4.4.0.pre.beta.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: 4370fdcec568ea785e549d24e250575ad8bb93b7a46bd27e777e9c6776407a57
4
- data.tar.gz: 99a527bf321e1645843a159f9706ea8215976485833b8c20dcb243b56bce6016
3
+ metadata.gz: 348d53b89424320f50c7c210ef6aecfd855c44dbd2b1a484c21ae26a129b70fb
4
+ data.tar.gz: b74912cbe7930b8abbc3e97c317b1b6da3414e6f6360b9256e10dd3daec1aecb
5
5
  SHA512:
6
- metadata.gz: 6fdd057e634833b1ee467af9800ba759d2bca7a88ae9a1a8f84d844c8afa99b6aeb5d241b3f267275b5e42176c56943286a2b89407f5b7cc135fac520d04e833
7
- data.tar.gz: 53ca304f50dc403af8a7f5d7011c2d1d6850ce111859796bac193736b8c6a5778428822db519eae7c0e412290a56b709e09fd59031093613b089b96379f9d38c
6
+ metadata.gz: 16bbc9522af7aed6b6f1f78764a62923b4153623930a012efd5432708ab42e00e1bb0b3bd6a835ebcca00dcf428fca7c0f69b9dffc64c0d01a6f28640622f3a2
7
+ data.tar.gz: 6799170ef2967c6ed7a2d1c4ada6d438f9d7858cea8e96fe0ebf01ce5307a8970c0a213c83a909da229a01817be25c0ccade5876b07b9a8560d87f29df7ed038
data/.craft.yml CHANGED
@@ -11,9 +11,10 @@ artifactProvider:
11
11
  name: github
12
12
  targets:
13
13
  - name: gem
14
- - name: github
15
- tagPrefix: sentry-sidekiq-v
16
14
  - name: registry
17
15
  type: sdk
18
16
  config:
19
17
  canonical: 'gem:sentry-sidekiq'
18
+ - name: github
19
+ tagPrefix: sentry-sidekiq-v
20
+ changelog: sentry-sidekiq/CHANGELOG.md
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
1
  --format documentation
2
2
  --color
3
- --require spec_helper
data/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.4.0-beta.0
4
+
5
+ ### Features
6
+
7
+ - Make Sidekiq job context more readable [#1410](https://github.com/getsentry/sentry-ruby/pull/1410)
8
+
9
+ **Before**
10
+
11
+ <img width="60%" alt="Sidekiq payload in extra" src="https://user-images.githubusercontent.com/5079556/115679342-0ed8d000-a385-11eb-8e1c-372cb1af572e.png">
12
+
13
+ **After**
14
+
15
+ <img width="60%" alt="Sidekiq payload in context" src="https://user-images.githubusercontent.com/5079556/115679353-126c5700-a385-11eb-867c-a9a25d1a7099.png">
16
+
17
+ ## 4.3.0
18
+
19
+ ### Features
20
+
21
+ - Support performance monitoring on Sidekiq workers [#1311](https://github.com/getsentry/sentry-ruby/pull/1311)
22
+
23
+ ## 4.2.1
24
+
25
+ - Use ::Rails::Railtie for checking Rails definition [#1284](https://github.com/getsentry/sentry-ruby/pull/1284)
26
+ - Fixes [#1276](https://github.com/getsentry/sentry-ruby/issues/1276)
27
+
28
+ ## 4.2.0
29
+
30
+ ### Features
31
+
32
+ - Tag queue name and jid on sidekiq events [#1258](https://github.com/getsentry/sentry-ruby/pull/1258)
33
+ <img width="1234" alt="sidekiq event tagged with queue name and jid" src="https://user-images.githubusercontent.com/5079556/106389900-d0381700-6420-11eb-90b9-a95b0881b696.png">
34
+
35
+ ### Refactorings
36
+
37
+ - Add sidekiq adapter to sentry-rails' ignored adapters list [#1257](https://github.com/getsentry/sentry-ruby/pull/1257)
38
+
39
+ ## 4.1.3
40
+
41
+ - Use sentry-ruby-core as the main SDK dependency [#1245](https://github.com/getsentry/sentry-ruby/pull/1245)
42
+
3
43
  ## 4.1.2
4
44
 
5
45
  - Fix sidekiq middleware [#1175](https://github.com/getsentry/sentry-ruby/pull/1175)
data/Gemfile CHANGED
@@ -3,13 +3,16 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in sentry-ruby.gemspec
4
4
  gemspec
5
5
 
6
+ gem "i18n", "~> 1.8.9"
7
+
6
8
  gem "rake", "~> 12.0"
7
9
  gem "rspec", "~> 3.0"
8
10
  gem "codecov", "0.2.12"
9
11
 
10
12
  gem "sidekiq"
11
- gem "activejob"
13
+ gem "rails"
12
14
 
13
15
  gem "sentry-ruby", path: "../sentry-ruby"
16
+ gem "sentry-rails", path: "../sentry-rails"
14
17
 
15
18
  gem "pry"
data/Makefile ADDED
@@ -0,0 +1,7 @@
1
+ build:
2
+ bundle install
3
+ gem build sentry-sidekiq.gemspec
4
+
5
+ test:
6
+ bundle exec rspec
7
+ WITH_SENTRY_RAILS=1 bundle exec rspec spec/sentry/rails_spec.rb
@@ -10,6 +10,8 @@ end
10
10
  class ErrorWorker
11
11
  include Sidekiq::Worker
12
12
 
13
+ sidekiq_options retry: 0
14
+
13
15
  def perform
14
16
  1 / 0
15
17
  end
@@ -4,13 +4,22 @@ require "sentry/integrable"
4
4
  require "sentry/sidekiq/version"
5
5
  require "sentry/sidekiq/error_handler"
6
6
  require "sentry/sidekiq/sentry_context_middleware"
7
- # require "sentry/sidekiq/configuration"
8
7
 
9
8
  module Sentry
10
9
  module Sidekiq
11
10
  extend Sentry::Integrable
12
11
 
13
12
  register_integration name: "sidekiq", version: Sentry::Sidekiq::VERSION
13
+
14
+ if defined?(::Rails::Railtie)
15
+ class Railtie < ::Rails::Railtie
16
+ config.after_initialize do
17
+ next unless Sentry.initialized?
18
+
19
+ Sentry.configuration.rails.skippable_job_adapters << "ActiveJob::QueueAdapters::SidekiqAdapter"
20
+ end
21
+ end
22
+ end
14
23
  end
15
24
  end
16
25
 
@@ -2,8 +2,12 @@ module Sentry
2
2
  module Sidekiq
3
3
  class ContextFilter
4
4
  ACTIVEJOB_RESERVED_PREFIX_REGEX = /^_aj_/.freeze
5
+ SIDEKIQ_NAME = "Sidekiq".freeze
5
6
 
6
- def initialize
7
+ attr_reader :context
8
+
9
+ def initialize(context)
10
+ @context = context
7
11
  @has_global_id = defined?(GlobalID)
8
12
  end
9
13
 
@@ -13,23 +17,49 @@ module Sentry
13
17
  # The problem is, if this job in turn gets queued back into ActiveJob with
14
18
  # these magic reserved keys, ActiveJob will throw up and error. We want to
15
19
  # capture these and mutate the keys so we can sanely report it.
16
- def filter_context(context)
17
- case context
20
+ def filtered
21
+ filtered_context = filter_context(context)
22
+
23
+ if job_entry = filtered_context.delete(:job)
24
+ job_entry.each do |k, v|
25
+ filtered_context[k] = v
26
+ end
27
+ end
28
+
29
+ filtered_context
30
+ end
31
+
32
+ def transaction_name
33
+ class_name = (context["wrapped"] || context["class"] ||
34
+ (context[:job] && (context[:job]["wrapped"] || context[:job]["class"]))
35
+ )
36
+
37
+ if class_name
38
+ "#{SIDEKIQ_NAME}/#{class_name}"
39
+ elsif context[:event]
40
+ "#{SIDEKIQ_NAME}/#{context[:event]}"
41
+ else
42
+ SIDEKIQ_NAME
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def filter_context(hash)
49
+ case hash
18
50
  when Array
19
- context.map { |arg| filter_context(arg) }
51
+ hash.map { |arg| filter_context(arg) }
20
52
  when Hash
21
- Hash[context.map { |key, value| filter_context_hash(key, value) }]
53
+ Hash[hash.map { |key, value| filter_context_hash(key, value) }]
22
54
  else
23
- if has_global_id? && context.is_a?(GlobalID)
24
- context.to_s
55
+ if has_global_id? && hash.is_a?(GlobalID)
56
+ hash.to_s
25
57
  else
26
- context
58
+ hash
27
59
  end
28
60
  end
29
61
  end
30
62
 
31
- private
32
-
33
63
  def filter_context_hash(key, value)
34
64
  key = key.to_s.sub(ACTIVEJOB_RESERVED_PREFIX_REGEX, "") if key.match(ACTIVEJOB_RESERVED_PREFIX_REGEX)
35
65
  [key, filter_context(value)]
@@ -3,37 +3,20 @@ require 'sentry/sidekiq/context_filter'
3
3
  module Sentry
4
4
  module Sidekiq
5
5
  class ErrorHandler
6
- SIDEKIQ_NAME = "Sidekiq".freeze
7
-
8
6
  def call(ex, context)
9
7
  return unless Sentry.initialized?
10
- context = Sentry::Sidekiq::ContextFilter.new.filter_context(context)
8
+
9
+ context_filter = Sentry::Sidekiq::ContextFilter.new(context)
10
+
11
11
  scope = Sentry.get_current_scope
12
- scope.set_transaction_name(transaction_from_context(context)) unless scope.transaction_name
12
+ scope.set_transaction_name(context_filter.transaction_name) unless scope.transaction_name
13
13
 
14
14
  Sentry::Sidekiq.capture_exception(
15
15
  ex,
16
- extra: { sidekiq: context },
16
+ contexts: { sidekiq: context_filter.filtered },
17
17
  hint: { background: false }
18
18
  )
19
19
  end
20
-
21
- private
22
-
23
- # this will change in the future:
24
- # https://github.com/mperham/sidekiq/pull/3161
25
- def transaction_from_context(context)
26
- classname = (context["wrapped"] || context["class"] ||
27
- (context[:job] && (context[:job]["wrapped"] || context[:job]["class"]))
28
- )
29
- if classname
30
- "#{SIDEKIQ_NAME}/#{classname}"
31
- elsif context[:event]
32
- "#{SIDEKIQ_NAME}/#{context[:event]}"
33
- else
34
- SIDEKIQ_NAME
35
- end
36
- end
37
20
  end
38
21
  end
39
22
  end
@@ -1,20 +1,40 @@
1
+ require 'sentry/sidekiq/context_filter'
2
+
1
3
  module Sentry
2
4
  module Sidekiq
3
5
  class SentryContextMiddleware
4
6
  def call(_worker, job, queue)
5
7
  return yield unless Sentry.initialized?
6
8
 
9
+ context_filter = Sentry::Sidekiq::ContextFilter.new(job)
10
+
7
11
  Sentry.clone_hub_to_current_thread
8
12
  scope = Sentry.get_current_scope
9
- scope.set_extras(sidekiq: job.merge("queue" => queue))
10
- scope.set_transaction_name("Sidekiq/#{job["class"]}")
13
+ scope.set_tags(queue: queue, jid: job["jid"])
14
+ scope.set_contexts(sidekiq: job.merge("queue" => queue))
15
+ scope.set_transaction_name(context_filter.transaction_name)
16
+ transaction = Sentry.start_transaction(name: scope.transaction_name, op: "sidekiq")
17
+ scope.set_span(transaction) if transaction
11
18
 
12
- yield
19
+ begin
20
+ yield
21
+ rescue => e
22
+ finish_transaction(transaction, 500)
23
+ raise
24
+ end
13
25
 
26
+ finish_transaction(transaction, 200)
14
27
  # don't need to use ensure here
15
28
  # if the job failed, we need to keep the scope for error handler. and the scope will be cleared there
16
29
  scope.clear
17
30
  end
31
+
32
+ def finish_transaction(transaction, status)
33
+ return unless transaction
34
+
35
+ transaction.set_http_status(status)
36
+ transaction.finish
37
+ end
18
38
  end
19
39
  end
20
40
  end
@@ -1,5 +1,5 @@
1
1
  module Sentry
2
2
  module Sidekiq
3
- VERSION = "4.1.2"
3
+ VERSION = "4.4.0-beta.0"
4
4
  end
5
5
  end
@@ -16,11 +16,11 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
19
- spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
19
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/sentry-sidekiq/CHANGELOG.md"
20
20
 
21
21
  spec.bindir = "exe"
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_dependency "sentry-ruby", "~> 4.1.2"
25
+ spec.add_dependency "sentry-ruby-core", "~> 4.4.0.pre.beta"
26
26
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.2
4
+ version: 4.4.0.pre.beta.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-30 00:00:00.000000000 Z
11
+ date: 2021-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sentry-ruby
14
+ name: sentry-ruby-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 4.1.2
19
+ version: 4.4.0.pre.beta
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 4.1.2
26
+ version: 4.4.0.pre.beta
27
27
  description: A gem that provides Sidekiq integration for the Sentry error logger
28
28
  email: accounts@sentry.io
29
29
  executables: []
@@ -35,11 +35,11 @@ files:
35
35
  - ".craft.yml"
36
36
  - ".gitignore"
37
37
  - ".rspec"
38
- - ".travis.yml"
39
38
  - CHANGELOG.md
40
39
  - CODE_OF_CONDUCT.md
41
40
  - Gemfile
42
41
  - LICENSE.txt
42
+ - Makefile
43
43
  - README.md
44
44
  - Rakefile
45
45
  - bin/console
@@ -49,7 +49,6 @@ files:
49
49
  - example/config/sidekiq.yml
50
50
  - example/error_worker.rb
51
51
  - lib/sentry-sidekiq.rb
52
- - lib/sentry/sidekiq/cleanup_middleware.rb
53
52
  - lib/sentry/sidekiq/context_filter.rb
54
53
  - lib/sentry/sidekiq/error_handler.rb
55
54
  - lib/sentry/sidekiq/sentry_context_middleware.rb
@@ -61,7 +60,7 @@ licenses:
61
60
  metadata:
62
61
  homepage_uri: https://github.com/getsentry/sentry-ruby
63
62
  source_code_uri: https://github.com/getsentry/sentry-ruby
64
- changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md
63
+ changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/sentry-sidekiq/CHANGELOG.md
65
64
  post_install_message:
66
65
  rdoc_options: []
67
66
  require_paths:
@@ -73,11 +72,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
72
  version: '2.4'
74
73
  required_rubygems_version: !ruby/object:Gem::Requirement
75
74
  requirements:
76
- - - ">="
75
+ - - ">"
77
76
  - !ruby/object:Gem::Version
78
- version: '0'
77
+ version: 1.3.1
79
78
  requirements: []
80
- rubygems_version: 3.0.3
79
+ rubygems_version: 3.0.3.1
81
80
  signing_key:
82
81
  specification_version: 4
83
82
  summary: A gem that provides Sidekiq integration for the Sentry error logger
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.6.5
6
- before_install: gem install bundler -v 2.1.1
@@ -1,21 +0,0 @@
1
- module Sentry
2
- module Sidekiq
3
- class CleanupMiddleware
4
- def call(_worker, job, queue)
5
- return yield unless Sentry.initialized?
6
-
7
- Sentry.clone_hub_to_current_thread
8
- Sentry.with_scope do |scope|
9
- scope.set_extras(sidekiq: job.merge("queue" => queue))
10
- scope.set_transaction_name("Sidekiq/#{job["class"]}")
11
-
12
- begin
13
- yield
14
- rescue => ex
15
- Sentry::Sidekiq.capture_exception(ex, hint: { background: false })
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end