Class: RRRSpec::Worker

Inherits:
Object
  • Object
show all
Defined in:
lib/rrrspec/redis_models.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(worker_key) ⇒ Worker

Returns a new instance of Worker.



836
837
838
# File 'lib/rrrspec/redis_models.rb', line 836

def initialize(worker_key)
  @key = worker_key
end

Instance Attribute Details

#keyObject (readonly)

Returns the value of attribute key.



834
835
836
# File 'lib/rrrspec/redis_models.rb', line 834

def key
  @key
end

Class Method Details

.create(worker_type, hostname = RRRSpec.hostname) ⇒ Object

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



842
843
844
845
846
847
848
# 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

.listObject

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

Returns an array of the workers



853
854
855
856
857
# 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

Instance Method Details

#==(other) ⇒ Object



864
865
866
# File 'lib/rrrspec/redis_models.rb', line 864

def ==(other)
  @key == other.key
end

#current_tasksetObject

Public: Current taskset

Returns a taskset or nil



882
883
884
885
886
887
888
889
# 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_tasksetObject

Public: Dequeue the taskset from the taskset_queue



906
907
908
909
# 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) ⇒ Object

Public: Enqueue the taskset to the taskset_queue



901
902
903
# File 'lib/rrrspec/redis_models.rb', line 901

def enqueue_taskset(taskset)
  RRRSpec.redis.rpush(RRRSpec.make_key(key, 'worker_queue'), taskset.key)
end

#evictObject

Public: Remove myself from the worker list.



860
861
862
# File 'lib/rrrspec/redis_models.rb', line 860

def evict
  RRRSpec.redis.srem(RRRSpec.make_key('rrrspec', 'worker'), key)
end

#exist?Boolean

Public: Check its existence with heartbeat key.

Returns bool

Returns:

  • (Boolean)


922
923
924
# File 'lib/rrrspec/redis_models.rb', line 922

def exist?
  RRRSpec.redis.exists(RRRSpec.make_key(key, 'heartbeat'))
end

#heartbeat(time) ⇒ Object

Public: Maintain heartbeat



927
928
929
930
# 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?Boolean

Public: Checks whether the taskset_queue is empty.

Returns:

  • (Boolean)


912
913
914
# 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) ⇒ Object

Public: Update the current taskset



892
893
894
895
896
897
898
# 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_typeObject

Public: The worker_type



872
873
874
# File 'lib/rrrspec/redis_models.rb', line 872

def worker_type
  RRRSpec.redis.hget(key, 'worker_type')
end