class Barbeque::MessageHandler::JobExecution
Public Class Methods
new(message:, message_queue:)
click to toggle source
@param [Barbeque::Message::JobExecution] message @param [Barbeque::MessageQueue] message_queue
# File lib/barbeque/message_handler/job_execution.rb, line 10 def initialize(message:, message_queue:) @message = message @message_queue = message_queue end
Public Instance Methods
run()
click to toggle source
# File lib/barbeque/message_handler/job_execution.rb, line 15 def run job_execution = create_job_execution begin Executor.create.start_execution(job_execution, job_envs) rescue Exception => e job_execution.update!(status: :error, finished_at: Time.now) Barbeque::ExecutionLog.save_stdout_and_stderr(job_execution, '', "#{e.class}: #{e.message}\n#{e.backtrace.join("\n")}") Barbeque::SlackNotifier.notify_job_execution(job_execution) raise e end end
Private Instance Methods
create_job_execution()
click to toggle source
# File lib/barbeque/message_handler/job_execution.rb, line 47 def create_job_execution Barbeque::JobExecution.transaction do Barbeque::JobExecution.create(message_id: @message.id, job_definition: job_definition, job_queue: @message_queue.job_queue).tap do |job_execution| Barbeque::ExecutionLog.save_message(job_execution, @message) @message_queue.delete_message(@message) end end rescue ActiveRecord::RecordNotUnique => e # There's a case where Barbeque receives message which was already received or deleted. # https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html @message_queue.delete_message(@message) raise DuplicatedExecution.new(e.message) end
job_definition()
click to toggle source
# File lib/barbeque/message_handler/job_execution.rb, line 40 def job_definition @job_definition ||= Barbeque::JobDefinition.joins(:app).find_by!( job: @message.job, barbeque_apps: { name: @message.application }, ) end
job_envs()
click to toggle source
# File lib/barbeque/message_handler/job_execution.rb, line 30 def job_envs { 'BARBEQUE_JOB' => @message.job, 'BARBEQUE_MESSAGE' => @message.body.to_json, 'BARBEQUE_MESSAGE_ID' => @message.id, 'BARBEQUE_QUEUE_NAME' => @message_queue.job_queue.name, 'BARBEQUE_RETRY_COUNT' => '0', } end