opentelemetry-instrumentation-rack 0.19.3 → 0.20.2

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: 84f8534ada7c9bcadbd3b67d895ac3735ae76e76816a3fb9d170b8bc806d2610
4
- data.tar.gz: a02745f74e4483eab099d93ad1bf12d051530da2ddc06e8fe26cae2ec23c8d62
3
+ metadata.gz: ac4a58d7625183e4c21d3e46db230f33a7cbffba733cfce9458750c1eaf0cd1f
4
+ data.tar.gz: 9d2328bea5c516b009b82d8fcfd4bba1ccce2a106fa1bdfae353053264b5794f
5
5
  SHA512:
6
- metadata.gz: 29a49222b833daf6e04625882aba90e4f343cccb7a1328b1e7e84e8c613ad4fe1d7db84b3053cf322ac71e9b15285d07e9a980a653fe966150f4fc6b74df14da
7
- data.tar.gz: 92f2cd31fb3a6933b4f2c4bdc523dc99863a9bd01677b1b6280d089e4a3aac1f6d4138a0fe50294a5953be55cab0e52b16452fb38b2d9016ff51391b374939f7
6
+ metadata.gz: 64387f52f98e5fb157640f3a5ec1fe6a47a2df397b8c28436f15dbcfadb1a35dc82f3f3f1102d1a81fa3d97088a8a7754c3d12a49375c265965f0c940f28876f
7
+ data.tar.gz: d7ce5b0ad0453f929abf40b0ccca1634270b3b2048f6e8eff9de6d301a82344120963f99e9f811156abda172b0a10c50380f9f8094f7b8b9e3e65dcd51744297
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Release History: opentelemetry-instrumentation-rack
2
2
 
