Class: Munin::Connection
- Inherits:
-
Object
- Object
- Munin::Connection
- Includes:
- Parser
- Defined in:
- lib/munin-ruby/connection.rb
Constant Summary collapse
- DEFAULT_OPTIONS =
{:timeout => Munin::TIMEOUT_TIME}
Instance Attribute Summary collapse
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
Instance Method Summary collapse
-
#close(reconnect = true) ⇒ Object
Close connection.
-
#connected? ⇒ Boolean
Returns true if socket is connected.
-
#initialize(host = '127.0.0.1', port = 4949, reconnect = true, options = {}) ⇒ Connection
constructor
Initialize a new connection to munin-node server.
-
#open ⇒ Object
Establish connection to the server.
-
#read_line ⇒ Object
Reads a single line from socket.
-
#read_packet ⇒ Object
Reads a packet of data until ‘.’ reached.
-
#send_data(str) ⇒ Object
Send a string of data followed by a newline symbol.
Methods included from Parser
#parse_config, #parse_config_args, #parse_error, #parse_fetch, #parse_version, #process_data
Constructor Details
#initialize(host = '127.0.0.1', port = 4949, reconnect = true, options = {}) ⇒ Connection
Initialize a new connection to munin-node server
host - Server host (default: 127.0.0.1) port - Server port (default: 4949) options - A hash containing different options
:timeout => A timeout in seconds to be used in the connection
16 17 18 19 20 21 22 23 |
# File 'lib/munin-ruby/connection.rb', line 16 def initialize(host='127.0.0.1', port=4949, reconnect=true, = {}) @host = host @port = port @socket = nil @connected = false @reconnect = reconnect @options = DEFAULT_OPTIONS.merge() end |
Instance Attribute Details
#host ⇒ Object (readonly)
Returns the value of attribute host.
7 8 9 |
# File 'lib/munin-ruby/connection.rb', line 7 def host @host end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
7 8 9 |
# File 'lib/munin-ruby/connection.rb', line 7 def port @port end |
Instance Method Details
#close(reconnect = true) ⇒ Object
Close connection
59 60 61 62 63 64 65 66 |
# File 'lib/munin-ruby/connection.rb', line 59 def close(reconnect=true) if connected? @socket.flush @socket.shutdown @connected = false @reconnect = reconnect end end |
#connected? ⇒ Boolean
Returns true if socket is connected
27 28 29 |
# File 'lib/munin-ruby/connection.rb', line 27 def connected? @connected == true end |
#open ⇒ Object
Establish connection to the server
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/munin-ruby/connection.rb', line 33 def open begin begin with_timeout do @socket = TCPSocket.new(@host, @port) @socket.sync = true welcome = @socket.gets unless welcome =~ /^# munin node at/ raise Munin::AccessDenied end @connected = true end rescue Timeout::Error raise Munin::ConnectionError, "Timed out talking to #{@host}" end rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::ECONNRESET => ex raise Munin::ConnectionError, ex. rescue EOFError raise Munin::AccessDenied rescue Exception => ex raise Munin::ConnectionError, ex. end end |
#read_line ⇒ Object
Reads a single line from socket
88 89 90 91 92 93 94 95 96 |
# File 'lib/munin-ruby/connection.rb', line 88 def read_line begin with_timeout { @socket.gets.to_s.strip } rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError => ex raise Munin::ConnectionError, ex. rescue Timeout::Error raise Munin::ConnectionError, "Timed out reading from #{@host}." end end |
#read_packet ⇒ Object
Reads a packet of data until ‘.’ reached
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/munin-ruby/connection.rb', line 100 def read_packet begin with_timeout do lines = [] while(str = @socket.readline.to_s) do break if str.strip == '.' lines << str.strip end parse_error(lines) lines end rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError => ex raise Munin::ConnectionError, ex. rescue Timeout::Error raise Munin::ConnectionError, "Timed out reading from #{@host}." end end |
#send_data(str) ⇒ Object
Send a string of data followed by a newline symbol
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/munin-ruby/connection.rb', line 70 def send_data(str) if !connected? if !@socket.nil? && @reconnect == false raise Munin::ConnectionError, "Not connected." else open end end begin with_timeout { @socket.puts("#{str.strip}\n") } rescue Timeout::Error raise Munin::ConnectionError, "Timed out on #{@host} trying to send." end end |