class ExceptionNotifier::WebhookNotifier

Public Class Methods

new(options) click to toggle source
Calls superclass method ExceptionNotifier::BaseNotifier::new
# File lib/exception_notifier/webhook_notifier.rb, line 8
def initialize(options)
  super
  @default_options = options
end

Public Instance Methods

call(exception, options = {}) click to toggle source
# File lib/exception_notifier/webhook_notifier.rb, line 13
def call(exception, options = {})
  env = options[:env]

  options = options.reverse_merge(@default_options)
  url = options.delete(:url)
  http_method = options.delete(:http_method) || :post

  options[:body] ||= {}
  options[:body][:server] = Socket.gethostname
  options[:body][:process] = $PROCESS_ID
  options[:body][:rails_root] = Rails.root if defined?(Rails) && Rails.respond_to?(:root)
  options[:body][:exception] = {
    error_class: exception.class.to_s,
    message: exception.message.inspect,
    backtrace: exception.backtrace
  }
  options[:body][:data] = (env && env['exception_notifier.exception_data'] || {}).merge(options[:data] || {})

  unless env.nil?
    request = ActionDispatch::Request.new(env)

    request_items = {
      url: request.original_url,
      http_method: request.method,
      ip_address: request.remote_ip,
      parameters: request.filtered_parameters,
      timestamp: Time.current
    }

    options[:body][:request] = request_items
    options[:body][:session] = request.session
    options[:body][:environment] = request.filtered_env
  end
  send_notice(exception, options, nil, @default_options) do |_, _|
    HTTParty.send(http_method, url, options)
  end
end