Add ability to define minimal time between job executions to support multiple corno nodes, so two different nodes will not execute the same job

This commit is contained in:
avi_alima
2015-08-19 18:08:48 +03:00
parent f76dff32e4
commit 32bdba3244
6 changed files with 61 additions and 4 deletions

View File

@@ -7,9 +7,10 @@ module Crono
include Logging
attr_accessor :performer, :period, :last_performed_at,
:next_performed_at, :job_log, :job_logger, :healthy
:next_performed_at, :job_log, :job_logger, :healthy, :execution_interval
def initialize(performer, period)
self.execution_interval = 0.minutes
self.performer, self.period = performer, period
self.job_log = StringIO.new
self.job_logger = Logger.new(job_log)
@@ -31,6 +32,8 @@ module Crono
end
def perform
return Thread.new {} if perform_before_interval?
log "Perform #{performer}"
self.last_performed_at = Time.now
self.next_performed_at = period.next(since: last_performed_at)
@@ -102,5 +105,9 @@ module Crono
def model
@model ||= Crono::CronoJob.find_or_create_by(job_id: job_id)
end
def perform_before_interval?
self.last_performed_at.present? && self.last_performed_at > execution_interval.ago
end
end
end

View File

@@ -7,8 +7,14 @@ module Crono
end
def every(period, *args)
job = Job.new(@performer, Period.new(period, *args))
@scheduler.add_job(job)
@job = Job.new(@performer, Period.new(period, *args))
@scheduler.add_job(@job)
self
end
def once_per(execution_interval)
@job.execution_interval = execution_interval if @job
self
end
end

View File

@@ -1,3 +1,3 @@
module Crono
VERSION = '0.9.0'
VERSION = '0.9.1'
end