opentelemetry-instrumentation-action_pack 0.2.1 → 0.3.2

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: c2fe93205bd6919c07ee1c8bcffcc4da51ef45c44ae35e43e5d9706d8bc5ec69
4
- data.tar.gz: 434bb0a50a54867c3d125736763678660ed36155b208c2daba71866d36f12cbb
3
+ metadata.gz: 99be35d64f5fd7d823eb70e181f5632085271225dfa5bbc10adb997f287581a8
4
+ data.tar.gz: b4df430eb2003fa5e5863ae9203bf77d4c8f34234579c7fbd11267d51f4e8b01
5
5
  SHA512:
6
- metadata.gz: 61254f1ee327721f3acd8da527f9f3d43f844c68fcb818a864f2f1df71d66201059f5248f2c1b70c8a3895fb1877be2de6d7466bfb31fb50422963cda21b3185
7
- data.tar.gz: bdfb5be311c901208a38228673db73c1500b7f687705e3bee6e6db6fffa09c34742211af6883cae375a793a6e2e6d30d52b5f560b6ad268c93662eb4a4cafed2
6
+ metadata.gz: d13b693131f8b6e64fead4308d30c67ad5b2a13320083a68abfba66c2d9cb235ac9e411eb9678df14616e4706e6920b6c55fcb706c7aae6487da66a55ab509a8
7
+ data.tar.gz: 8f6f5faf8b5466e2e745461636bdfb800f1adb134d9174790d94e2ef1ec8d832bf500c4699782de0e869de3be98d50b5f4fd0a1af485e128ae04d0b645b52ce5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Release History: opentelemetry-instrumentation-action_pack
2
2
 
3
+ ### v0.3.2 / 2022-11-16
4
+
5
+ * * FIXED: Loosen dependency on Rack
6
+
7
+ ### v0.3.1 / 2022-10-27
8
+
9
+ * FIXED: Declare span_naming option in action_pack instrumentation
10
+
11
+ ### v0.3.0 / 2022-10-14
12
+
13
+ * ADDED: Name ActionPack spans with the HTTP method and route
14
+
3
15
  ### v0.2.1 / 2022-10-04
4
16
 
5
17
  * FIXED: Ensures the correct route is add to http.route span attribute
data/README.md CHANGED
@@ -32,11 +32,18 @@ end
32
32
 
33
33
  ### Configuration options
34
34
 
35
- The `http.route` attribute is disabled by default because we use [.recognize](https://github.com/rails/rails/blob/v6.1.3/actionpack/lib/action_dispatch/journey/router.rb#L65)
35
+ | Name | Default | Description |
36
+ | ----- | ------- | ----------- |
37
+ | `span_naming` | `:rails_route` | Configures the name for the Rack span. `:rails_route` is in the format of `HTTP_METHOD /rails/route(.:format)`, for example `GET /users/:id(.:format)`. `:controller_action` is in the format of `Controller#action`, for example `UsersController#show` |
38
+ | `enable_recognize_route` | `true` | Enables or disables adding the `http.route` attribute. |
39
+
40
+ The default configuration uses a [method from Rails to obtain the route for the request](https://github.com/rails/rails/blob/v6.1.3/actionpack/lib/action_dispatch/journey/router.rb#L65). The options above allow this behaviour to be opted out of if you have performance issues. If you wish to avoid using this method then set `span_naming: :controller_action, enable_recognize_route: false`.
41
+
36
42
  ```ruby
37
43
  OpenTelemetry::SDK.configure do |c|
38
44
  c.use 'OpenTelemetry::Instrumentation::ActionPack', {
39
- enable_recognize_route: true
45
+ span_naming: :controller_action,
46
+ enable_recognize_route: false
40
47
  }
41
48
  end
42
49
  ```
@@ -25,7 +25,8 @@ module OpenTelemetry
25
25
  gem_version >= MINIMUM_VERSION
26
26
  end
27
27
 
28
- option :enable_recognize_route, default: false, validate: :boolean
28
+ option :enable_recognize_route, default: true, validate: :boolean
29
+ option :span_naming, default: :rails_route, validate: %i[controller_action rails_route]
29
30
 
30
31
  private
31
32
 
@@ -14,11 +14,20 @@ module OpenTelemetry
14
14
  def dispatch(name, request, response)
15
15
  rack_span = OpenTelemetry::Instrumentation::Rack.current_span
16
16
  if rack_span.recording?
17
- rack_span.name = "#{self.class.name}##{name}" unless request.env['action_dispatch.exception']
18
-
19
- add_rails_route(rack_span, request) if instrumentation_config[:enable_recognize_route]
20
-
21
- rack_span.set_attribute('http.target', request.filtered_path) if request.filtered_path != request.fullpath
17
+ unless request.env['action_dispatch.exception']
18
+ rack_span.name = case instrumentation_config[:span_naming]
19
+ when :controller_action then "#{self.class.name}##{name}"
20
+ else "#{request.method} #{rails_route(request)}"
21
+ end
22
+ end
23
+
24
+ attributes_to_append = {
25
+ OpenTelemetry::SemanticConventions::Trace::CODE_NAMESPACE => self.class.name,
26
+ OpenTelemetry::SemanticConventions::Trace::CODE_FUNCTION => name
27
+ }
28
+ attributes_to_append[OpenTelemetry::SemanticConventions::Trace::HTTP_ROUTE] = rails_route(request) if instrumentation_config[:enable_recognize_route]
29
+ attributes_to_append[OpenTelemetry::SemanticConventions::Trace::HTTP_TARGET] = request.filtered_path if request.filtered_path != request.fullpath
30
+ rack_span.add_attributes(attributes_to_append)
22
31
  end
23
32
 
24
33
  super(name, request, response)
@@ -26,11 +35,10 @@ module OpenTelemetry
26
35
 
27
36
  private
28
37
 
29
- def add_rails_route(rack_span, request)
30
- ::Rails.application.routes.router.recognize(request) do |route, _params|
31
- rack_span.set_attribute('http.route', route.path.spec.to_s)
38
+ def rails_route(request)
39
+ @rails_route ||= ::Rails.application.routes.router.recognize(request) do |route, _params|
40
+ return route.path.spec.to_s
32
41
  # Rails will match on the first route - see https://guides.rubyonrails.org/routing.html#crud-verbs-and-actions
33
- break
34
42
  end
35
43
  end
36
44
 
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module ActionPack
10
- VERSION = '0.2.1'
10
+ VERSION = '0.3.2'
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-action_pack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-04 00:00:00.000000000 Z
11
+ date: 2022-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.21.0
47
+ version: '0.21'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.21.0
54
+ version: '0.21'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: appraisal
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -242,10 +242,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-contrib
242
242
  licenses:
243
243
  - Apache-2.0
244
244
  metadata:
245
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-action_pack/v0.2.1/file.CHANGELOG.html
245
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-action_pack/v0.3.2/file.CHANGELOG.html
246
246
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/action_pack
247
247
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
248
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-action_pack/v0.2.1
248
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-action_pack/v0.3.2
249
249
  post_install_message:
250
250
  rdoc_options: []
251
251
  require_paths: