module Rollbar

Public Class Methods

error(e) click to toggle source
# File lib/heroku/rollbar.rb, line 4
def self.error(e)
  return if ENV['HEROKU_DISABLE_ERROR_REPORTING']
  payload = json_encode(build_payload(e))
  response = Excon.post('https://api.rollbar.com/api/1/item/', :body => payload)
  response = json_decode(response.body)
  raise response.to_s if response["err"] != 0
  response["result"]["uuid"]
rescue
  $stderr.puts(e.message, e.backtrace.join("\n"))
  nil
end

Private Class Methods

base_payload() click to toggle source
# File lib/heroku/rollbar.rb, line 38
def self.base_payload
  {
    :access_token => '488f0c3af3d6450cb5b5827c8099dbff',
    :data => {
      :platform => 'client',
      :environment => 'production',
      :code_version => Heroku::VERSION,
      :client => { :platform => RUBY_PLATFORM, :ruby => RUBY_VERSION },
      :request => { :command => ARGV[0] }
    }
  }
end
build_message_payload(message) click to toggle source
# File lib/heroku/rollbar.rb, line 32
def self.build_message_payload(message)
  payload = base_payload
  payload[:data][:body] = {:message => {:body => message}}
  payload
end
build_payload(e) click to toggle source
# File lib/heroku/rollbar.rb, line 18
def self.build_payload(e)
  if e.is_a? Exception
    build_trace_payload(e)
  else
    build_message_payload(e.to_s)
  end
end
build_trace_payload(e) click to toggle source
# File lib/heroku/rollbar.rb, line 26
def self.build_trace_payload(e)
  payload = base_payload
  payload[:data][:body] = {:trace => trace_from_exception(e)}
  payload
end
frames_from_exception(e) click to toggle source
# File lib/heroku/rollbar.rb, line 61
def self.frames_from_exception(e)
  e.backtrace.map do |line|
    filename, lineno, method = line.scan(/(.+):(\d+):in `(.*)'/)[0]
    { :filename => filename, :lineno => lineno.to_i, :method => method }
  end
end
trace_from_exception(e) click to toggle source
# File lib/heroku/rollbar.rb, line 51
def self.trace_from_exception(e)
  {
    :frames => frames_from_exception(e),
    :exception => {
      :class => e.class.to_s,
      :message => e.message
    }
  }
end