Class: ExceptionNotifier::SnsNotifier

Inherits:
BaseNotifier
  • Object
show all
Includes:
BacktraceCleaner
Defined in:
lib/exception_notifier/sns_notifier.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ SnsNotifier

Returns a new instance of SnsNotifier.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/exception_notifier/sns_notifier.rb', line 7

def initialize(options)
  super

  client_params = {}
  %i[access_key_id secret_access_key region].each do |key|
    next unless options[key].present?

    client_params[key] = options.delete(key)
  end

  @sns_client = Aws::SNS::Client.new(client_params)
  @topic_arn = options.delete(:topic_arn)
  @subject = options.delete(:subject)
end

Instance Method Details

#active?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/exception_notifier/sns_notifier.rb', line 35

def active?
  !@sns_client.nil? && @topic_arn.present?
end

#call(exception, options = {}) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/exception_notifier/sns_notifier.rb', line 22

def call(exception, options = {})
  return unless active?

  env = options[:env] || {}
  @options = options
  @exception = exception
  @backtrace = exception.backtrace ? clean_backtrace(exception) : []
  @kontroller = env['action_controller.instance']
  @request = ::ActionDispatch::Request.new(env) if @kontroller

  @sns_client.publish(topic_arn: @topic_arn, message: compose_message.to_json, subject: @subject)
end

#compose_infoObject



39
40
41
42
43
# File 'lib/exception_notifier/sns_notifier.rb', line 39

def compose_info
  info = @kontroller ? "#{@kontroller.controller_name}##{@kontroller.action_name}" : ''
  info << " (#{@exception.class})"
  info << " #{@exception.message.inspect}"
end

#compose_messageObject



45
46
47
48
49
50
51
52
53
54
# File 'lib/exception_notifier/sns_notifier.rb', line 45

def compose_message
  message = {
    info: compose_info,
    backtrace: @backtrace.to_s,
    default: compose_info
  }
  message[:request] = request_data if @request

  message
end

#request_dataObject



56
57
58
59
60
61
62
63
# File 'lib/exception_notifier/sns_notifier.rb', line 56

def request_data
  {
    url: @request.url,
    method: @request.request_method,
    remote_ip: @request.remote_ip,
    parameters: @request.filtered_parameters.inspect
  }
end