Class: Zabby::Connection
- Inherits:
-
Object
- Object
- Zabby::Connection
- Defined in:
- lib/zabby/connection.rb
Constant Summary collapse
- JSONRPC_SCRIPT =
Name of the Zabbix RPC script
"/api_jsonrpc.php"
Instance Attribute Summary collapse
-
#auth ⇒ Object
readonly
Returns the value of attribute auth.
-
#password ⇒ Object
readonly
Returns the value of attribute password.
-
#proxy_host ⇒ Object
readonly
Returns the value of attribute proxy_host.
-
#proxy_password ⇒ Object
readonly
Returns the value of attribute proxy_password.
-
#proxy_user ⇒ Object
readonly
Returns the value of attribute proxy_user.
-
#request_id ⇒ Object
readonly
Returns the value of attribute request_id.
-
#request_path ⇒ Object
readonly
Returns the value of attribute request_path.
-
#uri ⇒ Object
readonly
Returns the value of attribute uri.
-
#user ⇒ Object
readonly
Returns the value of attribute user.
Instance Method Summary collapse
- #authenticate ⇒ Authentication key
-
#format_exception(zabbix_response) ⇒ Object
Raise a Zabby exception.
- #format_message(element, action, params = {}) ⇒ Object
-
#http ⇒ Object
Prepare http object.
-
#initialize ⇒ Connection
constructor
A new instance of Connection.
- #logged_in? ⇒ Boolean
- #login(config) ⇒ Object
- #logout ⇒ Object
- #next_request_id ⇒ Object
-
#perform_request(element, action, params) ⇒ Object
Perform an authenticated request.
-
#query_zabbix_rpc(message) ⇒ Object
Query the Zabbix Web Services and extract the JSON response.
-
#request(message) ⇒ Net::HTTP::Post
Prepare a JSON request HTTP Post format.
- #reset ⇒ Object
Constructor Details
#initialize ⇒ Connection
Returns a new instance of Connection.
15 16 17 |
# File 'lib/zabby/connection.rb', line 15 def initialize reset end |
Instance Attribute Details
#auth ⇒ Object (readonly)
Returns the value of attribute auth.
12 13 14 |
# File 'lib/zabby/connection.rb', line 12 def auth @auth end |
#password ⇒ Object (readonly)
Returns the value of attribute password.
11 12 13 |
# File 'lib/zabby/connection.rb', line 11 def password @password end |
#proxy_host ⇒ Object (readonly)
Returns the value of attribute proxy_host.
11 12 13 |
# File 'lib/zabby/connection.rb', line 11 def proxy_host @proxy_host end |
#proxy_password ⇒ Object (readonly)
Returns the value of attribute proxy_password.
11 12 13 |
# File 'lib/zabby/connection.rb', line 11 def proxy_password @proxy_password end |
#proxy_user ⇒ Object (readonly)
Returns the value of attribute proxy_user.
11 12 13 |
# File 'lib/zabby/connection.rb', line 11 def proxy_user @proxy_user end |
#request_id ⇒ Object (readonly)
Returns the value of attribute request_id.
13 14 15 |
# File 'lib/zabby/connection.rb', line 13 def request_id @request_id end |
#request_path ⇒ Object (readonly)
Returns the value of attribute request_path.
11 12 13 |
# File 'lib/zabby/connection.rb', line 11 def request_path @request_path end |
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
11 12 13 |
# File 'lib/zabby/connection.rb', line 11 def uri @uri end |
#user ⇒ Object (readonly)
Returns the value of attribute user.
11 12 13 |
# File 'lib/zabby/connection.rb', line 11 def user @user end |
Instance Method Details
#authenticate ⇒ Authentication key
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/zabby/connection.rb', line 53 def authenticate = ('user', 'login', 'user' => @user, 'password' => @password) @auth = query_zabbix_rpc() rescue Zabby::APIError # Older Zabbix 1.8.x used a different authentication method. You have to guess... = ('user', 'authenticate', 'user' => @user, 'password' => @password) @auth = query_zabbix_rpc() rescue Exception => e @auth = nil raise e end |
#format_exception(zabbix_response) ⇒ Object
Raise a Zabby exception
116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/zabby/connection.rb', line 116 def format_exception(zabbix_response) error = zabbix_response['error'] = error['message'] error_data = error['data'] error_code = error['code'] if error_data == "Login name or password is incorrect" raise AuthenticationError.new(, error_code, error_data) else raise APIError.new(, error_code, error_data) end end |
#format_message(element, action, params = {}) ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/zabby/connection.rb', line 69 def (element, action, params = {}) { 'jsonrpc' => '2.0', 'id' => next_request_id, 'method' => "#{element}.#{action}", 'params' => params, 'auth' => @auth } end |
#http ⇒ Object
Prepare http object
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/zabby/connection.rb', line 99 def http if @proxy_host http = Net::HTTP::Proxy(@proxy_host.host, @proxy_host.port, @proxy_user, @proxy_password).new(@uri.host, @uri.port) else http = Net::HTTP.new(@uri.host, @uri.port) end if @uri.scheme == "https" http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE end http end |
#logged_in? ⇒ Boolean
44 45 46 |
# File 'lib/zabby/connection.rb', line 44 def logged_in? !@auth.nil? end |
#login(config) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/zabby/connection.rb', line 25 def login(config) return @auth if @auth @uri = URI.parse(config.server) @user = config.user @password = config.password if config.proxy_host @proxy_host = URI.parse(config.proxy_host) @proxy_user = config.proxy_user @proxy_password = config.proxy_password end @request_path = @uri.path[-4,4] == '.php' ? @uri.path : @uri.path + JSONRPC_SCRIPT authenticate end |
#logout ⇒ Object
40 41 42 |
# File 'lib/zabby/connection.rb', line 40 def logout reset end |
#next_request_id ⇒ Object
48 49 50 |
# File 'lib/zabby/connection.rb', line 48 def next_request_id @request_id += 1 end |
#perform_request(element, action, params) ⇒ Object
Perform an authenticated request
81 82 83 84 85 86 |
# File 'lib/zabby/connection.rb', line 81 def perform_request(element, action, params) raise AuthenticationError.new("Not logged in") if !logged_in? = (element, action, params) query_zabbix_rpc() end |
#query_zabbix_rpc(message) ⇒ Object
Query the Zabbix Web Services and extract the JSON response.
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/zabby/connection.rb', line 133 def query_zabbix_rpc() # Send the request! http_response = http.request(request()) # Check for HTTP errors. if http_response.code != "200" raise ResponseCodeError.new("Error from #{@uri}", http_response.code, http_response.body) end zabbix_response = JSON.parse(http_response.body) # Check for Zabbix errors. if zabbix_response['error'] format_exception(zabbix_response) end zabbix_response['result'] end |
#request(message) ⇒ Net::HTTP::Post
Prepare a JSON request HTTP Post format
91 92 93 94 95 96 |
# File 'lib/zabby/connection.rb', line 91 def request() req = Net::HTTP::Post.new(@request_path) req.add_field('Content-Type', 'application/json-rpc') req.body = JSON.generate() req end |
#reset ⇒ Object
19 20 21 22 23 |
# File 'lib/zabby/connection.rb', line 19 def reset @uri = @user = @password = @proxy_host = @proxy_user = @proxy_password = nil @request_id = 0 @auth = nil end |