diff --git a/sentry-sidekiq/lib/sentry/sidekiq/sentry_context_middleware.rb b/sentry-sidekiq/lib/sentry/sidekiq/sentry_context_middleware.rb index 60e3be843..eb10a6ad8 100644 --- a/sentry-sidekiq/lib/sentry/sidekiq/sentry_context_middleware.rb +++ b/sentry-sidekiq/lib/sentry/sidekiq/sentry_context_middleware.rb @@ -14,6 +14,7 @@ def call(_worker, job, queue) scope.set_user(user) end scope.set_tags(queue: queue, jid: job["jid"]) + scope.set_tags(build_tags(job["tags"])) scope.set_contexts(sidekiq: job.merge("queue" => queue)) scope.set_transaction_name(context_filter.transaction_name) transaction = start_transaction(scope.transaction_name, job["sentry_trace"]) @@ -32,6 +33,10 @@ def call(_worker, job, queue) scope.clear end + def build_tags(tags) + Array(tags).each_with_object({}) { |name, tags_hash| tags_hash[:"sidekiq.#{name}"] = true } + end + def start_transaction(transaction_name, sentry_trace) options = { name: transaction_name, op: "sidekiq" } transaction = Sentry::Transaction.from_sentry_trace(sentry_trace, **options) if sentry_trace diff --git a/sentry-sidekiq/spec/sentry/sidekiq/sentry_context_middleware_spec.rb b/sentry-sidekiq/spec/sentry/sidekiq/sentry_context_middleware_spec.rb index af4f1a674..1c06bd4c6 100644 --- a/sentry-sidekiq/spec/sentry/sidekiq/sentry_context_middleware_spec.rb +++ b/sentry-sidekiq/spec/sentry/sidekiq/sentry_context_middleware_spec.rb @@ -52,6 +52,12 @@ expect(event.user).to eq(user) end + it "sets sidekiq tags to the event" do + execute_worker(processor, TagsWorker) + event = transport.events.last + expect(event.tags.keys).to include(:"sidekiq.marvel", :"sidekiq.dc") + end + context "with sentry_trace" do let(:parent_transaction) { Sentry.start_transaction(op: "sidekiq") } diff --git a/sentry-sidekiq/spec/spec_helper.rb b/sentry-sidekiq/spec/spec_helper.rb index b353512f5..341dc3777 100644 --- a/sentry-sidekiq/spec/spec_helper.rb +++ b/sentry-sidekiq/spec/spec_helper.rb @@ -153,6 +153,14 @@ def perform end end +class TagsWorker + include Sidekiq::Worker + + sidekiq_options tags: ["marvel", "dc"] + + def perform; end +end + def execute_worker(processor, klass, **options) klass_options = klass.sidekiq_options_hash || {}