module Elasticsearch::Transport::MetaHeader

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`.

Public Instance Methods

called_from?(service) click to toggle source
# 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) click to toggle source

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

# 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?() click to toggle source
# File lib/elasticsearch/transport/meta_header.rb, line 60
def elasticsearch?
  defined?(Elastic::ELASTICSEARCH_SERVICE_VERSION) &&
    called_from?('elasticsearch')
end
enterprise_search?() click to toggle source
# 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_adapter() click to toggle source

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>

# 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_engine() click to toggle source
# 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_version() click to toggle source
# 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_header() click to toggle source
# 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