aws-sdk-core 3.25.0 → 3.26.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d0671aecf4a245416ee6a50f25055e3663d54bd
4
- data.tar.gz: 8578109735a75ff1486bc035c4823529c932e654
3
+ metadata.gz: 240dcbe7991695e3ab43cff4e324c7b3e9c3019e
4
+ data.tar.gz: e961adb158d2db9e5da20424029e39e16d171456
5
5
  SHA512:
6
- metadata.gz: fbc1d15f69cd390db5cca41962413207e56f059600f3a6d2fbc991c14d3f5e0f709b8262ff58b05d47d0ea958447c1d3a2c61e24ea5082b16b41b36786f66ec4
7
- data.tar.gz: 5bb0dbef3f485bc4c0664d5021a56d068bf76693192faa65654a7c2aa5bec95b3542c2684e6a379d6664873513a6ce96b570ca5638af361a0c7645ff3cd85cc3
6
+ metadata.gz: '09e1eb6311517fb8dec01acb21beafcdeb4d46bfbdcfb21e4e1654e40ea2b8cfcc93e65a3870b2b2a10bbdc333c1ba9e03b8072ccdd25e7c9070fb2a7a759092'
7
+ data.tar.gz: cf0cba175b8b4dc5d5053048026ff1c606077021ea0dcdb2df3404ca888aa5b2d3e0c5185caa6c1311fd03bb0515e13717f2b03ab6c2efe10ecdb2020afeb93f
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.25.0
1
+ 3.26.0
@@ -67,6 +67,11 @@ require_relative 'aws-sdk-core/json'
67
67
  require_relative 'aws-sdk-core/binary'
68
68
  require_relative 'aws-sdk-core/event_emitter'
69
69
 
70
+ # client metrics
71
+
72
+ require_relative 'aws-sdk-core/client_side_monitoring/request_metrics'
73
+ require_relative 'aws-sdk-core/client_side_monitoring/publisher'
74
+
70
75
  # aws-sdk-sts is vendored to support Aws::AssumeRoleCredentials
71
76
 
72
77
  require 'aws-sdk-sts'
