lib/rorvswild.rb in rorvswild-0.3.3 vs lib/rorvswild.rb in rorvswild-0.3.4
- old
+ new
@@ -54,29 +54,33 @@
class Client
def self.default_config
{
api_url: "https://www.rorvswild.com/api",
explain_sql_threshold: 500,
+ ignored_exceptions: [],
}
end
- attr_reader :api_url, :api_key, :app_id, :explain_sql_threshold, :app_root, :app_root_regex
+ attr_reader :api_url, :api_key, :app_id, :explain_sql_threshold, :app_root, :app_root_regex, :ignored_exceptions
def initialize(config)
config = self.class.default_config.merge(config)
@explain_sql_threshold = config[:explain_sql_threshold]
+ @ignored_exceptions = config[:ignored_exceptions]
@app_root = config[:app_root]
@api_url = config[:api_url]
@api_key = config[:api_key]
@app_id = config[:app_id]
@logger = config[:logger]
@data = {}
if defined?(Rails)
@logger ||= Rails.logger
@app_root ||= Rails.root.to_s
- @parameter_filter = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
+ config = Rails.application.config
+ @parameter_filter = ActionDispatch::Http::ParameterFilter.new(config.filter_parameters)
+ @ignored_exceptions = %w[ActionController::RoutingError] + config.action_dispatch.rescue_responses.map { |(key,value)| key }
end
@logger ||= Logger.new(STDERR)
@app_root_regex = app_root ? /\A#{app_root}/ : nil
@@ -86,10 +90,11 @@
def setup_callbacks
client = self
if defined?(ActiveSupport::Notifications)
ActiveSupport::Notifications.subscribe("sql.active_record", &method(:after_sql_query))
+ ActiveSupport::Notifications.subscribe("render_partial.action_view", &method(:after_view_rendering))
ActiveSupport::Notifications.subscribe("render_template.action_view", &method(:after_view_rendering))
ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request))
ActiveSupport::Notifications.subscribe("start_processing.action_controller", &method(:before_http_request))
ActionController::Base.rescue_from(StandardError) { |exception| client.after_exception(exception, self) }
end
@@ -133,11 +138,11 @@
end
end
end
def after_exception(exception, controller)
- if !exception.is_a?(ActionController::RoutingError)
+ if !ignored_exceptions.include?(exception.class.to_s)
file, line = exception.backtrace.first.split(":")
request[:error] = exception_to_hash(exception).merge(
session: controller.session.to_hash,
environment_variables: filter_sensitive_data(filter_environment_variables(controller.request.env))
)
@@ -310,20 +315,27 @@
exception: exception.class.to_s,
extra_details: extra_details,
}
end
+ HTTPS = "https".freeze
+ CERTIFICATE_AUTHORITIES_PATH = File.expand_path("../../cacert.pem", __FILE__)
+
def post(path, data)
uri = URI(api_url + path)
http = Net::HTTP.new(uri.host, uri.port)
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
- http.use_ssl = true
+ if uri.scheme == HTTPS
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
+ http.ca_file = CERTIFICATE_AUTHORITIES_PATH
+ http.use_ssl = true
+ end
+
post = Net::HTTP::Post.new(uri.path)
post.content_type = "application/json".freeze
post.basic_auth(app_id, api_key)
post.body = data.to_json
- Rails.logger.debug http.request(post).inspect
+ http.request(post)
end
def filter_sensitive_data(hash)
@parameter_filter ? @parameter_filter.filter(hash) : hash
end