aspecto-opentelemetry-instrumentation-aws_sdk 0.1.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd22dbff8fc844572b0134bc017e7202b7b0a0b117b3eceab65249449493d57e
4
- data.tar.gz: c9466be404ec13f25017f7db758819500ae4f109ad2826923d86907ce72ba13a
3
+ metadata.gz: d746413b032d66731e317195aa59ab210ca9b807bb77d09efa78fec35b2f4141
4
+ data.tar.gz: 0121c5f854af58616b3bb1cb3ea4e659c46ea4c915af155aae018c232ad1ad6a
5
5
  SHA512:
6
- metadata.gz: 1337b7ad6217685438f65de8655865f2f699b3ac12c7cd17d78e292f8fade4afddbfe1e7ee35e974abd4645e042d6209b2fc52fdda4e1291b2ca61ae6d129eb4
7
- data.tar.gz: 03fb4f63e6b7a485b6acd925e351d6d289ccdcc008b891f584662830d21c3a0900b03e41a7fc1575e436d003309a8bebdf1b548a499242e9e903ad3ea020f91e
6
+ metadata.gz: 22c5d870ce3ca131c05661428e4a53ab9a43feafa89265a3948b856437c2115fd6c8a493e2b52ff0104001595f59a176d5d9fbf04c78d25e688725b653284d98
7
+ data.tar.gz: 5b636bbdfad5fdb6ceb812d0ecd436f85ee4cc0c69c349cfd37482e930a3e306dd92133a646a44ea77d95f9bee225ace746067408268006d60b765112c7b03f3
data/CHANGELOG.md CHANGED
@@ -1,4 +1,25 @@
1
- # Release History: opentelemetry-instrumentation-aws_sdk
1
+ # Release History: opentelemetry-instrumentation-aws_sdk
2
+
3
+ ### v0.3.0 / 2022-06-09
4
+
5
+ * Upgrading Base dependency version
6
+ * FIXED: Broken test file requirements
7
+
8
+ ### v0.2.3 / 2022-05-02
9
+
10
+ * FIXED: RubyGems Fallback
11
+
12
+ ### v0.2.2 / 2022-01-26
13
+
14
+ * (No significant changes)
15
+
16
+ ### v0.2.1 / 2022-01-21
17
+
18
+ * ADDED: attach HTTP status code to AWS spans
19
+
20
+ ### v0.2.0 / 2022-01-20
21
+
22
+ * ADDED: SQS / SNS messaging attributes and context propagation
2
23
 
3
24
  ### v0.1.0 / 2021-12-01
4
25
 