@@ -0,0 +1,41 @@
1
+ require 'thread'
2
+ require 'socket'
3
+
4
+ module Aws
5
+ module ClientSideMonitoring
6
+ # @api private
7
+ class Publisher
8
+ attr_reader :agent_port
9
+
10
+ def initialize(opts = {})
11
+ @agent_port = opts[:agent_port]
12
+ @mutex = Mutex.new
13
+ end
14
+
15
+ def agent_port=(value)
16
+ @mutex.synchronize do
17
+ @agent_port = value
18
+ end
19
+ end
20
+
21
+ def publish(request_metrics)
22
+ send_datagram(request_metrics.api_call.to_json)
23
+ request_metrics.api_call_attempts.each do |attempt|
24
+ send_datagram(attempt.to_json)
25
+ end
26
+ end
27
+
28
+ def send_datagram(msg)
29
+ if @agent_port
30
+ socket = UDPSocket.new
31
+ begin
32
+ socket.connect("127.0.0.1", @agent_port)
33
+ socket.send(msg, 0)
34
+ rescue Errno::ECONNREFUSED
35
+ # Drop on the floor
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,134 @@
1
+ module Aws
2
+ module ClientSideMonitoring
3
+ # @api private
4
+ class RequestMetrics
5
+ attr_reader :api_call, :api_call_attempts
6
+
7
+ def initialize(opts = {})
8
+ @service = opts[:service]
9
+ @api = opts[:operation]
10
+ @client_id = opts[:client_id]
11
+ @timestamp = opts[:timestamp] # In epoch milliseconds
12
+ @version = 1
13
+ @api_call = ApiCall.new(@service, @api, @client_id, @version, @timestamp)
14
+ @api_call_attempts = []
15
+ end
16
+
17
+ def build_call_attempt(opts = {})
18
+ timestamp = opts[:timestamp]
19
+ fqdn = opts[:fqdn]
20
+ region = opts[:region]
21
+ user_agent = opts[:user_agent]
22
+ access_key = opts[:access_key]
23
+ session_token = opts[:session_token]
24
+ ApiCallAttempt.new(
25
+ @service,
26
+ @api,
27
+ @client_id,
28
+ @version,
29
+ timestamp,
30
+ fqdn,
31
+ region,
32
+ user_agent,
33
+ access_key,
34
+ session_token
35
+ )
36
+ end
37
+
38
+ def add_call_attempt(attempt)
39
+ @api_call_attempts << attempt
40
+ end
41
+
42
+ class ApiCall
43
+ attr_reader :service, :api, :client_id, :timestamp, :version,
44
+ :attempt_count, :latency
45
+
46
+ def initialize(service, api, client_id, version, timestamp)
47
+ @service = service
48
+ @api = api
49
+ @client_id = client_id
50
+ @version = version
51
+ @timestamp = timestamp
52
+ end
53
+
54
+ def complete(opts = {})
55
+ @latency = opts[:latency]
56
+ @attempt_count = opts[:attempt_count]
57
+ end
58
+
59
+ def to_json(*a)
60
+ {
61
+ "Type" => "ApiCall",
62
+ "Service" => @service,
63
+ "Api" => @api,
64
+ "ClientId" => @client_id,
65
+ "Timestamp" => @timestamp,
66
+ "Version" => @version,
67
+ "AttemptCount" => @attempt_count,
68
+ "Latency" => @latency
69
+ }.to_json
70
+ end
71
+ end
72
+
73
+ class ApiCallAttempt
74
+ attr_reader :service, :api, :client_id, :version, :timestamp, :fqdn,
75
+ :region, :user_agent, :access_key, :session_token
76
+ attr_accessor :request_latency, :http_status_code, :aws_exception_msg,
77
+ :x_amz_request_id, :x_amz_id_2, :x_amzn_request_id, :sdk_exception,
78
+ :aws_exception, :sdk_exception_msg
79
+
80
+ def initialize(
81
+ service,
82
+ api,
83
+ client_id,
84
+ version,
85
+ timestamp,
86
+ fqdn,
87
+ region,
88
+ user_agent,
89
+ access_key,
90
+ session_token
91
+ )
92
+ @service = service
93
+ @api = api
94
+ @client_id = client_id
95
+ @version = version
96
+ @timestamp = timestamp
97
+ @fqdn = fqdn
98
+ @region = region
99
+ @user_agent = user_agent
100
+ @access_key = access_key
101
+ @session_token = session_token
102
+ end
103
+
104
+ def to_json(*a)
105
+ json = {
106
+ "Type" => "ApiCallAttempt",
107
+ "Service" => @service,
108
+ "Api" => @api,
109
+ "ClientId" => @client_id,
110
+ "Timestamp" => @timestamp,
111
+ "Version" => @version,
112
+ "Fqdn" => @fqdn,
113
+ "Region" => @region,
114
+ "UserAgent" => @user_agent,
115
+ "AccessKey" => @access_key
116
+ }
117
+ # Optional Fields
118
+ json["SessionToken"] = @session_token if @session_token
119
+ json["HttpStatusCode"] = @http_status_code if @http_status_code
120
+ json["AwsException"] = @aws_exception if @aws_exception
121
+ json["AwsExceptionMessage"] = @aws_exception_msg if @aws_exception_msg
122
+ json["XAmznRequestId"] = @x_amzn_request_id if @x_amzn_request_id
123
+ json["XAmzRequestId"] = @x_amz_request_id if @x_amz_request_id
124
+ json["XAmzId2"] = @x_amz_id_2 if @x_amz_id_2
125
+ json["AttemptLatency"] = @request_latency if @request_latency
126
+ json["SdkException"] = @sdk_exception if @sdk_exception
127
+ json["SdkExceptionMessage"] = @sdk_exception_msg if @sdk_exception_msg
128
+ json.to_json
129
+ end
130
+ end
131
+
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,217 @@
1
+ require 'date'
2
+
3
+ module Aws
4
+ module Plugins
5
+ class ClientMetricsPlugin < Seahorse::Client::Plugin
6
+
7
+ option(:client_side_monitoring,
8
+ default: false,
9
+ docstring: <<-DOCS) do |cfg|
10
+ When `true`, client-side metrics will be collected for all API requests from
11
+ this client.
12
+ DOCS
13
+ resolve_client_side_monitoring(cfg)
14
+ end
15
+
16
+ option(:client_side_monitoring_port,
17
+ default: 31000,
18
+ docstring: <<-DOCS) do |cfg|
19
+ Required for publishing client metrics. The port that the client side monitoring
20
+ agent is running on, where client metrics will be published via UDP.
21
+ DOCS
22
+ resolve_client_side_monitoring_port(cfg)
23
+ end
24
+
25
+ option(:client_side_monitoring_publisher,
26
+ default: ClientSideMonitoring::Publisher.new,
27
+ docstring: <<-DOCS)
28
+ Allows you to provide a custom client-side monitoring publisher class. By default,
29
+ will use the Client Side Monitoring Agent Publisher.
30
+ DOCS
31
+
32
+ option(:client_side_monitoring_client_id,
33
+ default: "",
34
+ docstring: <<-DOCS) do |cfg|
35
+ Allows you to provide an identifier for this client which will be attached to
36
+ all generated client side metrics. Defaults to an empty string.
37
+ DOCS
38
+ resolve_client_id(cfg)
39
+ end
40
+
41
+ def add_handlers(handlers, config)
42
+ if config.client_side_monitoring && config.client_side_monitoring_port
43
+ handlers.add(Handler, step: :initialize)
44
+ publisher = config.client_side_monitoring_publisher
45
+ publisher.agent_port = config.client_side_monitoring_port
46
+ end
47
+ end
48
+
49
+ private
50
+ def self.resolve_client_side_monitoring_port(cfg)
51
+ env_source = ENV["AWS_CSM_PORT"]
52
+ env_source = nil if env_source == ""
53
+ cfg_source = Aws.shared_config.csm_port(profile: cfg.profile)
54
+ if env_source
55
+ env_source.to_i
56
+ elsif cfg_source
57
+ cfg_source.to_i
58
+ else
59
+ 31000
60
+ end
61
+ end
62
+
63
+ def self.resolve_client_side_monitoring(cfg)
64
+ env_source = ENV["AWS_CSM_ENABLED"]
65
+ env_source = nil if env_source == ""
66
+ if env_source.is_a?(String) && (env_source.downcase == "false" || env_source.downcase == "f")
67
+ env_source = false
68
+ end
69
+ cfg_source = Aws.shared_config.csm_enabled(profile: cfg.profile)
70
+ if env_source || cfg_source
71
+ true
72
+ else
73
+ false
74
+ end
75
+ end
76
+
77
+ def self.resolve_client_id(cfg)
78
+ default = ""
79
+ env_source = ENV["AWS_CSM_CLIENT_ID"]
80
+ env_source = nil if env_source == ""
81
+ cfg_source = Aws.shared_config.csm_client_id(profile: cfg.profile)
82
+ env_source || cfg_source || default
83
+ end
84
+
85
+ class Handler < Seahorse::Client::Handler
86
+ def call(context)
87
+ publisher = context.config.client_side_monitoring_publisher
88
+ service_id = context.config.api.metadata["serviceId"]
89
+ # serviceId not present in all versions, need a fallback
90
+ service_id ||= _calculate_service_id(context)
91
+
92
+ request_metrics = ClientSideMonitoring::RequestMetrics.new(
93
+ service: service_id,
94
+ operation: context.operation.name,
95
+ client_id: context.config.client_side_monitoring_client_id,
96
+ timestamp: DateTime.now.strftime('%Q').to_i,
97
+ )
98
+ context.metadata[:client_metrics] = request_metrics
99
+ start_time = Time.now
100
+ begin
101
+ @handler.call(context)
102
+ rescue StandardError => e
103
+ # Handle SDK Exceptions
104
+ if request_metrics.api_call_attempts.empty?
105
+ attempt = request_metrics.build_call_attempt
106
+ attempt.sdk_exception = e.class.to_s
107
+ attempt.sdk_exception_msg = e.message
108
+ request_metrics.add_call_attempt(attempt)
109
+ elsif request_metrics.api_call_attempts.last.aws_exception.nil?
110
+ # Handle exceptions during response handlers
111
+ attempt = request_metrics.api_call_attempts.last
112
+ attempt.sdk_exception = e.class.to_s
113
+ attempt.sdk_exception_msg = e.message
114
+ elsif !e.class.to_s.match(request_metrics.api_call_attempts.last.aws_exception)
115
+ # Handle response handling exceptions that happened in addition to
116
+ # an AWS exception
117
+ attempt = request_metrics.api_call_attempts.last
118
+ attempt.sdk_exception = e.class.to_s
119
+ attempt.sdk_exception_msg = e.message
120
+ end # Else we don't have an SDK exception and are done.
121
+ raise e
122
+ ensure
123
+ end_time = Time.now
124
+ request_metrics.api_call.complete(
125
+ latency: ((end_time - start_time) * 1000).to_i,
126
+ attempt_count: context.retries + 1
127
+ )
128
+ # Report the metrics by passing the complete RequestMetrics object
129
+ if publisher
130
+ publisher.publish(request_metrics)
131
+ end # Else we drop all this on the floor.
132
+ end
133
+ end
134
+
135
+ private
136
+ def _calculate_service_id(context)
137
+ class_name = context.client.class.to_s.match(/(.+)::Client/)[1]
138
+ class_name.sub!(/^Aws::/, '')
139
+ _fallback_service_id(class_name)
140
+ end
141
+
142
+ def _fallback_service_id(id)
143
+ # Need hard-coded exceptions since information needed to
144
+ # reverse-engineer serviceId is not present in older versions.
145
+ # This list should not need to grow.
146
+ exceptions = {
147
+ "ACMPCA" => "ACM PCA",
148
+ "APIGateway" => "API Gateway",
149
+ "AlexaForBusiness" => "Alexa For Business",
150
+ "ApplicationAutoScaling" => "Application Auto Scaling",
151
+ "ApplicationDiscoveryService" => "Application Discovery Service",
152
+ "AutoScaling" => "Auto Scaling",
153
+ "AutoScalingPlans" => "Auto Scaling Plans",
154
+ "CloudHSMV2" => "CloudHSM V2",
155
+ "CloudSearchDomain" => "CloudSearch Domain",
156
+ "CloudWatchEvents" => "CloudWatch Events",
157
+ "CloudWatchLogs" => "CloudWatch Logs",
158
+ "CognitoIdentity" => "Cognito Identity",
159
+ "CognitoIdentityProvider" => "Cognito Identity Provider",
160
+ "CognitoSync" => "Cognito Sync",
161
+ "ConfigService" => "Config Service",
162
+ "CostExplorer" => "Cost Explorer",
163
+ "CostandUsageReportService" => "Cost and Usage Report Service",
164
+ "DataPipeline" => "Data Pipeline",
165
+ "DatabaseMigrationService" => "Database Migration Service",
166
+ "DeviceFarm" => "Device Farm",
167
+ "DirectConnect" => "Direct Connect",
168
+ "DirectoryService" => "Directory Service",
169
+ "DynamoDBStreams" => "DynamoDB Streams",
170
+ "ElasticBeanstalk" => "Elastic Beanstalk",
171
+ "ElasticLoadBalancing" => "Elastic Load Balancing",
172
+ "ElasticLoadBalancingV2" => "Elastic Load Balancing v2",
173
+ "ElasticTranscoder" => "Elastic Transcoder",
174
+ "ElasticsearchService" => "Elasticsearch Service",
175
+ "IoTDataPlane" => "IoT Data Plane",
176
+ "IoTJobsDataPlane" => "IoT Jobs Data Plane",
177
+ "IoT1ClickDevicesService" => "IoT 1Click Devices Service",
178
+ "IoT1ClickProjects" => "IoT 1Click Projects",
179
+ "KinesisAnalytics" => "Kinesis Analytics",
180
+ "KinesisVideo" => "Kinesis Video",
181
+ "KinesisVideoArchivedMedia" => "Kinesis Video Archived Media",
182
+ "KinesisVideoMedia" => "Kinesis Video Media",
183
+ "LambdaPreview" => "Lambda",
184
+ "Lex" => "Lex Runtime Service",
185
+ "LexModelBuildingService" => "Lex Model Building Service",
186
+ "Lightsail" => "Lightsail",
187
+ "MQ" => "mq",
188
+ "MachineLearning" => "Machine Learning",
189
+ "MarketplaceCommerceAnalytics" => "Marketplace Commerce Analytics",
190
+ "MarketplaceEntitlementService" => "Marketplace Entitlement Service",
191
+ "MarketplaceMetering" => "Marketplace Metering",
192
+ "MediaStoreData" => "MediaStore Data",
193
+ "MigrationHub" => "Migration Hub",
194
+ "ResourceGroups" => "Resource Groups",
195
+ "ResourceGroupsTaggingAPI" => "Resource Groups Tagging API",
196
+ "Route53" => "Route 53",
197
+ "Route53Domains" => "Route 53 Domains",
198
+ "SecretsManager" => "Secrets Manager",
199
+ "SageMakerRuntime" => "SageMaker Runtime",
200
+ "ServiceCatalog" => "Service Catalog",
201
+ "ServiceDiscovery" => "ServiceDiscovery",
202
+ "Signer" => "signer",
203
+ "States" => "SFN",
204
+ "StorageGateway" => "Storage Gateway",
205
+ "TranscribeService" => "Transcribe Service",
206
+ "WAFRegional" => "WAF Regional",
207
+ }
208
+ if exceptions[id]
209
+ exceptions[id]
210
+ else
211
+ id
212
+ end
213
+ end
214
+ end
215
+ end
216
+ end
217
+ end
@@ -0,0 +1,80 @@
1
+ require 'date'
2
+
3
+ module Aws
4
+ module Plugins
5
+ class ClientMetricsSendPlugin < Seahorse::Client::Plugin
6
+
7
+ def add_handlers(handlers, config)
8
+ if config.client_side_monitoring && config.client_side_monitoring_port
9
+ # AttemptHandler comes just before we would retry an error.
10
+ handlers.add(AttemptHandler, step: :sign, priority: 95)
11
+ # LatencyHandler is as close to sending as possible.
12
+ handlers.add(LatencyHandler, step: :sign, priority: 0)
13
+ end
14
+ end
15
+
16
+ class LatencyHandler < Seahorse::Client::Handler
17
+ def call(context)
18
+ start_time = Time.now
19
+ resp = @handler.call(context)
20
+ end_time = Time.now
21
+ latency = ((end_time - start_time) * 1000).to_i
22
+ context.metadata[:current_call_attempt].request_latency = latency
23
+ resp
24
+ end
25
+ end
26
+
27
+ class AttemptHandler < Seahorse::Client::Handler
28
+ def call(context)
29
+ request_metrics = context.metadata[:client_metrics]
30
+ attempt_opts = {
31
+ timestamp: DateTime.now.strftime('%Q').to_i,
32
+ fqdn: context.http_request.endpoint.host,
33
+ region: context.config.region,
34
+ user_agent: context.http_request.headers["user-agent"],
35
+ }
36
+ # It will generally cause an error, but it is semantically valid for
37
+ # credentials to not exist.
38
+ if context.config.credentials
39
+ attempt_opts[:access_key] =
40
+ context.config.credentials.credentials.access_key_id
41
+ attempt_opts[:session_token] =
42
+ context.config.credentials.credentials.session_token
43
+ end
44
+ call_attempt = request_metrics.build_call_attempt(attempt_opts)
45
+ context.metadata[:current_call_attempt] = call_attempt
46
+
47
+ resp = @handler.call(context)
48
+ headers = context.http_response.headers
49
+ if headers.include?("x-amz-id-2")
50
+ call_attempt.x_amz_id_2 = headers["x-amz-id-2"]
51
+ end
52
+ if headers.include?("x-amz-request-id")
53
+ call_attempt.x_amz_request_id = headers["x-amz-request-id"]
54
+ end
55
+ if headers.include?("x-amzn-request-id")
56
+ call_attempt.x_amzn_request_id = headers["x-amzn-request-id"]
57
+ end
58
+ call_attempt.http_status_code = context.http_response.status_code
59
+ if e = resp.error
60
+ e_name = _extract_error_name(e)
61
+ e_msg = e.message
62
+ call_attempt.aws_exception = "#{e_name}"
63
+ call_attempt.aws_exception_msg = "#{e_msg}"
64
+ end
65
+ request_metrics.add_call_attempt(call_attempt)
66
+ resp
67
+ end
68
+
69
+ private
70
+ def _extract_error_name(error)
71
+ if error.is_a?(Aws::Errors::ServiceError)
72
+ error.class.code
73
+ else
74
+ error.class.name.to_s
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -34,6 +34,9 @@ requests are made, and retries are disabled.
34
34
  if client.config.stub_responses
