class RRRSpec::Worker

Attributes

key[R]

Public Class Methods

create(worker_type, hostname=RRRSpec.hostname) click to toggle source

Public: Create a new worker. The worker returned is NOT appeared in Worker.list.

# File lib/rrrspec/redis_models.rb, line 842
def self.create(worker_type, hostname=RRRSpec.hostname)
  worker_key = RRRSpec.make_key('rrrspec', 'worker', hostname)
  RRRSpec.redis.hset(worker_key, 'worker_type', worker_type)

  worker = new(worker_key)
  return worker
end
list() click to toggle source

Public: A list of the workers which are possibly available.

Returns an array of the workers

# File lib/rrrspec/redis_models.rb, line 853
def self.list
  RRRSpec.redis.smembers(RRRSpec.make_key('rrrspec', 'worker')).map do |key|
    new(key)
  end
end
new(worker_key) click to toggle source
# File lib/rrrspec/redis_models.rb, line 836
def initialize(worker_key)
  @key = worker_key
end

Public Instance Methods

==(other) click to toggle source
# File lib/rrrspec/redis_models.rb, line 864
def ==(other)
  @key == other.key
end
current_taskset() click to toggle source

Public: Current taskset

Returns a taskset or nil

# File lib/rrrspec/redis_models.rb, line 882
def current_taskset
  taskset_key = RRRSpec.redis.hget(key, 'taskset')
  if taskset_key.present?
    return Taskset.new(taskset_key)
  else
    nil
  end
end
dequeue_taskset() click to toggle source

Public: Dequeue the taskset from the taskset_queue

# File lib/rrrspec/redis_models.rb, line 906
def dequeue_taskset
  _, taskset_key = RRRSpec.redis.blpop(RRRSpec.make_key(key, 'worker_queue'), 0)
  return Taskset.new(taskset_key)
end
enqueue_taskset(taskset) click to toggle source

Public: Enqueue the taskset to the taskset_queue

# File lib/rrrspec/redis_models.rb, line 901
def enqueue_taskset(taskset)
  RRRSpec.redis.rpush(RRRSpec.make_key(key, 'worker_queue'), taskset.key)
end
evict() click to toggle source

Public: Remove myself from the worker list.

# File lib/rrrspec/redis_models.rb, line 860
def evict
  RRRSpec.redis.srem(RRRSpec.make_key('rrrspec', 'worker'), key)
end
exist?() click to toggle source

Public: Check its existence with heartbeat key.

Returns bool

# File lib/rrrspec/redis_models.rb, line 922
def exist?
  RRRSpec.redis.exists(RRRSpec.make_key(key, 'heartbeat'))
end
heartbeat(time) click to toggle source

Public: Maintain heartbeat

# File lib/rrrspec/redis_models.rb, line 927
def heartbeat(time)
  RRRSpec.redis.setex(RRRSpec.make_key(key, 'heartbeat'), time, "alive")
  RRRSpec.redis.sadd(RRRSpec.make_key('rrrspec', 'worker'), key)
end
queue_empty?() click to toggle source

Public: Checks whether the taskset_queue is empty.

# File lib/rrrspec/redis_models.rb, line 912
def queue_empty?
  RRRSpec.redis.llen(RRRSpec.make_key(key, 'worker_queue')) == 0
end
update_current_taskset(taskset) click to toggle source

Public: Update the current taskset

# File lib/rrrspec/redis_models.rb, line 892
def update_current_taskset(taskset)
  if taskset.present?
    RRRSpec.redis.hset(key, 'taskset', taskset.key)
  else
    RRRSpec.redis.hset(key, 'taskset', nil)
  end
end
worker_type() click to toggle source

Public: The worker_type

# File lib/rrrspec/redis_models.rb, line 872
def worker_type
  RRRSpec.redis.hget(key, 'worker_type')
end