class LogStasher::ActiveJob::LogSubscriber

Public Instance Methods

enqueue(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 19
def enqueue(event)
  process_event(event, 'enqueue')
end
enqueue_at(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 23
def enqueue_at(event)
  process_event(event, 'enqueue_at')
end
logger() click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 50
def logger
  LogStasher.logger
end
perform(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 27
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 36
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 94
def args_info(job)
  ::ActiveJob::Arguments.serialize(job.arguments)
end
extract_duration(event) click to toggle source
# File lib/logstasher/active_job/log_subscriber.rb, line 77
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 81
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 68
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 85
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 56
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 89
def request_context
  LogStasher.request_context
end