Module: TraceView::Inst::ResqueWorker

Defined in:
lib/traceview/inst/resque.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



83
84
85
# File 'lib/traceview/inst/resque.rb', line 83

def self.included(klass)
  ::TraceView::Util.method_alias(klass, :perform, ::Resque::Worker)
end

Instance Method Details

#perform_with_traceview(job) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/traceview/inst/resque.rb', line 87

def perform_with_traceview(job)
  report_kvs = {}

  begin
    report_kvs[:Spec] = :job
    report_kvs[:Flavor] = :resque
    report_kvs[:JobName] = job.payload['class'].to_s
    report_kvs[:Queue] = job.queue

    # Set these keys for the ability to separate out
    # background tasks into a separate app on the server-side UI

    report_kvs[:'HTTP-Host'] = Socket.gethostname
    report_kvs[:Controller] = "Resque_#{job.queue}"
    report_kvs[:Action] = job.payload['class'].to_s
    report_kvs[:URL] = "/resque/#{job.queue}/#{job.payload['class']}"

    if TraceView::Config[:resqueworker][:log_args]
      kv_args = job.payload['args'].to_json

      # Limit the argument json string to 1024 bytes
      if kv_args.length > 1024
        report_kvs[:Args] = kv_args[0..1023] + '...[snipped]'
      else
        report_kvs[:Args] = kv_args
      end
    end

    report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:resqueworker][:collect_backtraces]
  rescue => e
    TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
  end

  TraceView::API.start_trace(:'resque-worker', nil, report_kvs) do
    perform_without_traceview(job)
  end
end