class Mongo::Cluster::AppMetadata
Application metadata that is sent to the server in an ismaster command,
when a new connection is established.
@api private
@since 2.4.0
Constants
- DRIVER_NAME
The driver name.
@ since 2.4.0
- MAX_APP_NAME_SIZE
The max application name byte size.
@ since 2.4.0
- MAX_DOCUMENT_SIZE
The max application metadata document byte size.
@since 2.4.0
Public Class Methods
new(cluster)
click to toggle source
Instantiate the new AppMetadata
object.
@api private
@example Instantiate the app metadata.
Mongo::Cluster.AppMetadata.new(cluster)
@param [ Mongo::Cluster
] cluster The cluster.
@since 2.4.0
# File lib/mongo/cluster/app_metadata.rb, line 54 def initialize(cluster) @app_name = cluster.options[:app_name].to_s if cluster.options[:app_name] @platform = cluster.options[:platform] @compressors = cluster.options[:compressors] || [] if cluster.options[:user] && !cluster.options[:auth_mech] auth_db = cluster.options[:auth_source] || 'admin' @request_auth_mech = "#{auth_db}.#{cluster.options[:user]}" end end
Public Instance Methods
ismaster_bytes()
click to toggle source
Get the bytes of the ismaster message including this metadata.
@api private
@example Get the ismaster message bytes.
metadata.ismaster_bytes
@return [ String ] The raw bytes.
@since 2.4.0
# File lib/mongo/cluster/app_metadata.rb, line 75 def ismaster_bytes @ismaster_bytes ||= validate! && serialize.to_s end
Private Instance Methods
architecture()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 144 def architecture RbConfig::CONFIG['target_cpu'] end
document()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 101 def document client_document = full_client_document while client_document.to_bson.to_s.size > MAX_DOCUMENT_SIZE do if client_document[:os][:name] || client_document[:os][:architecture] client_document[:os].delete(:name) client_document[:os].delete(:architecture) elsif client_document[:platform] client_document.delete(:platform) else client_document = nil end end document = Server::Monitor::Connection::ISMASTER document = document.merge(compression: @compressors) document[:client] = client_document document[:saslSupportedMechs] = @request_auth_mech if @request_auth_mech document end
driver_doc()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 120 def driver_doc { name: DRIVER_NAME, version: Mongo::VERSION } end
full_client_document()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 88 def full_client_document BSON::Document.new.tap do |doc| doc[:application] = { name: @app_name } if @app_name doc[:driver] = driver_doc doc[:os] = os_doc doc[:platform] = platform end end
name()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 140 def name RbConfig::CONFIG['host_os'] end
os_doc()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 127 def os_doc { type: type, name: name, architecture: architecture } end
platform()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 148 def platform [ @platform, RUBY_VERSION, RUBY_PLATFORM, RbConfig::CONFIG['build'] ].compact.join(', ') end
serialize()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 97 def serialize Protocol::Query.new(Database::ADMIN, Database::COMMAND, document, :limit => -1).serialize end
type()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 135 def type (RbConfig::CONFIG && RbConfig::CONFIG['host_os']) ? RbConfig::CONFIG['host_os'].split('_').first[/[a-z]+/i].downcase : 'unknown' end
validate!()
click to toggle source
# File lib/mongo/cluster/app_metadata.rb, line 81 def validate! if @app_name && @app_name.bytesize > MAX_APP_NAME_SIZE raise Error::InvalidApplicationName.new(@app_name, MAX_APP_NAME_SIZE) end true end