Class: Rubix::Connection

Inherits:
Object
  • Object
show all
Includes:
Logs
Defined in:
lib/rubix/connection.rb

Overview

Wraps and abstracts the process of connecting to a Zabbix API.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logs

#debug, #error, #fatal, #info, #warn

Constructor Details

#initialize(uri_or_string, username = nil, password = nil) ⇒ Connection

Set up a connection to a Zabbix API.

The uri_or_string can be either a string or a URI object.

The username and password provided must correspond to an existing Zabbix account with API access enabled.

Parameters:

  • uri_or_string (URI, String)

    the address of the Zabbix API server to connect to

  • username (String) (defaults to: nil)

    the username of an existing Zabbix API User account with API access

  • password (String) (defaults to: nil)

    the password for this account



47
48
49
50
51
52
# File 'lib/rubix/connection.rb', line 47

def initialize uri_or_string, username=nil, password=nil
  self.uri    = uri_or_string
  @username   = username || uri.user
  @password   = password || uri.password
  @request_id = 0
end

Instance Attribute Details

#authString (readonly)

API for this session.

Returns:

  • (String)

    the authentication token provided by the Zabbix



22
23
24
# File 'lib/rubix/connection.rb', line 22

def auth
  @auth
end

#last_responseRubix::Response (readonly)

Returns the last response from the Zabbix API – useful for logging purposes.

Returns:

  • (Rubix::Response)

    the last response from the Zabbix API – useful for logging purposes



34
35
36
# File 'lib/rubix/connection.rb', line 34

def last_response
  @last_response
end

#passwordString (readonly)

Returns the password of the Zabbix account used to authenticate.

Returns:

  • (String)

    the password of the Zabbix account used to authenticate



31
32
33
# File 'lib/rubix/connection.rb', line 31

def password
  @password
end

#request_idFixnum (readonly)

Returns the ID of the next request that will be sent.

Returns:

  • (Fixnum)

    the ID of the next request that will be sent.



25
26
27
# File 'lib/rubix/connection.rb', line 25

def request_id
  @request_id
end

#serverNet::HTTP (readonly)

Returns the HTTP server backing the Zabbix API.

Returns:

  • (Net::HTTP)

    the HTTP server backing the Zabbix API.



18
19
20
# File 'lib/rubix/connection.rb', line 18

def server
  @server
end

#uriURI

Returns The URI for the Zabbix API.

Returns:

  • (URI)

    The URI for the Zabbix API.



15
16
17
# File 'lib/rubix/connection.rb', line 15

def uri
  @uri
end

#usernameString (readonly)

Returns the username of the Zabbix account used to authenticate.

Returns:

  • (String)

    the username of the Zabbix account used to authenticate



28
29
30
# File 'lib/rubix/connection.rb', line 28

def username
  @username
end

Instance Method Details

#authorize!Object

Force the connection to execute an authorization request and renew (or set) the authorization token.



88
89
90
91
92
93
# File 'lib/rubix/connection.rb', line 88

def authorize!
  response = till_response { send_raw_request(authorization_params) }
  raise AuthenticationError.new("Could not authenticate with Zabbix API at #{uri}: #{response.error_message}") if response.error?
  raise AuthenticationError.new("Malformed response from Zabbix API: #{response.body}") unless response.string?
  @auth = response.result
end

#authorized?Boolean

Has this connection already been authorized and provided with a authorization token from the Zabbix API?

Returns:

  • (Boolean)


82
83
84
# File 'lib/rubix/connection.rb', line 82

def authorized?
  !auth.nil?
end

#request(method, params) ⇒ Object

Send a request to the Zabbix API. Will return a Rubix::Response object.

Documentation on what methods and parameters are available can be found in the Zabbix API documentation

Rubix.connection.request 'host.get', 'filter' => { 'host' => 'foobar' }

Parameters:

  • method (String)

    the name of the Zabbix API method

  • params (Hash, Array)

    parameters for the method call



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/rubix/connection.rb', line 66

def request method, params
  authorize! unless authorized?
  till_response do
    raw_params = {
      :jsonrpc => "2.0",
      :id      => request_id,
      :method  => method,
      :params  => params,
      :auth    => auth
    }
    send_raw_request(raw_params)
  end
end