module TraceView::Inst::ResqueWorker

Public Class Methods

included(klass) click to toggle source
# File lib/traceview/inst/resque.rb, line 83
def self.included(klass)
  ::TraceView::Util.method_alias(klass, :perform, ::Resque::Worker)
end

Public Instance Methods

perform_with_traceview(job) click to toggle source
# 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