35
35
  client.setup_stubbing
36
36
  client.handlers.remove(RetryErrors::Handler)
37
+ client.handlers.remove(ClientMetricsPlugin::Handler)
38
+ client.handlers.remove(ClientMetricsSendPlugin::LatencyHandler)
39
+ client.handlers.remove(ClientMetricsSendPlugin::AttemptHandler)
37
40
  end
38
41
  end
39
42
 
@@ -140,6 +140,51 @@ module Aws
140
140
  @parsed_config[profile]['credential_process']
141
141
  end
142
142
 
143
+ def csm_enabled(opts = {})
144
+ p = opts[:profile] || @profile_name
145
+ if @config_enabled
146
+ if @parsed_credentials
147
+ value = @parsed_credentials.fetch(p, {})["csm_enabled"]
148
+ end
149
+ if @parsed_config
150
+ value ||= @parsed_config.fetch(p, {})["csm_enabled"]
151
+ end
152
+ value
153
+ else
154
+ nil
155
+ end
156
+ end
157
+
158
+ def csm_client_id(opts = {})
159
+ p = opts[:profile] || @profile_name
160
+ if @config_enabled
161
+ if @parsed_credentials
162
+ value = @parsed_credentials.fetch(p, {})["csm_client_id"]
163
+ end
164
+ if @parsed_config
165
+ value ||= @parsed_config.fetch(p, {})["csm_client_id"]
166
+ end
167
+ value
168
+ else
169
+ nil
170
+ end
171
+ end
172
+
173
+ def csm_port(opts = {})
174
+ p = opts[:profile] || @profile_name
175
+ if @config_enabled
176
+ if @parsed_credentials
177
+ value = @parsed_credentials.fetch(p, {})["csm_port"]
178
+ end
179
+ if @parsed_config
180
+ value ||= @parsed_config.fetch(p, {})["csm_port"]
181
+ end
182
+ value
183
+ else
184
+ nil
185
+ end
186
+ end
187
+
143
188
  private
