Module: Elasticsearch::Transport::MetaHeader

Included in:
Client
Defined in:
lib/elasticsearch/transport/meta_header.rb

Overview

Methods for the Elastic meta header used by Cloud. X-Elastic-Client-Meta HTTP header which is used by Elastic Cloud and can be disabled when instantiating the Client with the :enable_meta_header parameter set to `false`.

Instance Method Summary collapse

Instance Method Details

#called_from?(service) ⇒ Boolean

Returns:

  • (Boolean)

65
66
67
# File 'lib/elasticsearch/transport/meta_header.rb', line 65

def called_from?(service)
  !caller.select { |c| c.match?(service) }.empty?
end

#client_meta_version(version) ⇒ Object

We return the current version if it's a release, but if it's a pre/alpha/beta release we return <VERSION_NUMBER>p


72
73
74
75
76
77
78
# File 'lib/elasticsearch/transport/meta_header.rb', line 72

def client_meta_version(version)
  regexp = /^([0-9]+\.[0-9]+\.[0-9]+)(\.?[a-z0-9.-]+)?$/
  match = version.match(regexp)
  return "#{match[1]}p" if (match[2])

  version
end

#elasticsearch?Boolean

Returns:

  • (Boolean)

60
61
62
63
# File 'lib/elasticsearch/transport/meta_header.rb', line 60

def elasticsearch?
  defined?(Elastic::ELASTICSEARCH_SERVICE_VERSION) &&
    called_from?('elasticsearch')
end

#enterprise_search?Boolean

Returns:

  • (Boolean)

55
56
57
58
# File 'lib/elasticsearch/transport/meta_header.rb', line 55

def enterprise_search?
  defined?(Elastic::ENTERPRISE_SERVICE_VERSION) &&
    called_from?('enterprise-search-ruby')
end

#meta_header_adapterObject

This function tries to define the version for the Faraday adapter. If it hasn't been loaded by the time we're calling this method, it's going to report the adapter (if we know it) but return 0 as the version. It won't report anything when using a custom adapter we don't identify.

Returns a Hash<adapter_alias, version>


100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/elasticsearch/transport/meta_header.rb', line 100

def meta_header_adapter
  if @transport_class == Transport::HTTP::Faraday
    version = '0'
    adapter_version = case @arguments[:adapter]
             when :patron
               version = Patron::VERSION if defined?(::Patron::VERSION)
               {pt: version}
             when :net_http
               version = if defined?(Net::HTTP::VERSION)
                           Net::HTTP::VERSION
                         elsif defined?(Net::HTTP::HTTPVersion)
                           Net::HTTP::HTTPVersion
                         end
               {nh: version}
             when :typhoeus
               version = Typhoeus::VERSION if defined?(::Typhoeus::VERSION)
               {ty: version}
             when :httpclient
               version = HTTPClient::VERSION if defined?(HTTPClient::VERSION)
               {hc: version}
             when :net_http_persistent
               version = Net::HTTP::Persistent::VERSION if defined?(Net::HTTP::Persistent::VERSION)
               {np: version}
             else
               {}
             end
    {fd: Faraday::VERSION}.merge(adapter_version)
  elsif defined?(Transport::HTTP::Curb) && @transport_class == Transport::HTTP::Curb
    {cl: Curl::CURB_VERSION}
  elsif defined?(Transport::HTTP::Manticore) && @transport_class == Transport::HTTP::Manticore
    {mc: Manticore::VERSION}
  end
end

#meta_header_engineObject


80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/elasticsearch/transport/meta_header.rb', line 80

def meta_header_engine
  case RUBY_ENGINE
  when 'ruby'
    {}
  when 'jruby'
    { jv: ENV_JAVA['java.version'], jr: JRUBY_VERSION }
  when 'rbx'
    { rbx: RUBY_VERSION }
  else
    { RUBY_ENGINE.to_sym => RUBY_VERSION }
  end
end

#meta_header_service_versionObject


43
44
45
46
47
48
49
50
51
52
53
# File 'lib/elasticsearch/transport/meta_header.rb', line 43

def meta_header_service_version
  if enterprise_search?
    Elastic::ENTERPRISE_SERVICE_VERSION
  elsif elasticsearch?
    Elastic::ELASTICSEARCH_SERVICE_VERSION
  elsif defined?(Elasticsearch::VERSION)
    [:es, client_meta_version(Elasticsearch::VERSION)]
  else
    [:es, client_meta_version(Elasticsearch::Transport::VERSION)]
  end
end

#set_meta_headerObject


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/elasticsearch/transport/meta_header.rb', line 27

def set_meta_header
  return if @arguments[:enable_meta_header] == false

  service, version = meta_header_service_version

  meta_headers = {
    service.to_sym => version,
    rb: RUBY_VERSION,
    t: Elasticsearch::Transport::VERSION
  }
  meta_headers.merge!(meta_header_engine) if meta_header_engine
  meta_headers.merge!(meta_header_adapter) if meta_header_adapter

  add_header({ 'x-elastic-client-meta' => meta_headers.map { |k, v| "#{k}=#{v}" }.join(',') })
end