Module: HydraulicBrake

Defined in:
lib/hydraulic_brake.rb,
lib/hydraulic_brake/notice.rb,
lib/hydraulic_brake/sender.rb,
lib/hydraulic_brake/version.rb,
lib/hydraulic_brake/backtrace.rb,
lib/hydraulic_brake/async_sender.rb,
lib/hydraulic_brake/configuration.rb,
lib/hydraulic_brake/test_notification.rb

Defined Under Namespace

Modules: TestNotification Classes: AsyncSender, Backtrace, Configuration, Notice, Sender

Constant Summary collapse

API_VERSION =
"2.3"
LOG_PREFIX =
"** [HydraulicBrake] "
HEADERS =
{
  'Content-type'             => 'text/xml',
  'Accept'                   => 'text/xml, application/xml'
}
VERSION =
File.read(File.join(File.dirname(__FILE__), "../../VERSION"))

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject

The configuration object.

See Also:



94
95
96
# File 'lib/hydraulic_brake.rb', line 94

def configuration
  @configuration ||= Configuration.new
end

.senderObject

The sender object is responsible for delivering formatted data to the Airbrake server. Must respond to #send_to_airbrake. See HydraulicBrake::Sender.



26
27
28
# File 'lib/hydraulic_brake.rb', line 26

def sender
  @sender
end

Class Method Details

.build_lookup_hash_for(exception, options = {}) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/hydraulic_brake.rb', line 117

def build_lookup_hash_for(exception, options = {})
  notice = build_notice_for(exception, options)

  result = {}
  result[:action]           = notice.action      rescue nil
  result[:component]        = notice.component   rescue nil
  result[:error_class]      = notice.error_class if notice.error_class
  result[:environment_name] = 'production'

  unless notice.backtrace.lines.empty?
    result[:file]        = notice.backtrace.lines.first.file
    result[:line_number] = notice.backtrace.lines.first.number
  end

  result
end

.configure(silent = false) {|configuration| ... } ⇒ Object

Call this method to modify defaults in your initializers.

Examples:

HydraulicBrake.configure do |config|
  config.api_key = '1234567890abcdef'
  config.secure  = false
end

Yields:



77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/hydraulic_brake.rb', line 77

def configure(silent = false)
  yield(configuration)

  if configuration.async
    self.sender = AsyncSender.new(
      :sync_sender => Sender.new(configuration),
      :capacity => configuration.async_queue_capacity)
  else
    self.sender = Sender.new(configuration)
  end

  report_ready unless silent
  self.sender
end

.environment_infoObject

Returns the Ruby version, Rails version, and current Rails environment



54
55
56
57
58
# File 'lib/hydraulic_brake.rb', line 54

def environment_info
  info = "[Ruby: #{RUBY_VERSION}]"
  info << " [#{configuration.framework}]" if configuration.framework
  info << " [Env: #{configuration.environment_name}]" if configuration.environment_name
end

.loggerObject

Look for the Rails logger currently defined



66
67
68
# File 'lib/hydraulic_brake.rb', line 66

def logger
  self.configuration.logger
end

.notify(exception, opts = {}) ⇒ Object

Sends an exception manually using this method, even when you are not in a controller.

Parameters:

  • exception (Exception)

    The exception you want to notify Airbrake about

  • opts (Hash) (defaults to: {})

    Data that will be sent to Airbrake

Options Hash (opts):

  • :api_key (String)

    The API key for this project. The API key is a unique identifier that Airbrake uses for identification

  • :error_message (String)

    The error returned by the exception (or the message you want to log)

  • :backtrace (String)

    A backtrace, usually obtained with caller

  • :session_data (String)

    The contents of the user’s session

  • :environment_name (String)

    The application environment name



113
114
115
# File 'lib/hydraulic_brake.rb', line 113

def notify(exception, opts = {})
  send_notice build_notice_for(exception, opts)
end

.report_environment_infoObject

Prints out the environment info to the log for debugging help



39
40
41
# File 'lib/hydraulic_brake.rb', line 39

def report_environment_info
  write_verbose_log("Environment Info: #{environment_info}")
end

.report_notice(notice) ⇒ Object

Prints out the details about the notice that wasn’t sent to server



49
50
51
# File 'lib/hydraulic_brake.rb', line 49

def report_notice(notice)
  write_verbose_log("Notice details: \n#{notice}")
end

.report_readyObject

Tell the log that the Notifier is good to go



34
35
36
# File 'lib/hydraulic_brake.rb', line 34

def report_ready
  write_verbose_log("Notifier #{VERSION} ready to catch errors")
end

.report_response_body(response) ⇒ Object

Prints out the response body from Airbrake for debugging help



44
45
46
# File 'lib/hydraulic_brake.rb', line 44

def report_response_body(response)
  write_verbose_log("Response from Airbrake: \n#{response}")
end

.write_verbose_log(message) ⇒ Object

Writes out the given message to the #logger



61
62
63
# File 'lib/hydraulic_brake.rb', line 61

def write_verbose_log(message)
  logger.debug LOG_PREFIX + message if logger
end