144
189
  def credentials_present?
145
190
  (@parsed_credentials && !@parsed_credentials.empty?) ||
@@ -40,6 +40,6 @@ require_relative 'aws-sdk-sts/customizations'
40
40
  # @service
41
41
  module Aws::STS
42
42
 
43
- GEM_VERSION = '3.25.0'
43
+ GEM_VERSION = '3.26.0'
44
44
 
45
45
  end
@@ -19,6 +19,8 @@ require 'aws-sdk-core/plugins/response_paging.rb'
19
19
  require 'aws-sdk-core/plugins/stub_responses.rb'
20
20
  require 'aws-sdk-core/plugins/idempotency_token.rb'
21
21
  require 'aws-sdk-core/plugins/jsonvalue_converter.rb'
22
+ require 'aws-sdk-core/plugins/client_metrics_plugin.rb'
23
+ require 'aws-sdk-core/plugins/client_metrics_send_plugin.rb'
22
24
  require 'aws-sdk-core/plugins/signature_v4.rb'
23
25
  require 'aws-sdk-core/plugins/protocols/query.rb'
24
26
 
@@ -47,6 +49,8 @@ module Aws::STS
47
49
  add_plugin(Aws::Plugins::StubResponses)
48
50
  add_plugin(Aws::Plugins::IdempotencyToken)
