module Raven
Inspired by Rails' and Airbrake's backtrace parsers.
Based on ActionDispatch::RemoteIp. All security-related precautions from that middleware have been removed, because the Event
IP just needs to be accurate, and spoofing an IP here only makes data inaccurate, not insecure. Don't re-use this module if you have to trust the IP address.
Constants
- AVAILABLE_INTEGRATIONS
- VERSION
Public Class Methods
inject()
click to toggle source
Injects various integrations. Default behavior: inject all available integrations
# File lib/raven/base.rb, line 63 def inject inject_only(*Raven::AVAILABLE_INTEGRATIONS) end
inject_only(*only_integrations)
click to toggle source
# File lib/raven/base.rb, line 72 def inject_only(*only_integrations) only_integrations = only_integrations.map(&:to_s) integrations_to_load = Raven::AVAILABLE_INTEGRATIONS & only_integrations not_found_integrations = only_integrations - integrations_to_load if not_found_integrations.any? logger.warn "Integrations do not exist: #{not_found_integrations.join ', '}" end integrations_to_load &= Gem.loaded_specs.keys # TODO(dcramer): integrations should have some additional checks baked-in # or we should break them out into their own repos. Specifically both the # rails and delayed_job checks are not always valid (i.e. Rails 2.3) and # https://github.com/getsentry/raven-ruby/issues/180 integrations_to_load.each do |integration| load_integration(integration) end end
inject_without(*exclude_integrations)
click to toggle source
# File lib/raven/base.rb, line 67 def inject_without(*exclude_integrations) include_integrations = Raven::AVAILABLE_INTEGRATIONS - exclude_integrations.map(&:to_s) inject_only(*include_integrations) end
instance()
click to toggle source
# File lib/raven/base.rb, line 44 def instance @instance ||= Raven::Instance.new end
load_integration(integration)
click to toggle source
# File lib/raven/base.rb, line 89 def load_integration(integration) require "raven/integrations/#{integration}" rescue Exception => e logger.warn "Unable to load raven/integrations/#{integration}: #{e}" end
safely_prepend(module_name, opts = {})
click to toggle source
# File lib/raven/base.rb, line 95 def safely_prepend(module_name, opts = {}) return if opts[:to].nil? || opts[:from].nil? if opts[:to].respond_to?(:prepend, true) opts[:to].send(:prepend, opts[:from].const_get(module_name)) else opts[:to].send(:include, opts[:from].const_get("Old" + module_name)) end end
sys_command(command)
click to toggle source
# File lib/raven/base.rb, line 105 def sys_command(command) result = `#{command} 2>&1` rescue nil return if result.nil? || result.empty? || ($CHILD_STATUS && $CHILD_STATUS.exitstatus != 0) result.strip end