class LogStasher::ActiveJob::LogSubscriber

Public Instance Methods

enqueue(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 11
def enqueue(event)
  process_event(event, 'enqueue')
end
enqueue_at(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 15
def enqueue_at(event)
  process_event(event, 'enqueue_at')
end
logger() click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 42
def logger
  LogStasher.logger
end
perform(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 19
def perform(event)
  process_event(event, 'perform')

  # Revert the request id back, in the event that the inline adapter is being used or a
  # perform_now was used.
  LogStasher.request_context[:request_id] = Thread.current[:old_request_id]
  Thread.current[:old_request_id] = nil
end
perform_start(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 28
def perform_start(event)
  # Use the job_id as the request id, so that any custom logging done for a job
  # shares a request id, and has the job id in each log line.
  #
  # It's not being set when the job is enqueued, so enqueuing a job will have it's default
  # request_id. In a lot of cases, it will be because of a web request.
  #
  # Hang onto the old request id, so we can revert after the job is done being performed.
  Thread.current[:old_request_id] = LogStasher.request_context[:request_id]
  LogStasher.request_context[:request_id] = event.payload[:job].job_id

  process_event(event, 'perform_start')
end

Private Instance Methods

args_info(job) click to toggle source

The default #args_info makes a string. We need objects to turn into JSON.

# File lib/logstasher/active_job/log_subscriber.rb, line 86
def args_info(job)
  job.arguments.map { |arg| arg.try(:to_global_id).try(:to_s) || arg }
end
extract_duration(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 69
def extract_duration(event)
  { :duration => event.duration.to_f.round(2) }
end
extract_exception(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 73
def extract_exception(event)
  event.payload.slice(:exception)
end
extract_metadata(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 60
def extract_metadata(event)
  {
    :job_id => event.payload[:job].job_id,
    :queue_name => queue_name(event),
    :job_class => event.payload[:job].class.to_s,
    :job_args => args_info(event.payload[:job]),
  }
end
extract_scheduled_at(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 77
def extract_scheduled_at(event)
  { :scheduled_at => scheduled_at(event) }
end
process_event(event, type) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 48
def process_event(event, type)
  data = extract_metadata(event)
  data.merge! extract_exception(event)
  data.merge! extract_scheduled_at(event) if type == 'enqueue_at'
  data.merge! extract_duration(event) if type == 'perform'
  data.merge! request_context

  tags = ['job', type]
  tags.push('exception') if data[:exception]
  logger << LogStasher.build_logstash_event(data, tags).to_json + "\n"
end
request_context() click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 81
def request_context
  LogStasher.request_context
end