49
51
  add_plugin(Aws::Plugins::JsonvalueConverter)
52
+ add_plugin(Aws::Plugins::ClientMetricsPlugin)
53
+ add_plugin(Aws::Plugins::ClientMetricsSendPlugin)
50
54
  add_plugin(Aws::Plugins::SignatureV4)
51
55
  add_plugin(Aws::Plugins::Protocols::Query)
52
56
 
@@ -92,6 +96,22 @@ module Aws::STS
92
96
  #
93
97
  # @option options [String] :access_key_id
94
98
  #
99
+ # @option options [] :client_side_monitoring (false)
100
+ # When `true`, client-side metrics will be collected for all API requests from
101
+ # this client.
102
+ #
103
+ # @option options [] :client_side_monitoring_client_id ("")
104
+ # Allows you to provide an identifier for this client which will be attached to
105
+ # all generated client side metrics. Defaults to an empty string.
106
+ #
107
+ # @option options [] :client_side_monitoring_port (31000)
108
+ # Required for publishing client metrics. The port that the client side monitoring
109
+ # agent is running on, where client metrics will be published via UDP.
110
+ #
111
+ # @option options [] :client_side_monitoring_publisher (#<Aws::ClientSideMonitoring::Publisher:0x00007f20e3c7b9f0 @agent_port=nil, @mutex=#<Thread::Mutex:0x00007f20e3c7b9a0>>)
112
+ # Allows you to provide a custom client-side monitoring publisher class. By default,
113
+ # will use the Client Side Monitoring Agent Publisher.
114
+ #
95
115
  # @option options [Boolean] :convert_params (true)
