Class: TraceView::SidekiqClient

Inherits:
Object
  • Object
show all
Defined in:
lib/traceview/inst/sidekiq-client.rb

Instance Method Summary collapse

Instance Method Details

#call(*args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/traceview/inst/sidekiq-client.rb', line 28

def call(*args)
  # args: 0: worker_class, 1: msg, 2: queue, 3: redis_pool
  report_kvs = collect_kvs(args)

  TraceView::API.log_entry(:'sidekiq-client', report_kvs)
  args[1]['SourceTrace'] = TraceView::Context.toString if TraceView.tracing?

  result = yield

  report_kvs = { :JobID => result['jid'] }
  result
rescue => e
  TraceView::API.log_exception(:'sidekiq-client', e, report_kvs)
  raise
ensure
  TraceView::API.log_exit(:'sidekiq-client', report_kvs)
end

#collect_kvs(args) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/traceview/inst/sidekiq-client.rb', line 6

def collect_kvs(args)
  begin
    # Attempt to collect up pertinent info.  If we hit something unexpected,
    # keep calm and instrument on.

    report_kvs = {}
    worker_class, msg, queue, _ = args

    report_kvs[:Spec]      = :pushq
    report_kvs[:Flavor]    = :sidekiq
    report_kvs[:Queue]     = queue
    report_kvs[:Retry]     = msg['retry']
    report_kvs[:JobName]   = worker_class
    report_kvs[:MsgID]     = msg['jid']
    report_kvs[:Args]      = msg['args'].to_s[0..1024] if TV::Config[:sidekiqclient][:log_args]
    report_kvs[:Backtrace] = TV::API.backtrace         if TV::Config[:sidekiqclient][:collect_backtraces]
  rescue => e
    TraceView.logger.warn "[traceview/sidekiq] Non-fatal error capturing KVs: #{e.message}"
  end
  report_kvs
end