Class: Qtrix::Override

Inherits:
Object
  • Object
show all
Extended by:
Namespacing
Defined in:
lib/qtrix/override.rb

Constant Summary collapse

REDIS_KEY =
:overrides
REDIS_CLAIMS_KEY =
:override_claims

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Namespacing

extract_args, included, redis, redis_namespace

Instance Attribute Details

#hostObject (readonly)

Returns the value of attribute host.



58
59
60
# File 'lib/qtrix/override.rb', line 58

def host
  @host
end

#queuesObject (readonly)

Returns the value of attribute queues.



58
59
60
# File 'lib/qtrix/override.rb', line 58

def queues
  @queues
end

Class Method Details

.add(*args) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/qtrix/override.rb', line 8

def add(*args)
  namespace, queues, processes = extract_args(2, *args)
  validate!(processes)
  processes.times do
    redis(namespace).rpush(REDIS_KEY, queues.join(","))
  end
  Qtrix::Matrix.clear!(namespace)
end

.all(ns = :current) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/qtrix/override.rb', line 17

def all(ns=:current)
  [].tap do |result|
    raw_list(ns).each_with_index do |queues, index|
      host = redis(ns).lindex(REDIS_CLAIMS_KEY, index)
      result << self.new(queues.split(",").map(&:to_sym), host)
    end
  end
end

.clear!(namespace = :current) ⇒ Object



32
33
34
35
# File 'lib/qtrix/override.rb', line 32

def clear!(namespace=:current)
  redis(namespace).del REDIS_KEY
  Qtrix::Matrix.clear!(namespace)
end

.overrides_for(*args) ⇒ Object



37
38
39
40
41
# File 'lib/qtrix/override.rb', line 37

def overrides_for(*args)
  namespace, hostname, workers = extract_args(2, *args)
  workers.times {redis(namespace).rpush(REDIS_CLAIMS_KEY, hostname)}
  claimed_by(namespace, hostname).map{|override| override.queues}
end

.remove(*args) ⇒ Object



26
27
28
29
30
# File 'lib/qtrix/override.rb', line 26

def remove(*args)
  namespace, queues, processes = extract_args(2, *args)
  redis(namespace).lrem(REDIS_KEY, processes, queues.join(","))
  Qtrix::Matrix.clear!(namespace)
end

Instance Method Details

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


64
65
66
67
68
# File 'lib/qtrix/override.rb', line 64

def eql?(other)
  self.class.equal?(other.class) &&
    @processes == other.processes &&
    @queues == other.queues
end

#hashObject



60
61
62
# File 'lib/qtrix/override.rb', line 60

def hash
  @queues.hash ^ @processes.hash
end