84 lines
2.0 KiB
Ruby
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
|