lib/honeybadger/util/http.rb in honeybadger-5.0.2 vs lib/honeybadger/util/http.rb in honeybadger-5.1.0

- old
+ new

@@ -1,92 +1,92 @@ -require 'forwardable' -require 'net/http' -require 'json' -require 'zlib' -require 'openssl' - -require 'honeybadger/version' -require 'honeybadger/logging' - -module Honeybadger - module Util - class HTTP - extend Forwardable - - include Honeybadger::Logging::Helper - - HEADERS = { - 'Content-type'.freeze => 'application/json'.freeze, - 'Content-Encoding'.freeze => 'deflate'.freeze, - 'Accept'.freeze => 'text/json, application/json'.freeze, - 'User-Agent'.freeze => "HB-Ruby #{VERSION}; #{RUBY_VERSION}; #{RUBY_PLATFORM}".freeze - }.freeze - - ERRORS = [Timeout::Error, - Errno::EINVAL, - Errno::ECONNRESET, - Errno::ECONNREFUSED, - Errno::ENETUNREACH, - EOFError, - Net::HTTPBadResponse, - Net::HTTPHeaderSyntaxError, - Net::ProtocolError, - OpenSSL::SSL::SSLError, - SocketError].freeze - - def initialize(config) - @config = config - end - - def get(endpoint) - response = http_connection.get(endpoint) - debug { sprintf("http method=GET path=%s code=%d", endpoint.dump, response.code) } - response - end - - def post(endpoint, payload, headers = nil) - response = http_connection.post(endpoint, compress(payload.to_json), http_headers(headers)) - debug { sprintf("http method=POST path=%s code=%d", endpoint.dump, response.code) } - response - end - - private - - attr_reader :config - - def http_connection - setup_http_connection - end - - def http_headers(headers = nil) - {}.tap do |hash| - hash.merge!(HEADERS) - hash.merge!({'X-API-Key' => config[:api_key].to_s}) - hash.merge!(headers) if headers - end - end - - def setup_http_connection - http_class = Net::HTTP::Proxy(config[:'connection.proxy_host'], config[:'connection.proxy_port'], config[:'connection.proxy_user'], config[:'connection.proxy_pass']) - http = http_class.new(config[:'connection.host'], config.connection_port) - - http.read_timeout = config[:'connection.http_read_timeout'] - http.open_timeout = config[:'connection.http_open_timeout'] - - if config[:'connection.secure'] - http.use_ssl = true - - http.ca_file = config.ca_bundle_path - http.verify_mode = OpenSSL::SSL::VERIFY_PEER - else - http.use_ssl = false - end - - http - end - - def compress(string, level = Zlib::DEFAULT_COMPRESSION) - Zlib::Deflate.deflate(string, level) - end - end - end -end +require 'forwardable' +require 'net/http' +require 'json' +require 'zlib' +require 'openssl' + +require 'honeybadger/version' +require 'honeybadger/logging' + +module Honeybadger + module Util + class HTTP + extend Forwardable + + include Honeybadger::Logging::Helper + + HEADERS = { + 'Content-type'.freeze => 'application/json'.freeze, + 'Content-Encoding'.freeze => 'deflate'.freeze, + 'Accept'.freeze => 'text/json, application/json'.freeze, + 'User-Agent'.freeze => "HB-Ruby #{VERSION}; #{RUBY_VERSION}; #{RUBY_PLATFORM}".freeze + }.freeze + + ERRORS = [Timeout::Error, + Errno::EINVAL, + Errno::ECONNRESET, + Errno::ECONNREFUSED, + Errno::ENETUNREACH, + EOFError, + Net::HTTPBadResponse, + Net::HTTPHeaderSyntaxError, + Net::ProtocolError, + OpenSSL::SSL::SSLError, + SocketError].freeze + + def initialize(config) + @config = config + end + + def get(endpoint) + response = http_connection.get(endpoint) + debug { sprintf("http method=GET path=%s code=%d", endpoint.dump, response.code) } + response + end + + def post(endpoint, payload, headers = nil) + response = http_connection.post(endpoint, compress(payload.to_json), http_headers(headers)) + debug { sprintf("http method=POST path=%s code=%d", endpoint.dump, response.code) } + response + end + + private + + attr_reader :config + + def http_connection + setup_http_connection + end + + def http_headers(headers = nil) + {}.tap do |hash| + hash.merge!(HEADERS) + hash.merge!({'X-API-Key' => config[:api_key].to_s}) + hash.merge!(headers) if headers + end + end + + def setup_http_connection + http_class = Net::HTTP::Proxy(config[:'connection.proxy_host'], config[:'connection.proxy_port'], config[:'connection.proxy_user'], config[:'connection.proxy_pass']) + http = http_class.new(config[:'connection.host'], config.connection_port) + + http.read_timeout = config[:'connection.http_read_timeout'] + http.open_timeout = config[:'connection.http_open_timeout'] + + if config[:'connection.secure'] + http.use_ssl = true + + http.ca_file = config.ca_bundle_path + http.verify_mode = OpenSSL::SSL::VERIFY_PEER + else + http.use_ssl = false + end + + http + end + + def compress(string, level = Zlib::DEFAULT_COMPRESSION) + Zlib::Deflate.deflate(string, level) + end + end + end +end