Files
dunlop-core/app/models/dunlop/execution_batch_model.rb
T

84 lines
2.0 KiB
Ruby

module Dunlop::ExecutionBatchModel
extend ActiveSupport::Concern
included do
include ::Dunlop::Loggable
state_machine initial: :new do
after_transition { |o| o.log_state_transition }
event(:processing) { transition :new => :processing }
event(:completed) { transition :processing => :completed }
event(:aborted) { transition any => :aborted }
event(:failed) { transition any => :failed }
end
end
def execute_process(options={})
with_nested_logger_and_catch_failed do
processing!
logger.benchmark { process_steps }
completed!
end
end
def abort!(message = '')
with_nested_logger_and_catch_failed do
logger.info(message) if message.present?
aborted!
end
end
def process_steps
raise ImplementInSubclass.new(self)
end
module ClassMethods
def batch_pid_id
:global
end
def latest
where(state: :completed).order(identifier: :desc).order(created_at: :desc).first
end
def execute_if_required
execute! if execution_required?
end
def execution_required?
#updated_ats = [
# SourceFile.maximum(:updated_at),
# FunctionalConfiguration.maximum(:updated_at),
#]
#latest_batch_created_at = latest.try(:created_at) || 1.year.ago
#!!updated_ats.detect do |updated_at|
# updated_at >= latest_batch_created_at
#end
true
end
def execute!
return if ::Dunlop::ExecutionBatchPid.new(batch_pid_id).locked?
batch = nil
::Dunlop::ExecutionBatchPid.new(batch_pid_id).lock do
batch = create
batch.execute_process
end
batch
end
def execute
execute!
end
deprecate execute: "Please use execute! in stead of execute. This will be removed in dunlop v0.2.0"
def cleanup!(older_than = 1.month.ago)
older_than = older_than.ago if older_than.is_a?(ActiveSupport::Duration)
where(arel_table[:created_at].lt older_than).destroy_all
end
end
end