Class: Airbrake::Sender

Inherits:
Object
  • Object
show all
Defined in:
lib/airbrake/sender.rb

Overview

Sends out the notice to Airbrake

Direct Known Subclasses

CollectingSender

Constant Summary collapse

NOTICES_URI =
'/notifier_api/v2/notices'.freeze
HEADERS =
{
  :xml => {
  'Content-type' => 'text/xml',
  'Accept'       => 'text/xml, application/xml'
},:json => {
  'Content-Type' => 'application/json',
  'Accept'       => 'application/json'
}}
JSON_API_URI =
'/api/v3/projects'.freeze
HTTP_ERRORS =
[Timeout::Error,
Errno::EINVAL,
Errno::ECONNRESET,
EOFError,
Net::HTTPBadResponse,
Net::HTTPHeaderSyntaxError,
Net::ProtocolError,
Errno::ECONNREFUSED,
OpenSSL::SSL::SSLError].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Sender

Returns a new instance of Sender.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/airbrake/sender.rb', line 26

def initialize(options = {})
  [ :proxy_host,
    :proxy_port,
    :proxy_user,
    :proxy_pass,
    :protocol,
    :host,
    :port,
    :secure,
    :use_system_ssl_cert_chain,
    :http_open_timeout,
    :http_read_timeout,
    :project_id,
    :api_key
  ].each do |option|
    instance_variable_set("@#{option}", options[option])
  end
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def api_key
  @api_key
end

#hostObject (readonly)

Returns the value of attribute host.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def host
  @host
end

#http_open_timeoutObject (readonly)

Returns the value of attribute http_open_timeout.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def http_open_timeout
  @http_open_timeout
end

#http_read_timeoutObject (readonly)

Returns the value of attribute http_read_timeout.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def http_read_timeout
  @http_read_timeout
end

#portObject (readonly)

Returns the value of attribute port.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def port
  @port
end

#project_idObject (readonly)

Returns the value of attribute project_id.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def project_id
  @project_id
end

#protocolObject (readonly)

Returns the value of attribute protocol.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def protocol
  @protocol
end

#proxy_hostObject (readonly)

Returns the value of attribute proxy_host.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def proxy_host
  @proxy_host
end

#proxy_passObject (readonly)

Returns the value of attribute proxy_pass.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def proxy_pass
  @proxy_pass
end

#proxy_portObject (readonly)

Returns the value of attribute proxy_port.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def proxy_port
  @proxy_port
end

#proxy_userObject (readonly)

Returns the value of attribute proxy_user.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def proxy_user
  @proxy_user
end

#secureObject (readonly) Also known as: secure?

Returns the value of attribute secure.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def secure
  @secure
end

#use_system_ssl_cert_chainObject (readonly) Also known as: use_system_ssl_cert_chain?

Returns the value of attribute use_system_ssl_cert_chain.



87
88
89
# File 'lib/airbrake/sender.rb', line 87

def use_system_ssl_cert_chain
  @use_system_ssl_cert_chain
end

Instance Method Details

#send_to_airbrake(notice) ⇒ Object

Sends the notice data off to Airbrake for processing.

Parameters:

  • notice (Notice or String)

    The notice to be sent off



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/airbrake/sender.rb', line 49

def send_to_airbrake(notice)
  data = prepare_notice(notice)
  http = setup_http_connection

  response = begin
               http.post(url.respond_to?(:path) ? url.path : url,
                         data,
                         headers)
             rescue *HTTP_ERRORS => e
               log :level => :error,
                   :message => "Unable to contact the Airbrake server. HTTP Error=#{e}"
               nil
             end

  case response
  when Net::HTTPSuccess then
    log :level => :info,
        :message => "Success: #{response.class}",
        :response => response
  else
    log :level => :error,
        :message => "Failure: #{response.class}",
        :response => response,
        :notice => notice
  end

  if response && response.respond_to?(:body)
    error_id = response.body.match(%r{<id[^>]*>(.*?)</id>})
    error_id[1] if error_id
  end
rescue => e
  log :level => :error,
    :message => "[Airbrake::Sender#send_to_airbrake] Cannot send notification. Error: #{e.class}" +
    " - #{e.message}\nBacktrace:\n#{e.backtrace.join("\n\t")}"

  nil
end