class Resque::Pool::Lifeguard

Constants

VERSION

Attributes

defaults[R]
hostname[R]

Public Class Methods

all_pools() click to toggle source
# File lib/resque/pool/lifeguard.rb, line 18
def self.all_pools
  all = Resque.redis.hgetall pool_key
  all.map { |k, v|
    [k, Resque.decode(v)]
  }.to_h
rescue Resque::Helpers::DecodeException
  reset!
  {}
end
new(hostname: Socket.gethostname, defaults: -> (_env) { {}) click to toggle source
# File lib/resque/pool/lifeguard.rb, line 9
def initialize hostname: Socket.gethostname, defaults: -> (_env) { {} }
  @defaults = defaults
  @hostname = hostname
end
pool_key() click to toggle source
# File lib/resque/pool/lifeguard.rb, line 14
def self.pool_key
  'resque-pool-lifeguard'
end
reset!() click to toggle source
# File lib/resque/pool/lifeguard.rb, line 28
def self.reset!
  Resque.redis.del pool_key
end
reset_empty!() click to toggle source
# File lib/resque/pool/lifeguard.rb, line 32
def self.reset_empty!
  used_hosts = Resque.workers.map(&:hostname).uniq

  (all_pools.keys - used_hosts).each do |host|
    new(hostname: host).reset!
  end
end

Public Instance Methods

[](queues) click to toggle source
# File lib/resque/pool/lifeguard.rb, line 62
def [] queues
  values.to_h[queues]
end
[]=(queues, count) click to toggle source
# File lib/resque/pool/lifeguard.rb, line 66
def []= queues, count
  self.values = if count.zero?
    values.to_h.tap do |vals| vals.delete queues end
  else
    values.to_h.merge queues => count
  end
end
call(env) click to toggle source
# File lib/resque/pool/lifeguard.rb, line 40
def call env
  @values = values || set_defaults(env)
end
reset!() click to toggle source
# File lib/resque/pool/lifeguard.rb, line 44
def reset!
  Resque.redis.hdel pool_key, hostname
end
values() click to toggle source
# File lib/resque/pool/lifeguard.rb, line 48
def values
  Resque.decode Resque.redis.hget pool_key, hostname
rescue Resque::Helpers::DecodeException
  reset!
  nil
rescue Redis::TimeoutError, Redis::CannotConnectError
  log "Could not get config from redis"
  @values
end
values=(values) click to toggle source
# File lib/resque/pool/lifeguard.rb, line 58
def values= values
  Resque.redis.hset pool_key, hostname, (Resque.encode values)
end

Private Instance Methods

pool_key() click to toggle source
# File lib/resque/pool/lifeguard.rb, line 78
def pool_key
  self.class.pool_key
end
set_defaults(env) click to toggle source
# File lib/resque/pool/lifeguard.rb, line 82
def set_defaults env
  self.values = defaults.(env)
end