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