opentelemetry-instrumentation-active_support 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15bdb28b45d8b0dfab7ad69153b8e0a6af3c6569a55278f75c409ecc6459d0fb
4
- data.tar.gz: b8e85520ac481e488ba47b70810512fc346576354de4e37d5ed492624636b05f
3
+ metadata.gz: 8fb96f6aa88f3f2cfcef205f3c8b35d4aadcd5deb88f96cece9dd0483a9d651b
4
+ data.tar.gz: 2e182a42afc7147b758a1bb70e8f3aed10b2a427781be74f039046081f680cd4
5
5
  SHA512:
6
- metadata.gz: dada81d63cb0cd45dc50d1c5a80b6ab708f2a1e7f21e4d5c3b45a0b3628f4ac52cdf5225c9877aa4466aa19353bd934079254b6451f919610370e7b8041cfc1e
7
- data.tar.gz: e1944614599d427560609810766dea450d1cb1d660b7d2ed86b9c1a2a9dd0e90d58e5435686474ab80e5f80907f2ac1a29100f784b28c969610bd576f6736f43
6
+ metadata.gz: c92ea1d46342f741e4773b5d4776fc1fa3cbef1dad880958e2a19a6d747b8c604ded8dff1f619a34787f4c24be206b13d6fb14dae9975c79d26fde764a90e1d1
7
+ data.tar.gz: 8fa040cf4aa404157181d6907be56d695375fdd029c3f82aa7f261548a34905bf0dd1d57231cd5a5a686de29d49882583622c62004ddeebb539e7780fd558c57
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Release History: opentelemetry-instrumentation-active_support
2
2
 
3
+ ### v0.6.0 / 2024-07-02
4
+
5
+ * BREAKING CHANGE: Custom ActiveSupport Span Names
6
+
7
+ * ADDED: Custom ActiveSupport Span Names
8
+
3
9
  ### v0.5.3 / 2024-06-20
4
10
 
5
11
  * FIXED: Include span kind in ActiveSupport Instrumentation helper
data/README.md CHANGED
@@ -1,12 +1,15 @@
1
1
  # OpenTelemetry ActiveSupport Instrumentation
2
+
2
3
  The Active Support instrumentation is a community-maintained instrumentation for the Active Support portion of the [Ruby on Rails][rails-home] web-application framework.
3
4
 
4
5
  ## How do I get started?
5
6
 
6
7
  Install the gem using:
7
8
 
8
- ```
9
+ ```console
10
+
9
11
  gem install opentelemetry-instrumentation-active_support
12
+
10
13
  ```
11
14
 
12
15
  Or, if you use [bundler][bundler-home], include `opentelemetry-instrumentation-active_support` in your `Gemfile`.
@@ -17,21 +20,24 @@ To use the instrumentation, call `use` with the name of the instrumentation and
17
20
  to desired ActiveSupport notification:
18
21
 
19
22
  ```ruby
23
+
20
24
  OpenTelemetry::SDK.configure do |c|
21
25
  c.use 'OpenTelemetry::Instrumentation::ActiveSupport'
22
26
  end
23
27
 
24
-
25
28
  tracer = OpenTelemetry.tracer_provider.tracer('my_app_or_gem', '0.1.0')
26
29
  ::OpenTelemetry::Instrumentation::ActiveSupport.subscribe(tracer, 'bar.foo')
30
+
27
31
  ```
28
32
 
29
33
  Alternatively, you can also call `use_all` to install all the available instrumentation.
30
34
 
31
35
  ```ruby
36
+
32
37
  OpenTelemetry::SDK.configure do |c|
33
38
  c.use_all
34
39
  end
