class ActiveJob::Logging::LogSubscriber

:nodoc:

def args_info(job)

def args_info(job)
  if job.arguments.any?
    ' with arguments: ' +
      job.arguments.map { |arg| format(arg).inspect }.join(', ')
  else
    ''
  end
end

def enqueue(event)

:nodoc:
def enqueue(event)
  info do
    job = event.payload[:job]
    "Enqueued #{job.class.name} (Job ID: #{job.job_id}) to #{queue_name(event)}" + args_info(job)
  end
end

def enqueue_at(event)

def enqueue_at(event)
  info do
    job = event.payload[:job]
    "Enqueued #{job.class.name} (Job ID: #{job.job_id}) to #{queue_name(event)} at #{scheduled_at(event)}" + args_info(job)
  end
end

def format(arg)

def format(arg)
  case arg
  when Hash
    arg.transform_values { |value| format(value) }
  when Array
    arg.map { |value| format(value) }
  when GlobalID::Identification
    arg.to_global_id rescue arg
  else
    arg
  end
end

def logger

def logger
  ActiveJob::Base.logger
end

def perform(event)

def perform(event)
  info do
    job = event.payload[:job]
    "Performed #{job.class.name} from #{queue_name(event)} in #{event.duration.round(2)}ms"
  end
end

def perform_start(event)

def perform_start(event)
  info do
    job = event.payload[:job]
    "Performing #{job.class.name} from #{queue_name(event)}" + args_info(job)
  end
end

def queue_name(event)

def queue_name(event)
  event.payload[:adapter].class.name.demodulize.remove('Adapter') + "(#{event.payload[:job].queue_name})"
end

def scheduled_at(event)

def scheduled_at(event)
  Time.at(event.payload[:job].scheduled_at).utc
end