Class: NewRelic::Agent::HTTPClients::EthonHTTPRequest

Inherits:
AbstractRequest show all
Defined in:
lib/new_relic/agent/http_clients/ethon_wrappers.rb

Constant Summary collapse

DEFAULT_ACTION =
'GET'
DEFAULT_HOST =
'UNKNOWN_HOST'
ETHON =
'Ethon'

Constants inherited from AbstractRequest

AbstractRequest::COLON, AbstractRequest::LHOST, AbstractRequest::UHOST

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(easy) ⇒ EthonHTTPRequest

Returns a new instance of EthonHTTPRequest.



46
47
48
49
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 46

def initialize(easy)
  @easy = easy
  @uri = uri_from_easy
end

Instance Attribute Details

#uriObject (readonly)

Returns the value of attribute uri.



40
41
42
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 40

def uri
  @uri
end

Instance Method Details

#[](key) ⇒ Object



103
104
105
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 103

def [](key)
  headers[key]
end

#[]=(key, value) ⇒ Object



86
87
88
89
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 86

def []=(key, value)
  headers[key] = value
  @easy.headers = headers
end

#action_instance_varObject



82
83
84
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 82

def action_instance_var
  NewRelic::Agent::Instrumentation::Ethon::Easy::ACTION_INSTANCE_VAR
end

#headersObject



91
92
93
94
95
96
97
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 91

def headers
  @headers ||= if @easy.instance_variable_defined?(headers_instance_var)
    @easy.instance_variable_get(headers_instance_var)
  else
    {}
  end
end

#headers_instance_varObject



99
100
101
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 99

def headers_instance_var
  NewRelic::Agent::Instrumentation::Ethon::Easy::HEADERS_INSTANCE_VAR
end

#hostObject



72
73
74
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 72

def host
  host_from_header || uri.host&.downcase || DEFAULT_HOST
end

#host_from_headerObject



55
56
57
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 55

def host_from_header
  self[LHOST] || self[UHOST]
end

#methodObject



76
77
78
79
80
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 76

def method
  return DEFAULT_ACTION unless @easy.instance_variable_defined?(action_instance_var)

  @easy.instance_variable_get(action_instance_var)
end

#typeObject



51
52
53
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 51

def type
  ETHON
end

#uri_from_easyObject



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/new_relic/agent/http_clients/ethon_wrappers.rb', line 59

def uri_from_easy
  # anticipate `Ethon::Easy#url` being `example.com` without a protocol
  # defined and use an 'http' protocol prefix for `URI.parse` to work
  # with the URL as desired
  url_str = @easy.url.match?(':') ? @easy.url : "http://#{@easy.url}"
  begin
    URI.parse(url_str)
  rescue URI::InvalidURIError => e
    NewRelic::Agent.logger.debug("Failed to parse URI '#{url_str}': #{e.class} - #{e.message}")
    URI.parse(NewRelic::EMPTY_STR)
  end
end