data/README.md CHANGED
@@ -19,7 +19,6 @@ To install the instrumentation, call `use` with the name of the instrumentation.
19
19
  ```ruby
20
20
  OpenTelemetry::SDK.configure do |c|
21
21
  c.use 'OpenTelemetry::Instrumentation::AwsSdk', {
22
- extract_messaging_context: true,
23
22
  inject_messaging_context: true,
24
23
  suppress_internal_instrumentation: true
25
24
  }
@@ -59,8 +58,7 @@ Apache 2.0 license. See [LICENSE][license-github] for more information.
59
58
  [aws-sdk-home]: https://github.com/aws/aws-sdk-ruby
60
59
  [bundler-home]: https://bundler.io
61
60
  [repo-github]: https://github.com/open-telemetry/opentelemetry-ruby
62
- [license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/main/LICENSE
61
+ [license-github]: https://github.com/open-telemetry/opentelemetry-ruby-contrib/blob/main/LICENSE
63
62
  [ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
64
63
  [community-meetings]: https://github.com/open-telemetry/community#community-meetings
65
64
  [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
66
-
@@ -17,7 +17,7 @@ module OpenTelemetry
17
17
  def call(context) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
18
18
  return super unless context
19
19
 
20
- service_name = context.client.class.api.metadata['serviceId'] || context.client.class.to_s.split('::')[1] rescue context.client.class.to_s.split('::')[1] # rubocop:disable Style/RescueModifier
20
+ service_name = service_name(context)
21
21
  operation = context.operation&.name
22
22
  client_method = "#{service_name}.#{operation}"
23
23
  attributes = {
@@ -30,21 +30,20 @@ module OpenTelemetry
30
30
  MessagingHelper.apply_sqs_attributes(attributes, context, client_method) if service_name == 'SQS'
31
31
  MessagingHelper.apply_sns_attributes(attributes, context, client_method) if service_name == 'SNS'
32
32
 
33
- prepare_extract_context(context, client_method)
34
33
  tracer.in_span(span_name(context, client_method), attributes: attributes, kind: span_kind(client_method)) do |span|
35
34
  inject_context(context, client_method)
36
-
37
35
  if instrumentation_config[:suppress_internal_instrumentation]
38
36
  OpenTelemetry::Common::Utilities.untraced { super }
39
37
  else
40
38
  super
41
39
  end.tap do |response|
40
+ span.set_attribute(OpenTelemetry::SemanticConventions::Trace::HTTP_STATUS_CODE,
41
+ context.http_response.status_code)
42
+
42
43
  if (err = response.error)
43
44
  span.record_exception(err)
44
45
  span.status = Trace::Status.error(err.to_s)
45
46
  end
46
-
47
- MessagingHelper.create_sqs_processing_spans(context, tracer, response.messages) if client_method == SQS_RECEIVE_MESSAGE && response.respond_to?(:messages)
48
47
  end
49
48
  end
50
49
  end
@@ -59,8 +58,16 @@ module OpenTelemetry
59
58
  AwsSdk::Instrumentation.instance.config
60
59
  end
61
60
 
61
+ def service_name(context) # rubocop:disable Metrics/AbcSize
62
+ # Support aws-sdk v2.0.x, which 'metadata' has a setter method only
63
+ return context.client.class.to_s.split('::')[1] if ::Seahorse::Model::Api.instance_method(:metadata).parameters.length.positive?
64
+
65
+ context.client.class.api.metadata['serviceId'] || context.client.class.to_s.split('::')[1]
66
+ end
67
+
68
+ SEND_MESSAGE_CLIENT_METHODS = [SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH].freeze
62
69
  def inject_context(context, client_method)
63
- return unless [SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH].include? client_method
70
+ return unless SEND_MESSAGE_CLIENT_METHODS.include? client_method
64
71
  return unless instrumentation_config[:inject_messaging_context]
65
72
 
66
73
  if client_method == SQS_SEND_MESSAGE_BATCH
@@ -74,13 +81,6 @@ module OpenTelemetry
74
81
  end
75
82
  end
76
83
 
77
- def prepare_extract_context(context, client_method)
78
- return unless client_method == SQS_RECEIVE_MESSAGE
79
- return unless instrumentation_config[:extract_messaging_context]
80
-
81
- context.params[:message_attribute_names] = ['All']
82
- end
83
-
84
84
  def span_kind(client_method)
85
85
  case client_method
86
86
  when SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH
@@ -95,9 +95,9 @@ module OpenTelemetry
95
95
  def span_name(context, client_method)
96
96
  case client_method
97
97
  when SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH
98
- "#{MessagingHelper.destination_name(context)} send"
98
+ "#{MessagingHelper.queue_name(context)} send"
99
99
  when SQS_RECEIVE_MESSAGE
100
- "#{MessagingHelper.destination_name(context)} receive"
100
+ "#{MessagingHelper.queue_name(context)} receive"
101
101
  else
102
102
  client_method
103
103
  end
@@ -9,7 +9,7 @@ module OpenTelemetry
9
9
  module AwsSdk
10
10
  # Instrumentation class that detects and installs the AwsSdk instrumentation
11
11
  class Instrumentation < OpenTelemetry::Instrumentation::Base
12
- MINIMUM_VERSION = Gem::Version.new('2.0')
12
+ MINIMUM_VERSION = Gem::Version.new('2.0.0')
13
13
 
14
14
  install do |_config|
15
15
  require_dependencies
@@ -21,10 +21,9 @@ module OpenTelemetry
21
21
  end
22
22
 
23
23
  compatible do
24
- gem_version >= MINIMUM_VERSION
24
+ !gem_version.nil? && gem_version >= MINIMUM_VERSION
25
25
  end
26
26
 
27
- option :extract_messaging_context, default: false, validate: :boolean
28
27
  option :inject_messaging_context, default: false, validate: :boolean
29
28
  option :suppress_internal_instrumentation, default: false, validate: :boolean
30
29
 
@@ -33,6 +32,8 @@ module OpenTelemetry
33
32
  Gem.loaded_specs['aws-sdk'].version
34
33
  elsif Gem.loaded_specs['aws-sdk-core']
35
34
  Gem.loaded_specs['aws-sdk-core'].version
35
+ elsif defined?(::Aws::CORE_GEM_VERSION)
36
+ Gem::Version.new(::Aws::CORE_GEM_VERSION)
36
37
  end
37
38
  end
38
39
 
@@ -26,10 +26,10 @@ module OpenTelemetry
26
26
  # The MessageAttributeGetter class provides methods for getting tracing information from SQS message.
27
27
  #
28
28
  # @example
29
- # OpenTelemetry.propagation.extract(message.message_attributes, getter: MessageAttributeGetter)
29
+ # OpenTelemetry.propagation.extract(message, getter: MessageAttributeGetter)
30
30
  class MessageAttributeGetter
31
31
  def self.get(carrier, key)
32
- return carrier&.[](key)&.[]('string_value') if carrier&.[](key)&.[]('data_type') == 'String'
32
+ return carrier[key][:string_value] if carrier[key][:data_type] == 'String'
33
33
  end
34
34
  end
35
35
  end
@@ -10,23 +10,19 @@ module OpenTelemetry
10
10
  # MessagingHelper class provides methods for calculating messaging span attributes
11
11
  class MessagingHelper
12
12
  class << self
13
- def destination_name(context) # rubocop:disable Metrics/CyclomaticComplexity
13
+ def queue_name(context)
14
14
  topic_arn = context.params[:topic_arn]
15
15
  target_arn = context.params[:target_arn]
16
- phone_number = context.params[:phone_number]
17
- queue_url = context.params[:queue_url]
18
16
 
19
17
  if topic_arn || target_arn
20
18
  arn = topic_arn || target_arn
21
- begin
22
- return arn.split(':')[-1]
23
- rescue StandardError
24
- return arn
25
- end
19
+ return arn.split(':')[-1]
26
20
  end
27
21
 
22
+ phone_number = context.params[:phone_number]
28
23
  return 'phone_number' if phone_number
29
24
 
25
+ queue_url = context.params[:queue_url]
30
26
  return queue_url.split('/')[-1] if queue_url
31
27
 
32
28
  'unknown'
@@ -35,8 +31,8 @@ module OpenTelemetry
35
31
  def apply_sqs_attributes(attributes, context, client_method)
36
32
  attributes[SemanticConventions::Trace::MESSAGING_SYSTEM] = 'aws.sqs'
37
33
  attributes[SemanticConventions::Trace::MESSAGING_DESTINATION_KIND] = 'queue'
38
- attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = destination_name(context)
39
- attributes[SemanticConventions::Trace::MESSAGING_URL] = context.params[:queue_url]
34
+ attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = queue_name(context)
35
+ attributes[SemanticConventions::Trace::MESSAGING_URL] = context.params[:queue_url] if context.params[:queue_url]
40
36
 
41
37
  attributes[SemanticConventions::Trace::MESSAGING_OPERATION] = 'receive' if client_method == 'SQS.ReceiveMessage'
42
38
  end
@@ -47,29 +43,7 @@ module OpenTelemetry
47
43
  return unless client_method == 'SNS.Publish'
48
44
 
49
45
  attributes[SemanticConventions::Trace::MESSAGING_DESTINATION_KIND] = 'topic'
50
- attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = destination_name(context)
51
- end
52
-
53
- def create_sqs_processing_spans(context, tracer, messages)
54
- queue_name = destination_name(context)
55
- messages.each do |message|
56
- attributes = {
57
- SemanticConventions::Trace::MESSAGING_SYSTEM => 'aws.sqs',
58
- SemanticConventions::Trace::MESSAGING_DESTINATION => queue_name,
59
- SemanticConventions::Trace::MESSAGING_DESTINATION_KIND => 'queue',
60
- SemanticConventions::Trace::MESSAGING_MESSAGE_ID => message.message_id,
61
- SemanticConventions::Trace::MESSAGING_URL => context.params[:queue_url],
62
- SemanticConventions::Trace::MESSAGING_OPERATION => 'process'
63
- }
64
- tracer.in_span("#{queue_name} process", attributes: attributes, links: extract_links(message), kind: :consumer) {}
65
- end
66
- end
67
-
68
- def extract_links(sqs_message)
69
- extracted_context = OpenTelemetry.propagation.extract(sqs_message.message_attributes, context: Context::ROOT, getter: MessageAttributeGetter)
70
- span_context = OpenTelemetry::Trace.current_span(extracted_context).context
71
-
72
- span_context.valid? ? [OpenTelemetry::Trace::Link.new(span_context)] : []
46
+ attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = queue_name(context)
73
47
  end
74
48
  end
75
49
  end
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module AwsSdk
10
- VERSION = '0.1.8'
10
+ VERSION = '0.3.0'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspecto-opentelemetry-instrumentation-aws_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
- - Aspecto Authors
7
+ - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-21 00:00:00.000000000 Z
11
+ date: 2022-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.19.0
33
+ version: 0.21.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.19.0
40
+ version: 0.21.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: appraisal
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.0'
103
+ version: '1.1'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.0'
110
+ version: '1.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: opentelemetry-test-helpers
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: pry
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -222,7 +236,7 @@ dependencies:
222
236
  version: 0.1.6
223
237
  description: AWS SDK instrumentation for the OpenTelemetry framework
224
238
  email:
225
- - info@aspecto.io
239
+ - cncf-opentelemetry-contributors@lists.cncf.io
226
240
  executables: []
227
241
  extensions: []
228
242
  extra_rdoc_files: []
@@ -240,14 +254,14 @@ files:
240
254
  - lib/opentelemetry/instrumentation/aws_sdk/messaging_helper.rb
241
255
  - lib/opentelemetry/instrumentation/aws_sdk/services.rb
242
256
  - lib/opentelemetry/instrumentation/aws_sdk/version.rb
243
- homepage: https://aspecto.io
257
+ homepage: https://github.com/open-telemetry/opentelemetry-contrib
244
258
  licenses:
245
259
  - Apache-2.0
246
260
  metadata:
247
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-aws_sdk/v0.1.8/file.CHANGELOG.html
248
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/instrumentation/aws_sdk
249
- bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
250
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-aws_sdk/v0.1.8
261
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-aws_sdk/v0.3.0/file.CHANGELOG.html
262
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/aws_sdk
263
+ bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
264
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-aws_sdk/v0.3.0
251
265
  post_install_message:
252
266
  rdoc_options: []
253
267
  require_paths:
@@ -256,14 +270,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
256
270
  requirements:
257
271
  - - ">="
258
272
  - !ruby/object:Gem::Version
259
- version: 2.5.0
273
+ version: 2.6.0
260
274
  required_rubygems_version: !ruby/object:Gem::Requirement
261
275
  requirements:
262
276
  - - ">="
263
277
  - !ruby/object:Gem::Version
264
278
  version: '0'
265
279
  requirements: []
266
- rubygems_version: 3.0.3
280
+ rubygems_version: 3.0.3.1
267
281
  signing_key:
268
282
  specification_version: 4
269
283
  summary: AWS SDK instrumentation for the OpenTelemetry framework