Class: Sentry::Sidekiq::SentryContextServerMiddleware
- Inherits:
-
Object
- Object
- Sentry::Sidekiq::SentryContextServerMiddleware
- Defined in:
- lib/sentry/sidekiq/sentry_context_middleware.rb
Constant Summary collapse
- OP_NAME =
"queue.sidekiq"
- SPAN_ORIGIN =
"auto.queue.sidekiq"
Instance Method Summary collapse
- #build_tags(tags) ⇒ Object
- #call(_worker, job, queue) ⇒ Object
- #finish_transaction(transaction, status) ⇒ Object
- #start_transaction(scope, env) ⇒ Object
Instance Method Details
#build_tags(tags) ⇒ Object
41 42 43 |
# File 'lib/sentry/sidekiq/sentry_context_middleware.rb', line 41 def () Array().each_with_object({}) { |name, | [:"sidekiq.#{name}"] = true } end |
#call(_worker, job, queue) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/sentry/sidekiq/sentry_context_middleware.rb', line 11 def call(_worker, job, queue) return yield unless Sentry.initialized? context_filter = Sentry::Sidekiq::ContextFilter.new(job) Sentry.clone_hub_to_current_thread scope = Sentry.get_current_scope if (user = job["sentry_user"]) scope.set_user(user) end scope.(queue: queue, jid: job["jid"]) scope.((job["tags"])) scope.set_contexts(sidekiq: job.merge("queue" => queue)) scope.set_transaction_name(context_filter.transaction_name, source: :task) transaction = start_transaction(scope, job["trace_propagation_headers"]) scope.set_span(transaction) if transaction begin yield rescue finish_transaction(transaction, 500) raise end finish_transaction(transaction, 200) # don't need to use ensure here # if the job failed, we need to keep the scope for error handler. and the scope will be cleared there scope.clear end |
#finish_transaction(transaction, status) ⇒ Object
57 58 59 60 61 62 |
# File 'lib/sentry/sidekiq/sentry_context_middleware.rb', line 57 def finish_transaction(transaction, status) return unless transaction transaction.set_http_status(status) transaction.finish end |
#start_transaction(scope, env) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/sentry/sidekiq/sentry_context_middleware.rb', line 45 def start_transaction(scope, env) = { name: scope.transaction_name, source: scope.transaction_source, op: OP_NAME, origin: SPAN_ORIGIN } transaction = Sentry.continue_trace(env, **) Sentry.start_transaction(transaction: transaction, **) end |