96
116
  # When `true`, an attempt is made to coerce request parameters into
97
117
  # the required types.
@@ -1486,7 +1506,7 @@ module Aws::STS
1486
1506
  params: params,
1487
1507
  config: config)
1488
1508
  context[:gem_name] = 'aws-sdk-core'
1489
- context[:gem_version] = '3.25.0'
1509
+ context[:gem_version] = '3.26.0'
1490
1510
  Seahorse::Client::Request.new(handlers, context)
1491
1511
  end
1492
1512
 
@@ -173,10 +173,15 @@ module Aws::STS
173
173
  api.version = "2011-06-15"
174
174
 
175
175
  api.metadata = {
176
+ "apiVersion" => "2011-06-15",
176
177
  "endpointPrefix" => "sts",
178
+ "globalEndpoint" => "sts.amazonaws.com",
177
179
  "protocol" => "query",
180
+ "serviceAbbreviation" => "AWS STS",
178
181
  "serviceFullName" => "AWS Security Token Service",
182
+ "serviceId" => "STS",
179
183
  "signatureVersion" => "v4",
184
+ "uid" => "sts-2011-06-15",
180
185
  "xmlNamespace" => "https://sts.amazonaws.com/doc/2011-06-15/",
181
186
  }
182
187
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.25.0
4
+ version: 3.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-29 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jmespath
@@ -81,6 +81,8 @@ files:
81
81
  - lib/aws-sdk-core/binary/decode_handler.rb
82
82
  - lib/aws-sdk-core/binary/event_parser.rb
83
83
  - lib/aws-sdk-core/binary/event_stream_decoder.rb
84
+ - lib/aws-sdk-core/client_side_monitoring/publisher.rb
85
+ - lib/aws-sdk-core/client_side_monitoring/request_metrics.rb
84
86
  - lib/aws-sdk-core/client_stubs.rb
85
87
  - lib/aws-sdk-core/credential_provider.rb
86
88
  - lib/aws-sdk-core/credential_provider_chain.rb
@@ -111,6 +113,8 @@ files:
111
113
  - lib/aws-sdk-core/plugins/apig_authorizer_token.rb
112
114
  - lib/aws-sdk-core/plugins/apig_credentials_configuration.rb
113
115
  - lib/aws-sdk-core/plugins/apig_user_agent.rb
116
+ - lib/aws-sdk-core/plugins/client_metrics_plugin.rb
117
+ - lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb
114
118
  - lib/aws-sdk-core/plugins/credentials_configuration.rb
115
119
  - lib/aws-sdk-core/plugins/event_stream_configuration.rb
116
120
  - lib/aws-sdk-core/plugins/global_configuration.rb