40
+
35
41
  ```
36
42
 
37
43
  ## Examples
@@ -8,6 +8,9 @@ module OpenTelemetry
8
8
  module Instrumentation
9
9
  # rubocop:disable Style/Documentation
10
10
  module ActiveSupport
11
+ LEGACY_NAME_FORMATTER = ->(name) { name.split('.')[0..1].reverse.join(' ') }
12
+
13
+ # rubocop:disable Metrics/ParameterLists
11
14
  # The SpanSubscriber is a special ActiveSupport::Notification subscription
12
15
  # handler which turns notifications into generic spans, taking care to handle
13
16
  # context appropriately.
@@ -19,15 +22,17 @@ module OpenTelemetry
19
22
  tracer,
20
23
  pattern,
21
24
  notification_payload_transform = nil,
22
- disallowed_notification_payload_keys = [],
23
- kind: nil
25
+ disallowed_notification_payload_keys = nil,
26
+ kind: nil,
27
+ span_name_formatter: nil
24
28
  )
25
29
  subscriber = OpenTelemetry::Instrumentation::ActiveSupport::SpanSubscriber.new(
26
30
  name: pattern,
27
31
  tracer: tracer,
28
32
  notification_payload_transform: notification_payload_transform,
29
33
  disallowed_notification_payload_keys: disallowed_notification_payload_keys,
30
- kind: kind
34
+ kind: kind,
35
+ span_name_formatter: span_name_formatter
31
36
  )
32
37
 
33
38
  subscriber_object = ::ActiveSupport::Notifications.subscribe(pattern, subscriber)
@@ -54,16 +59,19 @@ module OpenTelemetry
54
59
  subscriber_object
55
60
  end
56
61
 
62
+ # rubocop:enable Metrics/ParameterLists
57
63
  class SpanSubscriber
58
64
  ALWAYS_VALID_PAYLOAD_TYPES = [TrueClass, FalseClass, String, Numeric, Symbol].freeze
59
65
 
60
- def initialize(name:, tracer:, notification_payload_transform: nil, disallowed_notification_payload_keys: [], kind: nil)
61
- @span_name = name.split('.')[0..1].reverse.join(' ').freeze
66
+ # rubocop:disable Metrics/ParameterLists
67
+ def initialize(name:, tracer:, notification_payload_transform: nil, disallowed_notification_payload_keys: nil, kind: nil, span_name_formatter: nil)
68
+ @span_name = safe_span_name_for(span_name_formatter, name).dup.freeze
62
69
  @tracer = tracer
63
70
  @notification_payload_transform = notification_payload_transform
64
- @disallowed_notification_payload_keys = disallowed_notification_payload_keys
71
+ @disallowed_notification_payload_keys = Array(disallowed_notification_payload_keys)
65
72
  @kind = kind || :internal
66
73
  end
74
+ # rubocop:enable Metrics/ParameterLists
67
75
 
68
76
  def start(name, id, payload)
69
77
  span = @tracer.start_span(@span_name, kind: @kind)
@@ -128,6 +136,16 @@ module OpenTelemetry
128
136
  value
129
137
  end
130
138
  end
139
+
140
+ # Helper method to try an shield the span name formatter from errors
141
+ #
142
+ # It wraps the user supplied formatter in a rescue block and returns the original name if a StandardError is raised by the formatter
143
+ def safe_span_name_for(span_name_formatter, name)
144
+ span_name_formatter&.call(name) || name
145
+ rescue StandardError => e
146
+ OpenTelemetry.handle_error(exception: e, message: 'Error calling span_name_formatter. Using default span name.')
147
+ name
148
+ end
131
149
  end
132
150
  end
133
151
  end
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module ActiveSupport
10
- VERSION = '0.5.3'
10
+ VERSION = '0.6.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: opentelemetry-instrumentation-active_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-20 00:00:00.000000000 Z
11
+ date: 2024-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '13.0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rspec-mocks
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: rubocop
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -269,10 +283,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
269
283
  licenses:
270
284
  - Apache-2.0
271
285
  metadata:
272
- changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_support/0.5.3/file/CHANGELOG.md
286
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_support/0.6.0/file/CHANGELOG.md
273
287
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/active_support
274
288
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
275
- documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_support/0.5.3
289
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_support/0.6.0
276
290
  post_install_message:
277
291
  rdoc_options: []
278
292
  require_paths: