sentry-sidekiq 4.0.0 → 4.2.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/.rspec +0 -1
- data/CHANGELOG.md +30 -0
- data/Gemfile +6 -2
- data/Makefile +3 -0
- data/lib/sentry-sidekiq.rb +15 -7
- data/lib/sentry/sidekiq/context_filter.rb +32 -10
- data/lib/sentry/sidekiq/error_handler.rb +9 -25
- data/lib/sentry/sidekiq/sentry_context_middleware.rb +25 -0
- data/lib/sentry/sidekiq/version.rb +1 -1
- data/sentry-sidekiq.gemspec +2 -2
- metadata +10 -10
- data/.travis.yml +0 -6
- data/lib/sentry/sidekiq/cleanup_middleware.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e64171c6948ecde7494476fe2eeba1337b4c1c18d14a91400e832056e708580
|
4
|
+
data.tar.gz: e9987c3bbcd421ff6ec99e87aeaaec2e3fdfd8caa0ef5225aac07307f7f8734f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fc42090e8c82189caf48365f0a160f2cd7cacf38b2b340502c643880ff1b83671f51e89de96f8de4f2a5545ae7aace914653c7000be8eaf00c646da64dc8532
|
7
|
+
data.tar.gz: fdf44b2862507f127e9326fb76470cb122c085353b4009fec3a0e6dc844d3fc4a8edd31956ca6e4b6d249eea6f3bb23e591756c83de75fc64bbc4ecc51f06a39
|
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 4.2.0
|
4
|
+
|
5
|
+
### Features
|
6
|
+
|
7
|
+
- Tag queue name and jid on sidekiq events [#1258](https://github.com/getsentry/sentry-ruby/pull/1258)
|
8
|
+
<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">
|
9
|
+
|
10
|
+
### Refactorings
|
11
|
+
|
12
|
+
- Add sidekiq adapter to sentry-rails' ignored adapters list [#1257](https://github.com/getsentry/sentry-ruby/pull/1257)
|
13
|
+
|
14
|
+
## 4.1.3
|
15
|
+
|
16
|
+
- Use sentry-ruby-core as the main SDK dependency [#1245](https://github.com/getsentry/sentry-ruby/pull/1245)
|
17
|
+
|
18
|
+
## 4.1.2
|
19
|
+
|
20
|
+
- Fix sidekiq middleware [#1175](https://github.com/getsentry/sentry-ruby/pull/1175)
|
21
|
+
- Fixes [#1173](https://github.com/getsentry/sentry-ruby/issues/1173)
|
22
|
+
- Adopt Integrable module [#1177](https://github.com/getsentry/sentry-ruby/pull/1177)
|
23
|
+
|
24
|
+
## 4.1.1
|
25
|
+
|
26
|
+
- Use stricter dependency declaration [#1159](https://github.com/getsentry/sentry-ruby/pull/1159)
|
27
|
+
|
28
|
+
## 4.1.0
|
29
|
+
|
30
|
+
- Check SDK initialization before running integrations [#1151](https://github.com/getsentry/sentry-ruby/pull/1151)
|
31
|
+
- Fixes [#1145](https://github.com/getsentry/sentry-ruby/pull/1145)
|
32
|
+
|
3
33
|
## 4.0.0
|
4
34
|
|
5
35
|
- Only documents update for the official release and no API/feature changes.
|
data/Gemfile
CHANGED
@@ -3,13 +3,17 @@ source "https://rubygems.org"
|
|
3
3
|
# Specify your gem's dependencies in sentry-ruby.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
+
# TODO: Remove this if https://github.com/jruby/jruby/issues/6547 is addressed
|
7
|
+
gem "i18n", "<= 1.8.7"
|
8
|
+
|
6
9
|
gem "rake", "~> 12.0"
|
7
10
|
gem "rspec", "~> 3.0"
|
8
|
-
gem "codecov"
|
11
|
+
gem "codecov", "0.2.12"
|
9
12
|
|
10
13
|
gem "sidekiq"
|
11
|
-
gem "
|
14
|
+
gem "rails"
|
12
15
|
|
13
16
|
gem "sentry-ruby", path: "../sentry-ruby"
|
17
|
+
gem "sentry-rails", path: "../sentry-rails"
|
14
18
|
|
15
19
|
gem "pry"
|
data/Makefile
ADDED
data/lib/sentry-sidekiq.rb
CHANGED
@@ -1,24 +1,32 @@
|
|
1
1
|
require "sidekiq"
|
2
2
|
require "sentry-ruby"
|
3
|
+
require "sentry/integrable"
|
3
4
|
require "sentry/sidekiq/version"
|
4
5
|
require "sentry/sidekiq/error_handler"
|
5
|
-
require "sentry/sidekiq/
|
6
|
-
# require "sentry/sidekiq/configuration"
|
6
|
+
require "sentry/sidekiq/sentry_context_middleware"
|
7
7
|
|
8
8
|
module Sentry
|
9
9
|
module Sidekiq
|
10
|
-
|
11
|
-
|
10
|
+
extend Sentry::Integrable
|
11
|
+
|
12
|
+
register_integration name: "sidekiq", version: Sentry::Sidekiq::VERSION
|
13
|
+
|
14
|
+
if defined?(::Rails)
|
15
|
+
class Railtie < ::Rails::Railtie
|
16
|
+
config.after_initialize do
|
17
|
+
next unless Sentry.initialized?
|
12
18
|
|
13
|
-
|
14
|
-
|
19
|
+
Sentry.configuration.rails.skippable_job_adapters << "ActiveJob::QueueAdapters::SidekiqAdapter"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
15
23
|
end
|
16
24
|
end
|
17
25
|
|
18
26
|
Sidekiq.configure_server do |config|
|
19
27
|
config.error_handlers << Sentry::Sidekiq::ErrorHandler.new
|
20
28
|
config.server_middleware do |chain|
|
21
|
-
chain.add Sentry::Sidekiq::
|
29
|
+
chain.add Sentry::Sidekiq::SentryContextMiddleware
|
22
30
|
end
|
23
31
|
end
|
24
32
|
|
@@ -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
|
-
|
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,41 @@ 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
|
17
|
-
|
20
|
+
def filtered
|
21
|
+
filter_context(context)
|
22
|
+
end
|
23
|
+
|
24
|
+
def transaction_name
|
25
|
+
class_name = (context["wrapped"] || context["class"] ||
|
26
|
+
(context[:job] && (context[:job]["wrapped"] || context[:job]["class"]))
|
27
|
+
)
|
28
|
+
|
29
|
+
if class_name
|
30
|
+
"#{SIDEKIQ_NAME}/#{class_name}"
|
31
|
+
elsif context[:event]
|
32
|
+
"#{SIDEKIQ_NAME}/#{context[:event]}"
|
33
|
+
else
|
34
|
+
SIDEKIQ_NAME
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def filter_context(hash)
|
41
|
+
case hash
|
18
42
|
when Array
|
19
|
-
|
43
|
+
hash.map { |arg| filter_context(arg) }
|
20
44
|
when Hash
|
21
|
-
Hash[
|
45
|
+
Hash[hash.map { |key, value| filter_context_hash(key, value) }]
|
22
46
|
else
|
23
|
-
if has_global_id? &&
|
24
|
-
|
47
|
+
if has_global_id? && hash.is_a?(GlobalID)
|
48
|
+
hash.to_s
|
25
49
|
else
|
26
|
-
|
50
|
+
hash
|
27
51
|
end
|
28
52
|
end
|
29
53
|
end
|
30
54
|
|
31
|
-
private
|
32
|
-
|
33
55
|
def filter_context_hash(key, value)
|
34
56
|
key = key.to_s.sub(ACTIVEJOB_RESERVED_PREFIX_REGEX, "") if key.match(ACTIVEJOB_RESERVED_PREFIX_REGEX)
|
35
57
|
[key, filter_context(value)]
|
@@ -3,35 +3,19 @@ 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
8
|
|
11
|
-
Sentry.
|
12
|
-
scope.set_transaction_name transaction_from_context(context)
|
13
|
-
Sentry.capture_exception(
|
14
|
-
ex,
|
15
|
-
extra: { sidekiq: context }
|
16
|
-
)
|
17
|
-
end
|
18
|
-
end
|
9
|
+
context_filter = Sentry::Sidekiq::ContextFilter.new(context)
|
19
10
|
|
20
|
-
|
11
|
+
scope = Sentry.get_current_scope
|
12
|
+
scope.set_transaction_name(context_filter.transaction_name) unless scope.transaction_name
|
21
13
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
)
|
28
|
-
if classname
|
29
|
-
"#{SIDEKIQ_NAME}/#{classname}"
|
30
|
-
elsif context[:event]
|
31
|
-
"#{SIDEKIQ_NAME}/#{context[:event]}"
|
32
|
-
else
|
33
|
-
SIDEKIQ_NAME
|
34
|
-
end
|
14
|
+
Sentry::Sidekiq.capture_exception(
|
15
|
+
ex,
|
16
|
+
extra: { sidekiq: context_filter.filtered },
|
17
|
+
hint: { background: false }
|
18
|
+
)
|
35
19
|
end
|
36
20
|
end
|
37
21
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'sentry/sidekiq/context_filter'
|
2
|
+
|
3
|
+
module Sentry
|
4
|
+
module Sidekiq
|
5
|
+
class SentryContextMiddleware
|
6
|
+
def call(_worker, job, queue)
|
7
|
+
return yield unless Sentry.initialized?
|
8
|
+
|
9
|
+
context_filter = Sentry::Sidekiq::ContextFilter.new(job)
|
10
|
+
|
11
|
+
Sentry.clone_hub_to_current_thread
|
12
|
+
scope = Sentry.get_current_scope
|
13
|
+
scope.set_tags(queue: queue, jid: job["jid"])
|
14
|
+
scope.set_extras(sidekiq: job.merge("queue" => queue))
|
15
|
+
scope.set_transaction_name(context_filter.transaction_name)
|
16
|
+
|
17
|
+
yield
|
18
|
+
|
19
|
+
# don't need to use ensure here
|
20
|
+
# if the job failed, we need to keep the scope for error handler. and the scope will be cleared there
|
21
|
+
scope.clear
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/sentry-sidekiq.gemspec
CHANGED
@@ -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", "
|
25
|
+
spec.add_dependency "sentry-ruby-core", "~> 4.2.0"
|
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.
|
4
|
+
version: 4.2.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:
|
11
|
+
date: 2021-02-04 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.
|
19
|
+
version: 4.2.0
|
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.
|
26
|
+
version: 4.2.0
|
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,9 +49,9 @@ 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
|
54
|
+
- lib/sentry/sidekiq/sentry_context_middleware.rb
|
55
55
|
- lib/sentry/sidekiq/version.rb
|
56
56
|
- sentry-sidekiq.gemspec
|
57
57
|
homepage: https://github.com/getsentry/sentry-ruby
|
@@ -60,7 +60,7 @@ licenses:
|
|
60
60
|
metadata:
|
61
61
|
homepage_uri: https://github.com/getsentry/sentry-ruby
|
62
62
|
source_code_uri: https://github.com/getsentry/sentry-ruby
|
63
|
-
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
|
64
64
|
post_install_message:
|
65
65
|
rdoc_options: []
|
66
66
|
require_paths:
|
data/.travis.yml
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module Sentry
|
2
|
-
module Sidekiq
|
3
|
-
class CleanupMiddleware
|
4
|
-
def call(_worker, job, queue)
|
5
|
-
Sentry.clone_hub_to_current_thread
|
6
|
-
Sentry.with_scope do |scope|
|
7
|
-
scope.set_extras(sidekiq: job.merge("queue" => queue))
|
8
|
-
scope.set_transaction_name("Sidekiq/#{job["class"]}")
|
9
|
-
|
10
|
-
begin
|
11
|
-
yield
|
12
|
-
rescue => ex
|
13
|
-
Sentry.capture_exception(ex)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|