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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/z2monitor/api.rb', line 45
def call_api(message)
message['id'] = rand 65536 if message['id'].nil?
message['jsonrpc'] = '2.0'
if @token.nil? && message['method'] != 'user.login'
puts "[ERROR] Authorisation Token not initialised. message => #{message}"
raise NotAuthorisedError.new()
else
message['auth'] = @token if message['method'] != 'user.login'
end
json_message = JSON.generate(message)
connection = Net::HTTP.new(@server.host, @server.port)
connection.read_timeout = 300
if @server.scheme == 'https' then
connection.use_ssl = true
connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
request = Net::HTTP::Post.new(@server.request_uri)
request.add_field('Content-Type', 'application/json-rpc')
request.body = json_message
begin
puts "[INFO] Attempting to send request => #{request}, request body => #{request.body}" if @verbose
response = connection.request(request)
rescue ::SocketError => e
puts "[ERROR] Could not complete request: SocketError => #{e.message}" if @verbose
raise SocketError.new(e.message)
rescue Timeout::Error => e
puts "[ERROR] Timed out from Zabbix master. Is it being funky? => #{e.message}"
exit
end
puts "[INFO] Received response: #{response}" if @verbose
raise ResponseCodeError.new("[ERROR] Did not receive 200 OK, but HTTP code #{response.code}") if response.code != "200"
parsed_response = JSON.parse(response.body)
if error = parsed_response['error']
raise ResponseError.new("[ERROR] Received error response: code => #{error['code'].to_s}; message => #{error['message']}; data => #{error['data']}")
end
return parsed_response['result']
end
|