aspecto-opentelemetry-instrumentation-aws_sdk 0.3.0 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d746413b032d66731e317195aa59ab210ca9b807bb77d09efa78fec35b2f4141
4
- data.tar.gz: 0121c5f854af58616b3bb1cb3ea4e659c46ea4c915af155aae018c232ad1ad6a
3
+ metadata.gz: 95d4d75e7aadcb23fd58ef5019af051a4fdba63841745df7ff5add0a85bd3890
4
+ data.tar.gz: 67aa5a0bdc91a9233d2479d3660adbf757044507d74399018d3bed626969d389
5
5
  SHA512:
6
- metadata.gz: 22c5d870ce3ca131c05661428e4a53ab9a43feafa89265a3948b856437c2115fd6c8a493e2b52ff0104001595f59a176d5d9fbf04c78d25e688725b653284d98
7
- data.tar.gz: 5b636bbdfad5fdb6ceb812d0ecd436f85ee4cc0c69c349cfd37482e930a3e306dd92133a646a44ea77d95f9bee225ace746067408268006d60b765112c7b03f3
6
+ metadata.gz: 3df69697176d3e77a6d46c31e0b90541962adad99750732df99a145656abea32c53432a027e9bda69d8c981f0525c6ce7f85a6158987d02ea064ab6134cc6318
7
+ data.tar.gz: 72925545d9cea814ba2f6270404f6aacfe1a9773521b4391bb0ac58a909f3e81ec7a589301b8dc23800065ff1ed4f135e8ac41d57bc3c8e2d4fa0dd2ddea171a
data/CHANGELOG.md CHANGED
@@ -1,10 +1,5 @@
1
1
  # Release History: opentelemetry-instrumentation-aws_sdk
2
2
 
3
- ### v0.3.0 / 2022-06-09
4
-
5
- * Upgrading Base dependency version
6
- * FIXED: Broken test file requirements
7
-
8
3
  ### v0.2.3 / 2022-05-02
9
4
 
10
5
  * FIXED: RubyGems Fallback
data/README.md CHANGED
@@ -20,6 +20,7 @@ To install the instrumentation, call `use` with the name of the instrumentation.
20
20
  OpenTelemetry::SDK.configure do |c|
21
21
  c.use 'OpenTelemetry::Instrumentation::AwsSdk', {
22
22
  inject_messaging_context: true,
23
+ extract_messaging_context: true,
23
24
  suppress_internal_instrumentation: true
24
25
  }
25
26
  end
@@ -58,7 +59,8 @@ Apache 2.0 license. See [LICENSE][license-github] for more information.
58
59
  [aws-sdk-home]: https://github.com/aws/aws-sdk-ruby
59
60
  [bundler-home]: https://bundler.io
60
61
  [repo-github]: https://github.com/open-telemetry/opentelemetry-ruby
