Class: Instana::Instrumentation::SidekiqWorker

Inherits:
Object
  • Object
show all
Defined in:
lib/instana/instrumentation/sidekiq-worker.rb

Instance Method Summary collapse

Instance Method Details

#call(_worker, msg, _queue) ⇒ Object



4
5
6
7
8
9
10
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
40
41
42
# File 'lib/instana/instrumentation/sidekiq-worker.rb', line 4

def call(_worker, msg, _queue)
  kv_payload = { :'sidekiq-worker' => {} }
  kv_payload[:'sidekiq-worker'][:job_id] = msg['jid']
  kv_payload[:'sidekiq-worker'][:queue] = msg['queue']
  kv_payload[:'sidekiq-worker'][:job] = msg['class']
  kv_payload[:'sidekiq-worker'][:retry] = msg['retry'].to_s

  # Temporary until we move connection collection to redis
  # instrumentation
  Sidekiq.redis_pool.with do |client|
    opts = client.respond_to?(:connection) ? client.connection : client.client.options
    kv_payload[:'sidekiq-worker'][:'redis-url'] = "#{opts[:host]}:#{opts[:port]}"
  end

  if ENV.key?('INSTANA_SERVICE_NAME')
    kv_payload[:service] = ENV['INSTANA_SERVICE_NAME']
  end

  context = {}
  if msg.key?('X-Instana-T')
    trace_id = msg.delete('X-Instana-T')
    span_id = msg.delete('X-Instana-S')
    context[:trace_id] = ::Instana::Util.header_to_id(trace_id)
    context[:span_id] = ::Instana::Util.header_to_id(span_id) if span_id
  end

  ::Instana.tracer.log_start_or_continue(
    :'sidekiq-worker', kv_payload, context
  )

  yield
rescue => e
  kv_payload[:'sidekiq-worker'][:error] = true
  ::Instana.tracer.log_info(kv_payload)
  ::Instana.tracer.log_error(e)
  raise
ensure
  ::Instana.tracer.log_end(:'sidekiq-worker', {}) if ::Instana.tracer.tracing?
end