class Rufus::Job
The parent class for scheduled jobs.
def has_tag? (tag)
Returns true if this job sports the given tag
def has_tag? (tag) @tags.include?(tag) end
def initialize (scheduler, job_id, params, &block)
def initialize (scheduler, job_id, params, &block) @scheduler = scheduler @block = block if job_id @job_id = job_id else JOB_ID_LOCK.synchronize do @job_id = @@last_given_id @@last_given_id = @job_id + 1 end end @params = params #@tags = Array(tags).collect { |tag| tag.to_s } # making sure we have an array of String tags @tags = Array(params[:tags]) # any tag is OK end
def trigger
Triggers the job (in a dedicated thread).
def trigger Thread.new do @trigger_thread = Thread.current # keeping track of the thread begin do_trigger rescue Exception => e @scheduler.send(:log_exception, e) end #@trigger_thread = nil if @trigger_thread = Thread.current @trigger_thread = nil # overlapping executions, what to do ? end if trigger_thread_alive? and (to = @params[:timeout]) @scheduler.in(to, :tags => 'timeout') do @trigger_thread.raise(Rufus::TimeOutError) if trigger_thread_alive? end end end
def trigger_thread_alive?
def trigger_thread_alive? (@trigger_thread && @trigger_thread.alive?) end
def unschedule
Removes (cancels) this job from its scheduler.
def unschedule @scheduler.unschedule(@job_id) end