Class: SafetyGoggles::Handler
- Inherits:
-
Object
- Object
- SafetyGoggles::Handler
- Defined in:
- lib/safety_goggles/handler.rb
Constant Summary collapse
- ERROR_CODES =
{ "ActionController::ParameterMissing" => 422, "ActionController::UnpermittedParameters" => 422, "ActiveModel::ValidationError" => 422, "ActiveRecord::RecordInvalid" => 422, "ActiveRecord::RecordNotFound" => 404, "ActiveRecord::RecordNotUnique" => 422, "ArgumentError" => 422, "Net::LDAP::Error" => 422, "SafetyGoggles::RecordNotFoundError" => 404, "SafetyGoggles::UnauthorizedError" => 401, "SecurityError" => 403 }.freeze
- SEVERITIES =
{ 500 => "fatal", 401 => "error", 403 => "error" }.freeze
Class Method Summary collapse
- .get_backtrace(error) ⇒ Object
- .guess_env ⇒ Object
- .handle_error(error, env = Handler.guess_env) ⇒ Object
-
.handle_serious_error(error, code, env) ⇒ Object
:nocov:.
- .logger ⇒ Object
-
.serious_env? ⇒ Boolean
:nocov:.
Class Method Details
.get_backtrace(error) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/safety_goggles/handler.rb', line 59 def self.get_backtrace(error) return [] unless error.respond_to?(:backtrace) return [] if error.backtrace.nil? error.backtrace.reject { |line| %r{/gems/}.match(line).present? } end |
.guess_env ⇒ Object
72 73 74 75 76 |
# File 'lib/safety_goggles/handler.rb', line 72 def self.guess_env return Rails.env if defined?(Rails) && Rails.respond_to?(:env) "development" end |
.handle_error(error, env = Handler.guess_env) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/safety_goggles/handler.rb', line 25 def self.handle_error(error, env = Handler.guess_env) logger.debug("::handle_error called with #{error}, #{env}") code = ERROR_CODES.fetch(error.class.to_s, 500) if code.nil? logger.error("ERROR: #{code} \n#{error.class} \n#{error}") logger.error(get_backtrace(error).join("\n")) handle_serious_error(error, code, env) if serious_env? code end |
.handle_serious_error(error, code, env) ⇒ Object
:nocov:
38 39 40 41 42 43 44 45 46 |
# File 'lib/safety_goggles/handler.rb', line 38 def self.handle_serious_error(error, code, env) logger.debug("::handle_serious_error called with #{error}, #{code}, #{env}") severity = SEVERITIES.fetch(code, "warning") Raven.capture_exception(error, extra: { nice_backtrace: get_backtrace(error) }, level: severity, tags: { code: code, class: error.class }) end |
.logger ⇒ Object
66 67 68 69 70 |
# File 'lib/safety_goggles/handler.rb', line 66 def self.logger return Rails.logger if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger.present? Logger.new(STDOUT) end |
.serious_env? ⇒ Boolean
:nocov:
49 50 51 52 53 54 55 56 57 |
# File 'lib/safety_goggles/handler.rb', line 49 def self.serious_env? return false unless defined?(Rails) # :nocov: # rubocop:disable Rails/UnknownEnv Rails.env.production? || Rails.env.staging? # rubocop:enable Rails/UnknownEnv # :nocov: end |