Class: Resque::StuckQueue::Config

Inherits:
Hash
  • Object
show all
Defined in:
lib/resque_stuck_queue/config.rb

Defined Under Namespace

Classes: NoConfigError

Constant Summary collapse

OPTIONS_DESCRIPTIONS =
{
  :triggered_handler  => "set to what gets triggered when resque-stuck-queue will detect the latest heartbeat is older than the trigger_timeout time setting.\n\tExample:\n\tResque::StuckQueue.config[:triggered_handler] = proc { |queue_name, lagtime| send_email('queue \#{queue_name} isnt working, aaah the daemons') }",
  :recovered_handler  => "set to what gets triggered when resque-stuck-queue has triggered a problem, but then detects the queue went back down to functioning well again(it wont trigger again until it has recovered).\n\tExample:\n\tResque::StuckQueue.config[:recovered_handler] = proc { |queue_name, lagtime| send_email('phew, queue \#{queue_name} is ok') }",
  :heartbeat          => "set to how often to push that 'heartbeat' job to refresh the latest time it worked.\n\tExample:\n\tResque::StuckQueue.config[:heartbeat] = 5.minutes",
  :trigger_timeout    => "set to how much of a resque work lag you are willing to accept before being notified. note: take the :heartbeat setting into account when setting this timeout.\n\tExample:\n\tResque::StuckQueue.config[:trigger_timeout] = 55.minutes",
  :redis              => "set the Redis StuckQueue will use. Either a Redis or Redis::Namespace instance.",

  :heartbeat_key      => "optional, name of keys to keep track of the last good resque heartbeat time",
  :triggered_key      => "optional, name of keys to keep track of the last trigger time",
  :logger             => "optional, pass a Logger. Default a ruby logger will be instantiated. Needs to respond to that interface.",
  :queues             => "optional, monitor specific queues you want to send a heartbeat/monitor to. default is :app",
  :abort_on_exception => "optional, if you want the resque-stuck-queue threads to explicitly raise, default is false",
  :heartbeat_job      => "optional, your own custom refreshing job. if you are using something other than resque",
  :enable_signals     => "optional, allow resque::stuck's signal_handlers",
}
OPTIONS =
OPTIONS_DESCRIPTIONS.keys
REQUIRED_KEYS =
[:redis]

Instance Method Summary collapse

Instance Method Details

#[](k) ⇒ Object



40
41
42
43
# File 'lib/resque_stuck_queue/config.rb', line 40

def [](k)
  validate_key_exists!(k)
  super(k)
end

#[]=(k, v) ⇒ Object



35
36
37
38
# File 'lib/resque_stuck_queue/config.rb', line 35

def []=(k,v)
  validate_key_exists!(k)
  super(k,v)
end

#description_for(k) ⇒ Object



62
63
64
# File 'lib/resque_stuck_queue/config.rb', line 62

def description_for(k)
  OPTIONS_DESCRIPTIONS[k.to_sym]
end

#pretty_descriptionsObject



66
67
68
69
70
71
72
# File 'lib/resque_stuck_queue/config.rb', line 66

def pretty_descriptions
  out = "\n"
  OPTIONS_DESCRIPTIONS.map{|key,msg|
    out << "#{key}:\n\t#{msg}\n\n"
  }
  out
end

#validate_key_exists!(k) ⇒ Object



56
57
58
59
60
# File 'lib/resque_stuck_queue/config.rb', line 56

def validate_key_exists!(k)
  if !OPTIONS.include?(k)
    raise NoConfigError, "no such config key #{k} exists!"
  end
end

#validate_required_keys!Object



46
47
48
49
50
51
52
# File 'lib/resque_stuck_queue/config.rb', line 46

def validate_required_keys!
  REQUIRED_KEYS.each do |k|
    if self[k].nil?
      raise NoConfigError, "You must set config[:#{k}]"
    end
  end
end