class Stackify::Worker

Attributes

name[R]
type[R]

Public Class Methods

new(name = nil) click to toggle source
# File lib/stackify/workers/worker.rb, line 8
def initialize name = nil
  @type = :common
  @name = name ? name : generate_name
  @name += " ##{self.id}"
  @scheduler = Stackify::Scheduler.new
  Stackify.internal_log :info, "[Worker] Created worker: #{@name}"
  Stackify.add_dependant_worker self
end

Public Instance Methods

alive?() click to toggle source
# File lib/stackify/workers/worker.rb, line 43
def alive?
  @worker_thread.try(:alive?)
end
async_perform(period=ScheduleDelay.new, task) click to toggle source
# File lib/stackify/workers/worker.rb, line 17
def async_perform period=ScheduleDelay.new, task
  run_scheduler task, period
end
backtrace() click to toggle source
# File lib/stackify/workers/worker.rb, line 39
def backtrace
  @worker_thread.try(:backtrace)
end
id() click to toggle source
# File lib/stackify/workers/worker.rb, line 47
def id
  object_id
end
perform(period=ScheduleDelay.new, task) click to toggle source
# File lib/stackify/workers/worker.rb, line 21
def perform period=ScheduleDelay.new, task
  run_scheduler task, period, true
end
shutdown!() click to toggle source
# File lib/stackify/workers/worker.rb, line 25
def shutdown!
  Stackify.delete_worker self
  if @worker_thread
    Stackify.internal_log :debug, "Thread with name \"#{@name}\" is terminated!"
    Thread.kill @worker_thread
  else
    Stackify.internal_log :warn, "Thread with name \"#{@name}\" is terminated with exception!"
  end
end
status() click to toggle source
# File lib/stackify/workers/worker.rb, line 35
def status
  @worker_thread.try(:status)
end

Private Instance Methods

generate_name() click to toggle source
# File lib/stackify/workers/worker.rb, line 52
def generate_name
  'Untitled worker'
end
run_scheduler(task, delay, sync = false) click to toggle source
# File lib/stackify/workers/worker.rb, line 56
def run_scheduler task, delay, sync = false
  @worker_thread = Thread.new do
    @scheduler.run delay, task
    after_perform @scheduler.task_result if respond_to? :after_perform
    shutdown!
  end
  @worker_thread.join if sync && @worker_thread.alive?
end