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