Sha256: 8404f37cf870d93622a88e5c63fd0f4302809cbf755c1505535b1cd7810ac6fb

Contents?: true

Size: 1.28 KB

Versions: 20

Compression:

Stored size: 1.28 KB

Contents

class Kuroko2::Execution < Kuroko2::ApplicationRecord
  include Kuroko2::TableNameCustomizable

  DEFAULT_QUEUE = '@default'

  scope :of, ->(token) { where(token: token) }
  scope :with, ->(queue) { where(queue: queue) }
  scope :unstarted, -> { where(started_at: nil) }
  scope :started, -> { where.not(started_at: nil) }

  serialize :context, JSON

  belongs_to :job_definition
  belongs_to :job_instance
  belongs_to :token, optional: true

  has_one :worker

  before_create :set_default_values

  delegate :log_memory_consumption, to: :job_instance

  def completed?
    started_at? && finished_at?
  end

  def success?
    exit_status == 0
  end

  def self.poll(queue = DEFAULT_QUEUE)
    self.transaction do
      unstarted.with(queue).lock.take.tap do |execution|
        execution.touch(:started_at) if execution
      end
    end
  end

  def finish(output:, exit_status:)
    update!(output: output, exit_status: exit_status, finished_at: Time.current)
    job_definition.memory_expectancy.calculate!
  end

  def finish_by_signal(output:, term_signal:)
    update!(output: output, term_signal: term_signal, finished_at: Time.current)
    job_definition.memory_expectancy.calculate!
  end

  private

  def set_default_values
    self.uuid    ||= SecureRandom.uuid
    self.context ||= {}
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
kuroko2-0.8.0 app/models/kuroko2/execution.rb
kuroko2-0.7.0 app/models/kuroko2/execution.rb
kuroko2-0.6.0 app/models/kuroko2/execution.rb
kuroko2-0.5.2 app/models/kuroko2/execution.rb
kuroko2-0.5.1 app/models/kuroko2/execution.rb
kuroko2-0.5.0 app/models/kuroko2/execution.rb
kuroko2-0.4.6 app/models/kuroko2/execution.rb
kuroko2-0.4.5 app/models/kuroko2/execution.rb
kuroko2-0.4.4 app/models/kuroko2/execution.rb
kuroko2-0.4.3 app/models/kuroko2/execution.rb
kuroko2-0.4.2 app/models/kuroko2/execution.rb
kuroko2-0.4.1 app/models/kuroko2/execution.rb
kuroko2-0.4.0 app/models/kuroko2/execution.rb
kuroko2-0.3.4 app/models/kuroko2/execution.rb
kuroko2-0.3.3 app/models/kuroko2/execution.rb
kuroko2-0.3.2 app/models/kuroko2/execution.rb
kuroko2-0.3.1 app/models/kuroko2/execution.rb
kuroko2-0.3.0 app/models/kuroko2/execution.rb
kuroko2-0.2.3 app/models/kuroko2/execution.rb
kuroko2-0.2.2 app/models/kuroko2/execution.rb