module Raygun
Client
for injecting JavaScript code for tracking front end exceptions raygun.com/docs/languages/javascript
Adapted from Bugsnag code, and Sidekiq Erorr Handling instructions
SideKiq: github.com/sidekiq/sidekiq/wiki/Error-Handling Bugsnag: github.com/bugsnag/bugsnag-ruby/blob/master/lib/bugsnag/sidekiq.rb
Constants
- CLIENT_NAME
- CLIENT_URL
used to identify ourselves to
Raygun
- VERSION
Attributes
configuration[W]
Configuration
Object (instance of Raygun::Configuration
)
Public Class Methods
configuration()
click to toggle source
# File lib/raygun.rb, line 47 def configuration @configuration ||= Configuration.new end
configured?()
click to toggle source
# File lib/raygun.rb, line 59 def configured? !!configuration.api_key end
default_configuration()
click to toggle source
# File lib/raygun.rb, line 51 def default_configuration configuration.defaults end
deprecation_warning(message)
click to toggle source
# File lib/raygun.rb, line 117 def deprecation_warning(message) if defined?(ActiveSupport::Deprecation) ActiveSupport::Deprecation.warn(message) else puts message end end
failsafe_log(message)
click to toggle source
# File lib/raygun.rb, line 113 def failsafe_log(message) configuration.failsafe_logger.info(message) end
log(message)
click to toggle source
# File lib/raygun.rb, line 107 def log(message) return unless configuration.debug configuration.logger.info("[Raygun] #{message}") if configuration.logger end
reset_configuration()
click to toggle source
# File lib/raygun.rb, line 55 def reset_configuration @configuration = Configuration.new end
setup() { |configuration| ... }
click to toggle source
# File lib/raygun.rb, line 41 def setup yield(configuration) log("configuration settings: #{configuration.inspect}") end
track_exception(exception_instance, env = {}, user = nil, retry_count = 1)
click to toggle source
# File lib/raygun.rb, line 63 def track_exception(exception_instance, env = {}, user = nil, retry_count = 1) log('tracking exception') exception_instance.set_backtrace(caller) if exception_instance.is_a?(Exception) && exception_instance.backtrace.nil? result = if configuration.send_in_background track_exception_async(exception_instance, env, user, retry_count) else track_exception_sync(exception_instance, env, user, retry_count) end result end
track_exceptions() { || ... }
click to toggle source
# File lib/raygun.rb, line 77 def track_exceptions yield rescue => e track_exception(e) end
wait_for_futures()
click to toggle source
# File lib/raygun.rb, line 125 def wait_for_futures @@active_futures.each(&:value) end
Private Class Methods
print_api_key_warning()
click to toggle source
# File lib/raygun.rb, line 177 def print_api_key_warning $stderr.puts(NO_API_KEY_MESSAGE) end
should_report?(exception)
click to toggle source
# File lib/raygun.rb, line 181 def should_report?(exception) if configuration.silence_reporting log('skipping reporting because Configuration.silence_reporting is enabled') return false end if configuration.ignore.flatten.include?(exception.class.to_s) log("skipping reporting of exception #{exception.class} because it is in the ignore list") return false end true end
track_exception_async(exception_instance, env, user, retry_count)
click to toggle source
# File lib/raygun.rb, line 131 def track_exception_async(exception_instance, env, user, retry_count) env[:rg_breadcrumb_store] = Raygun::Breadcrumbs::Store.take_until_size(Client::MAX_BREADCRUMBS_SIZE) if Raygun::Breadcrumbs::Store.any? future = Concurrent::Future.execute { track_exception_sync(exception_instance, env, user, retry_count) } future.add_observer(lambda do |_, value, reason| if value == nil || !value.responds_to?(:response) || value.response.code != "202" log("unexpected response from Raygun, could indicate error: #{value.inspect}") end @@active_futures.delete(future) end, :call) @@active_futures << future future end
track_exception_sync(exception_instance, env, user, retry_count)
click to toggle source
# File lib/raygun.rb, line 146 def track_exception_sync(exception_instance, env, user, retry_count) if should_report?(exception_instance) log('attempting to send exception') resp = Client.new.track_exception(exception_instance, env, user) log('sent payload to api') resp end rescue Exception => e log('error sending exception to raygun, see failsafe logger for more information') if configuration.failsafe_logger failsafe_log("Problem reporting exception to Raygun: #{e.class}: #{e.message}\n\n#{e.backtrace.join("\n")}") end if retry_count > 0 new_exception = e.exception("raygun4ruby encountered an exception processing your exception") new_exception.set_backtrace(e.backtrace) env[:custom_data] ||= {} env[:custom_data].merge!(original_stacktrace: exception_instance.backtrace) ::Raygun::Breadcrumbs::Store.clear track_exception(new_exception, env, user, retry_count - 1) else raise e end end