class Schked::Worker

Attributes

config[R]
scheduler[R]

Public Class Methods

new(config:) click to toggle source
# File lib/schked/worker.rb, line 7
def initialize(config:)
  @config = config

  @scheduler = Rufus::Scheduler.new

  define_callbacks
  load_schedule
end

Public Instance Methods

job(as) click to toggle source
# File lib/schked/worker.rb, line 16
def job(as)
  scheduler.jobs.find { |job| job.opts[:as] == as }
end
pause() click to toggle source
# File lib/schked/worker.rb, line 20
def pause
  scheduler.pause
end
schedule() click to toggle source
# File lib/schked/worker.rb, line 32
def schedule
  config
    .paths
    .map { |path| File.read(path) }
    .join("\n")
end
stop() click to toggle source
# File lib/schked/worker.rb, line 28
def stop
  scheduler.stop
end
wait() click to toggle source
# File lib/schked/worker.rb, line 24
def wait
  scheduler.join
end

Private Instance Methods

define_callbacks() click to toggle source
# File lib/schked/worker.rb, line 43
def define_callbacks
  cfg = config

  scheduler.define_singleton_method(:on_error) do |job, error|
    cfg.logger.fatal("Task #{job.opts[:as] || job.job_id} failed with error: #{error.message}")
    cfg.logger.error(error.backtrace.join("\n")) if error.backtrace

    cfg.fire_callback(:on_error, job, error)
  end

  scheduler.define_singleton_method(:on_pre_trigger) do |job, time|
    cfg.logger.info("Started task: #{job.opts[:as] || job.job_id}")

    cfg.fire_callback(:before_start, job, time)
  end

  scheduler.define_singleton_method(:on_post_trigger) do |job, time|
    cfg.logger.info("Finished task: #{job.opts[:as] || job.job_id}")

    cfg.fire_callback(:after_finish, job, time)
  end
end
load_schedule() click to toggle source
# File lib/schked/worker.rb, line 66
def load_schedule
  scheduler.instance_eval(schedule)
end