lib/airbrake.rb in airbrake-4.3.8 vs lib/airbrake.rb in airbrake-5.0.0.rc.1

- old
+ new

@@ -1,191 +1,22 @@ -begin - require "girl_friday" -rescue LoadError -end +# For 'Socket.gethostname' only. +require 'socket' -begin - require "sucker_punch" -rescue LoadError -end +# Core library that sends notices. +# See: https://github.com/airbrake/airbrake-ruby +require 'airbrake-ruby' -require 'net/http' -require 'net/https' -require 'rubygems' -require 'logger' - require 'airbrake/version' -require 'airbrake/jobs/send_job' -require 'airbrake/utils/rack_filters' -require 'airbrake/utils/params_cleaner' -require 'airbrake/configuration' -require 'airbrake/notice' -require 'airbrake/sender' -require 'airbrake/response' -require 'airbrake/backtrace' -require 'airbrake/rack' -require 'airbrake/sinatra' -require 'airbrake/user_informer' -begin - require 'airbrake/sidekiq' -rescue LoadError -end +# Automatically load needed files for the environment the library is running in. +if defined?(Rack) + require 'airbrake/rack/user' + require 'airbrake/rack/notice_builder' + require 'airbrake/rack/middleware' -require 'airbrake/railtie' if defined?(Rails::Railtie) - -module Airbrake - API_VERSION = "2.4" - LOG_PREFIX = "** [Airbrake] " - - class << self - # The sender object is responsible for delivering formatted data to the Airbrake server. - # Must respond to #send_to_airbrake. See Airbrake::Sender. - attr_accessor :sender - - # A Airbrake configuration object. Must act like a hash and return sensible - # values for all Airbrake configuration options. See Airbrake::Configuration. - attr_writer :configuration - - # Tell the log that the Notifier is good to go - def report_ready - write_verbose_log("Notifier #{VERSION} ready to catch errors") - end - - # Prints out the environment info to the log for debugging help - def report_environment_info - write_verbose_log("Environment Info: #{environment_info}") - end - - # Prints out the response body from Airbrake for debugging help - def report_response_body(response) - write_verbose_log("Response from Airbrake: \n#{Response.pretty_format(response)}") - end - - # Prints out the details about the notice that wasn't sent to server - def report_notice(notice) - write_verbose_log("Notice details: \n#{notice}") - end - - def report_notice_not_sent_for_configuration - write_verbose_log("Notice was not sent due to configuration: \ - \n Environment Monitored? #{configuration.public?} \ - \n API key set? #{configuration.configured?}") - end - - # Returns the Ruby version, Rails version, and current Rails environment - def environment_info - info = "[Ruby: #{RUBY_VERSION}]" - info << " [#{configuration.framework}]" if configuration.framework - info << " [Env: #{configuration.environment_name}]" if configuration.environment_name - info - end - - # Writes out the given message to the #logger - def write_verbose_log(message) - logger.debug LOG_PREFIX + message if logger - end - - # Look for the Rails logger currently defined - def logger - self.configuration.logger || - Logger.new(nil) - end - - # Call this method to modify defaults in your initializers. - # - # @example - # Airbrake.configure do |config| - # config.api_key = '1234567890abcdef' - # config.secure = false - # end - def configure(silent = false) - yield(configuration) - self.sender = if configuration.test_mode? - CollectingSender.new(configuration) - else - Sender.new(configuration) - end - - report_ready unless silent - self.sender - end - - # The configuration object. - # @see Airbrake.configure - def configuration - @configuration ||= Configuration.new - end - - # Sends an exception manually using this method, even when you are not in a controller. - # - # @param [Exception] exception The exception you want to notify Airbrake about. - # @param [Hash] opts Data that will be sent to Airbrake. - # - # @option opts [String] :api_key The API key for this project. The API key is a unique identifier that Airbrake uses for identification. - # @option opts [String] :error_message The error returned by the exception (or the message you want to log). - # @option opts [String] :backtrace A backtrace, usually obtained with +caller+. - # @option opts [String] :rack_env The Rack environment. - # @option opts [String] :session The contents of the user's session. - # @option opts [String] :environment_name The application environment name. - # @option opts [String] :parameters Additional parameters. - def notify(exception, opts = {}) - send_notice(build_notice_for(exception, opts)) - end - - # Sends the notice unless it is one of the default ignored exceptions - # @see Airbrake.notify - def notify_or_ignore(exception, opts = {}) - notice = build_notice_for(exception, opts) - send_notice(notice) unless notice.ignore? - end - - 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 - - private - - def send_notice(notice) - if configuration.configured? && configuration.public? - if configuration.async? - configuration.async.call(notice) - nil # make sure we never set env["airbrake.error_id"] for async notices - else - sender.send_to_airbrake(notice) - end - else - report_notice_not_sent_for_configuration - end - end - - def build_notice_for(exception, opts = {}) - exception_classes = [exception.class.to_s] - exception = unwrap_exception(exception) - opts = opts.merge(:exception => exception) if exception.is_a?(Exception) - opts = opts.merge(exception.to_hash) if exception.respond_to?(:to_hash) - opts = opts.merge(:exception_classes => exception_classes) - Notice.new(configuration.merge(opts)) - end - - def unwrap_exception(exception) - if exception.respond_to?(:original_exception) - exception.original_exception - elsif exception.respond_to?(:continued_exception) - exception.continued_exception - end || exception - end - end + require 'airbrake/rails/railtie' if defined?(Rails) end + +require 'airbrake/rake/task_ext' if defined?(Rake) +require 'airbrake/resque/failure' if defined?(Resque) +require 'airbrake/sidekiq/error_handler' if defined?(Sidekiq) +require 'airbrake/delayed_job/plugin' if defined?(Delayed)