module DomoscioViz
Constants
- VERSION
Attributes
Public Class Methods
# File lib/domoscio_viz.rb, line 36 def self.api_uri(url='') URI(configuration.root_url + url) end
# File lib/domoscio_viz.rb, line 31 def self.configure self.configuration ||= Configuration.new yield configuration end
-
method
: HTTP method; lowercase symbol, e.g. :get, :post etc. -
url
: the part afterConfiguration#root_url
-
params
: hash; entity data for creation, update etc.; will dump it byJSON
and assign to Net::HTTPRequest#body
Performs HTTP requests to Adaptive Engine On token issues, will try once to get a new token then will output a DomoscioViz::ReponseError with details
Raises DomoscioViz::ResponseError
on Adaptive Error
Status Raises DomoscioViz::ProcessingError
on Internal Error
# File lib/domoscio_viz.rb, line 51 def self.request(method, url, params={}) store_tokens, headers = request_headers params.merge!({'per_page': 2000}) unless params[:per_page] uri = api_uri(url) response = DomoscioViz.send_request(uri, method, params, headers) return response if response.kind_of? DomoscioViz::ProcessingError begin raise_http_failure(uri, response, params) data = DomoscioViz::JSON.load(response.body.nil? ? '' : response.body) DomoscioViz::AuthorizationToken::Manager.storage.store({access_token: response['Accesstoken'], refresh_token: response['Refreshtoken']}) if store_tokens rescue MultiJson::LoadError => exception data = ProcessingError.new(uri, 500, exception, response.body, params) rescue ResponseError => exception data = exception end data end
Private Class Methods
# File lib/domoscio_viz.rb, line 130 def self.get_uname `uname -a 2>/dev/null`.strip if RUBY_PLATFORM =~ /linux|darwin/i rescue Errno::ENOMEM 'uname lookup failed' end
Actual HTTP call is performed here
# File lib/domoscio_viz.rb, line 102 def self.perform_call(uri, method, params, headers) Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http| req = Net::HTTP::const_get(method.capitalize).new(uri.request_uri, headers) req.body = DomoscioRails::JSON.dump(params) http.request req end end
This helper will check the response status and build the correcponding DomoscioRails::ResponseError
# File lib/domoscio_viz.rb, line 89 def self.raise_http_failure(uri, response, params) unless response.kind_of? Net::HTTPSuccess if response.blank? raise ResponseError.new(uri, 500, {error: {status: 500, message: 'VisualizationEngine not available'}}, {}, params) else body = DomoscioViz::JSON.load((response.body.nil? ? '' : response.body), :symbolize_keys => true) raise ResponseError.new(uri, response.code.to_i, body, response.body, params) end end end
Process the token loading and analyze will return the processed headers and a token store flag
# File lib/domoscio_viz.rb, line 139 def self.request_headers begin auth_token = DomoscioViz::AuthorizationToken::Manager.get_token if auth_token && auth_token[:access_token] && auth_token[:refresh_token] [false, send_current_tokens(auth_token)] else [true, request_new_tokens] end rescue SyntaxError, StandardError [true, request_new_tokens] end end
If we cant find tokens of they are corrupted / expired, then we set headers to request new ones
# File lib/domoscio_viz.rb, line 165 def self.request_new_tokens { 'user_agent' => "#{DomoscioViz.user_agent}", 'ClientId' => "#{DomoscioViz.configuration.client_id}", 'Authorization' => "Token token=#{DomoscioViz.configuration.client_passphrase}", 'Content-Type' => 'application/json' } end
This method is called when AdaptiveEngine returns tokens errors Action on those errors is to retry and request new tokens, those new token are then stored
# File lib/domoscio_viz.rb, line 112 def self.retry_call_and_store_tokens(uri, method, params, headers) headers = request_new_tokens response = perform_call(uri, method, params, headers) DomoscioViz::AuthorizationToken::Manager.storage.store({access_token: response['Accesstoken'], refresh_token: response['Refreshtoken']}) response end
If stored token successfully loaded we build the header with them
# File lib/domoscio_viz.rb, line 154 def self.send_current_tokens(auth_token) { 'user_agent' => "#{DomoscioViz.user_agent}", 'ClientId' => "#{DomoscioViz.configuration.client_id}", 'AccessToken' => "#{auth_token[:access_token]}", 'RefreshToken' => "#{auth_token[:refresh_token]}", 'Content-Type' => 'application/json' } end
This function catches usual Http errors during calls
# File lib/domoscio_viz.rb, line 77 def self.send_request(uri, method, params, headers) begin response = perform_call(uri, method, params, headers) response = retry_call_and_store_tokens(uri, method, params, headers) if ['401','403'].include? response.code response rescue Timeout::Error, Errno::EINVAL, HTTP::ConnectionError, Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => exception ProcessingError.new(uri, 500, exception, response, params) end end
# File lib/domoscio_viz.rb, line 119 def self.user_agent @uname ||= get_uname { bindings_version: DomoscioViz::VERSION, lang: 'ruby', lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})", platform: RUBY_PLATFORM, uname: @uname } end