61
- [license-github]: https://github.com/open-telemetry/opentelemetry-ruby-contrib/blob/main/LICENSE
62
+ [license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/main/LICENSE
62
63
  [ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
63
64
  [community-meetings]: https://github.com/open-telemetry/community#community-meetings
64
65
  [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
66
+
@@ -30,8 +30,10 @@ 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)
33
34
  tracer.in_span(span_name(context, client_method), attributes: attributes, kind: span_kind(client_method)) do |span|
34
35
  inject_context(context, client_method)
36
+
35
37
  if instrumentation_config[:suppress_internal_instrumentation]
36
38
  OpenTelemetry::Common::Utilities.untraced { super }
37
39
  else
@@ -44,6 +46,8 @@ module OpenTelemetry
44
46
  span.record_exception(err)
45
47
  span.status = Trace::Status.error(err.to_s)
46
48
  end
49
+
50
+ MessagingHelper.create_sqs_processing_spans(context, tracer, response.messages) if instrumentation_config[:extract_messaging_context] && client_method == SQS_RECEIVE_MESSAGE && response.respond_to?(:messages)
47
51
  end
48
52
  end
49
53
  end
@@ -81,6 +85,13 @@ module OpenTelemetry
81
85
  end
82
86
  end
83
87
 
88
+ def prepare_extract_context(context, client_method)
89
+ return unless client_method == SQS_RECEIVE_MESSAGE
90
+ return unless instrumentation_config[:extract_messaging_context]
91
+
92
+ context.params[:message_attribute_names] = ['All']
93
+ end
94
+
84
95
  def span_kind(client_method)
85
96
  case client_method
86
97
  when SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH
@@ -95,9 +106,9 @@ module OpenTelemetry
95
106
  def span_name(context, client_method)
96
107
  case client_method
97
108
  when SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH
98
- "#{MessagingHelper.queue_name(context)} send"
109
+ "#{MessagingHelper.destination_name(context)} send"
99
110
  when SQS_RECEIVE_MESSAGE
100
- "#{MessagingHelper.queue_name(context)} receive"
111
+ "#{MessagingHelper.destination_name(context)} receive"
101
112
  else
102
113
  client_method
103
114
  end
@@ -24,6 +24,7 @@ module OpenTelemetry
24
24
  !gem_version.nil? && gem_version >= MINIMUM_VERSION
25
25
  end
26
26
 
27
+ option :extract_messaging_context, default: false, validate: :boolean
27
28
  option :inject_messaging_context, default: false, validate: :boolean
28
29
  option :suppress_internal_instrumentation, default: false, validate: :boolean
29
30
 
@@ -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, getter: MessageAttributeGetter)
29
+ # OpenTelemetry.propagation.extract(message.message_attributes, 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,7 +10,7 @@ module OpenTelemetry
10
10
  # MessagingHelper class provides methods for calculating messaging span attributes
11
11
  class MessagingHelper
12
12
  class << self
13
- def queue_name(context)
13
+ def destination_name(context)
14
14
  topic_arn = context.params[:topic_arn]
15
15
  target_arn = context.params[:target_arn]
16
16
 
@@ -31,7 +31,7 @@ module OpenTelemetry
31
31
  def apply_sqs_attributes(attributes, context, client_method)
32
32
  attributes[SemanticConventions::Trace::MESSAGING_SYSTEM] = 'aws.sqs'
33
33
  attributes[SemanticConventions::Trace::MESSAGING_DESTINATION_KIND] = 'queue'
34
- attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = queue_name(context)
34
+ attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = destination_name(context)
35
35
  attributes[SemanticConventions::Trace::MESSAGING_URL] = context.params[:queue_url] if context.params[:queue_url]
36
36
 
37
37
  attributes[SemanticConventions::Trace::MESSAGING_OPERATION] = 'receive' if client_method == 'SQS.ReceiveMessage'
@@ -43,7 +43,29 @@ module OpenTelemetry
43
43
  return unless client_method == 'SNS.Publish'
44
44
 
45
45
  attributes[SemanticConventions::Trace::MESSAGING_DESTINATION_KIND] = 'topic'
46
- attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = queue_name(context)
46
+ attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = destination_name(context)
47
+ end
48
+
49
+ def create_sqs_processing_spans(context, tracer, messages)
50
+ queue_name = destination_name(context)
51
+ messages.each do |message|
52
+ attributes = {
53
+ SemanticConventions::Trace::MESSAGING_SYSTEM => 'aws.sqs',
54
+ SemanticConventions::Trace::MESSAGING_DESTINATION => queue_name,
55
+ SemanticConventions::Trace::MESSAGING_DESTINATION_KIND => 'queue',
56
+ SemanticConventions::Trace::MESSAGING_MESSAGE_ID => message.message_id,
57
+ SemanticConventions::Trace::MESSAGING_URL => context.params[:queue_url],
58
+ SemanticConventions::Trace::MESSAGING_OPERATION => 'process'
59
+ }
60
+ tracer.in_span("#{queue_name} process", attributes: attributes, links: extract_links(message), kind: :consumer) {}
61
+ end
62
+ end
63
+
64
+ def extract_links(sqs_message)
65
+ extracted_context = OpenTelemetry.propagation.extract(sqs_message.message_attributes, context: Context::ROOT, getter: MessageAttributeGetter)
66
+ span_context = OpenTelemetry::Trace.current_span(extracted_context).context
67
+
68
+ span_context.valid? ? [OpenTelemetry::Trace::Link.new(span_context)] : []
47
69
  end
48
70
  end
49
71
  end
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module AwsSdk
10
- VERSION = '0.3.0'
10
+ VERSION = '0.4.3'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspecto-opentelemetry-instrumentation-aws_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2022-07-17 00:00:00.000000000 Z
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.21.0
33
+ version: 0.19.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.21.0
40
+ version: 0.19.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: appraisal
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -254,15 +254,15 @@ files:
254
254
  - lib/opentelemetry/instrumentation/aws_sdk/messaging_helper.rb
255
255
  - lib/opentelemetry/instrumentation/aws_sdk/services.rb
256
256
  - lib/opentelemetry/instrumentation/aws_sdk/version.rb
257
- homepage: https://github.com/open-telemetry/opentelemetry-contrib
257
+ homepage: https://github.com/open-telemetry/opentelemetry-ruby
258
258
  licenses:
259
259
  - Apache-2.0
260
260
  metadata:
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
265
- post_install_message:
261
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-aws_sdk/v0.4.3/file.CHANGELOG.html
262
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/instrumentation/aws_sdk
263
+ bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
264
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-aws_sdk/v0.4.3
265
+ post_install_message:
266
266
  rdoc_options: []
267
267
  require_paths:
268
268
  - lib
@@ -270,15 +270,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
270
270
  requirements:
271
271
  - - ">="
272
272
  - !ruby/object:Gem::Version
273
- version: 2.6.0
273
+ version: 2.5.0
274
274
  required_rubygems_version: !ruby/object:Gem::Requirement
275
275
  requirements:
276
276
  - - ">="
277
277
  - !ruby/object:Gem::Version
278
278
  version: '0'
279
279
  requirements: []
280
- rubygems_version: 3.0.3.1
281
- signing_key:
280
+ rubygems_version: 3.1.4
281
+ signing_key:
282
282
  specification_version: 4
283
283
  summary: AWS SDK instrumentation for the OpenTelemetry framework
284
284
  test_files: []