module ProbyNotifier::ResquePlugin

Automatically notifies Proby when this job starts and finishes.

class SomeJob
  extend ProbyNotifier::ResquePlugin

  self.perform
    do_stuff
  end
end

The Proby Task ID can be set in one of two ways. The most common way is to put the ID in an ENV variable that is set in your crontab. This ID will be transparently passed to the Resque job via Redis.

0 0 * * * PROBY_TASK_ID=abc123 ./queue_some_job

Alternatively, if you’re not using cron and therefore don’t want that support, you can just set the @proby_id ivar in the class, like so.

class SomeJob
  extend ProbyNotifier::ResquePlugin
  @proby_id = 'abc123'

  self.perform
    do_stuff
  end
end

Setting the @proby_id variable will take precendence over the ENV variable.

Public Instance Methods

around_perform_proby(*args) { || ... } click to toggle source
# File lib/proby_notifier/resque_plugin.rb, line 49
def around_perform_proby(*args)
  failed = false
  error_message = nil
  _proby_id = proby_id(*args)
  ProbyNotifier.send_start_notification(_proby_id)
  yield
rescue Exception => e
  failed = true
  error_message = "#{e.class.name}: #{e.message}"
  error_message << "\n#{e.backtrace.join("\n")}" if e.backtrace
  raise e
ensure
  ProbyNotifier.send_finish_notification(_proby_id, :failed => failed, :error_message => error_message)
end
before_enqueue_proby(*args) click to toggle source
# File lib/proby_notifier/resque_plugin.rb, line 37
def before_enqueue_proby(*args)
  return true if @proby_id

  env_proby_id = ENV['PROBY_TASK_ID']
  Resque.redis.setex(proby_id_bucket(*args), 24.hours, env_proby_id)
  return true
end
proby_id(*args) click to toggle source
# File lib/proby_notifier/resque_plugin.rb, line 45
def proby_id(*args)
  @proby_id || Resque.redis.get(proby_id_bucket(*args))
end
proby_id_bucket(*args) click to toggle source
# File lib/proby_notifier/resque_plugin.rb, line 33
def proby_id_bucket(*args)
  "proby_id:#{name}-#{args.to_s}"
end