class Voltron::Defender
Constants
- VERSION
Public Class Methods
new(app)
click to toggle source
# File lib/voltron/defender.rb, line 18 def initialize(app) @app = app @slack = ::Voltron::Defender::SlackAdapter.new @slack.commander.listen_to(::Voltron::Defender::When) @slack.commander.listen_to(::Voltron::Defender::Trace) @slack.commander.listen_to(::Voltron::Defender::Http) @slack.commander.listen_to(::Voltron::Defender::Trello) @slack.commander.listen_to(::Voltron::Defender::Stop) @slack.commander.listen_to(::Voltron::Defender::Help) @slack.commander.listen_to(::Voltron::Defender::Defender) end
Public Instance Methods
call(env)
click to toggle source
# File lib/voltron/defender.rb, line 32 def call(env) begin @app.call(env) rescue Exception => e if Voltron.config.defender.enabled? error = Voltron::Defender::Error.new(exception_params(e, env)) handle(error) if error.save end if Voltron.config.defender.ip_restrict_errors if Voltron.config.defender.has_ip?(env.try(:[], 'REMOTE_ADDR')) env['action_dispatch.show_detailed_exceptions'] = true end end raise e end end
handle(error)
click to toggle source
# File lib/voltron/defender.rb, line 50 def handle(error) @slack.client.start_async unless @slack.client.started? if @slack.client.started? @slack.attach(error.name, error.message, :danger) end end
Private Instance Methods
exception_params(ex, env)
click to toggle source
# File lib/voltron/defender.rb, line 60 def exception_params(ex, env) last_line = (ex.backtrace.first || 'Unknown:Unknown').split(':') headers = (env ||= {}).select { |k,v| /^[A-Z_]+$/.match(k.to_s) } { error: ex.message, file: last_line[0], line: last_line[1], trace: ex.backtrace.join("\n"), headers: headers.to_json } end