Skip to content
This repository has been archived by the owner on Feb 12, 2022. It is now read-only.

Commit

Permalink
catch known errors like socket errors with rollbar
Browse files Browse the repository at this point in the history
  • Loading branch information
dickeyxxx committed Jan 27, 2015
1 parent 0a6bf72 commit 2c1e1b5
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 12 deletions.
19 changes: 17 additions & 2 deletions lib/heroku/helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,8 @@ def error(message)
Heroku::Helpers.error_with_failure = false
end
$stderr.puts(format_with_bang(message))
rollbar_id = Rollbar.error(message)
$stderr.puts("Error ID: #{rollbar_id}") if rollbar_id
exit(1)
end

Expand Down Expand Up @@ -387,7 +389,7 @@ def styled_array(array, options={})
display
end

def format_error(error, rollbar_id, message)
def format_error(error, message='Heroku client internal error.', rollbar_id=nil)
formatted_error = []
formatted_error << " ! #{message}"
formatted_error << ' ! Search for help at: https://help.heroku.com'
Expand Down Expand Up @@ -426,6 +428,8 @@ def format_error(error, rollbar_id, message)
formatted_error << " Version: #{Heroku.user_agent}"
formatted_error << " Error ID: #{rollbar_id}" if rollbar_id
formatted_error << "\n"
formatted_error << " More information in #{error_log_path}"
formatted_error << "\n"
formatted_error.join("\n")
end

Expand All @@ -435,7 +439,18 @@ def styled_error(error, message='Heroku client internal error.')
Heroku::Helpers.error_with_failure = false
end
rollbar_id = Rollbar.error(error)
$stderr.puts(format_error(error, rollbar_id, message))
$stderr.puts(format_error(error, message, rollbar_id))
error_log(message, error.message, error.backtrace.join("\n"))
end

def error_log(*obj)
File.open(error_log_path, 'a') do |file|
file.write(obj.join("\n") + "\n")
end
end

def error_log_path
File.join(home_directory, '.heroku', 'error.log')
end

def styled_header(header)
Expand Down
46 changes: 36 additions & 10 deletions lib/heroku/rollbar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,52 @@ module Rollbar
extend Heroku::Helpers

def self.error(e)
payload = {
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 if response["err"] != 0
response["result"]["uuid"]
rescue => e
$stderr.puts "Error submitting error."
error_log(e.message, e.backtrace.join("\n"))
nil
end

private

def self.build_payload(e)
if e.is_a? Exception
build_trace_payload(e)
else
build_message_payload(e.to_s)
end
end

def self.build_trace_payload(e)
payload = base_payload
payload[:data][:body] = {:trace => trace_from_exception(e)}
payload
end

def self.build_message_payload(message)
payload = base_payload
payload[:data][:body] = {:message => {:body => message}}
payload
end

def self.base_payload
{
:access_token => 'f9ca108fdb4040479d539c7a649e2008',
:data => {
:platform => 'client',
:environment => 'production',
:code_version => Heroku::VERSION,
:client => { :platform => RUBY_PLATFORM },
:request => { :command => ARGV.join(' ') },
:body => { :trace => trace_from_exception(e) }
:request => { :command => ARGV.join(' ') }
}
}
response = Excon.post('https://api.rollbar.com/api/1/item/', :body => json_encode(payload))
json_decode(response.body)["result"]["uuid"]
rescue
$stderr.puts "Error submitting error."
nil
end

private

def self.trace_from_exception(e)
{
:frames => frames_from_exception(e),
Expand Down
11 changes: 11 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,24 @@ def home_directory
def has_http_git_entry_in_netrc
true
end
undef_method :error_log
def error_log(*obj); end
undef_method :error_log_path
def error_log_path
'error_log_path'
end
end

require "heroku/git"
module Heroku::Git
def self.check_git_version; end
end

require "heroku/rollbar"
module Heroku::Rollbar
def self.error(e); end
end

require "support/display_message_matcher"
require "support/organizations_mock_helper"

Expand Down

0 comments on commit 2c1e1b5

Please sign in to comment.