Created
January 3, 2014 07:43
-
-
Save tiewei/8234343 to your computer and use it in GitHub Desktop.
A task timer based on rufus-scheduler, added logger and start/shutdown feature
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rufus-scheduler' | |
module Clipper | |
class TaskScheduler | |
def initialize(logger) | |
@scheduler = build_scheduler(logger) | |
@scheduled_tasks = [] | |
@running = false | |
@logger = logger | |
end | |
def add_periodic_task(period_time, &block) | |
job = Rufus::Scheduler::IntervalJob.new(@scheduler, "#{period_time}s", {}, block) | |
@scheduled_tasks << job | |
@scheduler.start_job(job) if running? | |
end | |
def add_task(delay_time, &block) | |
job = Rufus::Scheduler::InJob.new(@scheduler, "#{delay_time}s", {}, block) | |
@scheduled_tasks << job | |
@scheduler.start_job(job) if running? | |
end | |
def start! | |
unless @running | |
@scheduled_tasks.each do |job| | |
@scheduler.start_job(job) | |
end | |
@logger.info("TaskScheduler started") | |
end | |
end | |
def running? | |
return @running | |
end | |
def shutdown | |
@logger.info("TaskScheduler starts shuting down") | |
@scheduler.shutdown | |
@logger.info("TaskScheduler has shut down") | |
end | |
private | |
def build_scheduler(logger) | |
unless logger.respond_to? :puts | |
logger.define_singleton_method(:puts){ |error| self.error(error) } | |
end | |
scheduler = Rufus::Scheduler.new | |
scheduler.define_singleton_method(:start_job) do |job| | |
if job.is_a? Rufus::Scheduler::InJob | |
#hacked into Rufus::Scheduler::InJob to reset its @next_time | |
in_time = job.next_time - job.scheduled_at | |
job.instance_variable_set(:@next_time,Time.now + in_time) | |
end | |
@jobs.push(job) | |
end | |
return scheduler | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment