class Bellbro::Service

Attributes

jid[R]
thread[R]
thread_error[R]

Public Class Methods

get_worker_class() click to toggle source
# File lib/bellbro/service.rb, line 23
def self.get_worker_class
  @worker_class
end
mutex() click to toggle source
# File lib/bellbro/service.rb, line 90
def self.mutex
  $mutex ||= Mutex.new
end
new() click to toggle source
# File lib/bellbro/service.rb, line 30
def initialize
  @done = false
  @jid = Digest::MD5.hexdigest(Time.now.utc.to_s + Thread.current.object_id.to_s)
end
poll_interval(arg) click to toggle source
# File lib/bellbro/service.rb, line 11
def self.poll_interval(arg)
  if defined?(Rails) && Rails.env.test?
    @sleep_interval = 0.5
  else
    @sleep_interval = arg
  end
end
sleep_interval() click to toggle source
# File lib/bellbro/service.rb, line 94
def self.sleep_interval
  @sleep_interval
end
worker_class(arg) click to toggle source
# File lib/bellbro/service.rb, line 19
def self.worker_class(arg)
  @worker_class = arg
end

Public Instance Methods

each_job() click to toggle source
# File lib/bellbro/service.rb, line 77
def each_job
  # Override
  []
end
run() click to toggle source
# File lib/bellbro/service.rb, line 54
def run
  Rails.logger.info "Starting #{self.class} service."
  self.class.mutex.synchronize { track }
  begin
    self.class.mutex.synchronize { start_jobs }
    self.class.mutex.synchronize { status_update }
    sleep
  end until @done
  self.class.mutex.synchronize { stop_tracking }
end
running?() click to toggle source
# File lib/bellbro/service.rb, line 82
def running?
  !@done
end
sleep() click to toggle source
Calls superclass method
# File lib/bellbro/service.rb, line 73
def sleep
  super(self.class.sleep_interval)
end
start() click to toggle source
# File lib/bellbro/service.rb, line 35
def start
  @thread = Thread.new do
    begin
      run
    #rescue Exception => @thread_error
    #  Rails.logger.info "#{@thread_error.inspect}", type: :error
    #  Airbrake.notify(@thread_error)
    #  raise @thread_error
    end
  end
end
start_jobs() click to toggle source
# File lib/bellbro/service.rb, line 65
def start_jobs
  each_job do |job|
    jid = worker_class.perform_async(job)
    Rails.logger.info "Starting job #{jid} #{worker_class.name} with #{job.inspect}."
    record_incr(:jobs_started)
  end
end
stop() click to toggle source
# File lib/bellbro/service.rb, line 47
def stop
  @done = true
  Rails.logger.info "Stopping #{self.class} service..."
  @thread.join
  Rails.logger.info "#{self.class.to_s.capitalize} service stopped."
end
worker_class() click to toggle source
# File lib/bellbro/service.rb, line 86
def worker_class
  @worker_class ||= self.class.get_worker_class
end