class BrocadeAPIClient::JSONRestClient

Class for talking to API

Constants

ACCEPT_TYPE
CONTENT_TYPE
USER_AGENT

Attributes

api_url[RW]
http_log_debug[RW]
log_level[RW]
logger[RW]
secure[RW]
session_key[RW]
timeout[RW]

Public Class Methods

new(api_url, secure = false, http_log_debug = false, client_logger = nil) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 26
def initialize(api_url, secure = false, http_log_debug = false,
               client_logger = nil)
  @api_url = api_url
  @secure = secure
  @http_log_debug = http_log_debug
  @session_key = nil
  @client_logger = client_logger
  @httparty_log_level = :info
  @httparty_log_format = :logstash
  set_debug_flag
end

Public Instance Methods

authenticate(user, password, _optional = nil) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 46
def authenticate(user, password, _optional = nil)
  @username = user
  @password = password
  @session_key = nil
  auth_url = '/login'
  headers, body = post(auth_url)
  @session_key = headers['WStoken']
  JSON.parse(body)
rescue StandardError
  raise BrocadeAPIClient::ConnectionError
end
delete(url, **kwargs) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 96
def delete(url, **kwargs)
  headers, _payload = headers_payload(kwargs)
  response = HTTParty.delete(api_url + url,
                             headers: headers,
                             verify: false, logger: @client_logger,
                             log_level: @httparty_log_level,
                             log_format: @httparty_log_format)
  validate_answer(response)
end
get(url, **kwargs) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 63
def get(url, **kwargs)
  headers, _payload = headers_payload(kwargs)
  response = HTTParty.get(api_url + url,
                          headers: headers,
                          verify: false, logger: @client_logger,
                          log_level: @httparty_log_level,
                          log_format: @client_logger)
  validate_answer(response)
end
headers_payload(**kwargs) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 128
def headers_payload(**kwargs)
  kwargs['headers'] = kwargs.fetch('headers', {})
  if session_key
    kwargs['headers'] = kwargs.fetch('headers', {})
    kwargs['headers'][SESSION_COOKIE_NAME] = @session_key
  else
    kwargs['headers']['WSUsername'] = @username
    kwargs['headers']['WSPassword'] = @password
  end
  kwargs['headers']['User-Agent'] = USER_AGENT
  kwargs['headers']['Accept'] = ACCEPT_TYPE
  if kwargs.key?(:body)
    kwargs['headers']['Content-Type'] = CONTENT_TYPE
    kwargs[:body] = kwargs[:body].to_json
    payload = kwargs[:body]
  else
    payload = nil
  end
  [kwargs['headers'], payload]
end
post(url, **kwargs) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 73
def post(url, **kwargs)
  headers, payload = headers_payload(kwargs)
  response = HTTParty.post(api_url + url,
                           headers: headers,
                           body: payload,
                           verify: false,
                           logger: @client_logger,
                           log_level: @httparty_log_level,
                           log_format: @httparty_log_format)
  validate_answer(response)
end
put(url, **kwargs) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 85
def put(url, **kwargs)
  headers, payload = headers_payload(kwargs)
  response = HTTParty.put(api_url + url,
                          headers: headers,
                          body: payload,
                          verify: false, logger: @client_logger,
                          log_level: @httparty_log_level,
                          log_format: @httparty_log_format)
  validate_answer(response)
end
set_debug_flag() click to toggle source

This turns on/off http request/response debugging output to console

# File lib/BrocadeAPIClient/httpclient.rb, line 39
def set_debug_flag
  if @http_log_debug
    @httparty_log_level = :debug
    @httparty_log_format = :curl
  end
end
unauthenticate() click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 120
def unauthenticate
  # delete the session on the brocade network advisor
  unless @session_key.nil?
    post('/logout')
    @session_key = nil
  end
end
url(api_url) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 58
def url(api_url)
  # should be http://<Server:Port>/rest
  @api_url = api_url.chomp('/')
end
validate_answer(response) click to toggle source
# File lib/BrocadeAPIClient/httpclient.rb, line 106
def validate_answer(response)
  headers = response.headers
  body = response.parsed_response
  code_array = %w[200 204]
  unless code_array.include?(response.code.to_s)
    if body.nil?
      exception = BrocadeAPIClient.exception_from_response(response, body)
      @client_logger.error(exception)
      raise exception
    end
  end
  [headers, body]
end