class SwhdApi::Manager
main api helper class
Attributes
logger[RW]
session_id[R]
url[R]
Public Class Methods
new(url = nil, options = {})
click to toggle source
# File lib/swhd_api.rb, line 13 def initialize(url = nil, options = {}) raise SwhdApi::MissingUrl if url.nil? || url.empty? # TODO: strip trailing slash if any @url = url @options = options end
Public Instance Methods
connect(credentials = {})
click to toggle source
# File lib/swhd_api.rb, line 20 def connect(credentials = {}) if credentials.key?(:apikey) # HACK: remove once SolarWinds get the sessionKey working as documented @session_id = credentials[:apikey] return elsif credentials.key?(:username) && credentials.key?(:password) # use username and password # @session_id = "2" elsif credentials.key?(:techkey) # use tech's key # @session_id = "3" else raise MissingCredentials, ':apikey or :techkey or :username and :password' end results = request('Session', :get, credentials) # { "apiKey" => credentials[:apikey] }) @session_id = results['sessionKey'] end
fetch(resource, params = {})
click to toggle source
fetch all pages of results
# File lib/swhd_api.rb, line 84 def fetch(resource, params = {}) method = :get page = 1 params[:page] = page partial = request(resource, method, params) while partial.is_a?(Array) && !partial.empty? results ||= [] results += partial page += 1 params[:page] = page partial = request(resource, method, params) end results = partial unless partial.nil? || partial.empty? results end
request(resource, method, params = {}, body = {})
click to toggle source
# File lib/swhd_api.rb, line 40 def request(resource, method, params = {}, body = {}) raise NoSession if @session_id.nil? && resource != 'Session' raise MissingResource if resource.nil? || resource.empty? endpoint = "#{@url}/#{resource}" # TODO: log a call to solarwinds and find out why no one can do this (other users on their forums) # HACK: for now, use apikey instead of session key params['apiKey'] = @session_id payload = @options.dup payload[:params] = params.reject { |_k, v| v.nil? } response = case method when :post payload[:body] = body.to_json Typhoeus::Request.post(endpoint, payload) when :get Typhoeus::Request.get(endpoint, payload) when :put payload[:body] = body.to_json Typhoeus::Request.put(endpoint, payload) when :delete Typhoeus::Request.delete(endpoint, payload) end if response.timed_out? raise TimedOut, response.body elsif response.code == 0 raise NoResponse, response.body elsif response.return_code == :partial_file raise PartialFile, response.body elsif !response.success? raise AuthenticationFailure, response.return_message if response.code == 401 raise RequestFailed, "Response Code: #{response.code}\n Return Code: #{response.return_code} - #{response.return_message}\n #{response.body}" end @logger.debug response.body unless @logger.nil? JSON.parse(response.body) end