Class: Pulse::Sender

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

Overview

Sends out the notice to Pulse

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/pulse/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/pulse/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/pulse/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/pulse/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/pulse/sender.rb', line 71

def port
  @port
end

#protocolObject (readonly)

Returns the value of attribute protocol.



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

def protocol
  @protocol
end

#proxy_hostObject (readonly)

Returns the value of attribute proxy_host.



71
72
73
# File 'lib/pulse/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/pulse/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/pulse/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/pulse/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/pulse/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/pulse/sender.rb', line 71

def use_system_ssl_cert_chain
  @use_system_ssl_cert_chain
end

Instance Method Details

#send_to_pulse(notice) ⇒ Object

Sends the notice data off to Pulse for processing.

Parameters:



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/pulse/sender.rb', line 35

def send_to_pulse(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 Pulse 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 => "[Pulse::Sender#send_to_pulse] Cannot send notification. Error: #{e.class}" +
    " - #{e.message}\nBacktrace:\n#{e.backtrace.join("\n\t")}"

  nil
end