class LittleMonster::Core::Runner

Public Class Methods

new(params) click to toggle source
# File lib/little_monster/core/runner.rb, line 5
def initialize(params)
  @params = params

  @thread_id = Thread.current.object_id
  @heartbeat_task = Concurrent::TimerTask.new(execution_interval: LittleMonster.heartbeat_execution_interval) do
    send_heartbeat!
  end
end

Public Instance Methods

run() click to toggle source
# File lib/little_monster/core/runner.rb, line 14
def run
  send_heartbeat!

  @heartbeat_task.execute unless LittleMonster.disable_requests?

  job = LittleMonster::Job::Factory.new(@params).build
  job.run unless job.nil?
rescue JobNotFoundError => e
  logger.error "[id:#{@params[:id]}][type:job_not_found] [message:#{e.message.dump}] \n #{e.backtrace.to_a.join("\n\t")}"
ensure
  @heartbeat_task.shutdown
end
send_heartbeat!() click to toggle source
# File lib/little_monster/core/runner.rb, line 27
def send_heartbeat!
  return if LittleMonster.disable_requests?

  res = LittleMonster::API.put "/jobs/#{@params[:id]}/worker", body: {
    ip: Socket.gethostname,
    host: Socket.gethostname,
    pid: "#{Process.pid}-#{@thread_id}"
  }

  raise LittleMonster::JobAlreadyLockedError, "job [id:#{@params[:id]}] is already locked, discarding" if res.code == 401
  res.success?
end