From 0a290967e415e6c8e9ecebdb2795f0a6e2669ddd Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Wed, 29 Mar 2023 11:28:37 -0700 Subject: [PATCH 01/44] testing tagchange to see if its covered by ci --- lib/datadog/tracing/contrib/aws/ext.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/datadog/tracing/contrib/aws/ext.rb b/lib/datadog/tracing/contrib/aws/ext.rb index fb5948db13c..2e9cfffddb0 100644 --- a/lib/datadog/tracing/contrib/aws/ext.rb +++ b/lib/datadog/tracing/contrib/aws/ext.rb @@ -18,7 +18,7 @@ module Ext TAG_OPERATION = 'aws.operation'.freeze TAG_OPERATION_COMMAND = 'command'.freeze TAG_PATH = 'path'.freeze - TAG_REGION = 'aws.region'.freeze + TAG_REGION = 'region'.freeze end end end From 4496b3a680c7de21e0b26ae04f7165aba65d9249 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Mon, 3 Apr 2023 15:13:26 -0700 Subject: [PATCH 02/44] add top level region, xname (bucketname), aws_service tags to aws-sdk requests --- lib/datadog/tracing/contrib/aws/ext.rb | 3 +- .../tracing/contrib/aws/instrumentation.rb | 76 ++ .../tracing/contrib/aws/parsed_context.rb | 15 + .../contrib/aws/instrumentation_spec.rb | 845 +++++++++++++++++- 4 files changed, 937 insertions(+), 2 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/ext.rb b/lib/datadog/tracing/contrib/aws/ext.rb index 2e9cfffddb0..6acde9f4703 100644 --- a/lib/datadog/tracing/contrib/aws/ext.rb +++ b/lib/datadog/tracing/contrib/aws/ext.rb @@ -18,7 +18,8 @@ module Ext TAG_OPERATION = 'aws.operation'.freeze TAG_OPERATION_COMMAND = 'command'.freeze TAG_PATH = 'path'.freeze - TAG_REGION = 'region'.freeze + TAG_REGION = 'aws.region'.freeze + TAG_TOP_LEVEL_REGION = 'region'.freeze end end end diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index b05dfc73a32..69460825b29 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -30,6 +30,80 @@ def annotate!(span, context) span.span_type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND span.name = Ext::SPAN_COMMAND span.resource = context.safely(:resource) + aws_service = span.resource.split(".")[0] + span.set_tag("aws_service", aws_service) + params = context.safely(:params) + + if aws_service == "sqs" + queue_url = params.fetch(:queue_url, "") + queue_name = params.fetch(:queue_name, "") + if queue_url + # example queue_url: https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName + queue_name = queue_url.split("/")[-1] + aws_account = queue_url.split("/")[-2] + span.set_tag("aws_account", aws_account) + #span.set_tag_str("aws.sqs.queue_url", queue_url) + end + span.set_tag("queuename", queue_name) + end + + if aws_service == "sns" + topic_arn = params.fetch(:topic_arn, nil) + topic_name = params.fetch(:name, nil) + if topic_arn + # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name + topic_name = topic_arn.split(":")[-1] + aws_account = topic_arn.split(":")[-2] + span.set_tag("aws_account", aws_account) + end + span.set_tag("topicname", topic_name) + + end + if aws_service == "dynamodb" + table_name = params.fetch(:table_name, "") + span.set_tag("tablename", table_name) + end + if aws_service == "kinesis" + stream_arn = params.fetch(:stream_arn, nil) + stream_name = params.fetch(:stream_name, "") + if stream_arn + # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream + stream_name = stream_arn.split("/")[-1] rescue "" + aws_account = stream_arn.split(":")[-2] rescue "" + span.set_tag("aws_account", aws_account) + end + puts params.class + span.set_tag("streamname", stream_name) + end + if aws_service == "eventbridge" + rule_name = params.fetch(:name, nil) || params.fetch(:rule, nil) + span.set_tag("rulename", rule_name) + end + if aws_service == "states" + #CRUD operations: + state_machine_name = params.fetch(:name, nil) + state_machine_arn = params.fetch(:state_machine_arn, nil) + execution_arn = params.fetch(:execution_arn, nil) + + if execution_arn + # example execution_arn = 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' + state_machine_name = execution_arn.split(":")[-2] + end + + if state_machine_arn + span.set_tag("statemachinearn", state_machine_arn) + # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine + state_machine_name = state_machine_arn.split(":")[-1] + end + state_machine_account_id = + span.set_tag("aws_account", state_machine_account_id) + #state_machine_name = create_state_machine_name || start_execution_state_machine_name + span.set_tag("statemachinename", state_machine_name) + end + if aws_service == "s3" + bucket_name = params.fetch(:bucket, nil) + span.set_tag("bucketname", bucket_name) + end span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT) @@ -49,7 +123,9 @@ def annotate!(span, context) span.set_tag(Ext::TAG_AGENT, Ext::TAG_DEFAULT_AGENT) span.set_tag(Ext::TAG_OPERATION, context.safely(:operation)) span.set_tag(Ext::TAG_REGION, context.safely(:region)) + span.set_tag(Ext::TAG_TOP_LEVEL_REGION, context.safely(:region)) span.set_tag(Ext::TAG_PATH, context.safely(:path)) + span.set_tag("httpEndpoint", context.safely(:endpoint)) span.set_tag(Ext::TAG_HOST, context.safely(:host)) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, context.safely(:http_method)) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, context.safely(:status_code)) diff --git a/lib/datadog/tracing/contrib/aws/parsed_context.rb b/lib/datadog/tracing/contrib/aws/parsed_context.rb index 4e828241652..d6fe3b650d8 100644 --- a/lib/datadog/tracing/contrib/aws/parsed_context.rb +++ b/lib/datadog/tracing/contrib/aws/parsed_context.rb @@ -20,6 +20,10 @@ def operation context.operation_name end + def params + context.params + end + def status_code context.http_response.status_code end @@ -40,6 +44,17 @@ def path context.http_request.endpoint.path end + def endpoint + context.http_request.endpoint + end + + def metadata + context.metadata + end + + def config + context.config + end def host context.http_request.endpoint.host end diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 3955bccf454..991fe82f27a 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -97,10 +97,13 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('s3.list_buckets') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('list_buckets') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('s3') + #expect(span.get_tag('bucketname')).to eq('bucket1') expect(span.get_tag('path')).to eq('/') expect(span.get_tag('host')).to eq('s3.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('GET') @@ -123,6 +126,40 @@ end end + describe '#list_objects' do + subject!(:list_objects) { client.list_objects(bucket: "bucketname", max_keys:2) } + + let(:responses) do + { list_objects: {} } + end + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('s3.list_objects') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('list_objects') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('s3') + expect(span.get_tag('bucketname')).to eq('bucketname') + expect(span.get_tag('path')).to eq('/') + expect(span.get_tag('host')).to eq('bucketname.s3.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('GET') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('bucketname.s3.us-stubbed-1.amazonaws.com') + end + end + describe 'S3::Presigner' do let(:presigner) { ::Aws::S3::Presigner.new(client: client) } @@ -146,4 +183,810 @@ end end end + context 'with an SQS client' do + let(:client) { ::Aws::SQS::Client.new(stub_responses: responses) } + + describe '#send_message' do + subject!(:send_message) { client.send_message({ + queue_url: "https://sqs.us-stubbed-1.amazonaws.com/123456789012/MyQueueName", + message_body: "Hello, world!" + }) } + + let(:responses) do + { send_message: { + md5_of_message_body: "msg body", + md5_of_message_attributes: "msg attributes", + md5_of_message_system_attributes: "message system attributes", + message_id: "123", + sequence_number: "456" + } } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('sqs.send_message') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('send_message') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('sqs') + expect(span.get_tag('aws_account')).to eq('123456789012') + expect(span.get_tag('queuename')).to eq('MyQueueName') + expect(span.get_tag('path')).to eq('/123456789012/MyQueueName') + expect(span.get_tag('host')).to eq('sqs.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('sqs.us-stubbed-1.amazonaws.com') + end + end + + describe '#send_message_batch' do + subject!(:send_message_batch) { client.send_message_batch({ + queue_url: "https://sqs.us-stubbed-1.amazonaws.com/123456789012/MyQueueName", + entries: [ # required + { + id: "String", # required + message_body: "String", # required + delay_seconds: 1, + message_attributes: { + "String" => { + string_value: "String", + binary_value: "data", + string_list_values: ["String"], + binary_list_values: ["data"], + data_type: "String", # required + }, + }, + message_system_attributes: { + "AWSTraceHeader" => { + string_value: "String", + binary_value: "data", + string_list_values: ["String"], + binary_list_values: ["data"], + data_type: "String", # required + }, + }, + message_deduplication_id: "String", + message_group_id: "String", + }, + ], + }) } + + let(:responses) do + { send_message_batch: { + successful: [], + failed: [] + } } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('sqs.send_message_batch') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('send_message_batch') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('sqs') + expect(span.get_tag('aws_account')).to eq('123456789012') + expect(span.get_tag('queuename')).to eq('MyQueueName') + expect(span.get_tag('path')).to eq('/123456789012/MyQueueName') + expect(span.get_tag('host')).to eq('sqs.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('sqs.us-stubbed-1.amazonaws.com') + end + end + end + + context 'with an SNS client' do + let(:client) { ::Aws::SNS::Client.new(stub_responses: responses) } + + describe '#publish' do + subject!(:publish) { client.publish({ + topic_arn: "arn:aws:sns:us-west-2:123456789012:my-topic-name", + message: 'Hello, world!' + }) } + + let(:responses) do + { publish: { + message_id: "1234", + sequence_number: "5678" + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('sns.publish') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('publish') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('sns') + expect(span.get_tag('aws_account')).to eq('123456789012') + expect(span.get_tag('topicname')).to eq('my-topic-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('sns.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('sns.us-stubbed-1.amazonaws.com') + end + end + + describe '#publish_batch' do + subject!(:publish_batch) { client.publish_batch({ + topic_arn: "arn:aws:sns:us-west-2:123456789012:my-topic-name", + publish_batch_request_entries: [ # required + { + id: "String", # required + message: "message", # required + subject: "subject", + message_structure: "messageStructure", + message_attributes: { + "String" => { + data_type: "String", # required + string_value: "String", + binary_value: "data", + }, + }, + message_deduplication_id: "String", + message_group_id: "String", + }, + ], }) } + + let(:responses) do + { publish_batch: { + + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('sns.publish_batch') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('publish_batch') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('sns') + expect(span.get_tag('aws_account')).to eq('123456789012') + expect(span.get_tag('topicname')).to eq('my-topic-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('sns.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('sns.us-stubbed-1.amazonaws.com') + end + end + + describe '#create_topic' do + subject!(:create_topic) { client.create_topic({ + name: "topicName", # required + attributes: { + "attributeName" => "attributeValue", + }, + tags: [ + { + key: "TagKey", # required + value: "TagValue", # required + }, + ], + data_protection_policy: "attributeValue", + }) + } + + let(:responses) do + { create_topic: { + + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('sns.create_topic') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('create_topic') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('sns') + expect(span.get_tag('topicname')).to eq('topicName') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('sns.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('sns.us-stubbed-1.amazonaws.com') + end + end + end + + context 'with an dynamodb client' do + let(:client) { ::Aws::DynamoDB::Client.new(stub_responses: responses) } + + describe '#get_item' do + subject!(:get_item) { client.get_item(table_name: "my-table-name", key: {'id':'1234'}) } + + let(:responses) do + { get_item: { + item: { + "AlbumTitle" => "Songs About Life", + "Artist" => "Acme Band", + "SongTitle" => "Happy Day", + } + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('dynamodb.get_item') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('get_item') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('dynamodb') + expect(span.get_tag('tablename')).to eq('my-table-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('dynamodb.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('dynamodb.us-stubbed-1.amazonaws.com') + end + end + end + + context 'with an kinesis client' do + let(:client) { ::Aws::Kinesis::Client.new(stub_responses: responses) } + + describe '#put_record' do + subject!(:put_record) { client.put_record( + stream_name: "my-stream-name", + stream_arn: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream-name", + partition_key: "parition-1", + data: "Hello world!" + ) + } + + let(:responses) do + { put_record: { + shard_id: "1234", + sequence_number: "5678", + encryption_type: "NONE" + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('kinesis.put_record') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('put_record') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('kinesis') + expect(span.get_tag('aws_account')).to eq('123456789012') + expect(span.get_tag('streamname')).to eq('my-stream-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('123456789012.data-kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('123456789012.data-kinesis.us-stubbed-1.amazonaws.com') + end + end + + + describe '#get_shard_iterator' do + subject!(:get_shard_iterator) { client.get_shard_iterator( + stream_name: "StreamName", # required + shard_id: "ShardId", # required + shard_iterator_type: "AT_SEQUENCE_NUMBER", # required + ) + } + + let(:responses) do + { get_shard_iterator: { + shard_iterator: "shard-iterator" + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('kinesis.get_shard_iterator') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('get_shard_iterator') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('kinesis') + expect(span.get_tag('streamname')).to eq('StreamName') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('kinesis.us-stubbed-1.amazonaws.com') + end + end + + end + + context 'with an eventbridge client' do + let(:client) { ::Aws::EventBridge::Client.new(stub_responses: responses) } + + describe '#put_rule' do + subject!(:put_rule) { client.put_rule({ + name: "RuleName", # required + tags: [ + { + key: "TagKey", # required + value: "TagValue", # required + }, + ], + }) + } + + let(:responses) do + { put_rule: { + rule_arn: "my-rule-arn" + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('eventbridge.put_rule') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('put_rule') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('eventbridge') + expect(span.get_tag('rulename')).to eq('RuleName') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('events.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('events.us-stubbed-1.amazonaws.com') + end + end + end + + context 'with a stepfunction client' do + let(:client) { ::Aws::States::Client.new(stub_responses: responses) } + + describe '#start_execution' do + subject!(:start_execution) { client.start_execution({ + state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine" # required + }) + } + + let(:responses) do + { start_execution: { + execution_arn: "execution-arn", + start_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00") + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('states.start_execution') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('start_execution') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('states') + expect(span.get_tag('statemachinearn')).to eq('arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine') + + expect(span.get_tag('region')).to eq('us-stubbed-1') + + expect(span.get_tag('statemachinename')).to eq('MyStateMachine') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('states.us-stubbed-1.amazonaws.com') + end + end + + describe '#create_state_machine' do + subject!(:create_state_machine) { client.create_state_machine({ + name: "my-state-machine-name", # required + definition: "Definition", # required + role_arn: "Arn", # required + }) + } + + let(:responses) do + { create_state_machine: { + state_machine_arn: "arn", + creation_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00") + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('states.create_state_machine') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('create_state_machine') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('states') + expect(span.get_tag('region')).to eq('us-stubbed-1') + + expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('states.us-stubbed-1.amazonaws.com') + end + end + + describe '#describe_state_machine' do + subject!(:describe_state_machine) { client.describe_state_machine({ + state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name", # required + }) + } + + let(:responses) do + { describe_state_machine: { + state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:example-state-machine", + name: "example-state-machine", + status: "ACTIVE", + definition: "{\"Comment\":\"An example state machine\",\"StartAt\":\"HelloWorld\",\"States\":{\"HelloWorld\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:hello-world\",\"End\":true}}}", + role_arn: "arn:aws:iam::123456789012:role/StateExecutionRole", + type: "STANDARD", + creation_date: Time.now, + logging_configuration: { + level: "ERROR", + include_execution_data: true, + destinations: [ + { + cloud_watch_logs_log_group: { + log_group_arn: "arn:aws:logs:us-east-1:123456789012:log-group:/aws/states/example-state-machine" + } + } + ] + }, + tracing_configuration: { + enabled: true + }, + label: "v1" + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('states.describe_state_machine') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('describe_state_machine') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('states') + expect(span.get_tag('region')).to eq('us-stubbed-1') + + expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('states.us-stubbed-1.amazonaws.com') + end + end + + describe '#update_state_machine' do + subject!(:update_state_machine) { client.update_state_machine({ + state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name", # required + }) + } + + let(:responses) do + { update_state_machine: { + update_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00") + } + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('states.update_state_machine') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('update_state_machine') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('states') + expect(span.get_tag('region')).to eq('us-stubbed-1') + + expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('states.us-stubbed-1.amazonaws.com') + end + end + + describe '#delete_state_machine' do + subject!(:delete_state_machine) { client.delete_state_machine({ + state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name", # required + }) + } + + let(:responses) do + { delete_state_machine: {} + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('states.delete_state_machine') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('delete_state_machine') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('states') + expect(span.get_tag('region')).to eq('us-stubbed-1') + + expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('states.us-stubbed-1.amazonaws.com') + end + end + + describe '#describe_execution' do + subject!(:describe_execution) { client.describe_execution({ + execution_arn: "arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution", + }) + } + + let(:responses) do + { describe_execution: { + execution_arn: "string", + state_machine_arn: "string", + name: "string", + status: "string", + start_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00"), + stop_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00"), + input: "string", + input_details: { + included: true|false, + }, + output: "string", + output_details: { + included: true|false, + }, + trace_header: "string", + map_run_arn: "string", + error: "string", + cause: "string", + } + + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('states.describe_execution') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('describe_execution') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('states') + expect(span.get_tag('region')).to eq('us-stubbed-1') + + expect(span.get_tag('statemachinename')).to eq('example-state-machine') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('states.us-stubbed-1.amazonaws.com') + end + end + + describe '#stop_execution' do + subject!(:stop_execution) { client.stop_execution({ + execution_arn: "arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution", + }) + } + + let(:responses) do + { stop_execution: { + stop_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00"), + } + + } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('states.stop_execution') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('stop_execution') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('states') + expect(span.get_tag('region')).to eq('us-stubbed-1') + + expect(span.get_tag('statemachinename')).to eq('example-state-machine') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('states.us-stubbed-1.amazonaws.com') + end + end + end end From d94697e072e7dcbf001cbec30feff08274a02c24 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 4 Apr 2023 15:36:23 -0700 Subject: [PATCH 03/44] lint and move logic to helper functions --- .../tracing/contrib/aws/instrumentation.rb | 169 +++--- .../tracing/contrib/aws/parsed_context.rb | 1 + .../contrib/aws/instrumentation_spec.rb | 517 ++++++++++-------- 3 files changed, 371 insertions(+), 316 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index 69460825b29..9eaa656bd15 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -30,80 +30,10 @@ def annotate!(span, context) span.span_type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND span.name = Ext::SPAN_COMMAND span.resource = context.safely(:resource) - aws_service = span.resource.split(".")[0] - span.set_tag("aws_service", aws_service) + aws_service = span.resource.split('.')[0] + span.set_tag('aws_service', aws_service) params = context.safely(:params) - - if aws_service == "sqs" - queue_url = params.fetch(:queue_url, "") - queue_name = params.fetch(:queue_name, "") - if queue_url - # example queue_url: https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName - queue_name = queue_url.split("/")[-1] - aws_account = queue_url.split("/")[-2] - span.set_tag("aws_account", aws_account) - #span.set_tag_str("aws.sqs.queue_url", queue_url) - end - span.set_tag("queuename", queue_name) - end - - if aws_service == "sns" - topic_arn = params.fetch(:topic_arn, nil) - topic_name = params.fetch(:name, nil) - if topic_arn - # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name - topic_name = topic_arn.split(":")[-1] - aws_account = topic_arn.split(":")[-2] - span.set_tag("aws_account", aws_account) - end - span.set_tag("topicname", topic_name) - - end - if aws_service == "dynamodb" - table_name = params.fetch(:table_name, "") - span.set_tag("tablename", table_name) - end - if aws_service == "kinesis" - stream_arn = params.fetch(:stream_arn, nil) - stream_name = params.fetch(:stream_name, "") - if stream_arn - # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream - stream_name = stream_arn.split("/")[-1] rescue "" - aws_account = stream_arn.split(":")[-2] rescue "" - span.set_tag("aws_account", aws_account) - end - puts params.class - span.set_tag("streamname", stream_name) - end - if aws_service == "eventbridge" - rule_name = params.fetch(:name, nil) || params.fetch(:rule, nil) - span.set_tag("rulename", rule_name) - end - if aws_service == "states" - #CRUD operations: - state_machine_name = params.fetch(:name, nil) - state_machine_arn = params.fetch(:state_machine_arn, nil) - execution_arn = params.fetch(:execution_arn, nil) - - if execution_arn - # example execution_arn = 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' - state_machine_name = execution_arn.split(":")[-2] - end - - if state_machine_arn - span.set_tag("statemachinearn", state_machine_arn) - # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine - state_machine_name = state_machine_arn.split(":")[-1] - end - state_machine_account_id = - span.set_tag("aws_account", state_machine_account_id) - #state_machine_name = create_state_machine_name || start_execution_state_machine_name - span.set_tag("statemachinename", state_machine_name) - end - if aws_service == "s3" - bucket_name = params.fetch(:bucket, nil) - span.set_tag("bucketname", bucket_name) - end + add_service_specific_tags(span, aws_service, params) span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT) @@ -125,12 +55,103 @@ def annotate!(span, context) span.set_tag(Ext::TAG_REGION, context.safely(:region)) span.set_tag(Ext::TAG_TOP_LEVEL_REGION, context.safely(:region)) span.set_tag(Ext::TAG_PATH, context.safely(:path)) - span.set_tag("httpEndpoint", context.safely(:endpoint)) + span.set_tag('httpEndpoint', context.safely(:endpoint)) span.set_tag(Ext::TAG_HOST, context.safely(:host)) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, context.safely(:http_method)) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, context.safely(:status_code)) end + def add_service_specific_tags(span, aws_service, params) + case aws_service + when 'sqs' + add_sqs_tags(span, params) + when 'sns' + add_sns_tags(span, params) + when 'dynamodb' + add_dynamodb_tags(span, params) + when 'kinesis' + add_kinesis_tags(span, params) + when 'eventbridge' + add_eventbridge_tags(span, params) + when 'states' + add_states_tags(span, params) + when 's3' + add_s3_tags(span, params) + end + end + + def add_sqs_tags(span, params) + queue_url = params.fetch(:queue_url, '') + queue_name = params.fetch(:queue_name, '') + if queue_url + # example queue_url: https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName + queue_name = queue_url.split('/')[-1] + aws_account = queue_url.split('/')[-2] + span.set_tag('aws_account', aws_account) + end + span.set_tag('queuename', queue_name) + end + + def add_sns_tags(span, params) + topic_arn = params.fetch(:topic_arn, nil) + topic_name = params.fetch(:name, nil) + if topic_arn + # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name + topic_name = topic_arn.split(':')[-1] + aws_account = topic_arn.split(':')[-2] + span.set_tag('aws_account', aws_account) + end + span.set_tag('topicname', topic_name) + end + + def add_dynamodb_tags(span, params) + table_name = params.fetch(:table_name, '') + span.set_tag('tablename', table_name) + end + + def add_kinesis_tags(span, params) + stream_arn = params.fetch(:stream_arn, nil) + stream_name = params.fetch(:stream_name, '') + if stream_arn + # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream + stream_name = stream_arn.split('/')[-1] rescue '' + aws_account = stream_arn.split(':')[-2] rescue '' + span.set_tag('aws_account', aws_account) + end + span.set_tag('streamname', stream_name) + end + + def add_eventbridge_tags(span, params) + rule_name = params.fetch(:name, nil) || params.fetch(:rule, nil) + span.set_tag('rulename', rule_name) + end + + def add_states_tags(span, params) + state_machine_name = params.fetch(:name, nil) + state_machine_arn = params.fetch(:state_machine_arn, nil) + execution_arn = params.fetch(:execution_arn, nil) + + if execution_arn + # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' + state_machine_name = execution_arn.split(':')[-2] + end + + if state_machine_arn + span.set_tag('statemachinearn', state_machine_arn) + # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine + state_machine_name = state_machine_arn.split(':')[-1] + state_machine_account_id = state_machine_arn.split(':')[-3] + end + span.set_tag('aws_account', state_machine_account_id) + # state_machine_name = create_state_machine_name || start_execution_state_machine_name + span.set_tag('statemachinename', state_machine_name) + end + + def add_s3_tags(span, params) + bucket_name = params.fetch(:bucket, nil) + span.set_tag('bucketname', bucket_name) + end + def configuration Datadog.configuration.tracing[:aws] end diff --git a/lib/datadog/tracing/contrib/aws/parsed_context.rb b/lib/datadog/tracing/contrib/aws/parsed_context.rb index d6fe3b650d8..ffe25b1738c 100644 --- a/lib/datadog/tracing/contrib/aws/parsed_context.rb +++ b/lib/datadog/tracing/contrib/aws/parsed_context.rb @@ -55,6 +55,7 @@ def metadata def config context.config end + def host context.http_request.endpoint.host end diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 991fe82f27a..86e5c46d3a8 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -97,13 +97,13 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('s3.list_buckets') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('list_buckets') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('s3') - #expect(span.get_tag('bucketname')).to eq('bucket1') + # expect(span.get_tag('bucketname')).to eq('bucket1') expect(span.get_tag('path')).to eq('/') expect(span.get_tag('host')).to eq('s3.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('GET') @@ -127,7 +127,7 @@ end describe '#list_objects' do - subject!(:list_objects) { client.list_objects(bucket: "bucketname", max_keys:2) } + subject!(:list_objects) { client.list_objects(bucket: 'bucketname', max_keys: 2) } let(:responses) do { list_objects: {} } @@ -137,7 +137,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('s3.list_objects') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('list_objects') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -183,23 +183,28 @@ end end end + context 'with an SQS client' do let(:client) { ::Aws::SQS::Client.new(stub_responses: responses) } describe '#send_message' do - subject!(:send_message) { client.send_message({ - queue_url: "https://sqs.us-stubbed-1.amazonaws.com/123456789012/MyQueueName", - message_body: "Hello, world!" - }) } + subject!(:send_message) do + client.send_message( + { + queue_url: 'https://sqs.us-stubbed-1.amazonaws.com/123456789012/MyQueueName', + message_body: 'Hello, world!' + } + ) + end let(:responses) do - { send_message: { - md5_of_message_body: "msg body", - md5_of_message_attributes: "msg attributes", - md5_of_message_system_attributes: "message system attributes", - message_id: "123", - sequence_number: "456" - } } + { send_message: { + md5_of_message_body: 'msg body', + md5_of_message_attributes: 'msg attributes', + md5_of_message_system_attributes: 'message system attributes', + message_id: '123', + sequence_number: '456' + } } end it 'generates a span' do @@ -207,7 +212,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('sqs.send_message') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('send_message') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -232,39 +237,43 @@ end describe '#send_message_batch' do - subject!(:send_message_batch) { client.send_message_batch({ - queue_url: "https://sqs.us-stubbed-1.amazonaws.com/123456789012/MyQueueName", - entries: [ # required - { - id: "String", # required - message_body: "String", # required - delay_seconds: 1, - message_attributes: { - "String" => { - string_value: "String", - binary_value: "data", - string_list_values: ["String"], - binary_list_values: ["data"], - data_type: "String", # required + subject!(:send_message_batch) do + client.send_message_batch( + { + queue_url: 'https://sqs.us-stubbed-1.amazonaws.com/123456789012/MyQueueName', + entries: [ # required + { + id: 'String', # required + message_body: 'String', # required + delay_seconds: 1, + message_attributes: { + 'String' => { + string_value: 'String', + binary_value: 'data', + string_list_values: ['String'], + binary_list_values: ['data'], + data_type: 'String', # required + }, }, - }, - message_system_attributes: { - "AWSTraceHeader" => { - string_value: "String", - binary_value: "data", - string_list_values: ["String"], - binary_list_values: ["data"], - data_type: "String", # required + message_system_attributes: { + 'AWSTraceHeader' => { + string_value: 'String', + binary_value: 'data', + string_list_values: ['String'], + binary_list_values: ['data'], + data_type: 'String', # required + }, }, + message_deduplication_id: 'String', + message_group_id: 'String', }, - message_deduplication_id: "String", - message_group_id: "String", - }, - ], - }) } + ], + } + ) + end let(:responses) do - { send_message_batch: { + { send_message_batch: { successful: [], failed: [] } } @@ -275,7 +284,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('sqs.send_message_batch') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('send_message_batch') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -304,17 +313,20 @@ let(:client) { ::Aws::SNS::Client.new(stub_responses: responses) } describe '#publish' do - subject!(:publish) { client.publish({ - topic_arn: "arn:aws:sns:us-west-2:123456789012:my-topic-name", - message: 'Hello, world!' - }) } + subject!(:publish) do + client.publish( + { + topic_arn: 'arn:aws:sns:us-west-2:123456789012:my-topic-name', + message: 'Hello, world!' + } + ) + end let(:responses) do - { publish: { - message_id: "1234", - sequence_number: "5678" - } - } + { publish: { + message_id: '1234', + sequence_number: '5678' + } } end it 'generates a span' do @@ -322,7 +334,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('sns.publish') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('publish') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -347,31 +359,35 @@ end describe '#publish_batch' do - subject!(:publish_batch) { client.publish_batch({ - topic_arn: "arn:aws:sns:us-west-2:123456789012:my-topic-name", - publish_batch_request_entries: [ # required + subject!(:publish_batch) do + client.publish_batch( { - id: "String", # required - message: "message", # required - subject: "subject", - message_structure: "messageStructure", - message_attributes: { - "String" => { - data_type: "String", # required - string_value: "String", - binary_value: "data", + topic_arn: 'arn:aws:sns:us-west-2:123456789012:my-topic-name', + publish_batch_request_entries: [ # required + { + id: 'String', # required + message: 'message', # required + subject: 'subject', + message_structure: 'messageStructure', + message_attributes: { + 'String' => { + data_type: 'String', # required + string_value: 'String', + binary_value: 'data', + }, + }, + message_deduplication_id: 'String', + message_group_id: 'String', }, - }, - message_deduplication_id: "String", - message_group_id: "String", - }, - ], }) } + ], + } + ) + end let(:responses) do - { publish_batch: { + { publish_batch: { - } - } + } } end it 'generates a span' do @@ -379,7 +395,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('sns.publish_batch') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('publish_batch') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -404,26 +420,28 @@ end describe '#create_topic' do - subject!(:create_topic) { client.create_topic({ - name: "topicName", # required - attributes: { - "attributeName" => "attributeValue", - }, - tags: [ - { - key: "TagKey", # required - value: "TagValue", # required + subject!(:create_topic) do + client.create_topic( + { + name: 'topicName', # required + attributes: { + 'attributeName' => 'attributeValue', }, - ], - data_protection_policy: "attributeValue", - }) - } + tags: [ + { + key: 'TagKey', # required + value: 'TagValue', # required + }, + ], + data_protection_policy: 'attributeValue', + } + ) + end let(:responses) do - { create_topic: { + { create_topic: { - } - } + } } end it 'generates a span' do @@ -431,7 +449,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('sns.create_topic') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('create_topic') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -459,17 +477,16 @@ let(:client) { ::Aws::DynamoDB::Client.new(stub_responses: responses) } describe '#get_item' do - subject!(:get_item) { client.get_item(table_name: "my-table-name", key: {'id':'1234'}) } + subject!(:get_item) { client.get_item(table_name: 'my-table-name', key: { id: '1234' }) } let(:responses) do - { get_item: { - item: { - "AlbumTitle" => "Songs About Life", - "Artist" => "Acme Band", - "SongTitle" => "Happy Day", - } - } - } + { get_item: { + item: { + 'AlbumTitle' => 'Songs About Life', + 'Artist' => 'Acme Band', + 'SongTitle' => 'Happy Day', + } + } } end it 'generates a span' do @@ -477,7 +494,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('dynamodb.get_item') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('get_item') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -505,21 +522,21 @@ let(:client) { ::Aws::Kinesis::Client.new(stub_responses: responses) } describe '#put_record' do - subject!(:put_record) { client.put_record( - stream_name: "my-stream-name", - stream_arn: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream-name", - partition_key: "parition-1", - data: "Hello world!" - ) - } + subject!(:put_record) do + client.put_record( + stream_name: 'my-stream-name', + stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream-name', + partition_key: 'parition-1', + data: 'Hello world!' + ) + end let(:responses) do - { put_record: { - shard_id: "1234", - sequence_number: "5678", - encryption_type: "NONE" - } - } + { put_record: { + shard_id: '1234', + sequence_number: '5678', + encryption_type: 'NONE' + } } end it 'generates a span' do @@ -527,7 +544,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('kinesis.put_record') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('put_record') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -551,20 +568,19 @@ end end - describe '#get_shard_iterator' do - subject!(:get_shard_iterator) { client.get_shard_iterator( - stream_name: "StreamName", # required - shard_id: "ShardId", # required - shard_iterator_type: "AT_SEQUENCE_NUMBER", # required - ) - } + subject!(:get_shard_iterator) do + client.get_shard_iterator( + stream_name: 'StreamName', # required + shard_id: 'ShardId', # required + shard_iterator_type: 'AT_SEQUENCE_NUMBER', # required + ) + end let(:responses) do - { get_shard_iterator: { - shard_iterator: "shard-iterator" - } - } + { get_shard_iterator: { + shard_iterator: 'shard-iterator' + } } end it 'generates a span' do @@ -572,7 +588,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('kinesis.get_shard_iterator') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('get_shard_iterator') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -594,29 +610,30 @@ .to eq('kinesis.us-stubbed-1.amazonaws.com') end end - end context 'with an eventbridge client' do let(:client) { ::Aws::EventBridge::Client.new(stub_responses: responses) } describe '#put_rule' do - subject!(:put_rule) { client.put_rule({ - name: "RuleName", # required - tags: [ + subject!(:put_rule) do + client.put_rule( { - key: "TagKey", # required - value: "TagValue", # required - }, - ], - }) - } + name: 'RuleName', # required + tags: [ + { + key: 'TagKey', # required + value: 'TagValue', # required + }, + ], + } + ) + end let(:responses) do - { put_rule: { - rule_arn: "my-rule-arn" - } - } + { put_rule: { + rule_arn: 'my-rule-arn' + } } end it 'generates a span' do @@ -624,7 +641,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('eventbridge.put_rule') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('put_rule') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -652,17 +669,19 @@ let(:client) { ::Aws::States::Client.new(stub_responses: responses) } describe '#start_execution' do - subject!(:start_execution) { client.start_execution({ - state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine" # required - }) - } + subject!(:start_execution) do + client.start_execution( + { + state_machine_arn: 'arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine' # required + } + ) + end let(:responses) do - { start_execution: { - execution_arn: "execution-arn", - start_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00") - } - } + { start_execution: { + execution_arn: 'execution-arn', + start_date: Time.new(2023, 3, 31, 12, 30, 0, '-04:00') + } } end it 'generates a span' do @@ -670,13 +689,13 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('states.start_execution') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('start_execution') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') expect(span.get_tag('statemachinearn')).to eq('arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine') - + expect(span.get_tag('aws_account')).to eq('123456789012') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('statemachinename')).to eq('MyStateMachine') @@ -697,19 +716,21 @@ end describe '#create_state_machine' do - subject!(:create_state_machine) { client.create_state_machine({ - name: "my-state-machine-name", # required - definition: "Definition", # required - role_arn: "Arn", # required - }) - } + subject!(:create_state_machine) do + client.create_state_machine( + { + name: 'my-state-machine-name', # required + definition: 'Definition', # required + role_arn: 'Arn', # required + } + ) + end let(:responses) do - { create_state_machine: { - state_machine_arn: "arn", - creation_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00") - } - } + { create_state_machine: { + state_machine_arn: 'arn', + creation_date: Time.new(2023, 3, 31, 12, 30, 0, '-04:00') + } } end it 'generates a span' do @@ -717,7 +738,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('states.create_state_machine') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('create_state_machine') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -742,37 +763,43 @@ end describe '#describe_state_machine' do - subject!(:describe_state_machine) { client.describe_state_machine({ - state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name", # required - }) - } + subject!(:describe_state_machine) do + client.describe_state_machine( + { + state_machine_arn: 'arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name', # required + } + ) + end let(:responses) do { describe_state_machine: { - state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:example-state-machine", - name: "example-state-machine", - status: "ACTIVE", - definition: "{\"Comment\":\"An example state machine\",\"StartAt\":\"HelloWorld\",\"States\":{\"HelloWorld\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:hello-world\",\"End\":true}}}", - role_arn: "arn:aws:iam::123456789012:role/StateExecutionRole", - type: "STANDARD", - creation_date: Time.now, - logging_configuration: { - level: "ERROR", - include_execution_data: true, - destinations: [ - { - cloud_watch_logs_log_group: { - log_group_arn: "arn:aws:logs:us-east-1:123456789012:log-group:/aws/states/example-state-machine" - } + state_machine_arn: 'arn:aws:states:us-east-1:123456789012:stateMachine:example-state-machine', + name: 'example-state-machine', + status: 'ACTIVE', + definition: '{\'Comment\':\'An example state machine\', + \'StartAt\':\'HelloWorld\', + \'States\':{\'HelloWorld\':{\'Type\':\'Task\', + \'Resource\':\'arn:aws:lambda:us-east-1:123456789012:function:hello-world\', + \'End\':true}}}', + role_arn: 'arn:aws:iam::123456789012:role/StateExecutionRole', + type: 'STANDARD', + creation_date: Time.now, + logging_configuration: { + level: 'ERROR', + include_execution_data: true, + destinations: [ + { + cloud_watch_logs_log_group: { + log_group_arn: 'arn:aws:logs:us-east-1:123456789012:log-group:/aws/states/example-state-machine' } - ] - }, - tracing_configuration: { - enabled: true - }, - label: "v1" - } - } + } + ] + }, + tracing_configuration: { + enabled: true + }, + label: 'v1' + } } end it 'generates a span' do @@ -780,7 +807,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('states.describe_state_machine') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('describe_state_machine') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -805,16 +832,18 @@ end describe '#update_state_machine' do - subject!(:update_state_machine) { client.update_state_machine({ - state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name", # required - }) - } + subject!(:update_state_machine) do + client.update_state_machine( + { + state_machine_arn: 'arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name', # required + } + ) + end let(:responses) do - { update_state_machine: { - update_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00") - } - } + { update_state_machine: { + update_date: Time.new(2023, 3, 31, 12, 30, 0, '-04:00') + } } end it 'generates a span' do @@ -822,7 +851,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('states.update_state_machine') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('update_state_machine') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -847,14 +876,16 @@ end describe '#delete_state_machine' do - subject!(:delete_state_machine) { client.delete_state_machine({ - state_machine_arn: "arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name", # required - }) - } + subject!(:delete_state_machine) do + client.delete_state_machine( + { + state_machine_arn: 'arn:aws:states:us-east-1:123456789012:stateMachine:my-state-machine-name', # required + } + ) + end let(:responses) do - { delete_state_machine: {} - } + { delete_state_machine: {} } end it 'generates a span' do @@ -862,7 +893,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('states.delete_state_machine') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('delete_state_machine') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -887,34 +918,35 @@ end describe '#describe_execution' do - subject!(:describe_execution) { client.describe_execution({ - execution_arn: "arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution", - }) - } + subject!(:describe_execution) do + client.describe_execution( + { + execution_arn: 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution', + } + ) + end let(:responses) do { describe_execution: { - execution_arn: "string", - state_machine_arn: "string", - name: "string", - status: "string", - start_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00"), - stop_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00"), - input: "string", + execution_arn: 'string', + state_machine_arn: 'string', + name: 'string', + status: 'string', + start_date: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stop_date: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + input: 'string', input_details: { - included: true|false, + included: true | false, }, - output: "string", + output: 'string', output_details: { - included: true|false, + included: true | false, }, - trace_header: "string", - map_run_arn: "string", - error: "string", - cause: "string", - } - - } + trace_header: 'string', + map_run_arn: 'string', + error: 'string', + cause: 'string', + } } end it 'generates a span' do @@ -922,7 +954,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('states.describe_execution') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('describe_execution') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') @@ -947,17 +979,18 @@ end describe '#stop_execution' do - subject!(:stop_execution) { client.stop_execution({ - execution_arn: "arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution", - }) - } + subject!(:stop_execution) do + client.stop_execution( + { + execution_arn: 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution', + } + ) + end let(:responses) do { stop_execution: { - stop_date: Time.new(2023, 3, 31, 12, 30, 0, "-04:00"), - } - - } + stop_date: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + } } end it 'generates a span' do @@ -965,7 +998,7 @@ expect(span.service).to eq('aws') expect(span.span_type).to eq('http') expect(span.resource).to eq('states.stop_execution') - + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('stop_execution') expect(span.get_tag('aws.region')).to eq('us-stubbed-1') From 4ada87bfa1b83bfa50358b71c1dd73efc1db18a0 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Wed, 5 Apr 2023 09:58:00 -0700 Subject: [PATCH 04/44] fix unit tests breaking in ci --- .../contrib/aws/instrumentation_spec.rb | 92 +------------------ 1 file changed, 5 insertions(+), 87 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 86e5c46d3a8..1aacb964bc1 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -358,67 +358,6 @@ end end - describe '#publish_batch' do - subject!(:publish_batch) do - client.publish_batch( - { - topic_arn: 'arn:aws:sns:us-west-2:123456789012:my-topic-name', - publish_batch_request_entries: [ # required - { - id: 'String', # required - message: 'message', # required - subject: 'subject', - message_structure: 'messageStructure', - message_attributes: { - 'String' => { - data_type: 'String', # required - string_value: 'String', - binary_value: 'data', - }, - }, - message_deduplication_id: 'String', - message_group_id: 'String', - }, - ], - } - ) - end - - let(:responses) do - { publish_batch: { - - } } - end - - it 'generates a span' do - expect(span.name).to eq('aws.command') - expect(span.service).to eq('aws') - expect(span.span_type).to eq('http') - expect(span.resource).to eq('sns.publish_batch') - - expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') - expect(span.get_tag('aws.operation')).to eq('publish_batch') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') - expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('aws_service')).to eq('sns') - expect(span.get_tag('aws_account')).to eq('123456789012') - expect(span.get_tag('topicname')).to eq('my-topic-name') - expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('sns.us-stubbed-1.amazonaws.com') - expect(span.get_tag('http.method')).to eq('POST') - expect(span.get_tag('http.status_code')).to eq('200') - expect(span.get_tag('span.kind')).to eq('client') - - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) - .to eq('command') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) - .to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('sns.us-stubbed-1.amazonaws.com') - end - end - describe '#create_topic' do subject!(:create_topic) do client.create_topic( @@ -432,8 +371,7 @@ key: 'TagKey', # required value: 'TagValue', # required }, - ], - data_protection_policy: 'attributeValue', + ] } ) end @@ -525,7 +463,6 @@ subject!(:put_record) do client.put_record( stream_name: 'my-stream-name', - stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream-name', partition_key: 'parition-1', data: 'Hello world!' ) @@ -550,10 +487,9 @@ expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('kinesis') - expect(span.get_tag('aws_account')).to eq('123456789012') expect(span.get_tag('streamname')).to eq('my-stream-name') expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('123456789012.data-kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('POST') expect(span.get_tag('http.status_code')).to eq('200') expect(span.get_tag('span.kind')).to eq('client') @@ -564,7 +500,7 @@ expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) .to eq('aws') expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('123456789012.data-kinesis.us-stubbed-1.amazonaws.com') + .to eq('kinesis.us-stubbed-1.amazonaws.com') end end @@ -783,22 +719,7 @@ \'End\':true}}}', role_arn: 'arn:aws:iam::123456789012:role/StateExecutionRole', type: 'STANDARD', - creation_date: Time.now, - logging_configuration: { - level: 'ERROR', - include_execution_data: true, - destinations: [ - { - cloud_watch_logs_log_group: { - log_group_arn: 'arn:aws:logs:us-east-1:123456789012:log-group:/aws/states/example-state-machine' - } - } - ] - }, - tracing_configuration: { - enabled: true - }, - label: 'v1' + creation_date: Time.now } } end @@ -942,10 +863,7 @@ output_details: { included: true | false, }, - trace_header: 'string', - map_run_arn: 'string', - error: 'string', - cause: 'string', + trace_header: 'string' } } end From 56a99043411e0f9fb325c1403c363410c767d3f8 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 6 Apr 2023 09:36:58 -0700 Subject: [PATCH 05/44] only run instrumentation spec when ruby version is 2.2.0 or greater --- .../tracing/contrib/aws/instrumentation_spec.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 1aacb964bc1..7fc9ffe99dc 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -74,7 +74,7 @@ end end - context 'with an S3 client' do + context 'with an S3 client' if: RUBY_VERSION >= '2.2.0' do let(:client) { ::Aws::S3::Client.new(stub_responses: responses) } describe '#list_buckets' do @@ -184,7 +184,7 @@ end end - context 'with an SQS client' do + context 'with an SQS client' if: RUBY_VERSION >= '2.2.0' do let(:client) { ::Aws::SQS::Client.new(stub_responses: responses) } describe '#send_message' do @@ -309,7 +309,7 @@ end end - context 'with an SNS client' do + context 'with an SNS client' if: RUBY_VERSION >= '2.2.0' do let(:client) { ::Aws::SNS::Client.new(stub_responses: responses) } describe '#publish' do @@ -411,7 +411,7 @@ end end - context 'with an dynamodb client' do + context 'with an dynamodb client' if: RUBY_VERSION >= '2.2.0' do let(:client) { ::Aws::DynamoDB::Client.new(stub_responses: responses) } describe '#get_item' do @@ -456,7 +456,7 @@ end end - context 'with an kinesis client' do + context 'with an kinesis client' if: RUBY_VERSION >= '2.2.0' do let(:client) { ::Aws::Kinesis::Client.new(stub_responses: responses) } describe '#put_record' do @@ -548,7 +548,7 @@ end end - context 'with an eventbridge client' do + context 'with an eventbridge client' if: RUBY_VERSION >= '2.2.0' do let(:client) { ::Aws::EventBridge::Client.new(stub_responses: responses) } describe '#put_rule' do @@ -601,7 +601,7 @@ end end - context 'with a stepfunction client' do + context 'with a stepfunction client' if: RUBY_VERSION >= '2.2.0' do let(:client) { ::Aws::States::Client.new(stub_responses: responses) } describe '#start_execution' do From 035aeb193162c5d1c9c54a1fca7d32b81a3b880e Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Wed, 12 Apr 2023 17:32:40 -0700 Subject: [PATCH 06/44] remove unneeded parsed context, and edit tests --- .../tracing/contrib/aws/parsed_context.rb | 12 ------------ .../tracing/contrib/aws/instrumentation_spec.rb | 16 ++++++++-------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/parsed_context.rb b/lib/datadog/tracing/contrib/aws/parsed_context.rb index ffe25b1738c..95cb44c3c26 100644 --- a/lib/datadog/tracing/contrib/aws/parsed_context.rb +++ b/lib/datadog/tracing/contrib/aws/parsed_context.rb @@ -44,18 +44,6 @@ def path context.http_request.endpoint.path end - def endpoint - context.http_request.endpoint - end - - def metadata - context.metadata - end - - def config - context.config - end - def host context.http_request.endpoint.host end diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 7fc9ffe99dc..1ca59637bd9 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -26,7 +26,7 @@ Datadog.registry[:aws].reset_configuration! end - context 'with a core AWS SDK client', if: RUBY_VERSION >= '2.2.0' do + context 'with a core AWS SDK client', if: RUBY_VERSION >= '2.3.0' do before { hide_const('Aws::S3') } let(:client) { ::Aws::STS::Client.new(stub_responses: responses) } # STS is part of aws-sdk-core @@ -74,7 +74,7 @@ end end - context 'with an S3 client' if: RUBY_VERSION >= '2.2.0' do + context 'with an S3 client', if: RUBY_VERSION >= '2.3.0' do let(:client) { ::Aws::S3::Client.new(stub_responses: responses) } describe '#list_buckets' do @@ -184,7 +184,7 @@ end end - context 'with an SQS client' if: RUBY_VERSION >= '2.2.0' do + context 'with an SQS client', if: RUBY_VERSION >= '2.3.0' do let(:client) { ::Aws::SQS::Client.new(stub_responses: responses) } describe '#send_message' do @@ -309,7 +309,7 @@ end end - context 'with an SNS client' if: RUBY_VERSION >= '2.2.0' do + context 'with an SNS client', if: RUBY_VERSION >= '2.3.0' do let(:client) { ::Aws::SNS::Client.new(stub_responses: responses) } describe '#publish' do @@ -411,7 +411,7 @@ end end - context 'with an dynamodb client' if: RUBY_VERSION >= '2.2.0' do + context 'with an dynamodb client', if: RUBY_VERSION >= '2.3.0' do let(:client) { ::Aws::DynamoDB::Client.new(stub_responses: responses) } describe '#get_item' do @@ -456,7 +456,7 @@ end end - context 'with an kinesis client' if: RUBY_VERSION >= '2.2.0' do + context 'with an kinesis client', if: RUBY_VERSION >= '2.3.0' do let(:client) { ::Aws::Kinesis::Client.new(stub_responses: responses) } describe '#put_record' do @@ -548,7 +548,7 @@ end end - context 'with an eventbridge client' if: RUBY_VERSION >= '2.2.0' do + context 'with an eventbridge client', if: RUBY_VERSION >= '2.3.0' do let(:client) { ::Aws::EventBridge::Client.new(stub_responses: responses) } describe '#put_rule' do @@ -601,7 +601,7 @@ end end - context 'with a stepfunction client' if: RUBY_VERSION >= '2.2.0' do + context 'with a stepfunction client', if: RUBY_VERSION >= '2.3.0' do let(:client) { ::Aws::States::Client.new(stub_responses: responses) } describe '#start_execution' do From 2c549e1218f73ee724b2105980e3900d875c7dfc Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Wed, 12 Apr 2023 17:48:27 -0700 Subject: [PATCH 07/44] Trigger CI build From 01dac1b5fb4b02807d4f8d8e425bb338eb8d64e8 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 10:51:51 -0700 Subject: [PATCH 08/44] remove duplicate aws.region tag, add test coverage for different sdk requests, and move tag keys to constants file --- lib/datadog/tracing/contrib/aws/ext.rb | 12 +- .../tracing/contrib/aws/instrumentation.rb | 31 ++-- .../contrib/aws/instrumentation_spec.rb | 144 +++++++++++++----- 3 files changed, 129 insertions(+), 58 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/ext.rb b/lib/datadog/tracing/contrib/aws/ext.rb index 6acde9f4703..5a6fcc6bab0 100644 --- a/lib/datadog/tracing/contrib/aws/ext.rb +++ b/lib/datadog/tracing/contrib/aws/ext.rb @@ -18,8 +18,16 @@ module Ext TAG_OPERATION = 'aws.operation'.freeze TAG_OPERATION_COMMAND = 'command'.freeze TAG_PATH = 'path'.freeze - TAG_REGION = 'aws.region'.freeze - TAG_TOP_LEVEL_REGION = 'region'.freeze + TAG_REGION = 'region'.freeze + TAG_AWS_SERVICE = 'aws_service'.freeze + TAG_AWS_ACCOUNT = 'aws_account'.freeze + TAG_QUEUE_NAME = 'queuename'.freeze + TAG_TOPIC_NAME = 'topicname'.freeze + TAG_TABLE_NAME = 'tablename'.freeze + TAG_STREAM_NAME = 'streamname'.freeze + TAG_RULE_NAME = 'rulename'.freeze + TAG_STATE_MACHINE_NAME = 'statemachinename'.freeze + TAG_BUCKET_NAME = 'bucketname'.freeze end end end diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index 9eaa656bd15..63367e4e958 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -31,7 +31,7 @@ def annotate!(span, context) span.name = Ext::SPAN_COMMAND span.resource = context.safely(:resource) aws_service = span.resource.split('.')[0] - span.set_tag('aws_service', aws_service) + span.set_tag(Ext::TAG_AWS_SERVICE, aws_service) params = context.safely(:params) add_service_specific_tags(span, aws_service, params) @@ -53,9 +53,7 @@ def annotate!(span, context) span.set_tag(Ext::TAG_AGENT, Ext::TAG_DEFAULT_AGENT) span.set_tag(Ext::TAG_OPERATION, context.safely(:operation)) span.set_tag(Ext::TAG_REGION, context.safely(:region)) - span.set_tag(Ext::TAG_TOP_LEVEL_REGION, context.safely(:region)) span.set_tag(Ext::TAG_PATH, context.safely(:path)) - span.set_tag('httpEndpoint', context.safely(:endpoint)) span.set_tag(Ext::TAG_HOST, context.safely(:host)) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, context.safely(:http_method)) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, context.safely(:status_code)) @@ -81,15 +79,15 @@ def add_service_specific_tags(span, aws_service, params) end def add_sqs_tags(span, params) - queue_url = params.fetch(:queue_url, '') - queue_name = params.fetch(:queue_name, '') + queue_url = params.fetch(:queue_url, nil) + queue_name = params.fetch(:queue_name, nil) if queue_url # example queue_url: https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName queue_name = queue_url.split('/')[-1] aws_account = queue_url.split('/')[-2] - span.set_tag('aws_account', aws_account) + span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) end - span.set_tag('queuename', queue_name) + span.set_tag(Ext::TAG_QUEUE_NAME, queue_name) end def add_sns_tags(span, params) @@ -99,14 +97,14 @@ def add_sns_tags(span, params) # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name topic_name = topic_arn.split(':')[-1] aws_account = topic_arn.split(':')[-2] - span.set_tag('aws_account', aws_account) + span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) end - span.set_tag('topicname', topic_name) + span.set_tag(Ext::TAG_TOPIC_NAME, topic_name) end def add_dynamodb_tags(span, params) table_name = params.fetch(:table_name, '') - span.set_tag('tablename', table_name) + span.set_tag(Ext::TAG_TABLE_NAME, table_name) end def add_kinesis_tags(span, params) @@ -116,14 +114,14 @@ def add_kinesis_tags(span, params) # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream stream_name = stream_arn.split('/')[-1] rescue '' aws_account = stream_arn.split(':')[-2] rescue '' - span.set_tag('aws_account', aws_account) + span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) end - span.set_tag('streamname', stream_name) + span.set_tag(Ext::TAG_STREAM_NAME, stream_name) end def add_eventbridge_tags(span, params) rule_name = params.fetch(:name, nil) || params.fetch(:rule, nil) - span.set_tag('rulename', rule_name) + span.set_tag(Ext::TAG_RULE_NAME, rule_name) end def add_states_tags(span, params) @@ -137,19 +135,18 @@ def add_states_tags(span, params) end if state_machine_arn - span.set_tag('statemachinearn', state_machine_arn) # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine state_machine_name = state_machine_arn.split(':')[-1] state_machine_account_id = state_machine_arn.split(':')[-3] end - span.set_tag('aws_account', state_machine_account_id) + span.set_tag(Ext::TAG_AWS_ACCOUNT, state_machine_account_id) # state_machine_name = create_state_machine_name || start_execution_state_machine_name - span.set_tag('statemachinename', state_machine_name) + span.set_tag(Ext::TAG_STATE_MACHINE_NAME, state_machine_name) end def add_s3_tags(span, params) bucket_name = params.fetch(:bucket, nil) - span.set_tag('bucketname', bucket_name) + span.set_tag(Ext::TAG_BUCKET_NAME, bucket_name) end def configuration diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 1ca59637bd9..5cb67050e5e 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -52,7 +52,7 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('get_access_key_info') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('sts.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('POST') @@ -100,7 +100,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('list_buckets') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('s3') # expect(span.get_tag('bucketname')).to eq('bucket1') @@ -140,7 +139,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('list_objects') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('s3') expect(span.get_tag('bucketname')).to eq('bucketname') @@ -215,7 +213,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('send_message') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('sqs') expect(span.get_tag('aws_account')).to eq('123456789012') @@ -287,7 +284,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('send_message_batch') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('sqs') expect(span.get_tag('aws_account')).to eq('123456789012') @@ -307,6 +303,49 @@ .to eq('sqs.us-stubbed-1.amazonaws.com') end end + + describe '#get_queue_url' do + subject!(:get_queue_url) do + client.get_queue_url( + { + queue_name: 'MyQueueName', + queue_owner_aws_account_id: '1234', + } + ) + end + + let(:responses) do + { get_queue_url: { + queue_url: "myQueueURL" + } } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('sqs.get_queue_url') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('get_queue_url') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('sqs') + expect(span.get_tag('queuename')).to eq('MyQueueName') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('sqs.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('sqs.us-stubbed-1.amazonaws.com') + end + end end context 'with an SNS client', if: RUBY_VERSION >= '2.3.0' do @@ -337,7 +376,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('publish') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('sns') expect(span.get_tag('aws_account')).to eq('123456789012') @@ -390,7 +428,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('create_topic') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('sns') expect(span.get_tag('topicname')).to eq('topicName') @@ -435,7 +472,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('get_item') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('dynamodb') expect(span.get_tag('tablename')).to eq('my-table-name') @@ -484,7 +520,6 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('put_record') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('kinesis') expect(span.get_tag('streamname')).to eq('my-stream-name') @@ -504,18 +539,24 @@ end end - describe '#get_shard_iterator' do - subject!(:get_shard_iterator) do - client.get_shard_iterator( - stream_name: 'StreamName', # required - shard_id: 'ShardId', # required - shard_iterator_type: 'AT_SEQUENCE_NUMBER', # required + describe '#describe_stream_consumer' do + subject!(:describe_stream_consumer) do + client.describe_stream_consumer( + stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required + consumer_name: 'cosumerName', # required + consumer_arn: 'consumerArn', # required ) end let(:responses) do - { get_shard_iterator: { - shard_iterator: 'shard-iterator' + { describe_stream_consumer: { + consumer_description: { + consumer_name: "John Doe", + consumer_arn: "consumerArn", + consumer_status: "CREATING", + consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stream_arn: "streamArn" + } } } end @@ -523,16 +564,15 @@ expect(span.name).to eq('aws.command') expect(span.service).to eq('aws') expect(span.span_type).to eq('http') - expect(span.resource).to eq('kinesis.get_shard_iterator') + expect(span.resource).to eq('kinesis.describe_stream_consumer') expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') - expect(span.get_tag('aws.operation')).to eq('get_shard_iterator') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('kinesis') - expect(span.get_tag('streamname')).to eq('StreamName') + expect(span.get_tag('streamname')).to eq('my-stream') expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('POST') expect(span.get_tag('http.status_code')).to eq('200') expect(span.get_tag('span.kind')).to eq('client') @@ -543,7 +583,7 @@ expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) .to eq('aws') expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('kinesis.us-stubbed-1.amazonaws.com') + .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') end end end @@ -580,7 +620,48 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('put_rule') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('eventbridge') + expect(span.get_tag('rulename')).to eq('RuleName') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('events.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('events.us-stubbed-1.amazonaws.com') + end + end + + describe '#list_targets_by_rule' do + subject!(:list_targets_by_rule) do + client.list_targets_by_rule( + { + rule: 'RuleName', # required + } + ) + end + + let(:responses) do + { list_targets_by_rule: { + targets: [] + } } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('eventbridge.list_targets_by_rule') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('list_targets_by_rule') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('eventbridge') expect(span.get_tag('rulename')).to eq('RuleName') @@ -628,12 +709,9 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('start_execution') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') - expect(span.get_tag('statemachinearn')).to eq('arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine') expect(span.get_tag('aws_account')).to eq('123456789012') expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('statemachinename')).to eq('MyStateMachine') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') @@ -677,10 +755,8 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('create_state_machine') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') @@ -731,10 +807,8 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('describe_state_machine') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') @@ -775,10 +849,8 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('update_state_machine') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') @@ -817,10 +889,8 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('delete_state_machine') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('statemachinename')).to eq('my-state-machine-name') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') @@ -875,10 +945,8 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('describe_execution') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('statemachinename')).to eq('example-state-machine') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') @@ -919,10 +987,8 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('stop_execution') - expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('states') expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('statemachinename')).to eq('example-state-machine') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('states.us-stubbed-1.amazonaws.com') From a32a05e858ab9601e460a468f61d3841605ffca5 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 11:16:49 -0700 Subject: [PATCH 09/44] lint --- .../tracing/contrib/aws/instrumentation_spec.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 5cb67050e5e..c55ee8bdab9 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -316,7 +316,7 @@ let(:responses) do { get_queue_url: { - queue_url: "myQueueURL" + queue_url: 'myQueueURL' } } end @@ -550,13 +550,13 @@ let(:responses) do { describe_stream_consumer: { - consumer_description: { - consumer_name: "John Doe", - consumer_arn: "consumerArn", - consumer_status: "CREATING", - consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), - stream_arn: "streamArn" - } + consumer_description: { + consumer_name: 'John Doe', + consumer_arn: 'consumerArn', + consumer_status: 'CREATING', + consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stream_arn: 'streamArn' + } } } end From c5d9c4448fe236dcc2351fcfe86b1af644948735 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 13:09:44 -0700 Subject: [PATCH 10/44] edit ruby 2.1 apprasail sdk gem --- Appraisals | 2 +- .../contrib/aws/instrumentation_spec.rb | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Appraisals b/Appraisals index fc43bd05294..52ee6067f9c 100644 --- a/Appraisals +++ b/Appraisals @@ -137,7 +137,7 @@ if ruby_version?('2.1') gem 'active_model_serializers', '~> 0.9.0' gem 'activerecord', '3.2.22.5' gem 'activerecord-mysql-adapter' - gem 'aws-sdk', '~> 2.0' + gem 'aws-sdk' gem 'concurrent-ruby' gem 'dalli', '< 3.0.0' # Dalli 3.0 dropped support for Ruby < 2.5 gem 'delayed_job' diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index c55ee8bdab9..c364afdc1c3 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -26,7 +26,7 @@ Datadog.registry[:aws].reset_configuration! end - context 'with a core AWS SDK client', if: RUBY_VERSION >= '2.3.0' do + context 'with a core AWS SDK client', if: RUBY_VERSION >= '2.2.0' do before { hide_const('Aws::S3') } let(:client) { ::Aws::STS::Client.new(stub_responses: responses) } # STS is part of aws-sdk-core @@ -74,7 +74,7 @@ end end - context 'with an S3 client', if: RUBY_VERSION >= '2.3.0' do + context 'with an S3 client' do let(:client) { ::Aws::S3::Client.new(stub_responses: responses) } describe '#list_buckets' do @@ -182,7 +182,7 @@ end end - context 'with an SQS client', if: RUBY_VERSION >= '2.3.0' do + context 'with an SQS client' do let(:client) { ::Aws::SQS::Client.new(stub_responses: responses) } describe '#send_message' do @@ -348,7 +348,7 @@ end end - context 'with an SNS client', if: RUBY_VERSION >= '2.3.0' do + context 'with an SNS client' do let(:client) { ::Aws::SNS::Client.new(stub_responses: responses) } describe '#publish' do @@ -448,7 +448,7 @@ end end - context 'with an dynamodb client', if: RUBY_VERSION >= '2.3.0' do + context 'with an dynamodb client' do let(:client) { ::Aws::DynamoDB::Client.new(stub_responses: responses) } describe '#get_item' do @@ -492,7 +492,7 @@ end end - context 'with an kinesis client', if: RUBY_VERSION >= '2.3.0' do + context 'with an kinesis client' do let(:client) { ::Aws::Kinesis::Client.new(stub_responses: responses) } describe '#put_record' do @@ -572,7 +572,7 @@ expect(span.get_tag('aws_service')).to eq('kinesis') expect(span.get_tag('streamname')).to eq('my-stream') expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('POST') expect(span.get_tag('http.status_code')).to eq('200') expect(span.get_tag('span.kind')).to eq('client') @@ -583,12 +583,12 @@ expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) .to eq('aws') expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + .to eq('kinesis.us-stubbed-1.amazonaws.com') end end end - context 'with an eventbridge client', if: RUBY_VERSION >= '2.3.0' do + context 'with an eventbridge client' do let(:client) { ::Aws::EventBridge::Client.new(stub_responses: responses) } describe '#put_rule' do @@ -682,7 +682,7 @@ end end - context 'with a stepfunction client', if: RUBY_VERSION >= '2.3.0' do + context 'with a stepfunction client' do let(:client) { ::Aws::States::Client.new(stub_responses: responses) } describe '#start_execution' do From ff0bcebd91b01c3a717c2bb1435396beb6b0ce97 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 13:24:28 -0700 Subject: [PATCH 11/44] add describe_stream_consumer test for ruby version >= 2.2.0 and a different one for ruby version < 2.2.0 as the host differs --- .../contrib/aws/instrumentation_spec.rb | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index c364afdc1c3..11c27dc31d7 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -539,7 +539,54 @@ end end - describe '#describe_stream_consumer' do + describe '#describe_stream_consumer', if: RUBY_VERSION >= '2.2.0' do + subject!(:describe_stream_consumer) do + client.describe_stream_consumer( + stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required + consumer_name: 'cosumerName', # required + consumer_arn: 'consumerArn', # required + ) + end + + let(:responses) do + { describe_stream_consumer: { + consumer_description: { + consumer_name: 'John Doe', + consumer_arn: 'consumerArn', + consumer_status: 'CREATING', + consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stream_arn: 'streamArn' + } + } } + end + + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('kinesis.describe_stream_consumer') + + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('kinesis') + expect(span.get_tag('streamname')).to eq('my-stream') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + end + end + describe '#describe_stream_consumer', if: RUBY_VERSION < '2.2.0' do subject!(:describe_stream_consumer) do client.describe_stream_consumer( stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required From 56ba8728e7445185c6efd3ec6b8a6b1aad17b1ed Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 13:34:27 -0700 Subject: [PATCH 12/44] lint --- spec/datadog/tracing/contrib/aws/instrumentation_spec.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 11c27dc31d7..5c5de8e9c0f 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -586,6 +586,7 @@ .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') end end + describe '#describe_stream_consumer', if: RUBY_VERSION < '2.2.0' do subject!(:describe_stream_consumer) do client.describe_stream_consumer( From 9419d82a9a2e16660bf283f31b82b1a614d5ed01 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 13:43:14 -0700 Subject: [PATCH 13/44] whitespace --- spec/datadog/tracing/contrib/aws/instrumentation_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 5c5de8e9c0f..989e12e2192 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -586,7 +586,7 @@ .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') end end - + describe '#describe_stream_consumer', if: RUBY_VERSION < '2.2.0' do subject!(:describe_stream_consumer) do client.describe_stream_consumer( From 3547e653e145238b770e304dea70829dea3d7463 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 14:09:45 -0700 Subject: [PATCH 14/44] switch ruby version in test for CI --- spec/datadog/tracing/contrib/aws/instrumentation_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 989e12e2192..5515b33af0b 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -539,7 +539,7 @@ end end - describe '#describe_stream_consumer', if: RUBY_VERSION >= '2.2.0' do + describe '#describe_stream_consumer', if: RUBY_VERSION >= '2.3.0' do subject!(:describe_stream_consumer) do client.describe_stream_consumer( stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required @@ -587,7 +587,7 @@ end end - describe '#describe_stream_consumer', if: RUBY_VERSION < '2.2.0' do + describe '#describe_stream_consumer', if: RUBY_VERSION < '2.3.0' do subject!(:describe_stream_consumer) do client.describe_stream_consumer( stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required From b9140cb8bbc17493375bd4f7d0b89034b459d933 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Thu, 13 Apr 2023 15:31:17 -0700 Subject: [PATCH 15/44] add gem file changes --- gemfiles/ruby_2.1.10_contrib.gemfile | 2 +- gemfiles/ruby_2.1.10_contrib.gemfile.lock | 8 ++++---- gemfiles/ruby_2.1.10_core_old.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock | 6 +++--- .../ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_redis_3.gemfile.lock | 6 +++--- gemfiles/ruby_2.1.10_sinatra.gemfile.lock | 6 +++--- gemfiles/ruby_3.0.4_contrib.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_contrib_old.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_core_old.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_cucumber3.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_cucumber4.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_cucumber5.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_redis_3.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_redis_4.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_redis_5.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock | 6 ++---- gemfiles/ruby_3.0.4_sinatra.gemfile.lock | 6 ++---- 31 files changed, 74 insertions(+), 110 deletions(-) diff --git a/gemfiles/ruby_2.1.10_contrib.gemfile b/gemfiles/ruby_2.1.10_contrib.gemfile index f35a8982b17..7e80d89db0b 100644 --- a/gemfiles/ruby_2.1.10_contrib.gemfile +++ b/gemfiles/ruby_2.1.10_contrib.gemfile @@ -38,7 +38,7 @@ gem "msgpack", "~> 1.3.3" gem "active_model_serializers", "~> 0.9.0" gem "activerecord", "3.2.22.5" gem "activerecord-mysql-adapter" -gem "aws-sdk", "~> 2.0" +gem "aws-sdk" gem "dalli", "< 3.0.0" gem "delayed_job" gem "delayed_job_active_record" diff --git a/gemfiles/ruby_2.1.10_contrib.gemfile.lock b/gemfiles/ruby_2.1.10_contrib.gemfile.lock index d2adc594984..721282a45b6 100644 --- a/gemfiles/ruby_2.1.10_contrib.gemfile.lock +++ b/gemfiles/ruby_2.1.10_contrib.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -124,8 +124,8 @@ GEM json (1.8.6) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) makara (0.4.1) activerecord (>= 3.0.0) @@ -261,7 +261,7 @@ DEPENDENCIES activerecord-mysql-adapter addressable (~> 2.4.0) appraisal (~> 2.2.0) - aws-sdk (~> 2.0) + aws-sdk benchmark-ips (~> 2.8) benchmark-memory (< 0.2) builder diff --git a/gemfiles/ruby_2.1.10_core_old.gemfile.lock b/gemfiles/ruby_2.1.10_core_old.gemfile.lock index 629778c820f..a6908ec2038 100644 --- a/gemfiles/ruby_2.1.10_core_old.gemfile.lock +++ b/gemfiles/ruby_2.1.10_core_old.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -36,8 +36,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.12) method_source (1.0.0) diff --git a/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock index a5f7d7d0180..4c4bd4ae254 100644 --- a/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -73,8 +73,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) mail (2.5.5) mime-types (~> 1.16) diff --git a/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock index 2e846650e25..6968fd40f5c 100644 --- a/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -69,8 +69,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) mail (2.5.5) mime-types (~> 1.16) diff --git a/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock index fc282fbe4a0..b4621305bd4 100644 --- a/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -69,8 +69,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) mail (2.5.5) mime-types (~> 1.16) diff --git a/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock index 2cadbf6bb2d..ee71a728c48 100644 --- a/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -70,8 +70,8 @@ GEM json (1.8.6) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) mail (2.5.5) mime-types (~> 1.16) diff --git a/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock index 86ee4a24242..2ea7321392b 100644 --- a/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -77,8 +77,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.11.2) actionpack (>= 4) diff --git a/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock index c95c250ec39..f6079cce78f 100644 --- a/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -77,8 +77,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.11.2) actionpack (>= 4) diff --git a/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock index 5cb46503062..35cf829c5d0 100644 --- a/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -77,8 +77,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.11.2) actionpack (>= 4) diff --git a/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock index a54ea6fab07..c2cfba9b49b 100644 --- a/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -77,8 +77,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) loofah (2.19.1) crass (~> 1.0.2) diff --git a/gemfiles/ruby_2.1.10_redis_3.gemfile.lock b/gemfiles/ruby_2.1.10_redis_3.gemfile.lock index e907f20fa33..8920e75a0be 100644 --- a/gemfiles/ruby_2.1.10_redis_3.gemfile.lock +++ b/gemfiles/ruby_2.1.10_redis_3.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -36,8 +36,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.12) method_source (1.0.0) diff --git a/gemfiles/ruby_2.1.10_sinatra.gemfile.lock b/gemfiles/ruby_2.1.10_sinatra.gemfile.lock index 8982f812e88..94b24978298 100644 --- a/gemfiles/ruby_2.1.10_sinatra.gemfile.lock +++ b/gemfiles/ruby_2.1.10_sinatra.gemfile.lock @@ -4,7 +4,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -36,8 +36,8 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libdatadog (2.0.0.1.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.12) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_contrib.gemfile.lock b/gemfiles/ruby_3.0.4_contrib.gemfile.lock index bc03af8f0b8..09b4f2692ec 100644 --- a/gemfiles/ruby_3.0.4_contrib.gemfile.lock +++ b/gemfiles/ruby_3.0.4_contrib.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -1571,9 +1571,7 @@ GEM king_konf (1.0.1) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock b/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock index 6123f09911d..cd5e3a1c6e5 100644 --- a/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock +++ b/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -75,9 +75,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_core_old.gemfile.lock b/gemfiles/ruby_3.0.4_core_old.gemfile.lock index 639f0c44a38..3ba1bc12cba 100644 --- a/gemfiles/ruby_3.0.4_core_old.gemfile.lock +++ b/gemfiles/ruby_3.0.4_core_old.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -55,9 +55,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock b/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock index 8a440af8049..4002ed0aceb 100644 --- a/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock +++ b/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -73,9 +73,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock b/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock index 45c92a0d771..7a535140681 100644 --- a/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock +++ b/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -93,9 +93,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock b/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock index c85acb3f14f..0f1f8b6ebe7 100644 --- a/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock +++ b/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -93,9 +93,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock b/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock index 5902233b5b6..ea5587dcf4c 100755 --- a/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock +++ b/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -55,9 +55,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock index e6e9c83c57c..86a3e840f95 100644 --- a/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -121,9 +121,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock index be7866503c0..693a0d0b64f 100644 --- a/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -121,9 +121,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock index 570f7d9214d..91811f36314 100644 --- a/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -121,9 +121,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock index cff9d9db3dc..137948ebf65 100644 --- a/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -122,9 +122,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock index d539adc9865..57a991d8aeb 100644 --- a/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -121,9 +121,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) loofah (2.19.1) crass (~> 1.0.2) diff --git a/gemfiles/ruby_3.0.4_redis_3.gemfile.lock b/gemfiles/ruby_3.0.4_redis_3.gemfile.lock index 0d85b904591..970a8e0c462 100644 --- a/gemfiles/ruby_3.0.4_redis_3.gemfile.lock +++ b/gemfiles/ruby_3.0.4_redis_3.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -55,9 +55,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_redis_4.gemfile.lock b/gemfiles/ruby_3.0.4_redis_4.gemfile.lock index 9908d5611ed..95c5e0c5812 100644 --- a/gemfiles/ruby_3.0.4_redis_4.gemfile.lock +++ b/gemfiles/ruby_3.0.4_redis_4.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -55,9 +55,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_redis_5.gemfile.lock b/gemfiles/ruby_3.0.4_redis_5.gemfile.lock index c0de033af84..54f4610d5a2 100644 --- a/gemfiles/ruby_3.0.4_redis_5.gemfile.lock +++ b/gemfiles/ruby_3.0.4_redis_5.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -56,9 +56,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock b/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock index d1e40c568b9..6db301e9baf 100644 --- a/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock +++ b/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -55,9 +55,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock b/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock index ba89da09dad..29a32f2f20f 100644 --- a/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock +++ b/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -56,9 +56,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_sinatra.gemfile.lock b/gemfiles/ruby_3.0.4_sinatra.gemfile.lock index 22a7b953061..c2566f5b41b 100644 --- a/gemfiles/ruby_3.0.4_sinatra.gemfile.lock +++ b/gemfiles/ruby_3.0.4_sinatra.gemfile.lock @@ -14,7 +14,7 @@ PATH ddtrace (1.10.1) debase-ruby_core_source (>= 0.10.16, <= 3.2.0) libdatadog (~> 2.0.0.1.0) - libddwaf (~> 1.6.2.0.0) + libddwaf (~> 1.8.2.0.0) msgpack GEM @@ -55,9 +55,7 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) - ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) From 316aaaf9e9500293178a0c74396bb1fc153dcb7c Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Thu, 13 Apr 2023 15:55:11 -0700 Subject: [PATCH 16/44] edit conflicts in gems --- gemfiles/ruby_2.1.10_contrib.gemfile.lock | 2 +- gemfiles/ruby_3.0.4_contrib.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_contrib_old.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_core_old.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_cucumber3.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_cucumber4.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_cucumber5.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_redis_3.gemfile.lock | 3 --- gemfiles/ruby_3.0.4_redis_4.gemfile.lock | 3 --- 15 files changed, 1 insertion(+), 43 deletions(-) diff --git a/gemfiles/ruby_2.1.10_contrib.gemfile.lock b/gemfiles/ruby_2.1.10_contrib.gemfile.lock index 98a682801e1..e5701b469e3 100644 --- a/gemfiles/ruby_2.1.10_contrib.gemfile.lock +++ b/gemfiles/ruby_2.1.10_contrib.gemfile.lock @@ -125,7 +125,7 @@ GEM json-schema (2.8.1) addressable (>= 2.4) libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libddwaf (1.8.2.0.0) ffi (~> 1.0) makara (0.4.1) activerecord (>= 3.0.0) diff --git a/gemfiles/ruby_3.0.4_contrib.gemfile.lock b/gemfiles/ruby_3.0.4_contrib.gemfile.lock index 597c4c0e43c..f3b7580c8cf 100644 --- a/gemfiles/ruby_3.0.4_contrib.gemfile.lock +++ b/gemfiles/ruby_3.0.4_contrib.gemfile.lock @@ -1572,11 +1572,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock b/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock index 16b667b0084..916dfeae0e2 100644 --- a/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock +++ b/gemfiles/ruby_3.0.4_contrib_old.gemfile.lock @@ -76,11 +76,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_core_old.gemfile.lock b/gemfiles/ruby_3.0.4_core_old.gemfile.lock index 24434348cbe..71c6d629acd 100644 --- a/gemfiles/ruby_3.0.4_core_old.gemfile.lock +++ b/gemfiles/ruby_3.0.4_core_old.gemfile.lock @@ -56,11 +56,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock b/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock index 8903dbb3177..7398752c108 100644 --- a/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock +++ b/gemfiles/ruby_3.0.4_cucumber3.gemfile.lock @@ -74,11 +74,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock b/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock index 82e3e960ef5..19a07749439 100644 --- a/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock +++ b/gemfiles/ruby_3.0.4_cucumber4.gemfile.lock @@ -94,11 +94,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock b/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock index ae265cb0960..e9f893e3d9d 100644 --- a/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock +++ b/gemfiles/ruby_3.0.4_cucumber5.gemfile.lock @@ -94,11 +94,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock b/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock index a05c72f5de7..eba50d9d695 100755 --- a/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock +++ b/gemfiles/ruby_3.0.4_opentelemetry.gemfile.lock @@ -56,11 +56,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock index 09ea3f6a472..6e8585ccb26 100644 --- a/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_mysql2.gemfile.lock @@ -122,11 +122,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock index 92c30e467bf..7b8e17c3ac4 100644 --- a/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_postgres.gemfile.lock @@ -122,11 +122,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock index 5b8dd70e15f..dda61db62e1 100644 --- a/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_postgres_redis.gemfile.lock @@ -122,11 +122,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock index d12dc3cb10c..c3bf784fbb8 100644 --- a/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_postgres_sidekiq.gemfile.lock @@ -123,11 +123,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) lograge (0.12.0) actionpack (>= 4) diff --git a/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock b/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock index c5e33d5b8fa..72946bdbe97 100644 --- a/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock +++ b/gemfiles/ruby_3.0.4_rails61_semantic_logger.gemfile.lock @@ -122,11 +122,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) loofah (2.19.1) crass (~> 1.0.2) diff --git a/gemfiles/ruby_3.0.4_redis_3.gemfile.lock b/gemfiles/ruby_3.0.4_redis_3.gemfile.lock index 2cce18a8054..1d47b64e323 100644 --- a/gemfiles/ruby_3.0.4_redis_3.gemfile.lock +++ b/gemfiles/ruby_3.0.4_redis_3.gemfile.lock @@ -56,11 +56,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_redis_4.gemfile.lock b/gemfiles/ruby_3.0.4_redis_4.gemfile.lock index 6b8f1213a0d..389c92e5789 100644 --- a/gemfiles/ruby_3.0.4_redis_4.gemfile.lock +++ b/gemfiles/ruby_3.0.4_redis_4.gemfile.lock @@ -56,11 +56,8 @@ GEM libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) libddwaf (1.8.2.0.0-aarch64-linux) -<<<<<<< HEAD -======= ffi (~> 1.0) libddwaf (1.8.2.0.0-x86_64-linux) ->>>>>>> master ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) From 607d02bb7472823dddd94796c9127c10e6e0744a Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Sun, 16 Apr 2023 12:48:47 -0700 Subject: [PATCH 17/44] edit contrib appraisals --- Appraisals | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Appraisals b/Appraisals index 52ee6067f9c..94d34b2b7ca 100644 --- a/Appraisals +++ b/Appraisals @@ -137,7 +137,7 @@ if ruby_version?('2.1') gem 'active_model_serializers', '~> 0.9.0' gem 'activerecord', '3.2.22.5' gem 'activerecord-mysql-adapter' - gem 'aws-sdk' + gem 'aws-sdk', '~> 2' gem 'concurrent-ruby' gem 'dalli', '< 3.0.0' # Dalli 3.0 dropped support for Ruby < 2.5 gem 'delayed_job' @@ -315,12 +315,15 @@ elsif ruby_version?('2.2') gem 'mimemagic', '0.3.9' # Pinned until https://github.com/mimemagicrb/mimemagic/issues/142 is resolved. end + appraise 'aws' do + gem 'aws-sdk' + end + appraise 'contrib' do gem 'actionpack' gem 'actionview' gem 'active_model_serializers', '>= 0.10.0' gem 'activerecord', '< 5.1.5' - gem 'aws-sdk' gem 'concurrent-ruby' gem 'dalli', '< 3.0.0' # Dalli 3.0 dropped support for Ruby < 2.5 gem 'delayed_job' From 3537983344eea544cbd86bbe5fbd09e8321c94a3 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Sun, 16 Apr 2023 12:55:35 -0700 Subject: [PATCH 18/44] remove gem edits --- gemfiles/ruby_2.1.10_contrib.gemfile | 2 +- gemfiles/ruby_2.1.10_contrib.gemfile.lock | 2 +- gemfiles/ruby_2.1.10_core_old.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_redis_3.gemfile.lock | 2 -- gemfiles/ruby_2.1.10_sinatra.gemfile.lock | 2 +- gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock | 4 ++-- gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock | 4 ++-- gemfiles/ruby_3.0.4_sinatra.gemfile.lock | 4 ++-- 16 files changed, 9 insertions(+), 29 deletions(-) diff --git a/gemfiles/ruby_2.1.10_contrib.gemfile b/gemfiles/ruby_2.1.10_contrib.gemfile index 7e80d89db0b..f35a8982b17 100644 --- a/gemfiles/ruby_2.1.10_contrib.gemfile +++ b/gemfiles/ruby_2.1.10_contrib.gemfile @@ -38,7 +38,7 @@ gem "msgpack", "~> 1.3.3" gem "active_model_serializers", "~> 0.9.0" gem "activerecord", "3.2.22.5" gem "activerecord-mysql-adapter" -gem "aws-sdk" +gem "aws-sdk", "~> 2.0" gem "dalli", "< 3.0.0" gem "delayed_job" gem "delayed_job_active_record" diff --git a/gemfiles/ruby_2.1.10_contrib.gemfile.lock b/gemfiles/ruby_2.1.10_contrib.gemfile.lock index e5701b469e3..3af52881cfb 100644 --- a/gemfiles/ruby_2.1.10_contrib.gemfile.lock +++ b/gemfiles/ruby_2.1.10_contrib.gemfile.lock @@ -261,7 +261,7 @@ DEPENDENCIES activerecord-mysql-adapter addressable (~> 2.4.0) appraisal (~> 2.2.0) - aws-sdk + aws-sdk (~> 2.0) benchmark-ips (~> 2.8) benchmark-memory (< 0.2) builder diff --git a/gemfiles/ruby_2.1.10_core_old.gemfile.lock b/gemfiles/ruby_2.1.10_core_old.gemfile.lock index cda30288ac3..71a2dd1ff5c 100644 --- a/gemfiles/ruby_2.1.10_core_old.gemfile.lock +++ b/gemfiles/ruby_2.1.10_core_old.gemfile.lock @@ -36,8 +36,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock index a578868d93d..7ffdcdf4736 100644 --- a/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock @@ -73,8 +73,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock index 47869324566..2f13ace6275 100644 --- a/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock @@ -69,8 +69,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock index ad5ea8c7d2d..c08aff8f629 100644 --- a/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock @@ -69,8 +69,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock b/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock index 6dfc662f400..ffc5bf8729d 100644 --- a/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock @@ -70,8 +70,6 @@ GEM json (1.8.6) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock index b9b85be140c..c97a40ebe69 100644 --- a/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock @@ -77,8 +77,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock index 85ba2aa893c..65184a34adc 100644 --- a/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock @@ -77,8 +77,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock index baab50044e5..4fee96cc6b4 100644 --- a/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock @@ -77,8 +77,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock b/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock index 638d46508aa..d670c1159ed 100644 --- a/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock +++ b/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock @@ -77,8 +77,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_redis_3.gemfile.lock b/gemfiles/ruby_2.1.10_redis_3.gemfile.lock index 250bbcfaea0..482ef2775a2 100644 --- a/gemfiles/ruby_2.1.10_redis_3.gemfile.lock +++ b/gemfiles/ruby_2.1.10_redis_3.gemfile.lock @@ -36,8 +36,6 @@ GEM json (2.5.1) json-schema (2.8.1) addressable (>= 2.4) - libdatadog (2.0.0.1.0-aarch64-linux) - libddwaf (1.8.2.0.0-aarch64-linux) libdatadog (2.0.0.1.0) libddwaf (1.8.2.0.0) ffi (~> 1.0) diff --git a/gemfiles/ruby_2.1.10_sinatra.gemfile.lock b/gemfiles/ruby_2.1.10_sinatra.gemfile.lock index 9eec8fe5ec0..5a47b1d2ee7 100644 --- a/gemfiles/ruby_2.1.10_sinatra.gemfile.lock +++ b/gemfiles/ruby_2.1.10_sinatra.gemfile.lock @@ -37,7 +37,7 @@ GEM json-schema (2.8.1) addressable (>= 2.4) libdatadog (2.0.0.1.0) - libddwaf (1.6.2.0.0) + libddwaf (1.8.2.0.0) ffi (~> 1.0) memory_profiler (0.9.12) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock b/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock index bcbe7900940..253ba9840e2 100644 --- a/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock +++ b/gemfiles/ruby_3.0.4_resque2_redis3.gemfile.lock @@ -55,9 +55,9 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-x86_64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock b/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock index 65d207f15b8..0c6a7c69420 100644 --- a/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock +++ b/gemfiles/ruby_3.0.4_resque2_redis4.gemfile.lock @@ -56,9 +56,9 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-x86_64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) diff --git a/gemfiles/ruby_3.0.4_sinatra.gemfile.lock b/gemfiles/ruby_3.0.4_sinatra.gemfile.lock index 1808c195cb2..fdd2a88ae67 100644 --- a/gemfiles/ruby_3.0.4_sinatra.gemfile.lock +++ b/gemfiles/ruby_3.0.4_sinatra.gemfile.lock @@ -55,9 +55,9 @@ GEM addressable (>= 2.4) libdatadog (2.0.0.1.0-aarch64-linux) libdatadog (2.0.0.1.0-x86_64-linux) - libddwaf (1.6.2.0.0-aarch64-linux) + libddwaf (1.8.2.0.0-aarch64-linux) ffi (~> 1.0) - libddwaf (1.6.2.0.0-x86_64-linux) + libddwaf (1.8.2.0.0-x86_64-linux) ffi (~> 1.0) memory_profiler (0.9.14) method_source (1.0.0) From bf4acf85e75292963498546938067e9c21ae2aca Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Sun, 16 Apr 2023 13:05:30 -0700 Subject: [PATCH 19/44] appraisal edits --- Appraisals | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Appraisals b/Appraisals index 94d34b2b7ca..6e51436c510 100644 --- a/Appraisals +++ b/Appraisals @@ -137,7 +137,7 @@ if ruby_version?('2.1') gem 'active_model_serializers', '~> 0.9.0' gem 'activerecord', '3.2.22.5' gem 'activerecord-mysql-adapter' - gem 'aws-sdk', '~> 2' + gem 'aws-sdk', '~> 2.0' gem 'concurrent-ruby' gem 'dalli', '< 3.0.0' # Dalli 3.0 dropped support for Ruby < 2.5 gem 'delayed_job' @@ -315,10 +315,6 @@ elsif ruby_version?('2.2') gem 'mimemagic', '0.3.9' # Pinned until https://github.com/mimemagicrb/mimemagic/issues/142 is resolved. end - appraise 'aws' do - gem 'aws-sdk' - end - appraise 'contrib' do gem 'actionpack' gem 'actionview' From 8b8254c7709263c4fc36710a662fcc47bf34dc40 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Sun, 16 Apr 2023 13:06:47 -0700 Subject: [PATCH 20/44] add aws-sdk back --- Appraisals | 1 + 1 file changed, 1 insertion(+) diff --git a/Appraisals b/Appraisals index 6e51436c510..fc43bd05294 100644 --- a/Appraisals +++ b/Appraisals @@ -320,6 +320,7 @@ elsif ruby_version?('2.2') gem 'actionview' gem 'active_model_serializers', '>= 0.10.0' gem 'activerecord', '< 5.1.5' + gem 'aws-sdk' gem 'concurrent-ruby' gem 'dalli', '< 3.0.0' # Dalli 3.0 dropped support for Ruby < 2.5 gem 'delayed_job' From 45c7ef8f24ed9a7881fa4a770bdd955a6546445a Mon Sep 17 00:00:00 2001 From: Tony Hsu <tonyc.t.hsu@gmail.com> Date: Mon, 17 Apr 2023 12:39:43 +0200 Subject: [PATCH 21/44] Change to aws-sdk 2 in ruby 2.7 appraisal group --- Appraisals | 2 +- gemfiles/ruby_2.7.6_contrib.gemfile | 2 +- gemfiles/ruby_2.7.6_contrib.gemfile.lock | 1379 +--------------------- 3 files changed, 10 insertions(+), 1373 deletions(-) diff --git a/Appraisals b/Appraisals index fc43bd05294..6bd58c5a0fd 100644 --- a/Appraisals +++ b/Appraisals @@ -1410,7 +1410,7 @@ elsif ruby_version?('2.7') gem 'actionview' gem 'active_model_serializers', '>= 0.10.0' gem 'activerecord' - gem 'aws-sdk' + gem 'aws-sdk', '~> 2' gem 'concurrent-ruby' gem 'cucumber', '~> 7' # TODO: Support cucumber 8.x gem 'dalli', '>= 3.0.0' diff --git a/gemfiles/ruby_2.7.6_contrib.gemfile b/gemfiles/ruby_2.7.6_contrib.gemfile index 7f6a827883e..e89cdc68fc5 100644 --- a/gemfiles/ruby_2.7.6_contrib.gemfile +++ b/gemfiles/ruby_2.7.6_contrib.gemfile @@ -42,7 +42,7 @@ gem "actionpack" gem "actionview" gem "active_model_serializers", ">= 0.10.0" gem "activerecord" -gem "aws-sdk" +gem "aws-sdk", "~> 2" gem "cucumber", "~> 7" gem "dalli", ">= 3.0.0" gem "delayed_job" diff --git a/gemfiles/ruby_2.7.6_contrib.gemfile.lock b/gemfiles/ruby_2.7.6_contrib.gemfile.lock index bbb6b2dc5d6..4150b723999 100644 --- a/gemfiles/ruby_2.7.6_contrib.gemfile.lock +++ b/gemfiles/ruby_2.7.6_contrib.gemfile.lock @@ -56,1376 +56,13 @@ GEM thor (>= 0.14.0) ast (2.4.2) aws-eventstream (1.2.0) - aws-partitions (1.717.0) - aws-sdk (3.1.0) - aws-sdk-resources (~> 3) - aws-sdk-accessanalyzer (1.34.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-account (1.10.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-acm (1.55.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-acmpca (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-alexaforbusiness (1.58.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-amplify (1.44.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-amplifybackend (1.20.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-amplifyuibuilder (1.9.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-apigateway (1.81.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-apigatewaymanagementapi (1.32.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-apigatewayv2 (1.44.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appconfig (1.30.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appconfigdata (1.8.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appflow (1.36.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appintegrationsservice (1.15.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-applicationautoscaling (1.66.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-applicationcostprofiler (1.11.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-applicationdiscoveryservice (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-applicationinsights (1.33.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appmesh (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appregistry (1.19.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-apprunner (1.21.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appstream (1.70.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-appsync (1.58.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-arczonalshift (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-athena (1.61.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-auditmanager (1.31.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-augmentedairuntime (1.25.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-autoscaling (1.86.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-autoscalingplans (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-backup (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-backupgateway (1.8.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-backupstorage (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-batch (1.67.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-billingconductor (1.6.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-braket (1.21.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-budgets (1.52.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-chime (1.70.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-chimesdkidentity (1.11.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-chimesdkmediapipelines (1.3.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-chimesdkmeetings (1.17.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-chimesdkmessaging (1.15.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-chimesdkvoice (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cleanrooms (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloud9 (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudcontrolapi (1.10.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-clouddirectory (1.44.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudformation (1.76.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudfront (1.76.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudhsm (1.41.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudhsmv2 (1.44.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudsearch (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudsearchdomain (1.34.1) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudtrail (1.58.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudtraildata (1.0.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudwatch (1.71.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchevents (1.59.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchevidently (1.11.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchlogs (1.62.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchrum (1.9.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codeartifact (1.25.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codebuild (1.90.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codecatalyst (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sdk-codecommit (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codedeploy (1.52.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codeguruprofiler (1.26.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codegurureviewer (1.35.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codepipeline (1.55.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codestar (1.40.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codestarconnections (1.26.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-codestarnotifications (1.22.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cognitoidentity (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cognitoidentityprovider (1.73.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-cognitosync (1.38.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-comprehend (1.65.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-comprehendmedical (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-computeoptimizer (1.38.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-configservice (1.87.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-connect (1.98.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-connectcampaignservice (1.3.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-connectcases (1.4.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-connectcontactlens (1.13.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-connectparticipant (1.28.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-connectwisdomservice (1.12.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-controltower (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-core (3.170.0) - aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.5) - jmespath (~> 1, >= 1.6.1) - aws-sdk-costandusagereportservice (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-costexplorer (1.83.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-customerprofiles (1.27.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-databasemigrationservice (1.75.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-dataexchange (1.30.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-datapipeline (1.38.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-datasync (1.55.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-dax (1.41.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-detective (1.32.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-devicefarm (1.54.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-devopsguru (1.30.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-directconnect (1.56.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-directoryservice (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-dlm (1.55.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-docdb (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-docdbelastic (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-drs (1.11.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-dynamodb (1.81.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-dynamodbstreams (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ebs (1.28.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ec2 (1.366.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ec2instanceconnect (1.27.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ecr (1.58.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ecrpublic (1.15.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ecs (1.111.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-efs (1.59.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-eks (1.83.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticache (1.84.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticbeanstalk (1.54.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticinference (1.23.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancing (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancingv2 (1.84.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticsearchservice (1.69.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-elastictranscoder (1.40.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-emr (1.66.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-emrcontainers (1.19.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-emrserverless (1.5.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-eventbridge (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-finspace (1.13.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-finspacedata (1.19.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-firehose (1.51.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-fis (1.16.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-fms (1.55.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-forecastqueryservice (1.24.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-forecastservice (1.40.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-frauddetector (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-fsx (1.64.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-gamelift (1.61.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-gamesparks (1.4.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-glacier (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-globalaccelerator (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-glue (1.132.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-gluedatabrew (1.25.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-greengrass (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-greengrassv2 (1.24.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-groundstation (1.32.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-guardduty (1.64.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-health (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-healthlake (1.15.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-honeycode (1.19.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iam (1.75.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-identitystore (1.23.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-imagebuilder (1.44.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-importexport (1.36.1) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv2 (~> 1.0) - aws-sdk-inspector (1.45.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-inspector2 (1.10.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-internetmonitor (1.0.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iot (1.100.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iot1clickdevicesservice (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iot1clickprojects (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotanalytics (1.51.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotdataplane (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotdeviceadvisor (1.18.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotevents (1.35.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ioteventsdata (1.29.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotfleethub (1.13.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotfleetwise (1.7.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotjobsdataplane (1.38.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotroborunner (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotsecuretunneling (1.23.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotsitewise (1.48.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotthingsgraph (1.26.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iottwinmaker (1.9.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-iotwireless (1.30.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ivs (1.27.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ivschat (1.8.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kafka (1.54.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kafkaconnect (1.9.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kendra (1.63.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kendraranking (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-keyspaces (1.5.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesis (1.45.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesisanalytics (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesisanalyticsv2 (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideo (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideoarchivedmedia (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideomedia (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideosignalingchannels (1.21.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideowebrtcstorage (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-kms (1.62.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lakeformation (1.31.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lambda (1.92.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lambdapreview (1.36.1) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lex (1.47.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lexmodelbuildingservice (1.59.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lexmodelsv2 (1.32.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lexruntimev2 (1.19.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-licensemanager (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-licensemanagerlinuxsubscriptions (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-licensemanagerusersubscriptions (1.3.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lightsail (1.74.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-locationservice (1.29.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lookoutequipment (1.16.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lookoutforvision (1.19.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-lookoutmetrics (1.24.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-machinelearning (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-macie (1.40.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-macie2 (1.52.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mainframemodernization (1.4.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-managedblockchain (1.36.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-managedgrafana (1.13.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-marketplacecatalog (1.25.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-marketplacecommerceanalytics (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-marketplaceentitlementservice (1.37.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-marketplacemetering (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mediaconnect (1.47.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mediaconvert (1.101.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-medialive (1.96.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mediapackage (1.58.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mediapackagevod (1.41.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mediastore (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mediastoredata (1.40.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mediatailor (1.60.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-memorydb (1.12.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mgn (1.17.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-migrationhub (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-migrationhubconfig (1.22.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-migrationhuborchestrator (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-migrationhubrefactorspaces (1.11.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-migrationhubstrategyrecommendations (1.7.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mobile (1.37.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mq (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mturk (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-mwaa (1.19.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-neptune (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-networkfirewall (1.24.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-networkmanager (1.28.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-nimblestudio (1.18.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-oam (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-omics (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-opensearchserverless (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-opensearchservice (1.17.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-opsworks (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-opsworkscm (1.54.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-organizations (1.73.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-outposts (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-panorama (1.12.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-personalize (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-personalizeevents (1.30.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-personalizeruntime (1.35.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-pi (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-pinpoint (1.70.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-pinpointemail (1.37.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-pinpointsmsvoice (1.34.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-pinpointsmsvoicev2 (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-pipes (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-polly (1.66.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-pricing (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-privatenetworks (1.4.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-prometheusservice (1.17.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-proton (1.23.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-qldb (1.27.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-qldbsession (1.24.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-quicksight (1.76.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ram (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-rds (1.172.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-rdsdataservice (1.40.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-recyclebin (1.8.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-redshift (1.91.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-redshiftdataapiservice (1.24.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-redshiftserverless (1.7.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-rekognition (1.74.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-resiliencehub (1.10.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-resourceexplorer2 (1.3.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-resourcegroups (1.48.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-resourcegroupstaggingapi (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-resources (3.160.0) - aws-sdk-accessanalyzer (~> 1) - aws-sdk-account (~> 1) - aws-sdk-acm (~> 1) - aws-sdk-acmpca (~> 1) - aws-sdk-alexaforbusiness (~> 1) - aws-sdk-amplify (~> 1) - aws-sdk-amplifybackend (~> 1) - aws-sdk-amplifyuibuilder (~> 1) - aws-sdk-apigateway (~> 1) - aws-sdk-apigatewaymanagementapi (~> 1) - aws-sdk-apigatewayv2 (~> 1) - aws-sdk-appconfig (~> 1) - aws-sdk-appconfigdata (~> 1) - aws-sdk-appflow (~> 1) - aws-sdk-appintegrationsservice (~> 1) - aws-sdk-applicationautoscaling (~> 1) - aws-sdk-applicationcostprofiler (~> 1) - aws-sdk-applicationdiscoveryservice (~> 1) - aws-sdk-applicationinsights (~> 1) - aws-sdk-appmesh (~> 1) - aws-sdk-appregistry (~> 1) - aws-sdk-apprunner (~> 1) - aws-sdk-appstream (~> 1) - aws-sdk-appsync (~> 1) - aws-sdk-arczonalshift (~> 1) - aws-sdk-athena (~> 1) - aws-sdk-auditmanager (~> 1) - aws-sdk-augmentedairuntime (~> 1) - aws-sdk-autoscaling (~> 1) - aws-sdk-autoscalingplans (~> 1) - aws-sdk-backup (~> 1) - aws-sdk-backupgateway (~> 1) - aws-sdk-backupstorage (~> 1) - aws-sdk-batch (~> 1) - aws-sdk-billingconductor (~> 1) - aws-sdk-braket (~> 1) - aws-sdk-budgets (~> 1) - aws-sdk-chime (~> 1) - aws-sdk-chimesdkidentity (~> 1) - aws-sdk-chimesdkmediapipelines (~> 1) - aws-sdk-chimesdkmeetings (~> 1) - aws-sdk-chimesdkmessaging (~> 1) - aws-sdk-chimesdkvoice (~> 1) - aws-sdk-cleanrooms (~> 1) - aws-sdk-cloud9 (~> 1) - aws-sdk-cloudcontrolapi (~> 1) - aws-sdk-clouddirectory (~> 1) - aws-sdk-cloudformation (~> 1) - aws-sdk-cloudfront (~> 1) - aws-sdk-cloudhsm (~> 1) - aws-sdk-cloudhsmv2 (~> 1) - aws-sdk-cloudsearch (~> 1) - aws-sdk-cloudsearchdomain (~> 1) - aws-sdk-cloudtrail (~> 1) - aws-sdk-cloudtraildata (~> 1) - aws-sdk-cloudwatch (~> 1) - aws-sdk-cloudwatchevents (~> 1) - aws-sdk-cloudwatchevidently (~> 1) - aws-sdk-cloudwatchlogs (~> 1) - aws-sdk-cloudwatchrum (~> 1) - aws-sdk-codeartifact (~> 1) - aws-sdk-codebuild (~> 1) - aws-sdk-codecatalyst (~> 1) - aws-sdk-codecommit (~> 1) - aws-sdk-codedeploy (~> 1) - aws-sdk-codeguruprofiler (~> 1) - aws-sdk-codegurureviewer (~> 1) - aws-sdk-codepipeline (~> 1) - aws-sdk-codestar (~> 1) - aws-sdk-codestarconnections (~> 1) - aws-sdk-codestarnotifications (~> 1) - aws-sdk-cognitoidentity (~> 1) - aws-sdk-cognitoidentityprovider (~> 1) - aws-sdk-cognitosync (~> 1) - aws-sdk-comprehend (~> 1) - aws-sdk-comprehendmedical (~> 1) - aws-sdk-computeoptimizer (~> 1) - aws-sdk-configservice (~> 1) - aws-sdk-connect (~> 1) - aws-sdk-connectcampaignservice (~> 1) - aws-sdk-connectcases (~> 1) - aws-sdk-connectcontactlens (~> 1) - aws-sdk-connectparticipant (~> 1) - aws-sdk-connectwisdomservice (~> 1) - aws-sdk-controltower (~> 1) - aws-sdk-costandusagereportservice (~> 1) - aws-sdk-costexplorer (~> 1) - aws-sdk-customerprofiles (~> 1) - aws-sdk-databasemigrationservice (~> 1) - aws-sdk-dataexchange (~> 1) - aws-sdk-datapipeline (~> 1) - aws-sdk-datasync (~> 1) - aws-sdk-dax (~> 1) - aws-sdk-detective (~> 1) - aws-sdk-devicefarm (~> 1) - aws-sdk-devopsguru (~> 1) - aws-sdk-directconnect (~> 1) - aws-sdk-directoryservice (~> 1) - aws-sdk-dlm (~> 1) - aws-sdk-docdb (~> 1) - aws-sdk-docdbelastic (~> 1) - aws-sdk-drs (~> 1) - aws-sdk-dynamodb (~> 1) - aws-sdk-dynamodbstreams (~> 1) - aws-sdk-ebs (~> 1) - aws-sdk-ec2 (~> 1) - aws-sdk-ec2instanceconnect (~> 1) - aws-sdk-ecr (~> 1) - aws-sdk-ecrpublic (~> 1) - aws-sdk-ecs (~> 1) - aws-sdk-efs (~> 1) - aws-sdk-eks (~> 1) - aws-sdk-elasticache (~> 1) - aws-sdk-elasticbeanstalk (~> 1) - aws-sdk-elasticinference (~> 1) - aws-sdk-elasticloadbalancing (~> 1) - aws-sdk-elasticloadbalancingv2 (~> 1) - aws-sdk-elasticsearchservice (~> 1) - aws-sdk-elastictranscoder (~> 1) - aws-sdk-emr (~> 1) - aws-sdk-emrcontainers (~> 1) - aws-sdk-emrserverless (~> 1) - aws-sdk-eventbridge (~> 1) - aws-sdk-finspace (~> 1) - aws-sdk-finspacedata (~> 1) - aws-sdk-firehose (~> 1) - aws-sdk-fis (~> 1) - aws-sdk-fms (~> 1) - aws-sdk-forecastqueryservice (~> 1) - aws-sdk-forecastservice (~> 1) - aws-sdk-frauddetector (~> 1) - aws-sdk-fsx (~> 1) - aws-sdk-gamelift (~> 1) - aws-sdk-gamesparks (~> 1) - aws-sdk-glacier (~> 1) - aws-sdk-globalaccelerator (~> 1) - aws-sdk-glue (~> 1) - aws-sdk-gluedatabrew (~> 1) - aws-sdk-greengrass (~> 1) - aws-sdk-greengrassv2 (~> 1) - aws-sdk-groundstation (~> 1) - aws-sdk-guardduty (~> 1) - aws-sdk-health (~> 1) - aws-sdk-healthlake (~> 1) - aws-sdk-honeycode (~> 1) - aws-sdk-iam (~> 1) - aws-sdk-identitystore (~> 1) - aws-sdk-imagebuilder (~> 1) - aws-sdk-importexport (~> 1) - aws-sdk-inspector (~> 1) - aws-sdk-inspector2 (~> 1) - aws-sdk-internetmonitor (~> 1) - aws-sdk-iot (~> 1) - aws-sdk-iot1clickdevicesservice (~> 1) - aws-sdk-iot1clickprojects (~> 1) - aws-sdk-iotanalytics (~> 1) - aws-sdk-iotdataplane (~> 1) - aws-sdk-iotdeviceadvisor (~> 1) - aws-sdk-iotevents (~> 1) - aws-sdk-ioteventsdata (~> 1) - aws-sdk-iotfleethub (~> 1) - aws-sdk-iotfleetwise (~> 1) - aws-sdk-iotjobsdataplane (~> 1) - aws-sdk-iotroborunner (~> 1) - aws-sdk-iotsecuretunneling (~> 1) - aws-sdk-iotsitewise (~> 1) - aws-sdk-iotthingsgraph (~> 1) - aws-sdk-iottwinmaker (~> 1) - aws-sdk-iotwireless (~> 1) - aws-sdk-ivs (~> 1) - aws-sdk-ivschat (~> 1) - aws-sdk-kafka (~> 1) - aws-sdk-kafkaconnect (~> 1) - aws-sdk-kendra (~> 1) - aws-sdk-kendraranking (~> 1) - aws-sdk-keyspaces (~> 1) - aws-sdk-kinesis (~> 1) - aws-sdk-kinesisanalytics (~> 1) - aws-sdk-kinesisanalyticsv2 (~> 1) - aws-sdk-kinesisvideo (~> 1) - aws-sdk-kinesisvideoarchivedmedia (~> 1) - aws-sdk-kinesisvideomedia (~> 1) - aws-sdk-kinesisvideosignalingchannels (~> 1) - aws-sdk-kinesisvideowebrtcstorage (~> 1) - aws-sdk-kms (~> 1) - aws-sdk-lakeformation (~> 1) - aws-sdk-lambda (~> 1) - aws-sdk-lambdapreview (~> 1) - aws-sdk-lex (~> 1) - aws-sdk-lexmodelbuildingservice (~> 1) - aws-sdk-lexmodelsv2 (~> 1) - aws-sdk-lexruntimev2 (~> 1) - aws-sdk-licensemanager (~> 1) - aws-sdk-licensemanagerlinuxsubscriptions (~> 1) - aws-sdk-licensemanagerusersubscriptions (~> 1) - aws-sdk-lightsail (~> 1) - aws-sdk-locationservice (~> 1) - aws-sdk-lookoutequipment (~> 1) - aws-sdk-lookoutforvision (~> 1) - aws-sdk-lookoutmetrics (~> 1) - aws-sdk-machinelearning (~> 1) - aws-sdk-macie (~> 1) - aws-sdk-macie2 (~> 1) - aws-sdk-mainframemodernization (~> 1) - aws-sdk-managedblockchain (~> 1) - aws-sdk-managedgrafana (~> 1) - aws-sdk-marketplacecatalog (~> 1) - aws-sdk-marketplacecommerceanalytics (~> 1) - aws-sdk-marketplaceentitlementservice (~> 1) - aws-sdk-marketplacemetering (~> 1) - aws-sdk-mediaconnect (~> 1) - aws-sdk-mediaconvert (~> 1) - aws-sdk-medialive (~> 1) - aws-sdk-mediapackage (~> 1) - aws-sdk-mediapackagevod (~> 1) - aws-sdk-mediastore (~> 1) - aws-sdk-mediastoredata (~> 1) - aws-sdk-mediatailor (~> 1) - aws-sdk-memorydb (~> 1) - aws-sdk-mgn (~> 1) - aws-sdk-migrationhub (~> 1) - aws-sdk-migrationhubconfig (~> 1) - aws-sdk-migrationhuborchestrator (~> 1) - aws-sdk-migrationhubrefactorspaces (~> 1) - aws-sdk-migrationhubstrategyrecommendations (~> 1) - aws-sdk-mobile (~> 1) - aws-sdk-mq (~> 1) - aws-sdk-mturk (~> 1) - aws-sdk-mwaa (~> 1) - aws-sdk-neptune (~> 1) - aws-sdk-networkfirewall (~> 1) - aws-sdk-networkmanager (~> 1) - aws-sdk-nimblestudio (~> 1) - aws-sdk-oam (~> 1) - aws-sdk-omics (~> 1) - aws-sdk-opensearchserverless (~> 1) - aws-sdk-opensearchservice (~> 1) - aws-sdk-opsworks (~> 1) - aws-sdk-opsworkscm (~> 1) - aws-sdk-organizations (~> 1) - aws-sdk-outposts (~> 1) - aws-sdk-panorama (~> 1) - aws-sdk-personalize (~> 1) - aws-sdk-personalizeevents (~> 1) - aws-sdk-personalizeruntime (~> 1) - aws-sdk-pi (~> 1) - aws-sdk-pinpoint (~> 1) - aws-sdk-pinpointemail (~> 1) - aws-sdk-pinpointsmsvoice (~> 1) - aws-sdk-pinpointsmsvoicev2 (~> 1) - aws-sdk-pipes (~> 1) - aws-sdk-polly (~> 1) - aws-sdk-pricing (~> 1) - aws-sdk-privatenetworks (~> 1) - aws-sdk-prometheusservice (~> 1) - aws-sdk-proton (~> 1) - aws-sdk-qldb (~> 1) - aws-sdk-qldbsession (~> 1) - aws-sdk-quicksight (~> 1) - aws-sdk-ram (~> 1) - aws-sdk-rds (~> 1) - aws-sdk-rdsdataservice (~> 1) - aws-sdk-recyclebin (~> 1) - aws-sdk-redshift (~> 1) - aws-sdk-redshiftdataapiservice (~> 1) - aws-sdk-redshiftserverless (~> 1) - aws-sdk-rekognition (~> 1) - aws-sdk-resiliencehub (~> 1) - aws-sdk-resourceexplorer2 (~> 1) - aws-sdk-resourcegroups (~> 1) - aws-sdk-resourcegroupstaggingapi (~> 1) - aws-sdk-robomaker (~> 1) - aws-sdk-rolesanywhere (~> 1) - aws-sdk-route53 (~> 1) - aws-sdk-route53domains (~> 1) - aws-sdk-route53recoverycluster (~> 1) - aws-sdk-route53recoverycontrolconfig (~> 1) - aws-sdk-route53recoveryreadiness (~> 1) - aws-sdk-route53resolver (~> 1) - aws-sdk-s3 (~> 1) - aws-sdk-s3control (~> 1) - aws-sdk-s3outposts (~> 1) - aws-sdk-sagemaker (~> 1) - aws-sdk-sagemakeredgemanager (~> 1) - aws-sdk-sagemakerfeaturestoreruntime (~> 1) - aws-sdk-sagemakergeospatial (~> 1) - aws-sdk-sagemakermetrics (~> 1) - aws-sdk-sagemakerruntime (~> 1) - aws-sdk-savingsplans (~> 1) - aws-sdk-scheduler (~> 1) - aws-sdk-schemas (~> 1) - aws-sdk-secretsmanager (~> 1) - aws-sdk-securityhub (~> 1) - aws-sdk-securitylake (~> 1) - aws-sdk-serverlessapplicationrepository (~> 1) - aws-sdk-servicecatalog (~> 1) - aws-sdk-servicediscovery (~> 1) - aws-sdk-servicequotas (~> 1) - aws-sdk-ses (~> 1) - aws-sdk-sesv2 (~> 1) - aws-sdk-shield (~> 1) - aws-sdk-signer (~> 1) - aws-sdk-simpledb (~> 1) - aws-sdk-simspaceweaver (~> 1) - aws-sdk-sms (~> 1) - aws-sdk-snowball (~> 1) - aws-sdk-snowdevicemanagement (~> 1) - aws-sdk-sns (~> 1) - aws-sdk-sqs (~> 1) - aws-sdk-ssm (~> 1) - aws-sdk-ssmcontacts (~> 1) - aws-sdk-ssmincidents (~> 1) - aws-sdk-ssmsap (~> 1) - aws-sdk-ssoadmin (~> 1) - aws-sdk-states (~> 1) - aws-sdk-storagegateway (~> 1) - aws-sdk-support (~> 1) - aws-sdk-supportapp (~> 1) - aws-sdk-swf (~> 1) - aws-sdk-synthetics (~> 1) - aws-sdk-textract (~> 1) - aws-sdk-timestreamquery (~> 1) - aws-sdk-timestreamwrite (~> 1) - aws-sdk-tnb (~> 1) - aws-sdk-transcribeservice (~> 1) - aws-sdk-transcribestreamingservice (~> 1) - aws-sdk-transfer (~> 1) - aws-sdk-translate (~> 1) - aws-sdk-voiceid (~> 1) - aws-sdk-waf (~> 1) - aws-sdk-wafregional (~> 1) - aws-sdk-wafv2 (~> 1) - aws-sdk-wellarchitected (~> 1) - aws-sdk-workdocs (~> 1) - aws-sdk-worklink (~> 1) - aws-sdk-workmail (~> 1) - aws-sdk-workmailmessageflow (~> 1) - aws-sdk-workspaces (~> 1) - aws-sdk-workspacesweb (~> 1) - aws-sdk-xray (~> 1) - aws-sdk-robomaker (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-rolesanywhere (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53 (1.71.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53domains (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53recoverycluster (1.13.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53recoverycontrolconfig (1.13.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53recoveryreadiness (1.12.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53resolver (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.119.1) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.4) - aws-sdk-s3control (1.60.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3outposts (1.15.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sagemaker (1.166.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sagemakeredgemanager (1.14.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sagemakerfeaturestoreruntime (1.15.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sagemakergeospatial (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sagemakermetrics (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sagemakerruntime (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-savingsplans (1.28.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-scheduler (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-schemas (1.25.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-secretsmanager (1.72.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-securityhub (1.78.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-securitylake (1.2.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-serverlessapplicationrepository (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-servicecatalog (1.76.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-servicediscovery (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-servicequotas (1.25.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ses (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sesv2 (1.31.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-shield (1.51.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-signer (1.40.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-simpledb (1.36.1) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv2 (~> 1.0) - aws-sdk-simspaceweaver (1.1.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sms (1.42.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-snowball (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-snowdevicemanagement (1.9.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sns (1.60.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-sqs (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ssm (1.149.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ssmcontacts (1.16.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ssmincidents (1.21.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ssmsap (1.3.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-ssoadmin (1.23.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-states (1.52.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-storagegateway (1.70.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-support (1.45.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-supportapp (1.4.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-swf (1.39.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-synthetics (1.30.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-textract (1.44.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-timestreamquery (1.18.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-timestreamwrite (1.17.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-tnb (1.0.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-transcribeservice (1.81.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-transcribestreamingservice (1.46.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-transfer (1.67.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-translate (1.50.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-voiceid (1.11.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-waf (1.49.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-wafregional (1.50.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-wafv2 (1.50.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-wellarchitected (1.20.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-workdocs (1.43.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-worklink (1.35.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-workmail (1.53.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-workmailmessageflow (1.23.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-workspaces (1.79.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-workspacesweb (1.8.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sdk-xray (1.51.0) - aws-sdk-core (~> 3, >= 3.165.0) - aws-sigv4 (~> 1.1) - aws-sigv2 (1.1.0) + aws-sdk (2.11.632) + aws-sdk-resources (= 2.11.632) + aws-sdk-core (2.11.632) + aws-sigv4 (~> 1.0) + jmespath (~> 1.0) + aws-sdk-resources (2.11.632) + aws-sdk-core (= 2.11.632) aws-sigv4 (1.5.2) aws-eventstream (~> 1, >= 1.0.2) benchmark-ips (2.11.0) @@ -1796,7 +433,7 @@ DEPENDENCIES activerecord addressable (~> 2.4.0) appraisal (~> 2.4.0) - aws-sdk + aws-sdk (~> 2) benchmark-ips (~> 2.8) benchmark-memory (< 0.2) builder From efeb877500bb2836c9d77fddfae36d7dc6e49c50 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Mon, 17 Apr 2023 12:46:30 -0700 Subject: [PATCH 22/44] cherry pick parsed_context spec fix --- .../contrib/aws/instrumentation_spec.rb | 2 +- .../tracing/contrib/aws/parsed_context_spec.rb | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 36b9367e908..4789e2ed02c 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -27,7 +27,7 @@ Datadog.registry[:aws].reset_configuration! end - context 'with a core AWS SDK client', if: RUBY_VERSION >= '2.2.0' do + context 'with a core AWS SDK client' do before { hide_const('Aws::S3') } let(:client) { ::Aws::STS::Client.new(stub_responses: responses) } # STS is part of aws-sdk-core diff --git a/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb b/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb index 2f2796fd528..f4081bbfcf8 100644 --- a/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb +++ b/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb @@ -6,10 +6,18 @@ RSpec.describe Datadog::Tracing::Contrib::Aws::ParsedContext do subject(:parsed_context) { described_class.new(context) } - let(:context) { client.list_buckets.context } - - let(:client) { ::Aws::S3::Client.new(region: 'us-west-2', stub_responses: responses) } - let(:responses) { true } + let(:context) do + Seahorse::Client::RequestContext.new( + operation_name: :list_buckets, + client: double(class: 'Aws::S3::Client', config: double(region: 'us-west-2')), + http_request: Seahorse::Client::Http::Request.new( + endpoint: URI('http://us-west-2.amazonaws.com.com/') + ), + http_response: Seahorse::Client::Http::Response.new( + status_code: 200 + ) + ) + end describe '#new' do context 'given a context with typical values' do @@ -41,4 +49,4 @@ it { is_expected.to eq(fallback) } end end -end +end \ No newline at end of file From 02b104e96efbf9aa58c0776a061aaeb9b0bb010d Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Mon, 17 Apr 2023 13:47:21 -0700 Subject: [PATCH 23/44] lint --- spec/datadog/tracing/contrib/aws/parsed_context_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb b/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb index f4081bbfcf8..ca71f5de4da 100644 --- a/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb +++ b/spec/datadog/tracing/contrib/aws/parsed_context_spec.rb @@ -49,4 +49,4 @@ it { is_expected.to eq(fallback) } end end -end \ No newline at end of file +end From c8fecad3713c374f2deac09eac2f9290223e5a5d Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Mon, 17 Apr 2023 13:53:55 -0700 Subject: [PATCH 24/44] revert 2.7 changes --- Appraisals | 2 +- gemfiles/ruby_2.7.6_contrib.gemfile | 2 +- gemfiles/ruby_2.7.6_contrib.gemfile.lock | 1377 ++++++++++++++++- .../contrib/aws/instrumentation_spec.rb | 1 - 4 files changed, 1372 insertions(+), 10 deletions(-) diff --git a/Appraisals b/Appraisals index 6bd58c5a0fd..fc43bd05294 100644 --- a/Appraisals +++ b/Appraisals @@ -1410,7 +1410,7 @@ elsif ruby_version?('2.7') gem 'actionview' gem 'active_model_serializers', '>= 0.10.0' gem 'activerecord' - gem 'aws-sdk', '~> 2' + gem 'aws-sdk' gem 'concurrent-ruby' gem 'cucumber', '~> 7' # TODO: Support cucumber 8.x gem 'dalli', '>= 3.0.0' diff --git a/gemfiles/ruby_2.7.6_contrib.gemfile b/gemfiles/ruby_2.7.6_contrib.gemfile index e89cdc68fc5..7f6a827883e 100644 --- a/gemfiles/ruby_2.7.6_contrib.gemfile +++ b/gemfiles/ruby_2.7.6_contrib.gemfile @@ -42,7 +42,7 @@ gem "actionpack" gem "actionview" gem "active_model_serializers", ">= 0.10.0" gem "activerecord" -gem "aws-sdk", "~> 2" +gem "aws-sdk" gem "cucumber", "~> 7" gem "dalli", ">= 3.0.0" gem "delayed_job" diff --git a/gemfiles/ruby_2.7.6_contrib.gemfile.lock b/gemfiles/ruby_2.7.6_contrib.gemfile.lock index 4150b723999..afd0ec02718 100644 --- a/gemfiles/ruby_2.7.6_contrib.gemfile.lock +++ b/gemfiles/ruby_2.7.6_contrib.gemfile.lock @@ -56,13 +56,1376 @@ GEM thor (>= 0.14.0) ast (2.4.2) aws-eventstream (1.2.0) - aws-sdk (2.11.632) - aws-sdk-resources (= 2.11.632) - aws-sdk-core (2.11.632) - aws-sigv4 (~> 1.0) - jmespath (~> 1.0) - aws-sdk-resources (2.11.632) - aws-sdk-core (= 2.11.632) + aws-partitions (1.717.0) + aws-sdk (3.1.0) + aws-sdk-resources (~> 3) + aws-sdk-accessanalyzer (1.34.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-account (1.10.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-acm (1.55.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-acmpca (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-alexaforbusiness (1.58.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-amplify (1.44.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-amplifybackend (1.20.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-amplifyuibuilder (1.9.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-apigateway (1.81.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-apigatewaymanagementapi (1.32.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-apigatewayv2 (1.44.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appconfig (1.30.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appconfigdata (1.8.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appflow (1.36.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appintegrationsservice (1.15.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationautoscaling (1.66.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationcostprofiler (1.11.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationdiscoveryservice (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationinsights (1.33.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appmesh (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appregistry (1.19.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-apprunner (1.21.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appstream (1.70.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-appsync (1.58.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-arczonalshift (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-athena (1.61.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-auditmanager (1.31.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-augmentedairuntime (1.25.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-autoscaling (1.86.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-autoscalingplans (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-backup (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-backupgateway (1.8.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-backupstorage (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-batch (1.67.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-billingconductor (1.6.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-braket (1.21.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-budgets (1.52.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-chime (1.70.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-chimesdkidentity (1.11.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-chimesdkmediapipelines (1.3.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-chimesdkmeetings (1.17.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-chimesdkmessaging (1.15.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-chimesdkvoice (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cleanrooms (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloud9 (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudcontrolapi (1.10.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-clouddirectory (1.44.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudformation (1.76.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudfront (1.76.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudhsm (1.41.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudhsmv2 (1.44.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudsearch (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudsearchdomain (1.34.1) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudtrail (1.58.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudtraildata (1.0.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatch (1.71.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatchevents (1.59.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatchevidently (1.11.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatchlogs (1.62.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cloudwatchrum (1.9.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codeartifact (1.25.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codebuild (1.90.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codecatalyst (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sdk-codecommit (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codedeploy (1.52.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codeguruprofiler (1.26.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codegurureviewer (1.35.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codepipeline (1.55.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codestar (1.40.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codestarconnections (1.26.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-codestarnotifications (1.22.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cognitoidentity (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cognitoidentityprovider (1.73.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-cognitosync (1.38.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-comprehend (1.65.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-comprehendmedical (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-computeoptimizer (1.38.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-configservice (1.87.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-connect (1.98.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-connectcampaignservice (1.3.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-connectcases (1.4.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-connectcontactlens (1.13.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-connectparticipant (1.28.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-connectwisdomservice (1.12.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-controltower (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-core (3.170.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.651.0) + aws-sigv4 (~> 1.5) + jmespath (~> 1, >= 1.6.1) + aws-sdk-costandusagereportservice (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-costexplorer (1.83.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-customerprofiles (1.27.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-databasemigrationservice (1.75.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-dataexchange (1.30.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-datapipeline (1.38.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-datasync (1.55.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-dax (1.41.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-detective (1.32.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-devicefarm (1.54.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-devopsguru (1.30.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-directconnect (1.56.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-directoryservice (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-dlm (1.55.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-docdb (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-docdbelastic (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-drs (1.11.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-dynamodb (1.81.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-dynamodbstreams (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ebs (1.28.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ec2 (1.366.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ec2instanceconnect (1.27.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ecr (1.58.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ecrpublic (1.15.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ecs (1.111.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-efs (1.59.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-eks (1.83.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-elasticache (1.84.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-elasticbeanstalk (1.54.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-elasticinference (1.23.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-elasticloadbalancing (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-elasticloadbalancingv2 (1.84.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-elasticsearchservice (1.69.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-elastictranscoder (1.40.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-emr (1.66.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-emrcontainers (1.19.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-emrserverless (1.5.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-eventbridge (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-finspace (1.13.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-finspacedata (1.19.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-firehose (1.51.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-fis (1.16.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-fms (1.55.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-forecastqueryservice (1.24.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-forecastservice (1.40.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-frauddetector (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-fsx (1.64.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-gamelift (1.61.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-gamesparks (1.4.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-glacier (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-globalaccelerator (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-glue (1.132.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-gluedatabrew (1.25.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-greengrass (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-greengrassv2 (1.24.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-groundstation (1.32.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-guardduty (1.64.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-health (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-healthlake (1.15.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-honeycode (1.19.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iam (1.75.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-identitystore (1.23.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-imagebuilder (1.44.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-importexport (1.36.1) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv2 (~> 1.0) + aws-sdk-inspector (1.45.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-inspector2 (1.10.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-internetmonitor (1.0.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iot (1.100.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iot1clickdevicesservice (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iot1clickprojects (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotanalytics (1.51.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotdataplane (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotdeviceadvisor (1.18.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotevents (1.35.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ioteventsdata (1.29.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotfleethub (1.13.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotfleetwise (1.7.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotjobsdataplane (1.38.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotroborunner (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotsecuretunneling (1.23.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotsitewise (1.48.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotthingsgraph (1.26.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iottwinmaker (1.9.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotwireless (1.30.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ivs (1.27.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ivschat (1.8.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kafka (1.54.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kafkaconnect (1.9.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kendra (1.63.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kendraranking (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-keyspaces (1.5.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesis (1.45.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisanalytics (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisanalyticsv2 (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideo (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideoarchivedmedia (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideomedia (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideosignalingchannels (1.21.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kinesisvideowebrtcstorage (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-kms (1.62.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lakeformation (1.31.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lambda (1.92.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lambdapreview (1.36.1) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lex (1.47.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lexmodelbuildingservice (1.59.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lexmodelsv2 (1.32.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lexruntimev2 (1.19.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-licensemanager (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-licensemanagerlinuxsubscriptions (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-licensemanagerusersubscriptions (1.3.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lightsail (1.74.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-locationservice (1.29.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lookoutequipment (1.16.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lookoutforvision (1.19.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-lookoutmetrics (1.24.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-machinelearning (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-macie (1.40.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-macie2 (1.52.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mainframemodernization (1.4.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-managedblockchain (1.36.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-managedgrafana (1.13.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-marketplacecatalog (1.25.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-marketplacecommerceanalytics (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-marketplaceentitlementservice (1.37.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-marketplacemetering (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mediaconnect (1.47.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mediaconvert (1.101.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-medialive (1.96.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mediapackage (1.58.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mediapackagevod (1.41.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mediastore (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mediastoredata (1.40.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mediatailor (1.60.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-memorydb (1.12.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mgn (1.17.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-migrationhub (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-migrationhubconfig (1.22.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-migrationhuborchestrator (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-migrationhubrefactorspaces (1.11.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-migrationhubstrategyrecommendations (1.7.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mobile (1.37.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mq (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mturk (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-mwaa (1.19.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-neptune (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-networkfirewall (1.24.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-networkmanager (1.28.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-nimblestudio (1.18.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-oam (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-omics (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-opensearchserverless (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-opensearchservice (1.17.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-opsworks (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-opsworkscm (1.54.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-organizations (1.73.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-outposts (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-panorama (1.12.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-personalize (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-personalizeevents (1.30.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-personalizeruntime (1.35.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-pi (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpoint (1.70.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointemail (1.37.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointsmsvoice (1.34.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointsmsvoicev2 (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-pipes (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-polly (1.66.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-pricing (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-privatenetworks (1.4.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-prometheusservice (1.17.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-proton (1.23.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-qldb (1.27.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-qldbsession (1.24.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-quicksight (1.76.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ram (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-rds (1.172.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-rdsdataservice (1.40.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-recyclebin (1.8.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-redshift (1.91.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-redshiftdataapiservice (1.24.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-redshiftserverless (1.7.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-rekognition (1.74.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-resiliencehub (1.10.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-resourceexplorer2 (1.3.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-resourcegroups (1.48.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-resourcegroupstaggingapi (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-resources (3.160.0) + aws-sdk-accessanalyzer (~> 1) + aws-sdk-account (~> 1) + aws-sdk-acm (~> 1) + aws-sdk-acmpca (~> 1) + aws-sdk-alexaforbusiness (~> 1) + aws-sdk-amplify (~> 1) + aws-sdk-amplifybackend (~> 1) + aws-sdk-amplifyuibuilder (~> 1) + aws-sdk-apigateway (~> 1) + aws-sdk-apigatewaymanagementapi (~> 1) + aws-sdk-apigatewayv2 (~> 1) + aws-sdk-appconfig (~> 1) + aws-sdk-appconfigdata (~> 1) + aws-sdk-appflow (~> 1) + aws-sdk-appintegrationsservice (~> 1) + aws-sdk-applicationautoscaling (~> 1) + aws-sdk-applicationcostprofiler (~> 1) + aws-sdk-applicationdiscoveryservice (~> 1) + aws-sdk-applicationinsights (~> 1) + aws-sdk-appmesh (~> 1) + aws-sdk-appregistry (~> 1) + aws-sdk-apprunner (~> 1) + aws-sdk-appstream (~> 1) + aws-sdk-appsync (~> 1) + aws-sdk-arczonalshift (~> 1) + aws-sdk-athena (~> 1) + aws-sdk-auditmanager (~> 1) + aws-sdk-augmentedairuntime (~> 1) + aws-sdk-autoscaling (~> 1) + aws-sdk-autoscalingplans (~> 1) + aws-sdk-backup (~> 1) + aws-sdk-backupgateway (~> 1) + aws-sdk-backupstorage (~> 1) + aws-sdk-batch (~> 1) + aws-sdk-billingconductor (~> 1) + aws-sdk-braket (~> 1) + aws-sdk-budgets (~> 1) + aws-sdk-chime (~> 1) + aws-sdk-chimesdkidentity (~> 1) + aws-sdk-chimesdkmediapipelines (~> 1) + aws-sdk-chimesdkmeetings (~> 1) + aws-sdk-chimesdkmessaging (~> 1) + aws-sdk-chimesdkvoice (~> 1) + aws-sdk-cleanrooms (~> 1) + aws-sdk-cloud9 (~> 1) + aws-sdk-cloudcontrolapi (~> 1) + aws-sdk-clouddirectory (~> 1) + aws-sdk-cloudformation (~> 1) + aws-sdk-cloudfront (~> 1) + aws-sdk-cloudhsm (~> 1) + aws-sdk-cloudhsmv2 (~> 1) + aws-sdk-cloudsearch (~> 1) + aws-sdk-cloudsearchdomain (~> 1) + aws-sdk-cloudtrail (~> 1) + aws-sdk-cloudtraildata (~> 1) + aws-sdk-cloudwatch (~> 1) + aws-sdk-cloudwatchevents (~> 1) + aws-sdk-cloudwatchevidently (~> 1) + aws-sdk-cloudwatchlogs (~> 1) + aws-sdk-cloudwatchrum (~> 1) + aws-sdk-codeartifact (~> 1) + aws-sdk-codebuild (~> 1) + aws-sdk-codecatalyst (~> 1) + aws-sdk-codecommit (~> 1) + aws-sdk-codedeploy (~> 1) + aws-sdk-codeguruprofiler (~> 1) + aws-sdk-codegurureviewer (~> 1) + aws-sdk-codepipeline (~> 1) + aws-sdk-codestar (~> 1) + aws-sdk-codestarconnections (~> 1) + aws-sdk-codestarnotifications (~> 1) + aws-sdk-cognitoidentity (~> 1) + aws-sdk-cognitoidentityprovider (~> 1) + aws-sdk-cognitosync (~> 1) + aws-sdk-comprehend (~> 1) + aws-sdk-comprehendmedical (~> 1) + aws-sdk-computeoptimizer (~> 1) + aws-sdk-configservice (~> 1) + aws-sdk-connect (~> 1) + aws-sdk-connectcampaignservice (~> 1) + aws-sdk-connectcases (~> 1) + aws-sdk-connectcontactlens (~> 1) + aws-sdk-connectparticipant (~> 1) + aws-sdk-connectwisdomservice (~> 1) + aws-sdk-controltower (~> 1) + aws-sdk-costandusagereportservice (~> 1) + aws-sdk-costexplorer (~> 1) + aws-sdk-customerprofiles (~> 1) + aws-sdk-databasemigrationservice (~> 1) + aws-sdk-dataexchange (~> 1) + aws-sdk-datapipeline (~> 1) + aws-sdk-datasync (~> 1) + aws-sdk-dax (~> 1) + aws-sdk-detective (~> 1) + aws-sdk-devicefarm (~> 1) + aws-sdk-devopsguru (~> 1) + aws-sdk-directconnect (~> 1) + aws-sdk-directoryservice (~> 1) + aws-sdk-dlm (~> 1) + aws-sdk-docdb (~> 1) + aws-sdk-docdbelastic (~> 1) + aws-sdk-drs (~> 1) + aws-sdk-dynamodb (~> 1) + aws-sdk-dynamodbstreams (~> 1) + aws-sdk-ebs (~> 1) + aws-sdk-ec2 (~> 1) + aws-sdk-ec2instanceconnect (~> 1) + aws-sdk-ecr (~> 1) + aws-sdk-ecrpublic (~> 1) + aws-sdk-ecs (~> 1) + aws-sdk-efs (~> 1) + aws-sdk-eks (~> 1) + aws-sdk-elasticache (~> 1) + aws-sdk-elasticbeanstalk (~> 1) + aws-sdk-elasticinference (~> 1) + aws-sdk-elasticloadbalancing (~> 1) + aws-sdk-elasticloadbalancingv2 (~> 1) + aws-sdk-elasticsearchservice (~> 1) + aws-sdk-elastictranscoder (~> 1) + aws-sdk-emr (~> 1) + aws-sdk-emrcontainers (~> 1) + aws-sdk-emrserverless (~> 1) + aws-sdk-eventbridge (~> 1) + aws-sdk-finspace (~> 1) + aws-sdk-finspacedata (~> 1) + aws-sdk-firehose (~> 1) + aws-sdk-fis (~> 1) + aws-sdk-fms (~> 1) + aws-sdk-forecastqueryservice (~> 1) + aws-sdk-forecastservice (~> 1) + aws-sdk-frauddetector (~> 1) + aws-sdk-fsx (~> 1) + aws-sdk-gamelift (~> 1) + aws-sdk-gamesparks (~> 1) + aws-sdk-glacier (~> 1) + aws-sdk-globalaccelerator (~> 1) + aws-sdk-glue (~> 1) + aws-sdk-gluedatabrew (~> 1) + aws-sdk-greengrass (~> 1) + aws-sdk-greengrassv2 (~> 1) + aws-sdk-groundstation (~> 1) + aws-sdk-guardduty (~> 1) + aws-sdk-health (~> 1) + aws-sdk-healthlake (~> 1) + aws-sdk-honeycode (~> 1) + aws-sdk-iam (~> 1) + aws-sdk-identitystore (~> 1) + aws-sdk-imagebuilder (~> 1) + aws-sdk-importexport (~> 1) + aws-sdk-inspector (~> 1) + aws-sdk-inspector2 (~> 1) + aws-sdk-internetmonitor (~> 1) + aws-sdk-iot (~> 1) + aws-sdk-iot1clickdevicesservice (~> 1) + aws-sdk-iot1clickprojects (~> 1) + aws-sdk-iotanalytics (~> 1) + aws-sdk-iotdataplane (~> 1) + aws-sdk-iotdeviceadvisor (~> 1) + aws-sdk-iotevents (~> 1) + aws-sdk-ioteventsdata (~> 1) + aws-sdk-iotfleethub (~> 1) + aws-sdk-iotfleetwise (~> 1) + aws-sdk-iotjobsdataplane (~> 1) + aws-sdk-iotroborunner (~> 1) + aws-sdk-iotsecuretunneling (~> 1) + aws-sdk-iotsitewise (~> 1) + aws-sdk-iotthingsgraph (~> 1) + aws-sdk-iottwinmaker (~> 1) + aws-sdk-iotwireless (~> 1) + aws-sdk-ivs (~> 1) + aws-sdk-ivschat (~> 1) + aws-sdk-kafka (~> 1) + aws-sdk-kafkaconnect (~> 1) + aws-sdk-kendra (~> 1) + aws-sdk-kendraranking (~> 1) + aws-sdk-keyspaces (~> 1) + aws-sdk-kinesis (~> 1) + aws-sdk-kinesisanalytics (~> 1) + aws-sdk-kinesisanalyticsv2 (~> 1) + aws-sdk-kinesisvideo (~> 1) + aws-sdk-kinesisvideoarchivedmedia (~> 1) + aws-sdk-kinesisvideomedia (~> 1) + aws-sdk-kinesisvideosignalingchannels (~> 1) + aws-sdk-kinesisvideowebrtcstorage (~> 1) + aws-sdk-kms (~> 1) + aws-sdk-lakeformation (~> 1) + aws-sdk-lambda (~> 1) + aws-sdk-lambdapreview (~> 1) + aws-sdk-lex (~> 1) + aws-sdk-lexmodelbuildingservice (~> 1) + aws-sdk-lexmodelsv2 (~> 1) + aws-sdk-lexruntimev2 (~> 1) + aws-sdk-licensemanager (~> 1) + aws-sdk-licensemanagerlinuxsubscriptions (~> 1) + aws-sdk-licensemanagerusersubscriptions (~> 1) + aws-sdk-lightsail (~> 1) + aws-sdk-locationservice (~> 1) + aws-sdk-lookoutequipment (~> 1) + aws-sdk-lookoutforvision (~> 1) + aws-sdk-lookoutmetrics (~> 1) + aws-sdk-machinelearning (~> 1) + aws-sdk-macie (~> 1) + aws-sdk-macie2 (~> 1) + aws-sdk-mainframemodernization (~> 1) + aws-sdk-managedblockchain (~> 1) + aws-sdk-managedgrafana (~> 1) + aws-sdk-marketplacecatalog (~> 1) + aws-sdk-marketplacecommerceanalytics (~> 1) + aws-sdk-marketplaceentitlementservice (~> 1) + aws-sdk-marketplacemetering (~> 1) + aws-sdk-mediaconnect (~> 1) + aws-sdk-mediaconvert (~> 1) + aws-sdk-medialive (~> 1) + aws-sdk-mediapackage (~> 1) + aws-sdk-mediapackagevod (~> 1) + aws-sdk-mediastore (~> 1) + aws-sdk-mediastoredata (~> 1) + aws-sdk-mediatailor (~> 1) + aws-sdk-memorydb (~> 1) + aws-sdk-mgn (~> 1) + aws-sdk-migrationhub (~> 1) + aws-sdk-migrationhubconfig (~> 1) + aws-sdk-migrationhuborchestrator (~> 1) + aws-sdk-migrationhubrefactorspaces (~> 1) + aws-sdk-migrationhubstrategyrecommendations (~> 1) + aws-sdk-mobile (~> 1) + aws-sdk-mq (~> 1) + aws-sdk-mturk (~> 1) + aws-sdk-mwaa (~> 1) + aws-sdk-neptune (~> 1) + aws-sdk-networkfirewall (~> 1) + aws-sdk-networkmanager (~> 1) + aws-sdk-nimblestudio (~> 1) + aws-sdk-oam (~> 1) + aws-sdk-omics (~> 1) + aws-sdk-opensearchserverless (~> 1) + aws-sdk-opensearchservice (~> 1) + aws-sdk-opsworks (~> 1) + aws-sdk-opsworkscm (~> 1) + aws-sdk-organizations (~> 1) + aws-sdk-outposts (~> 1) + aws-sdk-panorama (~> 1) + aws-sdk-personalize (~> 1) + aws-sdk-personalizeevents (~> 1) + aws-sdk-personalizeruntime (~> 1) + aws-sdk-pi (~> 1) + aws-sdk-pinpoint (~> 1) + aws-sdk-pinpointemail (~> 1) + aws-sdk-pinpointsmsvoice (~> 1) + aws-sdk-pinpointsmsvoicev2 (~> 1) + aws-sdk-pipes (~> 1) + aws-sdk-polly (~> 1) + aws-sdk-pricing (~> 1) + aws-sdk-privatenetworks (~> 1) + aws-sdk-prometheusservice (~> 1) + aws-sdk-proton (~> 1) + aws-sdk-qldb (~> 1) + aws-sdk-qldbsession (~> 1) + aws-sdk-quicksight (~> 1) + aws-sdk-ram (~> 1) + aws-sdk-rds (~> 1) + aws-sdk-rdsdataservice (~> 1) + aws-sdk-recyclebin (~> 1) + aws-sdk-redshift (~> 1) + aws-sdk-redshiftdataapiservice (~> 1) + aws-sdk-redshiftserverless (~> 1) + aws-sdk-rekognition (~> 1) + aws-sdk-resiliencehub (~> 1) + aws-sdk-resourceexplorer2 (~> 1) + aws-sdk-resourcegroups (~> 1) + aws-sdk-resourcegroupstaggingapi (~> 1) + aws-sdk-robomaker (~> 1) + aws-sdk-rolesanywhere (~> 1) + aws-sdk-route53 (~> 1) + aws-sdk-route53domains (~> 1) + aws-sdk-route53recoverycluster (~> 1) + aws-sdk-route53recoverycontrolconfig (~> 1) + aws-sdk-route53recoveryreadiness (~> 1) + aws-sdk-route53resolver (~> 1) + aws-sdk-s3 (~> 1) + aws-sdk-s3control (~> 1) + aws-sdk-s3outposts (~> 1) + aws-sdk-sagemaker (~> 1) + aws-sdk-sagemakeredgemanager (~> 1) + aws-sdk-sagemakerfeaturestoreruntime (~> 1) + aws-sdk-sagemakergeospatial (~> 1) + aws-sdk-sagemakermetrics (~> 1) + aws-sdk-sagemakerruntime (~> 1) + aws-sdk-savingsplans (~> 1) + aws-sdk-scheduler (~> 1) + aws-sdk-schemas (~> 1) + aws-sdk-secretsmanager (~> 1) + aws-sdk-securityhub (~> 1) + aws-sdk-securitylake (~> 1) + aws-sdk-serverlessapplicationrepository (~> 1) + aws-sdk-servicecatalog (~> 1) + aws-sdk-servicediscovery (~> 1) + aws-sdk-servicequotas (~> 1) + aws-sdk-ses (~> 1) + aws-sdk-sesv2 (~> 1) + aws-sdk-shield (~> 1) + aws-sdk-signer (~> 1) + aws-sdk-simpledb (~> 1) + aws-sdk-simspaceweaver (~> 1) + aws-sdk-sms (~> 1) + aws-sdk-snowball (~> 1) + aws-sdk-snowdevicemanagement (~> 1) + aws-sdk-sns (~> 1) + aws-sdk-sqs (~> 1) + aws-sdk-ssm (~> 1) + aws-sdk-ssmcontacts (~> 1) + aws-sdk-ssmincidents (~> 1) + aws-sdk-ssmsap (~> 1) + aws-sdk-ssoadmin (~> 1) + aws-sdk-states (~> 1) + aws-sdk-storagegateway (~> 1) + aws-sdk-support (~> 1) + aws-sdk-supportapp (~> 1) + aws-sdk-swf (~> 1) + aws-sdk-synthetics (~> 1) + aws-sdk-textract (~> 1) + aws-sdk-timestreamquery (~> 1) + aws-sdk-timestreamwrite (~> 1) + aws-sdk-tnb (~> 1) + aws-sdk-transcribeservice (~> 1) + aws-sdk-transcribestreamingservice (~> 1) + aws-sdk-transfer (~> 1) + aws-sdk-translate (~> 1) + aws-sdk-voiceid (~> 1) + aws-sdk-waf (~> 1) + aws-sdk-wafregional (~> 1) + aws-sdk-wafv2 (~> 1) + aws-sdk-wellarchitected (~> 1) + aws-sdk-workdocs (~> 1) + aws-sdk-worklink (~> 1) + aws-sdk-workmail (~> 1) + aws-sdk-workmailmessageflow (~> 1) + aws-sdk-workspaces (~> 1) + aws-sdk-workspacesweb (~> 1) + aws-sdk-xray (~> 1) + aws-sdk-robomaker (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-rolesanywhere (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53 (1.71.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53domains (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53recoverycluster (1.13.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53recoverycontrolconfig (1.13.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53recoveryreadiness (1.12.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53resolver (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.119.1) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.4) + aws-sdk-s3control (1.60.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3outposts (1.15.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sagemaker (1.166.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sagemakeredgemanager (1.14.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sagemakerfeaturestoreruntime (1.15.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sagemakergeospatial (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sagemakermetrics (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sagemakerruntime (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-savingsplans (1.28.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-scheduler (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-schemas (1.25.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-secretsmanager (1.72.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-securityhub (1.78.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-securitylake (1.2.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-serverlessapplicationrepository (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-servicecatalog (1.76.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-servicediscovery (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-servicequotas (1.25.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ses (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sesv2 (1.31.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-shield (1.51.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-signer (1.40.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-simpledb (1.36.1) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv2 (~> 1.0) + aws-sdk-simspaceweaver (1.1.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sms (1.42.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-snowball (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-snowdevicemanagement (1.9.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sns (1.60.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-sqs (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssm (1.149.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssmcontacts (1.16.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssmincidents (1.21.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssmsap (1.3.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssoadmin (1.23.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-states (1.52.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-storagegateway (1.70.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-support (1.45.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-supportapp (1.4.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-swf (1.39.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-synthetics (1.30.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-textract (1.44.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-timestreamquery (1.18.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-timestreamwrite (1.17.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-tnb (1.0.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-transcribeservice (1.81.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-transcribestreamingservice (1.46.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-transfer (1.67.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-translate (1.50.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-voiceid (1.11.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-waf (1.49.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-wafregional (1.50.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-wafv2 (1.50.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-wellarchitected (1.20.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-workdocs (1.43.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-worklink (1.35.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-workmail (1.53.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-workmailmessageflow (1.23.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-workspaces (1.79.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-workspacesweb (1.8.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-xray (1.51.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sigv2 (1.1.0) aws-sigv4 (1.5.2) aws-eventstream (~> 1, >= 1.0.2) benchmark-ips (2.11.0) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 4789e2ed02c..28295d2b65f 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -107,7 +107,6 @@ expect(span.get_tag('aws.operation')).to eq('list_buckets') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('s3') - # expect(span.get_tag('bucketname')).to eq('bucket1') expect(span.get_tag('path')).to eq('/') expect(span.get_tag('host')).to eq('s3.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('GET') From 7a69a959bfa827345e21ad4f9319417fc2d8ad07 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Mon, 17 Apr 2023 14:26:38 -0700 Subject: [PATCH 25/44] remove 2.7 gemlock change --- gemfiles/ruby_2.7.6_contrib.gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/ruby_2.7.6_contrib.gemfile.lock b/gemfiles/ruby_2.7.6_contrib.gemfile.lock index afd0ec02718..bbb6b2dc5d6 100644 --- a/gemfiles/ruby_2.7.6_contrib.gemfile.lock +++ b/gemfiles/ruby_2.7.6_contrib.gemfile.lock @@ -1796,7 +1796,7 @@ DEPENDENCIES activerecord addressable (~> 2.4.0) appraisal (~> 2.4.0) - aws-sdk (~> 2) + aws-sdk benchmark-ips (~> 2.8) benchmark-memory (< 0.2) builder From 4a79ed7b17f8abf5e1ce81ffb53179aaac8d1915 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Mon, 17 Apr 2023 16:09:45 -0700 Subject: [PATCH 26/44] remove fetch use normal [] syntax --- .../tracing/contrib/aws/instrumentation.rb | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index fa65227af3c..4ba5a19493b 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -84,9 +84,9 @@ def add_service_specific_tags(span, aws_service, params) end def add_sqs_tags(span, params) - queue_url = params.fetch(:queue_url, nil) - queue_name = params.fetch(:queue_name, nil) - if queue_url + queue_url = params[:queue_url] + queue_name = params[:queue_name] + if queue_url # example queue_url: https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName queue_name = queue_url.split('/')[-1] aws_account = queue_url.split('/')[-2] @@ -96,8 +96,8 @@ def add_sqs_tags(span, params) end def add_sns_tags(span, params) - topic_arn = params.fetch(:topic_arn, nil) - topic_name = params.fetch(:name, nil) + topic_arn = params[:topic_arn] + topic_name = params[:name] if topic_arn # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name topic_name = topic_arn.split(':')[-1] @@ -108,13 +108,13 @@ def add_sns_tags(span, params) end def add_dynamodb_tags(span, params) - table_name = params.fetch(:table_name, '') + table_name = params[:table_name] span.set_tag(Ext::TAG_TABLE_NAME, table_name) end def add_kinesis_tags(span, params) - stream_arn = params.fetch(:stream_arn, nil) - stream_name = params.fetch(:stream_name, '') + stream_arn = params[:stream_arn] + stream_name = params[:stream_name] if stream_arn # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream stream_name = stream_arn.split('/')[-1] rescue '' @@ -125,14 +125,14 @@ def add_kinesis_tags(span, params) end def add_eventbridge_tags(span, params) - rule_name = params.fetch(:name, nil) || params.fetch(:rule, nil) + rule_name = params[:name] || params[:rule] span.set_tag(Ext::TAG_RULE_NAME, rule_name) end def add_states_tags(span, params) - state_machine_name = params.fetch(:name, nil) - state_machine_arn = params.fetch(:state_machine_arn, nil) - execution_arn = params.fetch(:execution_arn, nil) + state_machine_name = params[:name] + state_machine_arn = params[:state_machine_arn] + execution_arn = params[:execution_arn] if execution_arn # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' @@ -150,7 +150,7 @@ def add_states_tags(span, params) end def add_s3_tags(span, params) - bucket_name = params.fetch(:bucket, nil) + bucket_name = params[:bucket] span.set_tag(Ext::TAG_BUCKET_NAME, bucket_name) end From 7162e638bf94a76e7177173ebfe734e8ade88fe6 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Mon, 17 Apr 2023 16:31:42 -0700 Subject: [PATCH 27/44] cover if queue_url does not match pattern --- .../tracing/contrib/aws/instrumentation.rb | 10 ++++--- .../contrib/aws/instrumentation_spec.rb | 26 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index 4ba5a19493b..29c7dcd5b25 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -86,10 +86,12 @@ def add_service_specific_tags(span, aws_service, params) def add_sqs_tags(span, params) queue_url = params[:queue_url] queue_name = params[:queue_name] - if queue_url - # example queue_url: https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName - queue_name = queue_url.split('/')[-1] - aws_account = queue_url.split('/')[-2] + # Regular expression to match the SQS queue URL pattern + # https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName + pattern = %r{https://sqs\.[^/]+\.amazonaws\.com/(\d+)/([^/]+)} + + if queue_url && (match = queue_url.match(pattern)) + aws_account, queue_name = match.captures span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) end span.set_tag(Ext::TAG_QUEUE_NAME, queue_name) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 28295d2b65f..e185f8d1bbb 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -239,6 +239,32 @@ end end + describe '#send_message_invalid_queue_url' do + subject!(:send_message) do + client.send_message( + { + queue_url: 'https://sqs.us-stubbed-1/MyQueueName', + message_body: 'Hello, world!' + } + ) + end + + let(:responses) do + { send_message: { + md5_of_message_body: 'msg body', + md5_of_message_attributes: 'msg attributes', + md5_of_message_system_attributes: 'message system attributes', + message_id: '123', + sequence_number: '456' + } } + end + + it 'generates a span' do + expect(span.get_tag('aws_account')).to eq(nil) + expect(span.get_tag('queuename')).to eq('') + end + end + describe '#send_message_batch' do subject!(:send_message_batch) do client.send_message_batch( From 0d46cf234838a484d3b2ec46d65c6b2e18cde212 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Mon, 17 Apr 2023 16:33:26 -0700 Subject: [PATCH 28/44] remove rescue --- lib/datadog/tracing/contrib/aws/instrumentation.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index 29c7dcd5b25..cf35cc39f60 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -119,8 +119,8 @@ def add_kinesis_tags(span, params) stream_name = params[:stream_name] if stream_arn # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream - stream_name = stream_arn.split('/')[-1] rescue '' - aws_account = stream_arn.split(':')[-2] rescue '' + stream_name = stream_arn.split('/')[-1] + aws_account = stream_arn.split(':')[-2] span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) end span.set_tag(Ext::TAG_STREAM_NAME, stream_name) From e572138c7e54e061ed46e62234963e0706b5bee7 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 18 Apr 2023 10:28:53 -0700 Subject: [PATCH 29/44] trigger CI From 18425194efb6559d0da94b0631d414c5e387050f Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Mon, 24 Apr 2023 17:04:11 -0700 Subject: [PATCH 30/44] add move service's add tags function to their own file --- .../tracing/contrib/aws/instrumentation.rb | 80 ++----------------- .../tracing/contrib/aws/services/dynamodb.rb | 4 + .../contrib/aws/services/eventbridge.rb | 4 + .../tracing/contrib/aws/services/kinesis.rb | 12 +++ .../tracing/contrib/aws/services/s3.rb | 4 + .../tracing/contrib/aws/services/sns.rb | 12 +++ .../tracing/contrib/aws/services/sqs.rb | 11 +++ .../contrib/aws/services/stepfunctions.rb | 20 +++++ 8 files changed, 74 insertions(+), 73 deletions(-) create mode 100644 lib/datadog/tracing/contrib/aws/services/dynamodb.rb create mode 100644 lib/datadog/tracing/contrib/aws/services/eventbridge.rb create mode 100644 lib/datadog/tracing/contrib/aws/services/kinesis.rb create mode 100644 lib/datadog/tracing/contrib/aws/services/s3.rb create mode 100644 lib/datadog/tracing/contrib/aws/services/sns.rb create mode 100644 lib/datadog/tracing/contrib/aws/services/sqs.rb create mode 100644 lib/datadog/tracing/contrib/aws/services/stepfunctions.rb diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index cf35cc39f60..7ec3f8a8196 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -4,6 +4,13 @@ require_relative '../analytics' require_relative 'ext' require_relative '../span_attribute_schema' +require_relative 'services/sqs' +require_relative 'services/sns' +require_relative 'services/dynamodb' +require_relative 'services/kinesis' +require_relative 'services/eventbridge' +require_relative 'services/states' +require_relative 'services/s3' module Datadog module Tracing @@ -83,79 +90,6 @@ def add_service_specific_tags(span, aws_service, params) end end - def add_sqs_tags(span, params) - queue_url = params[:queue_url] - queue_name = params[:queue_name] - # Regular expression to match the SQS queue URL pattern - # https://sqs.sa-east-1.amazonaws.com/12345678/MyQueueName - pattern = %r{https://sqs\.[^/]+\.amazonaws\.com/(\d+)/([^/]+)} - - if queue_url && (match = queue_url.match(pattern)) - aws_account, queue_name = match.captures - span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Ext::TAG_QUEUE_NAME, queue_name) - end - - def add_sns_tags(span, params) - topic_arn = params[:topic_arn] - topic_name = params[:name] - if topic_arn - # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name - topic_name = topic_arn.split(':')[-1] - aws_account = topic_arn.split(':')[-2] - span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Ext::TAG_TOPIC_NAME, topic_name) - end - - def add_dynamodb_tags(span, params) - table_name = params[:table_name] - span.set_tag(Ext::TAG_TABLE_NAME, table_name) - end - - def add_kinesis_tags(span, params) - stream_arn = params[:stream_arn] - stream_name = params[:stream_name] - if stream_arn - # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream - stream_name = stream_arn.split('/')[-1] - aws_account = stream_arn.split(':')[-2] - span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Ext::TAG_STREAM_NAME, stream_name) - end - - def add_eventbridge_tags(span, params) - rule_name = params[:name] || params[:rule] - span.set_tag(Ext::TAG_RULE_NAME, rule_name) - end - - def add_states_tags(span, params) - state_machine_name = params[:name] - state_machine_arn = params[:state_machine_arn] - execution_arn = params[:execution_arn] - - if execution_arn - # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' - state_machine_name = execution_arn.split(':')[-2] - end - - if state_machine_arn - # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine - state_machine_name = state_machine_arn.split(':')[-1] - state_machine_account_id = state_machine_arn.split(':')[-3] - end - span.set_tag(Ext::TAG_AWS_ACCOUNT, state_machine_account_id) - # state_machine_name = create_state_machine_name || start_execution_state_machine_name - span.set_tag(Ext::TAG_STATE_MACHINE_NAME, state_machine_name) - end - - def add_s3_tags(span, params) - bucket_name = params[:bucket] - span.set_tag(Ext::TAG_BUCKET_NAME, bucket_name) - end - def configuration Datadog.configuration.tracing[:aws] end diff --git a/lib/datadog/tracing/contrib/aws/services/dynamodb.rb b/lib/datadog/tracing/contrib/aws/services/dynamodb.rb new file mode 100644 index 00000000000..ac554176fea --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/dynamodb.rb @@ -0,0 +1,4 @@ +def add_dynamodb_tags(span, params) + table_name = params[:table_name] + span.set_tag(Ext::TAG_TABLE_NAME, table_name) +end \ No newline at end of file diff --git a/lib/datadog/tracing/contrib/aws/services/eventbridge.rb b/lib/datadog/tracing/contrib/aws/services/eventbridge.rb new file mode 100644 index 00000000000..a70430594fc --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/eventbridge.rb @@ -0,0 +1,4 @@ +def add_eventbridge_tags(span, params) + rule_name = params[:name] || params[:rule] + span.set_tag(Ext::TAG_RULE_NAME, rule_name) +end \ No newline at end of file diff --git a/lib/datadog/tracing/contrib/aws/services/kinesis.rb b/lib/datadog/tracing/contrib/aws/services/kinesis.rb new file mode 100644 index 00000000000..0517a3edd75 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/kinesis.rb @@ -0,0 +1,12 @@ +def add_kinesis_tags(span, params) + stream_arn = params[:stream_arn] + stream_name = params[:stream_name] + if stream_arn + # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream + parts = stream_arn.split(':') + stream_name = parts[-1] + aws_account = parts[-2] + span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Ext::TAG_STREAM_NAME, stream_name) +end \ No newline at end of file diff --git a/lib/datadog/tracing/contrib/aws/services/s3.rb b/lib/datadog/tracing/contrib/aws/services/s3.rb new file mode 100644 index 00000000000..e9df6ebea75 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/s3.rb @@ -0,0 +1,4 @@ +def add_s3_tags(span, params) + bucket_name = params[:bucket] + span.set_tag(Ext::TAG_BUCKET_NAME, bucket_name) +end \ No newline at end of file diff --git a/lib/datadog/tracing/contrib/aws/services/sns.rb b/lib/datadog/tracing/contrib/aws/services/sns.rb new file mode 100644 index 00000000000..1870e4c47b3 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/sns.rb @@ -0,0 +1,12 @@ +def add_sns_tags(span, params) + topic_arn = params[:topic_arn] + topic_name = params[:name] + if topic_arn + # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name + parts = topic_arn.split(':') + topic_name = parts[-1] + aws_account = parts[-2] + span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Ext::TAG_TOPIC_NAME, topic_name) + end \ No newline at end of file diff --git a/lib/datadog/tracing/contrib/aws/services/sqs.rb b/lib/datadog/tracing/contrib/aws/services/sqs.rb new file mode 100644 index 00000000000..b891e0f052d --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/sqs.rb @@ -0,0 +1,11 @@ +def add_sqs_tags(span, params) + queue_url = params[:queue_url] + queue_name = params[:queue_name] + if queue_url + _, _, _, aws_account, queue_name = queue_url.split('/') + aws_account = parts[-2] + queue_name = parts[-1] + span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Ext::TAG_QUEUE_NAME, queue_name) +end diff --git a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb new file mode 100644 index 00000000000..3c71fa0b51c --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb @@ -0,0 +1,20 @@ +def add_states_tags(span, params) + state_machine_name = params[:name] + state_machine_arn = params[:state_machine_arn] + execution_arn = params[:execution_arn] + + if execution_arn + # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' + state_machine_name = execution_arn.split(':')[-2] + end + + if state_machine_arn + # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine + parts = state_machine_arn.split(':') + state_machine_name = parts[-1] + state_machine_account_id = parts[-3] + end + span.set_tag(Ext::TAG_AWS_ACCOUNT, state_machine_account_id) + # state_machine_name = create_state_machine_name || start_execution_state_machine_name + span.set_tag(Ext::TAG_STATE_MACHINE_NAME, state_machine_name) +end \ No newline at end of file From 0f36b44672011f891c2f0d2e9e829f39957106c8 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 25 Apr 2023 22:13:50 -0700 Subject: [PATCH 31/44] refactor to seperate files and add more tests --- .../tracing/contrib/aws/instrumentation.rb | 27 +------- .../tracing/contrib/aws/services/dynamodb.rb | 10 ++- .../contrib/aws/services/eventbridge.rb | 10 ++- .../tracing/contrib/aws/services/helpers.rb | 28 ++++++++ .../tracing/contrib/aws/services/kinesis.rb | 26 ++++--- .../tracing/contrib/aws/services/s3.rb | 10 ++- .../tracing/contrib/aws/services/sns.rb | 26 ++++--- .../tracing/contrib/aws/services/sqs.rb | 18 ++--- .../contrib/aws/services/stepfunctions.rb | 41 ++++++----- .../contrib/aws/instrumentation_spec.rb | 26 ------- .../contrib/aws/services/dynamobdb_spec.rb | 30 ++++++++ .../contrib/aws/services/eventbrige_spec.rb | 40 +++++++++++ .../contrib/aws/services/kinesis_spec.rb | 40 +++++++++++ .../tracing/contrib/aws/services/s3_spec.rb | 29 ++++++++ .../tracing/contrib/aws/services/sns_spec.rb | 40 +++++++++++ .../tracing/contrib/aws/services/sqs_spec.rb | 34 +++++++++ .../aws/services/stepfunctions_spec.rb | 69 +++++++++++++++++++ 17 files changed, 396 insertions(+), 108 deletions(-) create mode 100644 lib/datadog/tracing/contrib/aws/services/helpers.rb create mode 100644 spec/datadog/tracing/contrib/aws/services/dynamobdb_spec.rb create mode 100644 spec/datadog/tracing/contrib/aws/services/eventbrige_spec.rb create mode 100644 spec/datadog/tracing/contrib/aws/services/kinesis_spec.rb create mode 100644 spec/datadog/tracing/contrib/aws/services/s3_spec.rb create mode 100644 spec/datadog/tracing/contrib/aws/services/sns_spec.rb create mode 100644 spec/datadog/tracing/contrib/aws/services/sqs_spec.rb create mode 100644 spec/datadog/tracing/contrib/aws/services/stepfunctions_spec.rb diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index 7ec3f8a8196..404cf26a71d 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -4,13 +4,7 @@ require_relative '../analytics' require_relative 'ext' require_relative '../span_attribute_schema' -require_relative 'services/sqs' -require_relative 'services/sns' -require_relative 'services/dynamodb' -require_relative 'services/kinesis' -require_relative 'services/eventbridge' -require_relative 'services/states' -require_relative 'services/s3' +require_relative 'services/helpers' module Datadog module Tracing @@ -71,25 +65,6 @@ def annotate!(span, context) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, context.safely(:status_code)) end - def add_service_specific_tags(span, aws_service, params) - case aws_service - when 'sqs' - add_sqs_tags(span, params) - when 'sns' - add_sns_tags(span, params) - when 'dynamodb' - add_dynamodb_tags(span, params) - when 'kinesis' - add_kinesis_tags(span, params) - when 'eventbridge' - add_eventbridge_tags(span, params) - when 'states' - add_states_tags(span, params) - when 's3' - add_s3_tags(span, params) - end - end - def configuration Datadog.configuration.tracing[:aws] end diff --git a/lib/datadog/tracing/contrib/aws/services/dynamodb.rb b/lib/datadog/tracing/contrib/aws/services/dynamodb.rb index ac554176fea..b53dfe902fd 100644 --- a/lib/datadog/tracing/contrib/aws/services/dynamodb.rb +++ b/lib/datadog/tracing/contrib/aws/services/dynamodb.rb @@ -1,4 +1,8 @@ +# frozen_string_literal: true + +require_relative '../ext' + def add_dynamodb_tags(span, params) - table_name = params[:table_name] - span.set_tag(Ext::TAG_TABLE_NAME, table_name) -end \ No newline at end of file + table_name = params[:table_name] + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_TABLE_NAME, table_name) +end diff --git a/lib/datadog/tracing/contrib/aws/services/eventbridge.rb b/lib/datadog/tracing/contrib/aws/services/eventbridge.rb index a70430594fc..d179a09e8f3 100644 --- a/lib/datadog/tracing/contrib/aws/services/eventbridge.rb +++ b/lib/datadog/tracing/contrib/aws/services/eventbridge.rb @@ -1,4 +1,8 @@ +# frozen_string_literal: true + +require_relative '../ext' + def add_eventbridge_tags(span, params) - rule_name = params[:name] || params[:rule] - span.set_tag(Ext::TAG_RULE_NAME, rule_name) -end \ No newline at end of file + rule_name = params[:name] || params[:rule] + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, rule_name) +end diff --git a/lib/datadog/tracing/contrib/aws/services/helpers.rb b/lib/datadog/tracing/contrib/aws/services/helpers.rb new file mode 100644 index 00000000000..fa21a17282b --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/services/helpers.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require_relative 'sqs' +require_relative 'sns' +require_relative 'dynamodb' +require_relative 'kinesis' +require_relative 'eventbridge' +require_relative 'stepfunctions' +require_relative 's3' + +def add_service_specific_tags(span, aws_service, params) + case aws_service + when 'sqs' + add_sqs_tags(span, params) + when 'sns' + add_sns_tags(span, params) + when 'dynamodb' + add_dynamodb_tags(span, params) + when 'kinesis' + add_kinesis_tags(span, params) + when 'eventbridge' + add_eventbridge_tags(span, params) + when 'states' + add_states_tags(span, params) + when 's3' + add_s3_tags(span, params) + end +end diff --git a/lib/datadog/tracing/contrib/aws/services/kinesis.rb b/lib/datadog/tracing/contrib/aws/services/kinesis.rb index 0517a3edd75..d16926bce81 100644 --- a/lib/datadog/tracing/contrib/aws/services/kinesis.rb +++ b/lib/datadog/tracing/contrib/aws/services/kinesis.rb @@ -1,12 +1,16 @@ +# frozen_string_literal: true + +require_relative '../ext' + def add_kinesis_tags(span, params) - stream_arn = params[:stream_arn] - stream_name = params[:stream_name] - if stream_arn - # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream - parts = stream_arn.split(':') - stream_name = parts[-1] - aws_account = parts[-2] - span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Ext::TAG_STREAM_NAME, stream_name) -end \ No newline at end of file + stream_arn = params[:stream_arn] + stream_name = params[:stream_name] + if stream_arn + # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream + parts = stream_arn.split(':') + stream_name = parts[-1].split('/')[-1] + aws_account = parts[-2] + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, stream_name) +end diff --git a/lib/datadog/tracing/contrib/aws/services/s3.rb b/lib/datadog/tracing/contrib/aws/services/s3.rb index e9df6ebea75..981fa2d3970 100644 --- a/lib/datadog/tracing/contrib/aws/services/s3.rb +++ b/lib/datadog/tracing/contrib/aws/services/s3.rb @@ -1,4 +1,8 @@ +# frozen_string_literal: true + +require_relative '../ext' + def add_s3_tags(span, params) - bucket_name = params[:bucket] - span.set_tag(Ext::TAG_BUCKET_NAME, bucket_name) -end \ No newline at end of file + bucket_name = params[:bucket] + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_BUCKET_NAME, bucket_name) +end diff --git a/lib/datadog/tracing/contrib/aws/services/sns.rb b/lib/datadog/tracing/contrib/aws/services/sns.rb index 1870e4c47b3..aa6378bffd3 100644 --- a/lib/datadog/tracing/contrib/aws/services/sns.rb +++ b/lib/datadog/tracing/contrib/aws/services/sns.rb @@ -1,12 +1,16 @@ +# frozen_string_literal: true + +require_relative '../ext' + def add_sns_tags(span, params) - topic_arn = params[:topic_arn] - topic_name = params[:name] - if topic_arn - # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name - parts = topic_arn.split(':') - topic_name = parts[-1] - aws_account = parts[-2] - span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Ext::TAG_TOPIC_NAME, topic_name) - end \ No newline at end of file + topic_arn = params[:topic_arn] + topic_name = params[:name] + if topic_arn + # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name + parts = topic_arn.split(':') + topic_name = parts[-1] + aws_account = parts[-2] + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, topic_name) +end diff --git a/lib/datadog/tracing/contrib/aws/services/sqs.rb b/lib/datadog/tracing/contrib/aws/services/sqs.rb index b891e0f052d..bd2a6b85a96 100644 --- a/lib/datadog/tracing/contrib/aws/services/sqs.rb +++ b/lib/datadog/tracing/contrib/aws/services/sqs.rb @@ -1,11 +1,13 @@ +# frozen_string_literal: true + +require_relative '../ext' + def add_sqs_tags(span, params) - queue_url = params[:queue_url] - queue_name = params[:queue_name] - if queue_url + queue_url = params[:queue_url] + queue_name = params[:queue_name] + if queue_url _, _, _, aws_account, queue_name = queue_url.split('/') - aws_account = parts[-2] - queue_name = parts[-1] - span.set_tag(Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Ext::TAG_QUEUE_NAME, queue_name) + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_QUEUE_NAME, queue_name) end diff --git a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb index 3c71fa0b51c..1063d86527b 100644 --- a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb +++ b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb @@ -1,20 +1,27 @@ +# frozen_string_literal: true + +require_relative '../ext' + def add_states_tags(span, params) - state_machine_name = params[:name] - state_machine_arn = params[:state_machine_arn] - execution_arn = params[:execution_arn] + state_machine_name = params[:name] + state_machine_arn = params[:state_machine_arn] + execution_arn = params[:execution_arn] + state_machine_account_id = '' + + if execution_arn + # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' + parts = execution_arn.split(':') + state_machine_name = parts[-2] + state_machine_account_id = parts[4] - if execution_arn - # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' - state_machine_name = execution_arn.split(':')[-2] - end + end - if state_machine_arn - # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine - parts = state_machine_arn.split(':') - state_machine_name = parts[-1] - state_machine_account_id = parts[-3] - end - span.set_tag(Ext::TAG_AWS_ACCOUNT, state_machine_account_id) - # state_machine_name = create_state_machine_name || start_execution_state_machine_name - span.set_tag(Ext::TAG_STATE_MACHINE_NAME, state_machine_name) -end \ No newline at end of file + if state_machine_arn + # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine + parts = state_machine_arn.split(':') + state_machine_name ||= parts[-1] + state_machine_account_id = parts[-3] + end + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, state_machine_account_id) + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, state_machine_name) +end diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index e185f8d1bbb..28295d2b65f 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -239,32 +239,6 @@ end end - describe '#send_message_invalid_queue_url' do - subject!(:send_message) do - client.send_message( - { - queue_url: 'https://sqs.us-stubbed-1/MyQueueName', - message_body: 'Hello, world!' - } - ) - end - - let(:responses) do - { send_message: { - md5_of_message_body: 'msg body', - md5_of_message_attributes: 'msg attributes', - md5_of_message_system_attributes: 'message system attributes', - message_id: '123', - sequence_number: '456' - } } - end - - it 'generates a span' do - expect(span.get_tag('aws_account')).to eq(nil) - expect(span.get_tag('queuename')).to eq('') - end - end - describe '#send_message_batch' do subject!(:send_message_batch) do client.send_message_batch( diff --git a/spec/datadog/tracing/contrib/aws/services/dynamobdb_spec.rb b/spec/datadog/tracing/contrib/aws/services/dynamobdb_spec.rb new file mode 100644 index 00000000000..34ae57e75c8 --- /dev/null +++ b/spec/datadog/tracing/contrib/aws/services/dynamobdb_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require 'rspec' +require 'lib/datadog/tracing/contrib/aws/services/dynamodb' + +RSpec.describe 'add_dynamodb_tags' do + let(:span) { instance_double('Span') } + let(:params) { {} } + + before do + allow(span).to receive(:set_tag) + end + + context 'with table_name provided' do + let(:table_name) { 'example-table' } + let(:params) { { table_name: table_name } } + + it 'sets the table_name tag' do + add_dynamodb_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TABLE_NAME, table_name) + end + end + + context 'with no table_name provided' do + it 'does not set the table_name tag' do + add_dynamodb_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TABLE_NAME, nil) + end + end +end diff --git a/spec/datadog/tracing/contrib/aws/services/eventbrige_spec.rb b/spec/datadog/tracing/contrib/aws/services/eventbrige_spec.rb new file mode 100644 index 00000000000..c533c6e7d72 --- /dev/null +++ b/spec/datadog/tracing/contrib/aws/services/eventbrige_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'rspec' +require 'lib/datadog/tracing/contrib/aws/services/eventbridge' + +RSpec.describe 'add_eventbridge_tags' do + let(:span) { instance_double('Span') } + let(:params) { {} } + + before do + allow(span).to receive(:set_tag) + end + + context 'with rule_name provided in params[:name]' do + let(:rule_name) { 'example-rule-name' } + let(:params) { { name: rule_name } } + + it 'sets the rule_name based on the params[:name]' do + add_eventbridge_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, rule_name) + end + end + + context 'with rule_name provided in params[:rule]' do + let(:rule_name) { 'example-rule-name' } + let(:params) { { rule: rule_name } } + + it 'sets the rule_name based on the params[:rule]' do + add_eventbridge_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, rule_name) + end + end + + context 'without rule_name provided' do + it 'does not set the rule_name tag' do + add_eventbridge_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, nil) + end + end +end diff --git a/spec/datadog/tracing/contrib/aws/services/kinesis_spec.rb b/spec/datadog/tracing/contrib/aws/services/kinesis_spec.rb new file mode 100644 index 00000000000..2db478caf37 --- /dev/null +++ b/spec/datadog/tracing/contrib/aws/services/kinesis_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'rspec' +require 'lib/datadog/tracing/contrib/aws/services/kinesis' + +RSpec.describe 'add_kinesis_tags' do + let(:span) { instance_double('Span') } + let(:params) { {} } + + before do + allow(span).to receive(:set_tag) + end + + context 'with stream_arn provided' do + let(:stream_arn) { 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream' } + let(:params) { { stream_arn: stream_arn } } + + it 'sets the stream_name and aws_account based on the stream_arn' do + add_kinesis_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, 'my-stream') + end + end + + context 'with stream_name provided' do + let(:params) { { stream_name: 'my-stream' } } + + it 'sets the stream_name based on the provided stream_name' do + add_kinesis_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, 'my-stream') + end + end + + context 'with neither stream_arn nor stream_name provided' do + it 'sets the stream_name to nil' do + add_kinesis_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, nil) + end + end +end diff --git a/spec/datadog/tracing/contrib/aws/services/s3_spec.rb b/spec/datadog/tracing/contrib/aws/services/s3_spec.rb new file mode 100644 index 00000000000..614c9e76315 --- /dev/null +++ b/spec/datadog/tracing/contrib/aws/services/s3_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rspec' +require 'lib/datadog/tracing/contrib/aws/services/s3' + +RSpec.describe 'add_s3_tags' do + let(:span) { instance_double('Span') } + let(:params) { {} } + + before do + allow(span).to receive(:set_tag) + end + + context 'with bucket name provided' do + let(:params) { { bucket: 'my-bucket-name' } } + + it 'sets the bucket_name based on the provided bucket name' do + add_s3_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_BUCKET_NAME, 'my-bucket-name') + end + end + + context 'with no bucket name provided' do + it 'sets the bucket_name to nil' do + add_s3_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_BUCKET_NAME, nil) + end + end +end diff --git a/spec/datadog/tracing/contrib/aws/services/sns_spec.rb b/spec/datadog/tracing/contrib/aws/services/sns_spec.rb new file mode 100644 index 00000000000..87c0d3c035b --- /dev/null +++ b/spec/datadog/tracing/contrib/aws/services/sns_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'rspec' +require 'lib/datadog/tracing/contrib/aws/services/sns' + +RSpec.describe 'add_sns_tags' do + let(:span) { instance_double('Span') } + let(:params) { {} } + + before do + allow(span).to receive(:set_tag) + end + + context 'with topic_arn provided' do + let(:topic_arn) { 'arn:aws:sns:us-west-2:123456789012:my-topic-name' } + let(:params) { { topic_arn: topic_arn } } + + it 'sets the topic_name and aws_account based on the topic_arn' do + add_sns_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, 'my-topic-name') + end + end + + context 'with name provided' do + let(:params) { { name: 'my-topic-name' } } + + it 'sets the topic_name based on the provided name' do + add_sns_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, 'my-topic-name') + end + end + + context 'with neither topic_arn nor name provided' do + it 'sets the topic_name to nil' do + add_sns_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, nil) + end + end +end diff --git a/spec/datadog/tracing/contrib/aws/services/sqs_spec.rb b/spec/datadog/tracing/contrib/aws/services/sqs_spec.rb new file mode 100644 index 00000000000..dec10cf5460 --- /dev/null +++ b/spec/datadog/tracing/contrib/aws/services/sqs_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'lib/datadog/tracing/contrib/aws/services/sqs' +require 'spec_helper' + +RSpec.describe 'add_sqs_tags' do + let(:span) { instance_double('Span') } + let(:params) { {} } + + before do + allow(span).to receive(:set_tag) + end + + context 'when queue_url is present' do + let(:queue_url) { 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueueName' } + let(:params) { { queue_url: queue_url } } + + it 'sets AWS account and queue name tags' do + add_sqs_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_QUEUE_NAME, 'MyQueueName') + end + end + + context 'when queue_name is present' do + let(:queue_name) { 'AnotherQueueName' } + let(:params) { { queue_name: queue_name } } + + it 'sets queue name tag' do + add_sqs_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_QUEUE_NAME, 'AnotherQueueName') + end + end +end diff --git a/spec/datadog/tracing/contrib/aws/services/stepfunctions_spec.rb b/spec/datadog/tracing/contrib/aws/services/stepfunctions_spec.rb new file mode 100644 index 00000000000..97c39a4f831 --- /dev/null +++ b/spec/datadog/tracing/contrib/aws/services/stepfunctions_spec.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +require 'rspec' +require 'lib/datadog/tracing/contrib/aws/services/stepfunctions' + +RSpec.describe 'add_states_tags' do + let(:span) { instance_double('Span') } + let(:params) { {} } + + before do + allow(span).to receive(:set_tag) + end + + context 'with execution_arn provided' do + let(:execution_arn) { 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' } + let(:params) { { execution_arn: execution_arn } } + + it 'sets the state_machine_name based on the execution_arn' do + add_states_tags(span, params) + expect(span).to have_received(:set_tag).with( + Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, + 'example-state-machine' + ) + end + end + + context 'with state_machine_arn provided' do + let(:state_machine_arn) { 'arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine' } + let(:params) { { state_machine_arn: state_machine_arn } } + + it 'sets the state_machine_name based on the state_machine_arn' do + add_states_tags(span, params) + expect(span).to have_received(:set_tag).with( + Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, + 'MyStateMachine' + ) + end + + it 'sets the state_machine_account_id based on the state_machine_arn' do + add_states_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') + end + end + + context 'with both execution_arn and state_machine_arn provided' do + let(:execution_arn) { 'arn:aws:states:us-east-1:987654321098:execution:example-state-machine:example-execution' } + let(:state_machine_arn) { 'arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine' } + + it 'sets the state_machine_name and state_machine_account_id based on the state_machine_arn' do + params = { state_machine_arn: state_machine_arn } + add_states_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') + expect(span).to have_received(:set_tag).with( + Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, + 'MyStateMachine' + ) + end + + it 'sets the state_machine_name and state_machine_account_id based on the execution_arn' do + params = { execution_arn: execution_arn } + add_states_tags(span, params) + expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '987654321098') + expect(span).to have_received(:set_tag).with( + Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, + 'example-state-machine' + ) + end + end +end From 89ce6c46356db2d9307650ae2fcac875f1fbb766 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 25 Apr 2023 23:21:15 -0700 Subject: [PATCH 32/44] use arnparser instead of manually parsing --- .../tracing/contrib/aws/services/kinesis.rb | 10 ++++++---- lib/datadog/tracing/contrib/aws/services/sns.rb | 10 ++++++---- .../contrib/aws/services/stepfunctions.rb | 17 ++++++++--------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/services/kinesis.rb b/lib/datadog/tracing/contrib/aws/services/kinesis.rb index d16926bce81..0f6d25f78f0 100644 --- a/lib/datadog/tracing/contrib/aws/services/kinesis.rb +++ b/lib/datadog/tracing/contrib/aws/services/kinesis.rb @@ -1,16 +1,18 @@ # frozen_string_literal: true require_relative '../ext' +require 'aws-sdk' def add_kinesis_tags(span, params) stream_arn = params[:stream_arn] stream_name = params[:stream_name] + if stream_arn - # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream - parts = stream_arn.split(':') - stream_name = parts[-1].split('/')[-1] - aws_account = parts[-2] + arn = Aws::ARNParser.parse(stream_arn) + stream_name = arn.resource.split('/').last + aws_account = arn.account_id span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) end + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, stream_name) end diff --git a/lib/datadog/tracing/contrib/aws/services/sns.rb b/lib/datadog/tracing/contrib/aws/services/sns.rb index aa6378bffd3..de22d192813 100644 --- a/lib/datadog/tracing/contrib/aws/services/sns.rb +++ b/lib/datadog/tracing/contrib/aws/services/sns.rb @@ -1,16 +1,18 @@ # frozen_string_literal: true require_relative '../ext' +require 'aws-sdk' def add_sns_tags(span, params) topic_arn = params[:topic_arn] topic_name = params[:name] + if topic_arn - # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name - parts = topic_arn.split(':') - topic_name = parts[-1] - aws_account = parts[-2] + arn = Aws::ARNParser.parse(topic_arn) + topic_name = arn.resource.split(':').last + aws_account = arn.account_id span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) end + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, topic_name) end diff --git a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb index 1063d86527b..ae1bb6f365d 100644 --- a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb +++ b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require_relative '../ext' +require 'aws-sdk' def add_states_tags(span, params) state_machine_name = params[:name] @@ -9,19 +10,17 @@ def add_states_tags(span, params) state_machine_account_id = '' if execution_arn - # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' - parts = execution_arn.split(':') - state_machine_name = parts[-2] - state_machine_account_id = parts[4] - + arn = Aws::ARNParser.parse(execution_arn) + state_machine_name = arn.resource.split(':')[-2] + state_machine_account_id = arn.account_id end if state_machine_arn - # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine - parts = state_machine_arn.split(':') - state_machine_name ||= parts[-1] - state_machine_account_id = parts[-3] + arn = Aws::ARNParser.parse(state_machine_arn) + state_machine_name ||= arn.resource.split(':').last + state_machine_account_id = arn.account_id end + span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, state_machine_account_id) span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, state_machine_name) end From c653881ec7ff2211d0f561bbeec3fa542e7d6222 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Fri, 28 Apr 2023 10:35:10 -0700 Subject: [PATCH 33/44] revert back to not using arn parser as it makes things more complicated and slower --- .../tracing/contrib/aws/services/kinesis.rb | 12 +++++------- lib/datadog/tracing/contrib/aws/services/sns.rb | 12 +++++------- .../contrib/aws/services/stepfunctions.rb | 17 +++++++++-------- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/services/kinesis.rb b/lib/datadog/tracing/contrib/aws/services/kinesis.rb index 0f6d25f78f0..0e1c513e369 100644 --- a/lib/datadog/tracing/contrib/aws/services/kinesis.rb +++ b/lib/datadog/tracing/contrib/aws/services/kinesis.rb @@ -1,18 +1,16 @@ # frozen_string_literal: true require_relative '../ext' -require 'aws-sdk' def add_kinesis_tags(span, params) stream_arn = params[:stream_arn] stream_name = params[:stream_name] - if stream_arn - arn = Aws::ARNParser.parse(stream_arn) - stream_name = arn.resource.split('/').last - aws_account = arn.account_id + # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream + parts = stream_arn.split(':') + stream_name = parts[-1].split('/')[-1] + aws_account = parts[-2] span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) end - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, stream_name) -end +end \ No newline at end of file diff --git a/lib/datadog/tracing/contrib/aws/services/sns.rb b/lib/datadog/tracing/contrib/aws/services/sns.rb index de22d192813..906efea79b5 100644 --- a/lib/datadog/tracing/contrib/aws/services/sns.rb +++ b/lib/datadog/tracing/contrib/aws/services/sns.rb @@ -1,18 +1,16 @@ # frozen_string_literal: true require_relative '../ext' -require 'aws-sdk' def add_sns_tags(span, params) topic_arn = params[:topic_arn] topic_name = params[:name] - if topic_arn - arn = Aws::ARNParser.parse(topic_arn) - topic_name = arn.resource.split(':').last - aws_account = arn.account_id + # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name + parts = topic_arn.split(':') + topic_name = parts[-1] + aws_account = parts[-2] span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) end - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, topic_name) -end +end \ No newline at end of file diff --git a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb index ae1bb6f365d..1063d86527b 100644 --- a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb +++ b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require_relative '../ext' -require 'aws-sdk' def add_states_tags(span, params) state_machine_name = params[:name] @@ -10,17 +9,19 @@ def add_states_tags(span, params) state_machine_account_id = '' if execution_arn - arn = Aws::ARNParser.parse(execution_arn) - state_machine_name = arn.resource.split(':')[-2] - state_machine_account_id = arn.account_id + # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' + parts = execution_arn.split(':') + state_machine_name = parts[-2] + state_machine_account_id = parts[4] + end if state_machine_arn - arn = Aws::ARNParser.parse(state_machine_arn) - state_machine_name ||= arn.resource.split(':').last - state_machine_account_id = arn.account_id + # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine + parts = state_machine_arn.split(':') + state_machine_name ||= parts[-1] + state_machine_account_id = parts[-3] end - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, state_machine_account_id) span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, state_machine_name) end From d0028a800ab6369b55992bc19fe2ca5f9ba19398 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:42:50 -0700 Subject: [PATCH 34/44] only be additive, do not remove old tags --- lib/datadog/tracing/contrib/aws/ext.rb | 1 + lib/datadog/tracing/contrib/aws/instrumentation.rb | 1 + spec/datadog/tracing/contrib/aws/instrumentation_spec.rb | 2 ++ 3 files changed, 4 insertions(+) diff --git a/lib/datadog/tracing/contrib/aws/ext.rb b/lib/datadog/tracing/contrib/aws/ext.rb index 5a6fcc6bab0..fef44a4cd76 100644 --- a/lib/datadog/tracing/contrib/aws/ext.rb +++ b/lib/datadog/tracing/contrib/aws/ext.rb @@ -18,6 +18,7 @@ module Ext TAG_OPERATION = 'aws.operation'.freeze TAG_OPERATION_COMMAND = 'command'.freeze TAG_PATH = 'path'.freeze + TAG_AWS_REGION = 'region'.freeze TAG_REGION = 'region'.freeze TAG_AWS_SERVICE = 'aws_service'.freeze TAG_AWS_ACCOUNT = 'aws_account'.freeze diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index 404cf26a71d..cc80db28751 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -59,6 +59,7 @@ def annotate!(span, context) span.set_tag(Ext::TAG_AGENT, Ext::TAG_DEFAULT_AGENT) span.set_tag(Ext::TAG_OPERATION, context.safely(:operation)) span.set_tag(Ext::TAG_REGION, context.safely(:region)) + span.set_tag(Ext::TAG_AWS_REGION, context.safely(:region)) span.set_tag(Ext::TAG_PATH, context.safely(:path)) span.set_tag(Ext::TAG_HOST, context.safely(:host)) span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, context.safely(:http_method)) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 28295d2b65f..e3e0197dfe7 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -54,6 +54,7 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('get_access_key_info') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('path')).to eq('') expect(span.get_tag('host')).to eq('sts.us-stubbed-1.amazonaws.com') @@ -105,6 +106,7 @@ expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') expect(span.get_tag('aws.operation')).to eq('list_buckets') + expect(span.get_tag('aws.region')).to eq('us-stubbed-1') expect(span.get_tag('region')).to eq('us-stubbed-1') expect(span.get_tag('aws_service')).to eq('s3') expect(span.get_tag('path')).to eq('/') From b30a8c6cddea2138190653d1ef74c348d875113a Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Fri, 28 Apr 2023 10:44:46 -0700 Subject: [PATCH 35/44] rubocop --- lib/datadog/tracing/contrib/aws/services/kinesis.rb | 2 +- lib/datadog/tracing/contrib/aws/services/sns.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/datadog/tracing/contrib/aws/services/kinesis.rb b/lib/datadog/tracing/contrib/aws/services/kinesis.rb index 0e1c513e369..d16926bce81 100644 --- a/lib/datadog/tracing/contrib/aws/services/kinesis.rb +++ b/lib/datadog/tracing/contrib/aws/services/kinesis.rb @@ -13,4 +13,4 @@ def add_kinesis_tags(span, params) span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) end span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, stream_name) -end \ No newline at end of file +end diff --git a/lib/datadog/tracing/contrib/aws/services/sns.rb b/lib/datadog/tracing/contrib/aws/services/sns.rb index 906efea79b5..aa6378bffd3 100644 --- a/lib/datadog/tracing/contrib/aws/services/sns.rb +++ b/lib/datadog/tracing/contrib/aws/services/sns.rb @@ -13,4 +13,4 @@ def add_sns_tags(span, params) span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) end span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, topic_name) -end \ No newline at end of file +end From c878ee9368d446acb7ae5f3012beb36612d6ab99 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Fri, 28 Apr 2023 11:32:00 -0700 Subject: [PATCH 36/44] fix aws.region tests --- lib/datadog/tracing/contrib/aws/ext.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/datadog/tracing/contrib/aws/ext.rb b/lib/datadog/tracing/contrib/aws/ext.rb index fef44a4cd76..2827596088c 100644 --- a/lib/datadog/tracing/contrib/aws/ext.rb +++ b/lib/datadog/tracing/contrib/aws/ext.rb @@ -18,7 +18,7 @@ module Ext TAG_OPERATION = 'aws.operation'.freeze TAG_OPERATION_COMMAND = 'command'.freeze TAG_PATH = 'path'.freeze - TAG_AWS_REGION = 'region'.freeze + TAG_AWS_REGION = 'aws.region'.freeze TAG_REGION = 'region'.freeze TAG_AWS_SERVICE = 'aws_service'.freeze TAG_AWS_ACCOUNT = 'aws_account'.freeze From 0c289273557256825bb089f67122ba503ce87cee Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Mon, 1 May 2023 17:04:38 -0700 Subject: [PATCH 37/44] address comments by using modules and classes, fix the tests, rename services to service directory --- .../tracing/contrib/aws/instrumentation.rb | 5 ++- .../tracing/contrib/aws/service/base.rb | 16 ++++++++ .../tracing/contrib/aws/service/dynamodb.rb | 19 ++++++++++ .../contrib/aws/service/eventbridge.rb | 19 ++++++++++ .../tracing/contrib/aws/service/kinesis.rb | 29 +++++++++++++++ lib/datadog/tracing/contrib/aws/service/s3.rb | 19 ++++++++++ .../tracing/contrib/aws/service/sns.rb | 27 ++++++++++++++ .../tracing/contrib/aws/service/sqs.rb | 24 ++++++++++++ .../contrib/aws/service/stepfunctions.rb | 37 +++++++++++++++++++ lib/datadog/tracing/contrib/aws/services.rb | 10 +++++ .../tracing/contrib/aws/services/dynamodb.rb | 8 ---- .../contrib/aws/services/eventbridge.rb | 8 ---- .../tracing/contrib/aws/services/helpers.rb | 28 -------------- .../tracing/contrib/aws/services/kinesis.rb | 16 -------- .../tracing/contrib/aws/services/s3.rb | 8 ---- .../tracing/contrib/aws/services/sns.rb | 16 -------- .../tracing/contrib/aws/services/sqs.rb | 13 ------- .../contrib/aws/services/stepfunctions.rb | 27 -------------- .../{services => service}/dynamobdb_spec.rb | 10 +++-- .../{services => service}/eventbrige_spec.rb | 12 +++--- .../aws/{services => service}/kinesis_spec.rb | 12 +++--- .../aws/{services => service}/s3_spec.rb | 10 +++-- .../aws/{services => service}/sns_spec.rb | 12 +++--- .../aws/{services => service}/sqs_spec.rb | 11 ++++-- .../stepfunctions_spec.rb | 16 ++++---- 25 files changed, 252 insertions(+), 160 deletions(-) create mode 100644 lib/datadog/tracing/contrib/aws/service/base.rb create mode 100644 lib/datadog/tracing/contrib/aws/service/dynamodb.rb create mode 100644 lib/datadog/tracing/contrib/aws/service/eventbridge.rb create mode 100644 lib/datadog/tracing/contrib/aws/service/kinesis.rb create mode 100644 lib/datadog/tracing/contrib/aws/service/s3.rb create mode 100644 lib/datadog/tracing/contrib/aws/service/sns.rb create mode 100644 lib/datadog/tracing/contrib/aws/service/sqs.rb create mode 100644 lib/datadog/tracing/contrib/aws/service/stepfunctions.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/dynamodb.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/eventbridge.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/helpers.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/kinesis.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/s3.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/sns.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/sqs.rb delete mode 100644 lib/datadog/tracing/contrib/aws/services/stepfunctions.rb rename spec/datadog/tracing/contrib/aws/{services => service}/dynamobdb_spec.rb (69%) rename spec/datadog/tracing/contrib/aws/{services => service}/eventbrige_spec.rb (74%) rename spec/datadog/tracing/contrib/aws/{services => service}/kinesis_spec.rb (78%) rename spec/datadog/tracing/contrib/aws/{services => service}/s3_spec.rb (71%) rename spec/datadog/tracing/contrib/aws/{services => service}/sns_spec.rb (79%) rename spec/datadog/tracing/contrib/aws/{services => service}/sqs_spec.rb (76%) rename spec/datadog/tracing/contrib/aws/{services => service}/stepfunctions_spec.rb (84%) diff --git a/lib/datadog/tracing/contrib/aws/instrumentation.rb b/lib/datadog/tracing/contrib/aws/instrumentation.rb index cc80db28751..259f5aab875 100644 --- a/lib/datadog/tracing/contrib/aws/instrumentation.rb +++ b/lib/datadog/tracing/contrib/aws/instrumentation.rb @@ -4,7 +4,6 @@ require_relative '../analytics' require_relative 'ext' require_relative '../span_attribute_schema' -require_relative 'services/helpers' module Datadog module Tracing @@ -37,7 +36,9 @@ def annotate!(span, context) aws_service = span.resource.split('.')[0] span.set_tag(Ext::TAG_AWS_SERVICE, aws_service) params = context.safely(:params) - add_service_specific_tags(span, aws_service, params) + if (handler = Datadog::Tracing::Contrib::Aws::SERVICE_HANDLERS[aws_service]) + handler.add_tags(span, params) + end span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT) diff --git a/lib/datadog/tracing/contrib/aws/service/base.rb b/lib/datadog/tracing/contrib/aws/service/base.rb new file mode 100644 index 00000000000..c6b496c1df7 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/base.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # Base class for all AWS service-specific tag handlers. + class Base + def add_tags(span, params); end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/service/dynamodb.rb b/lib/datadog/tracing/contrib/aws/service/dynamodb.rb new file mode 100644 index 00000000000..d51210e115d --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/dynamodb.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # DynamoDB tag handlers. + class DynamoDB < Base + def add_tags(span, params) + table_name = params[:table_name] + span.set_tag(Aws::Ext::TAG_TABLE_NAME, table_name) + end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/service/eventbridge.rb b/lib/datadog/tracing/contrib/aws/service/eventbridge.rb new file mode 100644 index 00000000000..484e2f1d7b9 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/eventbridge.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # EventBridge tag handlers. + class EventBridge < Base + def add_tags(span, params) + rule_name = params[:name] || params[:rule] + span.set_tag(Aws::Ext::TAG_RULE_NAME, rule_name) + end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/service/kinesis.rb b/lib/datadog/tracing/contrib/aws/service/kinesis.rb new file mode 100644 index 00000000000..ef48cfb515f --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/kinesis.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # Kinesis tag handlers. + class Kinesis < Base + def add_tags(span, params) + stream_arn = params[:stream_arn] + stream_name = params[:stream_name] + + if stream_arn + # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream + parts = stream_arn.split(':') + stream_name = parts[-1].split('/')[-1] + aws_account = parts[-2] + span.set_tag(Aws::Ext::TAG_AWS_ACCOUNT, aws_account) + end + + span.set_tag(Aws::Ext::TAG_STREAM_NAME, stream_name) + end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/service/s3.rb b/lib/datadog/tracing/contrib/aws/service/s3.rb new file mode 100644 index 00000000000..297ac00370d --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/s3.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # S3 tag handlers. + class S3 < Base + def add_tags(span, params) + bucket_name = params[:bucket] + span.set_tag(Aws::Ext::TAG_BUCKET_NAME, bucket_name) + end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/service/sns.rb b/lib/datadog/tracing/contrib/aws/service/sns.rb new file mode 100644 index 00000000000..5b0f4dadf14 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/sns.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # SNS tag handlers. + class SNS < Base + def add_tags(span, params) + topic_arn = params[:topic_arn] + topic_name = params[:name] + if topic_arn + # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name + parts = topic_arn.split(':') + topic_name = parts[-1] + aws_account = parts[-2] + span.set_tag(Aws::Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Aws::Ext::TAG_TOPIC_NAME, topic_name) + end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/service/sqs.rb b/lib/datadog/tracing/contrib/aws/service/sqs.rb new file mode 100644 index 00000000000..a44abe85b95 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/sqs.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # SQS tag handlers. + class SQS < Base + def add_tags(span, params) + queue_url = params[:queue_url] + queue_name = params[:queue_name] + if queue_url + _, _, _, aws_account, queue_name = queue_url.split('/') + span.set_tag(Aws::Ext::TAG_AWS_ACCOUNT, aws_account) + end + span.set_tag(Aws::Ext::TAG_QUEUE_NAME, queue_name) + end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/service/stepfunctions.rb b/lib/datadog/tracing/contrib/aws/service/stepfunctions.rb new file mode 100644 index 00000000000..d4a2220efc0 --- /dev/null +++ b/lib/datadog/tracing/contrib/aws/service/stepfunctions.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module Datadog + module Tracing + module Contrib + module Aws + module Service + # States tag handlers. + class States < Base + def add_tags(span, params) + state_machine_name = params[:name] + state_machine_arn = params[:state_machine_arn] + execution_arn = params[:execution_arn] + state_machine_account_id = '' + + if execution_arn + # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' + parts = execution_arn.split(':') + state_machine_name = parts[-2] + state_machine_account_id = parts[4] + end + + if state_machine_arn + # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine + parts = state_machine_arn.split(':') + state_machine_name ||= parts[-1] + state_machine_account_id = parts[-3] + end + span.set_tag(Aws::Ext::TAG_AWS_ACCOUNT, state_machine_account_id) + span.set_tag(Aws::Ext::TAG_STATE_MACHINE_NAME, state_machine_name) + end + end + end + end + end + end +end diff --git a/lib/datadog/tracing/contrib/aws/services.rb b/lib/datadog/tracing/contrib/aws/services.rb index ca55ddf3dbf..f2267988441 100644 --- a/lib/datadog/tracing/contrib/aws/services.rb +++ b/lib/datadog/tracing/contrib/aws/services.rb @@ -113,6 +113,16 @@ module Aws WorkSpaces XRay ].freeze + + SERVICE_HANDLERS = { + 'sqs' => Service::SQS.new, + 'sns' => Service::SNS.new, + 'dynamodb' => Service::DynamoDB.new, + 'kinesis' => Service::Kinesis.new, + 'eventbridge' => Service::EventBridge.new, + 'states' => Service::States.new, + 's3' => Service::S3.new + }.freeze end end end diff --git a/lib/datadog/tracing/contrib/aws/services/dynamodb.rb b/lib/datadog/tracing/contrib/aws/services/dynamodb.rb deleted file mode 100644 index b53dfe902fd..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/dynamodb.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -require_relative '../ext' - -def add_dynamodb_tags(span, params) - table_name = params[:table_name] - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_TABLE_NAME, table_name) -end diff --git a/lib/datadog/tracing/contrib/aws/services/eventbridge.rb b/lib/datadog/tracing/contrib/aws/services/eventbridge.rb deleted file mode 100644 index d179a09e8f3..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/eventbridge.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -require_relative '../ext' - -def add_eventbridge_tags(span, params) - rule_name = params[:name] || params[:rule] - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, rule_name) -end diff --git a/lib/datadog/tracing/contrib/aws/services/helpers.rb b/lib/datadog/tracing/contrib/aws/services/helpers.rb deleted file mode 100644 index fa21a17282b..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/helpers.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -require_relative 'sqs' -require_relative 'sns' -require_relative 'dynamodb' -require_relative 'kinesis' -require_relative 'eventbridge' -require_relative 'stepfunctions' -require_relative 's3' - -def add_service_specific_tags(span, aws_service, params) - case aws_service - when 'sqs' - add_sqs_tags(span, params) - when 'sns' - add_sns_tags(span, params) - when 'dynamodb' - add_dynamodb_tags(span, params) - when 'kinesis' - add_kinesis_tags(span, params) - when 'eventbridge' - add_eventbridge_tags(span, params) - when 'states' - add_states_tags(span, params) - when 's3' - add_s3_tags(span, params) - end -end diff --git a/lib/datadog/tracing/contrib/aws/services/kinesis.rb b/lib/datadog/tracing/contrib/aws/services/kinesis.rb deleted file mode 100644 index d16926bce81..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/kinesis.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -require_relative '../ext' - -def add_kinesis_tags(span, params) - stream_arn = params[:stream_arn] - stream_name = params[:stream_name] - if stream_arn - # example stream_arn: arn:aws:kinesis:us-east-1:123456789012:stream/my-stream - parts = stream_arn.split(':') - stream_name = parts[-1].split('/')[-1] - aws_account = parts[-2] - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, stream_name) -end diff --git a/lib/datadog/tracing/contrib/aws/services/s3.rb b/lib/datadog/tracing/contrib/aws/services/s3.rb deleted file mode 100644 index 981fa2d3970..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/s3.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -require_relative '../ext' - -def add_s3_tags(span, params) - bucket_name = params[:bucket] - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_BUCKET_NAME, bucket_name) -end diff --git a/lib/datadog/tracing/contrib/aws/services/sns.rb b/lib/datadog/tracing/contrib/aws/services/sns.rb deleted file mode 100644 index aa6378bffd3..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/sns.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -require_relative '../ext' - -def add_sns_tags(span, params) - topic_arn = params[:topic_arn] - topic_name = params[:name] - if topic_arn - # example topic_arn: arn:aws:sns:us-west-2:123456789012:my-topic-name - parts = topic_arn.split(':') - topic_name = parts[-1] - aws_account = parts[-2] - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, topic_name) -end diff --git a/lib/datadog/tracing/contrib/aws/services/sqs.rb b/lib/datadog/tracing/contrib/aws/services/sqs.rb deleted file mode 100644 index bd2a6b85a96..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/sqs.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require_relative '../ext' - -def add_sqs_tags(span, params) - queue_url = params[:queue_url] - queue_name = params[:queue_name] - if queue_url - _, _, _, aws_account, queue_name = queue_url.split('/') - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, aws_account) - end - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_QUEUE_NAME, queue_name) -end diff --git a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb b/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb deleted file mode 100644 index 1063d86527b..00000000000 --- a/lib/datadog/tracing/contrib/aws/services/stepfunctions.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -require_relative '../ext' - -def add_states_tags(span, params) - state_machine_name = params[:name] - state_machine_arn = params[:state_machine_arn] - execution_arn = params[:execution_arn] - state_machine_account_id = '' - - if execution_arn - # 'arn:aws:states:us-east-1:123456789012:execution:example-state-machine:example-execution' - parts = execution_arn.split(':') - state_machine_name = parts[-2] - state_machine_account_id = parts[4] - - end - - if state_machine_arn - # example statemachinearn: arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine - parts = state_machine_arn.split(':') - state_machine_name ||= parts[-1] - state_machine_account_id = parts[-3] - end - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, state_machine_account_id) - span.set_tag(Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, state_machine_name) -end diff --git a/spec/datadog/tracing/contrib/aws/services/dynamobdb_spec.rb b/spec/datadog/tracing/contrib/aws/service/dynamobdb_spec.rb similarity index 69% rename from spec/datadog/tracing/contrib/aws/services/dynamobdb_spec.rb rename to spec/datadog/tracing/contrib/aws/service/dynamobdb_spec.rb index 34ae57e75c8..2f4580dc7bd 100644 --- a/spec/datadog/tracing/contrib/aws/services/dynamobdb_spec.rb +++ b/spec/datadog/tracing/contrib/aws/service/dynamobdb_spec.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true require 'rspec' -require 'lib/datadog/tracing/contrib/aws/services/dynamodb' +require 'lib/datadog/tracing/contrib/aws/service/base' +require 'lib/datadog/tracing/contrib/aws/service/dynamodb' -RSpec.describe 'add_dynamodb_tags' do +RSpec.describe Datadog::Tracing::Contrib::Aws::Service::DynamoDB do let(:span) { instance_double('Span') } let(:params) { {} } + let(:dynamodb) { described_class.new } before do allow(span).to receive(:set_tag) @@ -16,14 +18,14 @@ let(:params) { { table_name: table_name } } it 'sets the table_name tag' do - add_dynamodb_tags(span, params) + dynamodb.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TABLE_NAME, table_name) end end context 'with no table_name provided' do it 'does not set the table_name tag' do - add_dynamodb_tags(span, params) + dynamodb.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TABLE_NAME, nil) end end diff --git a/spec/datadog/tracing/contrib/aws/services/eventbrige_spec.rb b/spec/datadog/tracing/contrib/aws/service/eventbrige_spec.rb similarity index 74% rename from spec/datadog/tracing/contrib/aws/services/eventbrige_spec.rb rename to spec/datadog/tracing/contrib/aws/service/eventbrige_spec.rb index c533c6e7d72..f9b8074fefa 100644 --- a/spec/datadog/tracing/contrib/aws/services/eventbrige_spec.rb +++ b/spec/datadog/tracing/contrib/aws/service/eventbrige_spec.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true require 'rspec' -require 'lib/datadog/tracing/contrib/aws/services/eventbridge' +require 'lib/datadog/tracing/contrib/aws/service/base' +require 'lib/datadog/tracing/contrib/aws/service/eventbridge' -RSpec.describe 'add_eventbridge_tags' do +RSpec.describe Datadog::Tracing::Contrib::Aws::Service::EventBridge do let(:span) { instance_double('Span') } let(:params) { {} } + let(:event_bridge) { described_class.new } before do allow(span).to receive(:set_tag) @@ -16,7 +18,7 @@ let(:params) { { name: rule_name } } it 'sets the rule_name based on the params[:name]' do - add_eventbridge_tags(span, params) + event_bridge.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, rule_name) end end @@ -26,14 +28,14 @@ let(:params) { { rule: rule_name } } it 'sets the rule_name based on the params[:rule]' do - add_eventbridge_tags(span, params) + event_bridge.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, rule_name) end end context 'without rule_name provided' do it 'does not set the rule_name tag' do - add_eventbridge_tags(span, params) + event_bridge.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_RULE_NAME, nil) end end diff --git a/spec/datadog/tracing/contrib/aws/services/kinesis_spec.rb b/spec/datadog/tracing/contrib/aws/service/kinesis_spec.rb similarity index 78% rename from spec/datadog/tracing/contrib/aws/services/kinesis_spec.rb rename to spec/datadog/tracing/contrib/aws/service/kinesis_spec.rb index 2db478caf37..4d086afd64f 100644 --- a/spec/datadog/tracing/contrib/aws/services/kinesis_spec.rb +++ b/spec/datadog/tracing/contrib/aws/service/kinesis_spec.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true require 'rspec' -require 'lib/datadog/tracing/contrib/aws/services/kinesis' +require 'lib/datadog/tracing/contrib/aws/service/base' +require 'lib/datadog/tracing/contrib/aws/service/kinesis' -RSpec.describe 'add_kinesis_tags' do +RSpec.describe Datadog::Tracing::Contrib::Aws::Service::Kinesis do let(:span) { instance_double('Span') } let(:params) { {} } + let(:kinesis) { described_class.new } before do allow(span).to receive(:set_tag) @@ -16,7 +18,7 @@ let(:params) { { stream_arn: stream_arn } } it 'sets the stream_name and aws_account based on the stream_arn' do - add_kinesis_tags(span, params) + kinesis.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, 'my-stream') end @@ -26,14 +28,14 @@ let(:params) { { stream_name: 'my-stream' } } it 'sets the stream_name based on the provided stream_name' do - add_kinesis_tags(span, params) + kinesis.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, 'my-stream') end end context 'with neither stream_arn nor stream_name provided' do it 'sets the stream_name to nil' do - add_kinesis_tags(span, params) + kinesis.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_STREAM_NAME, nil) end end diff --git a/spec/datadog/tracing/contrib/aws/services/s3_spec.rb b/spec/datadog/tracing/contrib/aws/service/s3_spec.rb similarity index 71% rename from spec/datadog/tracing/contrib/aws/services/s3_spec.rb rename to spec/datadog/tracing/contrib/aws/service/s3_spec.rb index 614c9e76315..baf2eb5c5a4 100644 --- a/spec/datadog/tracing/contrib/aws/services/s3_spec.rb +++ b/spec/datadog/tracing/contrib/aws/service/s3_spec.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true require 'rspec' -require 'lib/datadog/tracing/contrib/aws/services/s3' +require 'lib/datadog/tracing/contrib/aws/service/base' +require 'lib/datadog/tracing/contrib/aws/service/s3' -RSpec.describe 'add_s3_tags' do +RSpec.describe Datadog::Tracing::Contrib::Aws::Service::S3 do let(:span) { instance_double('Span') } let(:params) { {} } + let(:s3) { described_class.new } before do allow(span).to receive(:set_tag) @@ -15,14 +17,14 @@ let(:params) { { bucket: 'my-bucket-name' } } it 'sets the bucket_name based on the provided bucket name' do - add_s3_tags(span, params) + s3.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_BUCKET_NAME, 'my-bucket-name') end end context 'with no bucket name provided' do it 'sets the bucket_name to nil' do - add_s3_tags(span, params) + s3.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_BUCKET_NAME, nil) end end diff --git a/spec/datadog/tracing/contrib/aws/services/sns_spec.rb b/spec/datadog/tracing/contrib/aws/service/sns_spec.rb similarity index 79% rename from spec/datadog/tracing/contrib/aws/services/sns_spec.rb rename to spec/datadog/tracing/contrib/aws/service/sns_spec.rb index 87c0d3c035b..f871b16b7c8 100644 --- a/spec/datadog/tracing/contrib/aws/services/sns_spec.rb +++ b/spec/datadog/tracing/contrib/aws/service/sns_spec.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true require 'rspec' -require 'lib/datadog/tracing/contrib/aws/services/sns' +require 'lib/datadog/tracing/contrib/aws/service/base' +require 'lib/datadog/tracing/contrib/aws/service/sns' -RSpec.describe 'add_sns_tags' do +RSpec.describe Datadog::Tracing::Contrib::Aws::Service::SNS do let(:span) { instance_double('Span') } let(:params) { {} } + let(:sns) { described_class.new } before do allow(span).to receive(:set_tag) @@ -16,7 +18,7 @@ let(:params) { { topic_arn: topic_arn } } it 'sets the topic_name and aws_account based on the topic_arn' do - add_sns_tags(span, params) + sns.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, 'my-topic-name') end @@ -26,14 +28,14 @@ let(:params) { { name: 'my-topic-name' } } it 'sets the topic_name based on the provided name' do - add_sns_tags(span, params) + sns.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, 'my-topic-name') end end context 'with neither topic_arn nor name provided' do it 'sets the topic_name to nil' do - add_sns_tags(span, params) + sns.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_TOPIC_NAME, nil) end end diff --git a/spec/datadog/tracing/contrib/aws/services/sqs_spec.rb b/spec/datadog/tracing/contrib/aws/service/sqs_spec.rb similarity index 76% rename from spec/datadog/tracing/contrib/aws/services/sqs_spec.rb rename to spec/datadog/tracing/contrib/aws/service/sqs_spec.rb index dec10cf5460..bf87bfb697a 100644 --- a/spec/datadog/tracing/contrib/aws/services/sqs_spec.rb +++ b/spec/datadog/tracing/contrib/aws/service/sqs_spec.rb @@ -1,11 +1,14 @@ # frozen_string_literal: true -require 'lib/datadog/tracing/contrib/aws/services/sqs' +require 'lib/datadog/tracing/contrib/aws/service/base' +require 'lib/datadog/tracing/contrib/aws/service/sqs' require 'spec_helper' +require 'rspec' -RSpec.describe 'add_sqs_tags' do +RSpec.describe Datadog::Tracing::Contrib::Aws::Service::SQS do let(:span) { instance_double('Span') } let(:params) { {} } + let(:sqs) { described_class.new } before do allow(span).to receive(:set_tag) @@ -16,7 +19,7 @@ let(:params) { { queue_url: queue_url } } it 'sets AWS account and queue name tags' do - add_sqs_tags(span, params) + sqs.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_QUEUE_NAME, 'MyQueueName') end @@ -27,7 +30,7 @@ let(:params) { { queue_name: queue_name } } it 'sets queue name tag' do - add_sqs_tags(span, params) + sqs.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_QUEUE_NAME, 'AnotherQueueName') end end diff --git a/spec/datadog/tracing/contrib/aws/services/stepfunctions_spec.rb b/spec/datadog/tracing/contrib/aws/service/stepfunctions_spec.rb similarity index 84% rename from spec/datadog/tracing/contrib/aws/services/stepfunctions_spec.rb rename to spec/datadog/tracing/contrib/aws/service/stepfunctions_spec.rb index 97c39a4f831..128d6f3202e 100644 --- a/spec/datadog/tracing/contrib/aws/services/stepfunctions_spec.rb +++ b/spec/datadog/tracing/contrib/aws/service/stepfunctions_spec.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true require 'rspec' -require 'lib/datadog/tracing/contrib/aws/services/stepfunctions' +require 'lib/datadog/tracing/contrib/aws/service/base' +require 'lib/datadog/tracing/contrib/aws/service/stepfunctions' -RSpec.describe 'add_states_tags' do +RSpec.describe Datadog::Tracing::Contrib::Aws::Service::States do let(:span) { instance_double('Span') } let(:params) { {} } + let(:step_functions) { described_class.new } before do allow(span).to receive(:set_tag) @@ -16,7 +18,7 @@ let(:params) { { execution_arn: execution_arn } } it 'sets the state_machine_name based on the execution_arn' do - add_states_tags(span, params) + step_functions.add_tags(span, params) expect(span).to have_received(:set_tag).with( Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, 'example-state-machine' @@ -29,7 +31,7 @@ let(:params) { { state_machine_arn: state_machine_arn } } it 'sets the state_machine_name based on the state_machine_arn' do - add_states_tags(span, params) + step_functions.add_tags(span, params) expect(span).to have_received(:set_tag).with( Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, 'MyStateMachine' @@ -37,7 +39,7 @@ end it 'sets the state_machine_account_id based on the state_machine_arn' do - add_states_tags(span, params) + step_functions.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') end end @@ -48,7 +50,7 @@ it 'sets the state_machine_name and state_machine_account_id based on the state_machine_arn' do params = { state_machine_arn: state_machine_arn } - add_states_tags(span, params) + step_functions.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '123456789012') expect(span).to have_received(:set_tag).with( Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, @@ -58,7 +60,7 @@ it 'sets the state_machine_name and state_machine_account_id based on the execution_arn' do params = { execution_arn: execution_arn } - add_states_tags(span, params) + step_functions.add_tags(span, params) expect(span).to have_received(:set_tag).with(Datadog::Tracing::Contrib::Aws::Ext::TAG_AWS_ACCOUNT, '987654321098') expect(span).to have_received(:set_tag).with( Datadog::Tracing::Contrib::Aws::Ext::TAG_STATE_MACHINE_NAME, From 7321f75b436cfafd11a8680001f1b71e2718cb92 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Tue, 2 May 2023 11:30:47 -0700 Subject: [PATCH 38/44] remove conditional check for test --- spec/datadog/tracing/contrib/aws/instrumentation_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 6a7ce9a83fc..e1594d6c926 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -547,7 +547,7 @@ end end - describe '#describe_stream_consumer', if: RUBY_VERSION >= '2.3.0' do + describe '#describe_stream_consumer' do subject!(:describe_stream_consumer) do client.describe_stream_consumer( stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required @@ -595,7 +595,7 @@ end end - describe '#describe_stream_consumer', if: RUBY_VERSION < '2.3.0' do + describe '#describe_stream_consumer' do subject!(:describe_stream_consumer) do client.describe_stream_consumer( stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required From f5b7ac7a8b9d2b858bc0372b72483cc76c85fdd0 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 2 May 2023 12:23:22 -0700 Subject: [PATCH 39/44] fix kinesis assertions --- spec/datadog/tracing/contrib/aws/instrumentation_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index e1594d6c926..a048c9ff67b 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -628,7 +628,7 @@ expect(span.get_tag('aws_service')).to eq('kinesis') expect(span.get_tag('streamname')).to eq('my-stream') expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') expect(span.get_tag('http.method')).to eq('POST') expect(span.get_tag('http.status_code')).to eq('200') expect(span.get_tag('span.kind')).to eq('client') @@ -639,7 +639,7 @@ expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) .to eq('aws') expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('kinesis.us-stubbed-1.amazonaws.com') + .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') end end end From a73d645937f4da1c0b5b49cb66b944aa68e3d36b Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 2 May 2023 12:31:54 -0700 Subject: [PATCH 40/44] fix test and lint --- .../contrib/aws/instrumentation_spec.rb | 48 ------------------- 1 file changed, 48 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index a048c9ff67b..a9e6d722839 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -594,54 +594,6 @@ .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') end end - - describe '#describe_stream_consumer' do - subject!(:describe_stream_consumer) do - client.describe_stream_consumer( - stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required - consumer_name: 'cosumerName', # required - consumer_arn: 'consumerArn', # required - ) - end - - let(:responses) do - { describe_stream_consumer: { - consumer_description: { - consumer_name: 'John Doe', - consumer_arn: 'consumerArn', - consumer_status: 'CREATING', - consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), - stream_arn: 'streamArn' - } - } } - end - - it 'generates a span' do - expect(span.name).to eq('aws.command') - expect(span.service).to eq('aws') - expect(span.span_type).to eq('http') - expect(span.resource).to eq('kinesis.describe_stream_consumer') - - expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') - expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') - expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('aws_service')).to eq('kinesis') - expect(span.get_tag('streamname')).to eq('my-stream') - expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') - expect(span.get_tag('http.method')).to eq('POST') - expect(span.get_tag('http.status_code')).to eq('200') - expect(span.get_tag('span.kind')).to eq('client') - - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) - .to eq('command') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) - .to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') - end - end end context 'with an eventbridge client' do From 2781bf6ffcc76051ede4b391eff9bfcc2b77918e Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 2 May 2023 14:48:45 -0700 Subject: [PATCH 41/44] add back conditional --- .../contrib/aws/instrumentation_spec.rb | 132 ++++++++++++------ 1 file changed, 87 insertions(+), 45 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index a9e6d722839..4c6b294ae75 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -546,52 +546,94 @@ .to eq('kinesis.us-stubbed-1.amazonaws.com') end end - - describe '#describe_stream_consumer' do - subject!(:describe_stream_consumer) do - client.describe_stream_consumer( - stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required - consumer_name: 'cosumerName', # required - consumer_arn: 'consumerArn', # required - ) - end - - let(:responses) do - { describe_stream_consumer: { - consumer_description: { - consumer_name: 'John Doe', - consumer_arn: 'consumerArn', - consumer_status: 'CREATING', - consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), - stream_arn: 'streamArn' - } - } } + #aws-sdk >= (3.1.0)->aws-sdk-kinesis >= (1.45.0) resolves to a different host name + describe '#describe_stream_consumer', if: RUBY_VERSION >= '2.3.0' do + subject!(:describe_stream_consumer) do + client.describe_stream_consumer( + stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required + consumer_name: 'cosumerName', # required + consumer_arn: 'consumerArn', # required + ) + end + let(:responses) do + { describe_stream_consumer: { + consumer_description: { + consumer_name: 'John Doe', + consumer_arn: 'consumerArn', + consumer_status: 'CREATING', + consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stream_arn: 'streamArn' + } + } } + end + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('kinesis.describe_stream_consumer') + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('kinesis') + expect(span.get_tag('streamname')).to eq('my-stream') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + end end - - it 'generates a span' do - expect(span.name).to eq('aws.command') - expect(span.service).to eq('aws') - expect(span.span_type).to eq('http') - expect(span.resource).to eq('kinesis.describe_stream_consumer') - - expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') - expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') - expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('aws_service')).to eq('kinesis') - expect(span.get_tag('streamname')).to eq('my-stream') - expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') - expect(span.get_tag('http.method')).to eq('POST') - expect(span.get_tag('http.status_code')).to eq('200') - expect(span.get_tag('span.kind')).to eq('client') - - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) - .to eq('command') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) - .to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + + #aws-sdk <= (3.0.2)->aws-sdk-kinesis >= (1.34.0) resolves to a different host name + describe '#describe_stream_consumer', if: RUBY_VERSION < '2.3.0' do + subject!(:describe_stream_consumer) do + client.describe_stream_consumer( + stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required + consumer_name: 'cosumerName', # required + consumer_arn: 'consumerArn', # required + ) + end + let(:responses) do + { describe_stream_consumer: { + consumer_description: { + consumer_name: 'John Doe', + consumer_arn: 'consumerArn', + consumer_status: 'CREATING', + consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stream_arn: 'streamArn' + } + } } + end + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('kinesis.describe_stream_consumer') + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('kinesis') + expect(span.get_tag('streamname')).to eq('my-stream') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('kinesis.us-stubbed-1.amazonaws.com') + end end end end From 551f2bb082580ba49c726c2525ed97789c966030 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <andrew.rodriguez@datadoghq.com> Date: Tue, 2 May 2023 15:20:27 -0700 Subject: [PATCH 42/44] fix sytax error --- .../contrib/aws/instrumentation_spec.rb | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb index 4c6b294ae75..30a2e7612f2 100644 --- a/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb +++ b/spec/datadog/tracing/contrib/aws/instrumentation_spec.rb @@ -546,94 +546,94 @@ .to eq('kinesis.us-stubbed-1.amazonaws.com') end end - #aws-sdk >= (3.1.0)->aws-sdk-kinesis >= (1.45.0) resolves to a different host name + + # aws-sdk >= (3.1.0)->aws-sdk-kinesis >= (1.45.0) resolves to a different host name describe '#describe_stream_consumer', if: RUBY_VERSION >= '2.3.0' do - subject!(:describe_stream_consumer) do - client.describe_stream_consumer( - stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required - consumer_name: 'cosumerName', # required - consumer_arn: 'consumerArn', # required - ) - end - let(:responses) do - { describe_stream_consumer: { - consumer_description: { - consumer_name: 'John Doe', - consumer_arn: 'consumerArn', - consumer_status: 'CREATING', - consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), - stream_arn: 'streamArn' - } - } } - end - it 'generates a span' do - expect(span.name).to eq('aws.command') - expect(span.service).to eq('aws') - expect(span.span_type).to eq('http') - expect(span.resource).to eq('kinesis.describe_stream_consumer') - expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') - expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') - expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('aws_service')).to eq('kinesis') - expect(span.get_tag('streamname')).to eq('my-stream') - expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') - expect(span.get_tag('http.method')).to eq('POST') - expect(span.get_tag('http.status_code')).to eq('200') - expect(span.get_tag('span.kind')).to eq('client') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) - .to eq('command') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) - .to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') - end + subject!(:describe_stream_consumer) do + client.describe_stream_consumer( + stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required + consumer_name: 'cosumerName', # required + consumer_arn: 'consumerArn', # required + ) end - - #aws-sdk <= (3.0.2)->aws-sdk-kinesis >= (1.34.0) resolves to a different host name - describe '#describe_stream_consumer', if: RUBY_VERSION < '2.3.0' do - subject!(:describe_stream_consumer) do - client.describe_stream_consumer( - stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required - consumer_name: 'cosumerName', # required - consumer_arn: 'consumerArn', # required - ) - end - let(:responses) do - { describe_stream_consumer: { - consumer_description: { - consumer_name: 'John Doe', - consumer_arn: 'consumerArn', - consumer_status: 'CREATING', - consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), - stream_arn: 'streamArn' - } - } } - end - it 'generates a span' do - expect(span.name).to eq('aws.command') - expect(span.service).to eq('aws') - expect(span.span_type).to eq('http') - expect(span.resource).to eq('kinesis.describe_stream_consumer') - expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') - expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') - expect(span.get_tag('region')).to eq('us-stubbed-1') - expect(span.get_tag('aws_service')).to eq('kinesis') - expect(span.get_tag('streamname')).to eq('my-stream') - expect(span.get_tag('path')).to eq('') - expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') - expect(span.get_tag('http.method')).to eq('POST') - expect(span.get_tag('http.status_code')).to eq('200') - expect(span.get_tag('span.kind')).to eq('client') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) - .to eq('command') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) - .to eq('aws') - expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) - .to eq('kinesis.us-stubbed-1.amazonaws.com') - end + let(:responses) do + { describe_stream_consumer: { + consumer_description: { + consumer_name: 'John Doe', + consumer_arn: 'consumerArn', + consumer_status: 'CREATING', + consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stream_arn: 'streamArn' + } + } } + end + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('kinesis.describe_stream_consumer') + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('kinesis') + expect(span.get_tag('streamname')).to eq('my-stream') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('123456789012.control-kinesis.us-stubbed-1.amazonaws.com') + end + end + + # aws-sdk <= (3.0.2)->aws-sdk-kinesis >= (1.34.0) resolves to a different host name + describe '#describe_stream_consumer', if: RUBY_VERSION < '2.3.0' do + subject!(:describe_stream_consumer) do + client.describe_stream_consumer( + stream_arn: 'arn:aws:kinesis:us-east-1:123456789012:stream/my-stream', # required + consumer_name: 'cosumerName', # required + consumer_arn: 'consumerArn', # required + ) + end + let(:responses) do + { describe_stream_consumer: { + consumer_description: { + consumer_name: 'John Doe', + consumer_arn: 'consumerArn', + consumer_status: 'CREATING', + consumer_creation_timestamp: Time.new(2023, 3, 31, 12, 30, 0, '-04:00'), + stream_arn: 'streamArn' + } + } } + end + it 'generates a span' do + expect(span.name).to eq('aws.command') + expect(span.service).to eq('aws') + expect(span.span_type).to eq('http') + expect(span.resource).to eq('kinesis.describe_stream_consumer') + expect(span.get_tag('aws.agent')).to eq('aws-sdk-ruby') + expect(span.get_tag('aws.operation')).to eq('describe_stream_consumer') + expect(span.get_tag('region')).to eq('us-stubbed-1') + expect(span.get_tag('aws_service')).to eq('kinesis') + expect(span.get_tag('streamname')).to eq('my-stream') + expect(span.get_tag('path')).to eq('') + expect(span.get_tag('host')).to eq('kinesis.us-stubbed-1.amazonaws.com') + expect(span.get_tag('http.method')).to eq('POST') + expect(span.get_tag('http.status_code')).to eq('200') + expect(span.get_tag('span.kind')).to eq('client') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)) + .to eq('command') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_SERVICE)) + .to eq('aws') + expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_PEER_HOSTNAME)) + .to eq('kinesis.us-stubbed-1.amazonaws.com') end end end From 79e5926817cbe9063afc2b8b4fc0d8c236cba536 Mon Sep 17 00:00:00 2001 From: Marco Costa <marco.costa@datadoghq.com> Date: Wed, 3 May 2023 12:14:24 -0700 Subject: [PATCH 43/44] Reset config on test runs --- spec/spec_helper.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3644f730422..0e862a5c8e9 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -228,6 +228,15 @@ config.around do |example| example.run.tap do tracer_shutdown! + + # Reset all configuration + Datadog.configuration.reset! + + # Rebuild components with reset configuration + # DEV: This is slow, but necessary due to tests not necessarily rebuilding components before running. + # DEV: This is specially concerning for tests that use the Datadog.logger, which can be set to debug mode by + # DEV: a prior test example. + Datadog.configure {} end end end From c46b33f1aad00e8317ff4e7578f9562dab5e35e1 Mon Sep 17 00:00:00 2001 From: Marco Costa <marco.costa@datadoghq.com> Date: Wed, 3 May 2023 13:49:51 -0700 Subject: [PATCH 44/44] Reset temp_logger between test runs --- lib/datadog/core/configuration.rb | 6 +++++- spec/spec_helper.rb | 9 --------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/datadog/core/configuration.rb b/lib/datadog/core/configuration.rb index a08e40ae6a2..3442f9d9036 100644 --- a/lib/datadog/core/configuration.rb +++ b/lib/datadog/core/configuration.rb @@ -208,7 +208,11 @@ def components(allow_initialization: true) # Used internally to ensure a clean environment between test runs. def reset! safely_synchronize do |write_components| - @components.shutdown! if components? + if components? + @components.shutdown! + @temp_logger = nil # Reset to ensure instance and log level are reset for next run + end + write_components.call(nil) configuration.reset! end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 0e862a5c8e9..3644f730422 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -228,15 +228,6 @@ config.around do |example| example.run.tap do tracer_shutdown! - - # Reset all configuration - Datadog.configuration.reset! - - # Rebuild components with reset configuration - # DEV: This is slow, but necessary due to tests not necessarily rebuilding components before running. - # DEV: This is specially concerning for tests that use the Datadog.logger, which can be set to debug mode by - # DEV: a prior test example. - Datadog.configure {} end end end