3
+ ### v0.20.2 / 2022-05-02
4
+
5
+ * FIXED: Update server instrumentation to not reflect 400 status as error
6
+
7
+ ### v0.20.1 / 2021-12-01
8
+
9
+ * FIXED: [Instruentation Rack] Log content type http header
10
+ * FIXED: Use monotonic clock where possible
11
+ * FIXED: Rack to stop using api env getter
12
+
13
+ ### v0.20.0 / 2021-10-06
14
+
15
+ * FIXED: Prevent high cardinality rack span name as a default [#973](https://github.com/open-telemetry/opentelemetry-ruby/pull/973)
16
+
17
+ The default was to set the span name as the path of the request, we have
18
+ corrected this as it was not adhering to the spec requirement using low
19
+ cardinality span names. You can restore the previous behaviour of high
20
+ cardinality span names by passing in a url quantization function that
21
+ forwards the uri path. More details on this is available in the readme.
22
+
3
23
  ### v0.19.3 / 2021-09-29
4
24
 
5
25
  * (No significant changes)
data/README.md CHANGED
@@ -29,6 +29,25 @@ OpenTelemetry::SDK.configure do |c|
29
29
  c.use_all
30
30
  end
31
31
  ```
32
+ ## Controlling span name cardinality
33
+
34
+ By default we will set the rack span name to match the format "HTTP #{method}" (ie. HTTP GET). There are different ways to control span names with this instrumentation.
35
+
36
+ ### Enriching rack spans
37
+
38
+ We surface a hook to easily retrieve the rack span within the context of a request so that you can add information to or rename your server span.
39
+
40
+ This is how the rails controller instrumentation is able to rename the span names to match the controller and action that process the request. See https://github.com/open-telemetry/opentelemetry-ruby/blob/f6fb025bef69f839078748f56516ce38c7d51eb8/instrumentation/action_pack/lib/opentelemetry/instrumentation/action_pack/patches/action_controller/metal.rb#L15-L16 for an example.
41
+
42
+ ### High cardinality example
43
+
44
+ You can pass in an url quantization lambda that simply uses the URL path, the result is you will end up with high cardinality span names, however this may be acceptable in your deployment and is easy configurable using the following example.
45
+
46
+ ```ruby
47
+ OpenTelemetry::SDK.configure do |c|
48
+ c.use 'OpenTelemetry::Instrumentation::Rack', { url_quantization: ->(path, _env) { path.to_s } }
49
+ end
50
+ ```
32
51
 
33
52
  ## Examples
34
53
 
@@ -50,4 +69,4 @@ The `opentelemetry-instrumentation-rack` gem is distributed under the Apache 2.0
50
69
  [license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/main/LICENSE
51
70
  [ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
52
71
  [community-meetings]: https://github.com/open-telemetry/community#community-meetings
53
- [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
72
+ [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
@@ -18,7 +18,13 @@ module OpenTelemetry
18
18
  class << self
19
19
  def allowed_rack_request_headers
20
20
  @allowed_rack_request_headers ||= Array(config[:allowed_request_headers]).each_with_object({}) do |header, memo|
21
- memo["HTTP_#{header.to_s.upcase.gsub(/[-\s]/, '_')}"] = build_attribute_name('http.request.headers.', header)
21
+ key = header.to_s.upcase.gsub(/[-\s]/, '_')
22
+ case key
23
+ when 'CONTENT_TYPE', 'CONTENT_LENGTH'
24
+ memo[key] = build_attribute_name('http.request.headers.', header)
25
+ else
26
+ memo["HTTP_#{key}"] = build_attribute_name('http.request.headers.', header)
27
+ end
22
28
  end
23
29
  end
24
30
 
@@ -58,10 +64,11 @@ module OpenTelemetry
58
64
  return @app.call(env)
59
65
  end
60
66
  end
67
+
61
68
  original_env = env.dup
62
69
  extracted_context = OpenTelemetry.propagation.extract(
63
70
  env,
64
- getter: OpenTelemetry::Context::Propagation.rack_env_getter
71
+ getter: OpenTelemetry::Common::Propagation.rack_env_getter
65
72
  )
66
73
  frontend_context = create_frontend_span(env, extracted_context)
67
74
 
@@ -100,9 +107,7 @@ module OpenTelemetry
100
107
 
101
108
  span = tracer.start_span('http_server.proxy',
102
109
  with_parent: extracted_context,
103
- attributes: {
104
- 'start_time' => request_start_time.to_f
105
- },
110
+ start_timestamp: request_start_time,
106
111
  kind: :server)
107
112
 
108
113
  OpenTelemetry::Trace.context_with_span(span, parent_context: extracted_context)
@@ -141,12 +146,12 @@ module OpenTelemetry
141
146
  if (implementation = config[:url_quantization])
142
147
  implementation.call(request_uri_or_path_info, env)
143
148
  else
144
- request_uri_or_path_info
149
+ "HTTP #{env['REQUEST_METHOD']}"
145
150
  end
146
151
  end
147
152
 
148
153
  def set_attributes_after_request(span, status, headers, _response)
149
- span.status = OpenTelemetry::Trace::Status.error unless (100..399).include?(status.to_i)
154
+ span.status = OpenTelemetry::Trace::Status.error unless (100..499).include?(status.to_i)
150
155
  span.set_attribute('http.status_code', status)
151
156
 
152
157
  # NOTE: if data is available, it would be good to do this:
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module Rack
10
- VERSION = '0.19.3'
10
+ VERSION = '0.20.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-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.3
4
+ version: 0.20.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: 2021-09-30 00:00:00.000000000 Z
11
+ date: 2022-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -24,20 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: opentelemetry-common
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.19.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.19.3
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: opentelemetry-instrumentation-base
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 0.18.3
47
+ version: 0.20.0
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 0.18.3
54
+ version: 0.20.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: appraisal
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -228,10 +242,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
228
242
  licenses:
229
243
  - Apache-2.0
230
244
  metadata:
231
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-rack/v0.19.3/file.CHANGELOG.html
245
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-rack/v0.20.2/file.CHANGELOG.html
232
246
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/instrumentation/rack
233
247
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
234
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-rack/v0.19.3
248
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-rack/v0.20.2
235
249
  post_install_message:
236
250
  rdoc_options: []
237
251
  require_paths: