Class: HydraulicBrake::Sender

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

Overview

Sends out the notice to Airbrake

Constant Summary collapse

NOTICES_URI =
'/notifier_api/v2/notices/'.freeze
HTTP_ERRORS =
[Timeout::Error,
Errno::EINVAL,
Errno::ECONNRESET,
EOFError,
Net::HTTPBadResponse,
Net::HTTPHeaderSyntaxError,
Net::ProtocolError,
Errno::ECONNREFUSED].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Sender

Returns a new instance of Sender.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/hydraulic_brake/sender.rb', line 15

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
  ].each do |option|
    instance_variable_set("@#{option}", options[option])
  end
end

Instance Attribute Details

#hostObject (readonly)

Returns the value of attribute host.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def host
  @host
end

#http_open_timeoutObject (readonly)

Returns the value of attribute http_open_timeout.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def http_open_timeout
  @http_open_timeout
end

#http_read_timeoutObject (readonly)

Returns the value of attribute http_read_timeout.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def http_read_timeout
  @http_read_timeout
end

#portObject (readonly)

Returns the value of attribute port.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def port
  @port
end

#protocolObject (readonly)

Returns the value of attribute protocol.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def protocol
  @protocol
end

#proxy_hostObject (readonly)

Returns the value of attribute proxy_host.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def proxy_host
  @proxy_host
end

#proxy_passObject (readonly)

Returns the value of attribute proxy_pass.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def proxy_pass
  @proxy_pass
end

#proxy_portObject (readonly)

Returns the value of attribute proxy_port.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def proxy_port
  @proxy_port
end

#proxy_userObject (readonly)

Returns the value of attribute proxy_user.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

def proxy_user
  @proxy_user
end

#secureObject (readonly) Also known as: secure?

Returns the value of attribute secure.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

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.



71
72
73
# File 'lib/hydraulic_brake/sender.rb', line 71

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



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/hydraulic_brake/sender.rb', line 35

def send_to_airbrake(notice)
  data = notice.respond_to?(:to_xml) ? notice.to_xml : notice
  http = setup_http_connection

  response = begin
               http.post(url.path, 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 => "[HydraulicBrake::Sender#send_to_airbrake] Cannot send notification. Error: #{e.class}" +
    " - #{e.message}\nBacktrace:\n#{e.backtrace.join("\n\t")}"

  nil
end