class Aws::Plugins::UserAgent::Handler::UserAgent
def api_metadata
def api_metadata service_id = @context.config.api.metadata['serviceId'] return unless service_id service_id = service_id.gsub(' ', '_').downcase gem_version = @context[:gem_version] "api/#{service_id}##{gem_version}" end
def app_id_metadata
def app_id_metadata return unless (app_id = @context.config.sdk_ua_app_id) # Sanitize and only allow these characters app_id = app_id.gsub(/[^!#$%&'*+\-.^_`|~0-9A-Za-z]/, '-') "app/#{app_id}" end
def env_metadata
def env_metadata return unless (execution_env = ENV['AWS_EXECUTION_ENV']) "exec-env/#{execution_env}" end
def framework_metadata
def framework_metadata if (frameworks_cfg = @context.config.user_agent_frameworks).empty? return end # Frameworks may be aws-record, aws-sdk-rails, etc. regex = /gems\/(?<name>#{frameworks_cfg.join('|')})-(?<version>\d+\.\d+\.\d+)/.freeze frameworks = {} Kernel.caller.each do |line| match = line.match(regex) next unless match frameworks[match[:name]] = match[:version] end frameworks.map { |n, v| "lib/#{n}##{v}" }.join(' ') end
def initialize(context)
def initialize(context) @context = context end
def language_metadata
def language_metadata "lang/#{RUBY_ENGINE}##{RUBY_ENGINE_VERSION} md/#{RUBY_VERSION}" end
def metric_metadata
def metric_metadata if Thread.current[:aws_sdk_core_user_agent_metric].nil? || Thread.current[:aws_sdk_core_user_agent_metric].empty? return end metrics = Thread.current[:aws_sdk_core_user_agent_metric].join(',') # Metric metadata is limited to 1024 bytes return "m/#{metrics}" if metrics.bytesize <= 1024 # Removes the last unfinished metric "m/#{metrics[0...metrics[0..1024].rindex(',')]}" end
def os_metadata
def os_metadata os = case RbConfig::CONFIG['host_os'] when /mac|darwin/ 'macos' when /linux|cygwin/ 'linux' when /mingw|mswin/ 'windows' else 'other' end metadata = "os/#{os}" local_version = Gem::Platform.local.version metadata += "##{local_version}" if local_version metadata += " md/#{RbConfig::CONFIG['host_cpu']}" end
def to_s
def to_s ua = "aws-sdk-ruby3/#{CORE_GEM_VERSION}" ua += ' ua/2.1' if (api_m = api_metadata) ua += " #{api_m}" end ua += " #{os_metadata}" ua += " #{language_metadata}" if (env_m = env_metadata) ua += " #{env_m}" end if (app_id_m = app_id_metadata) ua += " #{app_id_m}" end if (framework_m = framework_metadata) ua += " #{framework_m}" end if (metric_m = metric_metadata) ua += " #{metric_m}" end if @context.config.user_agent_suffix ua += " #{@context.config.user_agent_suffix}" end ua.strip end