class Grafana::WebRequest
This class standardizes all webcalls. Key functionality is to properly support HTTPS calls as a base functionality.
Attributes
ssl_cert[RW]
options[RW]
relative_url[RW]
Public Class Methods
new(base_url, options = {})
click to toggle source
Initializes a specific HTTP request.
Default (can be overridden, by specifying the options Hash):
accept: 'application/json' request: Net::HTTP::Get content_type: 'application/json'
@param base_url [String] URL which shall be queried @param options [Hash] options, which shall be merged to the request. Also allows `logger
` option
# File lib/grafana/webrequest.rb, line 23 def initialize(base_url, options = {}) @base_url = base_url default_options = { accept: 'application/json', request: Net::HTTP::Get, content_type: 'application/json' } @options = default_options.merge(options.reject { |k, _v| k == :logger && k == :relative_url }) @relative_url = options[:relative_url] @logger = options[:logger] || Logger.new(nil) end
Public Instance Methods
execute(timeout = nil)
click to toggle source
Executes the HTTP request
@param timeout [Integer] number of seconds to wait, before the http request is cancelled, defaults to 60 seconds @return [Response] HTTP response object
# File lib/grafana/webrequest.rb, line 35 def execute(timeout = nil) timeout ||= 60 uri = URI.parse("#{@base_url}#{@relative_url}") @http = Net::HTTP.new(uri.host, uri.port) configure_ssl if @base_url =~ /^https/ @http.read_timeout = timeout.to_i request = @options[:request].new(uri.request_uri) request['Accept'] = @options[:accept] if @options[:accept] request['Content-Type'] = @options[:content_type] if @options[:content_type] request['Authorization'] = @options[:authorization] if @options[:authorization] request.body = @options[:body] @logger.debug("Requesting #{uri} with '#{@options[:body]}' and timeout '#{timeout}'") response = @http.request(request) @logger.debug("Received response #{response}") response end
Private Instance Methods
configure_ssl()
click to toggle source
# File lib/grafana/webrequest.rb, line 59 def configure_ssl @http.use_ssl = true @http.verify_mode = OpenSSL::SSL::VERIFY_PEER if self.class.ssl_cert && !File.file?(self.class.ssl_cert) @logger.warn('SSL certificate file does not exist.') elsif self.class.ssl_cert @http.cert_store = OpenSSL::X509::Store.new @http.cert_store.set_default_paths @http.cert_store.add_file(self.class.ssl_cert) end end