hypertrace-agent 0.1.0 → 0.1.1

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: cd902302c28208a7f321249b2b10a682d191e0fcd5109832bf26096ab9cc89e7
4
- data.tar.gz: ad3be3804d501059bb320e4c673d85b1cd8668973d9e322b629ecbe1ac16e5db
3
+ metadata.gz: 32ec7ff05ccceb6c55d2767de910774d1fddec382974e93f663c07f213836a2a
4
+ data.tar.gz: e9d77ce5ef4d97fe7daf238e65971b3472d671c3263d883e7bad9f9a7289b70d
5
5
  SHA512:
6
- metadata.gz: 11acc90ba4879bc17c3f790d518356407a4acc64a232f7122bf61843d8760ba25d4029d9a8ff537d0ee81e3e49eb6eca8baf471dc8f26dd1c826f7feaa0e5cde
7
- data.tar.gz: bac8741ffccfa66832fac4bf768a700228b2f4ed84b672c0f1052b354a0a096335179bfd7278ee062edf9c0ba9c6283d04c05bee78a91a88113ca6836e9af5a3
6
+ metadata.gz: fcdb5dfdb5729a0ac1e4345cada86d39934bdf1622cbd3bf6829d9c086acc038c328669906e98340a50ac6cff3c90c26aa6001f6fc6f2859972a4d31c7370b1b
7
+ data.tar.gz: 947a762e0a3291a779e1aa2e73360628cb433a09ffc8ee398578cbdfa7c71a0eb02067a9ca426d7012e804f917e74ea1a34b84be2ca45be0ccb759d52bc1960f
@@ -1,4 +1,5 @@
1
1
  class Hypertrace::Instrumentation::DataCapture
2
+ include Hypertrace::Logging
2
3
  TYPE_REQUEST = 'request'
3
4
  TYPE_RESPONSE = 'response'
4
5
  CONTENT_TYPE_SUBSTRINGS = %w[json x-www-form-urlencoded]
@@ -21,17 +22,22 @@ class Hypertrace::Instrumentation::DataCapture
21
22
  end
22
23
 
23
24
  def self.capturable_body body_object
24
- max_capture = Hypertrace::RubyAgent.config.data_capture.body_max_size_bytes.value
25
- if body_object.is_a?(String)
26
- return body_object.byteslice(0..max_capture)
27
- elsif body_object.is_a?(StringIO)
28
- result = body_object.read(max_capture)
29
- body_object.rewind
30
- return result
25
+ begin
26
+ max_capture = Hypertrace::RubyAgent.config.data_capture.body_max_size_bytes.value
27
+ if body_object.is_a?(String)
28
+ return body_object.byteslice(0..max_capture)
29
+ elsif body_object.is_a?(StringIO)
30
+ result = body_object.read(max_capture)
31
+ body_object.rewind
32
+ return result
33
+ end
34
+ rescue => e
35
+ log.error("Erroring reading response body" + e.backtrace&.join("\n"))
31
36
  end
32
37
  end
33
38
 
34
39
  def self.can_capture?(content_type, type)
40
+ content_type = content_type.join('') if content_type.is_a?(Array)
35
41
  return false unless content_type
36
42
  return false unless body_allowed_by_config?(type)
37
43
 
@@ -53,5 +59,4 @@ class Hypertrace::Instrumentation::DataCapture
53
59
  return Hypertrace::RubyAgent.config.data_capture.http_body.request.value if type == TYPE_REQUEST
54
60
  Hypertrace::RubyAgent.config.data_capture.http_body.response.value
55
61
  end
56
-
57
62
  end
@@ -1,4 +1,6 @@
1
1
  class OpenTelemetry::Instrumentation::Faraday::Middlewares::TracerMiddleware < ::Faraday::Middleware
2
+ include Hypertrace::Logging
3
+
2
4
  def call(env)
3
5
  http_method = HTTP_METHODS_SYMBOL_TO_STRING[env.method]
4
6
  attributes = span_creation_attributes(
@@ -8,13 +10,18 @@ class OpenTelemetry::Instrumentation::Faraday::Middlewares::TracerMiddleware < :
8
10
  header_attrs = Hypertrace::Instrumentation::DataCapture.headers_to_attribute_keys(request_headers,
9
11
  Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
10
12
 
11
- content_type = request_headers['Content-Type']
13
+ content_type = request_headers.find{|k, v| k.downcase == "content-type"}&.last
12
14
  if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
13
- body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(env&.request_body&.to_s)
14
- attributes['http.request.body'] = body_cap if body_cap
15
+ begin
16
+ body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(env.body.to_s) if env.respond_to?(:body) && env.body.respond_to?(:to_s)
17
+ attributes['http.request.body'] = body_cap if body_cap
18
+ rescue => e
19
+ log.error("error attempting to read faraday request body #{e}")
20
+ end
15
21
  end
16
22
 
17
23
  attributes.merge!(header_attrs)
24
+
18
25
  tracer.in_span(
19
26
  "HTTP #{http_method}", attributes: attributes, kind: :client
20
27
  ) do |span|
@@ -27,10 +34,14 @@ class OpenTelemetry::Instrumentation::Faraday::Middlewares::TracerMiddleware < :
27
34
  Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE) do |k, v|
28
35
  span.set_attribute(k, v)
29
36
  end
30
- content_type = resp_headers['content-type']
37
+ content_type = resp_headers.find{|k, v| k.downcase == "content-type"}&.last
31
38
  if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE)
32
- body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(resp.body)
33
- span.set_attribute('http.response.body', body_cap) if body_cap
39
+ begin
40
+ body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(resp.body)
41
+ span.set_attribute('http.response.body', body_cap) if body_cap
42
+ rescue => e
43
+ log.error("error attempting to read faraday response body #{e}")
44
+ end
34
45
  end
35
46
 
36
47
  trace_response(span, resp)
@@ -6,7 +6,7 @@ module OpenTelemetry::Instrumentation::HTTP::Patches::Client
6
6
  headers = req.headers.to_h
7
7
  attrs = Hypertrace::Instrumentation::DataCapture.headers_to_attribute_keys(headers,
8
8
  Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
9
- content_type = headers['Content-Type']
9
+ content_type = headers.find{|k, v| k.downcase == "content-type"}&.last
10
10
  if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
11
11
  body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(req.body.source)
12
12
  attrs['http.request.body'] = body_cap if body_cap
@@ -29,7 +29,7 @@ module OpenTelemetry::Instrumentation::HTTP::Patches::Client
29
29
  Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE) do |k, v|
30
30
  span.set_attribute(k, v)
31
31
  end
32
- content_type = response_headers['Content-Type']
32
+ content_type = response_headers.find{|k, v| k.downcase == "content-type"}&.last
33
33
  if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE)
34
34
  body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(response.body.to_s)
35
35
  span.set_attribute('http.response.body', body_cap) if body_cap
@@ -17,7 +17,7 @@ module OpenTelemetry::Instrumentation::Net::HTTP::Patches::Instrumentation
17
17
  header_map = req.instance_variable_get(:@header)
18
18
  ht_attributes = Hypertrace::Instrumentation::DataCapture.headers_to_attribute_keys(header_map,
19
19
  Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
20
- content_type = header_map['content-type']&.first
20
+ content_type = header_map.find{|k, v| k.downcase == "content-type"}&.last
21
21
  if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
22
22
  body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(req.body)
23
23
  ht_attributes['http.request.body'] = body_cap if body_cap
@@ -35,7 +35,7 @@ module OpenTelemetry::Instrumentation::Net::HTTP::Patches::Instrumentation
35
35
  Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE) do |k, v|
36
36
  span.set_attribute(k, v)
37
37
  end
38
- content_type = response_headers['content-type']&.first
38
+ content_type = response_headers.find{|k, v| k.downcase == "content-type"}&.last
39
39
  if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE)
40
40
  span.set_attribute('http.response.body', Hypertrace::Instrumentation::DataCapture.capturable_body(response.body))
41
41
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware
4
+ include Hypertrace::Logging
5
+
4
6
  def call(env)
5
7
  if untraced_request?(env)
6
8
  OpenTelemetry::Common::Utilities.untraced do
@@ -41,13 +43,17 @@ class OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware
41
43
  request_span.set_attribute("http.response.header.#{h_k.downcase}", h_v)
42
44
  end
43
45
  content_type_arr = response_headers.find{|x|x[0].downcase == "content-type"}
44
- if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type_arr&.join(''),
45
- Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE)
46
- cap_body = Hypertrace::Instrumentation::RackCompatible.extract_response_body(response)
47
- request_span.set_attribute('http.response.body', cap_body) if cap_body
48
- end
46
+ begin
47
+ if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type_arr&.join(''),
48
+ Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE)
49
+ cap_body = Hypertrace::Instrumentation::RackCompatible.extract_response_body(response)
50
+ request_span.set_attribute('http.response.body', cap_body) if cap_body
51
+ end
49
52
 
50
- set_attributes_after_request(request_span, status, headers, response)
53
+ set_attributes_after_request(request_span, status, headers, response)
54
+ rescue => e
55
+ log.error("Error in Hypertrace response capture" + e.backtrace&.join("\n"))
56
+ end
51
57
  end
52
58
  end
53
59
  end
@@ -33,10 +33,32 @@ module Hypertrace
33
33
  end
34
34
 
35
35
  def self.extract_response_body rack_response
36
+ if rack_response.is_a?(Rack::Response)
37
+ body = rack_response.respond_to?(:body) ? rack_response.body : nil
38
+ return Hypertrace::Instrumentation::DataCapture.capturable_body(body)
39
+ end
40
+
36
41
  if rack_response.is_a?(Rack::BodyProxy)
37
- Hypertrace::Instrumentation::DataCapture.capturable_body(rack_response.join(''))
42
+ count = 0
43
+ while count < 15
44
+ rack_response = rack_response.instance_variable_get(:'@body')
45
+ if rack_response.is_a?(Array)
46
+ body = rack_response.respond_to?(:join) ? rack_response.join('') : nil
47
+ return Hypertrace::Instrumentation::DataCapture.capturable_body(body)
48
+ end
49
+ if action_dispatch_defined? && rack_response.is_a?(ActionDispatch::Response::RackBody)
50
+ return Hypertrace::Instrumentation::DataCapture.capturable_body(rack_response.body) if rack_response.respond_to?(:body)
51
+ end
52
+ unless rack_response.is_a?(Rack::BodyProxy)
53
+ return
54
+ end
55
+ count += 1
56
+ end
38
57
  elsif rack_response.is_a?(Array) && rack_response.length == 3
39
- Hypertrace::Instrumentation::DataCapture.capturable_body(rack_response[2].join(''))
58
+ body = rack_response[2]
59
+ if body.is_a?(Array)
60
+ return Hypertrace::Instrumentation::DataCapture.capturable_body(body.join(''))
61
+ end
40
62
  end
41
63
  end
42
64
 
@@ -49,6 +71,11 @@ module Hypertrace
49
71
  end.to_h
50
72
  end
51
73
 
74
+ # memoize so we don't check action dispatch
75
+ def self.action_dispatch_defined?
76
+ @_action_dispatch_defined ||= defined?(ActionDispatch) && defined?(ActionDispatch::Response) && defined?(ActionDispatch::Response::RackBody)
77
+ end
78
+
52
79
  def self.extract_headers_from_env env
53
80
  result = env.select{|x|x.start_with?("HTTP_")}
54
81
  result.transform_keys!{|k|k[5..-1]}
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hypertrace
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/release.sh ADDED
@@ -0,0 +1,24 @@
1
+ echo "Setting up gem credentials..."
2
+ set +x
3
+ mkdir -p ~/.gem
4
+
5
+ cat << EOF > ~/.gem/credentials
6
+ ---
7
+ :github: Bearer ${GITHUB_TOKEN}
8
+ :rubygems_api_key: ${RUBYGEMS_API_KEY}
9
+ EOF
10
+
11
+ chmod 0600 ~/.gem/credentials
12
+ set -x
13
+
14
+ git config --global --add safe.directory "$(pwd)"
15
+
16
+ work_directory="${WORKDIR:-.}"
17
+ cd $work_directory
18
+
19
+ echo "Installing dependencies..."
20
+ bundle install > /dev/null
21
+
22
+ echo "Running gem release task..."
23
+ release_command="${RELEASE_COMMAND:-rake release}"
24
+ $release_command
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hypertrace-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - prodion23
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-09 00:00:00.000000000 Z
11
+ date: 2023-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -232,7 +232,6 @@ files:
232
232
  - ".ruby-gemset"
233
233
  - ".ruby-version"
234
234
  - Gemfile
235
- - Gemfile.lock
236
235
  - LICENSE
237
236
  - README.md
238
237
  - Rakefile
@@ -259,6 +258,7 @@ files:
259
258
  - lib/hypertrace/logging.rb
260
259
  - lib/hypertrace/ruby_agent.rb
261
260
  - lib/hypertrace/version.rb
261
+ - release.sh
262
262
  - rubyagent.gemspec
263
263
  - sig/rubyagent.rbs
264
264
  homepage: https://hypertrace.com
@@ -281,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
281
  - !ruby/object:Gem::Version
282
282
  version: '0'
283
283
  requirements: []
284
- rubygems_version: 3.3.7
284
+ rubygems_version: 3.4.6
285
285
  signing_key:
286
286
  specification_version: 4
287
287
  summary: Write a short summary, because RubyGems requires one.
data/Gemfile.lock DELETED
@@ -1,346 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- hypertrace-agent (0.1.0)
5
- google-protobuf (= 3.21.5)
6
- opentelemetry-api (= 1.0.2)
7
- opentelemetry-exporter-otlp (= 0.21.1)
8
- opentelemetry-exporter-zipkin (= 0.20.0)
9
- opentelemetry-instrumentation-faraday (= 0.21.0)
10
- opentelemetry-instrumentation-http (= 0.20.0)
11
- opentelemetry-instrumentation-mongo (= 0.20.0)
12
- opentelemetry-instrumentation-mysql2 (= 0.21.0)
13
- opentelemetry-instrumentation-net_http (= 0.20.0)
14
- opentelemetry-instrumentation-pg (= 0.21.0)
15
- opentelemetry-instrumentation-rails (= 0.22.0)
16
- opentelemetry-instrumentation-restclient (= 0.20.0)
17
- opentelemetry-instrumentation-sinatra (= 0.20.0)
18
- opentelemetry-propagator-b3 (= 0.20.0)
19
- opentelemetry-sdk (= 1.1.0)
20
-
21
- GEM
22
- remote: https://rubygems.org/
23
- specs:
24
- actioncable (6.1.6.1)
25
- actionpack (= 6.1.6.1)
26
- activesupport (= 6.1.6.1)
27
- nio4r (~> 2.0)
28
- websocket-driver (>= 0.6.1)
29
- actionmailbox (6.1.6.1)
30
- actionpack (= 6.1.6.1)
31
- activejob (= 6.1.6.1)
32
- activerecord (= 6.1.6.1)
33
- activestorage (= 6.1.6.1)
34
- activesupport (= 6.1.6.1)
35
- mail (>= 2.7.1)
36
- actionmailer (6.1.6.1)
37
- actionpack (= 6.1.6.1)
38
- actionview (= 6.1.6.1)
39
- activejob (= 6.1.6.1)
40
- activesupport (= 6.1.6.1)
41
- mail (~> 2.5, >= 2.5.4)
42
- rails-dom-testing (~> 2.0)
43
- actionpack (6.1.6.1)
44
- actionview (= 6.1.6.1)
45
- activesupport (= 6.1.6.1)
46
- rack (~> 2.0, >= 2.0.9)
47
- rack-test (>= 0.6.3)
48
- rails-dom-testing (~> 2.0)
49
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
50
- actiontext (6.1.6.1)
51
- actionpack (= 6.1.6.1)
52
- activerecord (= 6.1.6.1)
53
- activestorage (= 6.1.6.1)
54
- activesupport (= 6.1.6.1)
55
- nokogiri (>= 1.8.5)
56
- actionview (6.1.6.1)
57
- activesupport (= 6.1.6.1)
58
- builder (~> 3.1)
59
- erubi (~> 1.4)
60
- rails-dom-testing (~> 2.0)
61
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
62
- activejob (6.1.6.1)
63
- activesupport (= 6.1.6.1)
64
- globalid (>= 0.3.6)
65
- activemodel (6.1.6.1)
66
- activesupport (= 6.1.6.1)
67
- activerecord (6.1.6.1)
68
- activemodel (= 6.1.6.1)
69
- activesupport (= 6.1.6.1)
70
- activestorage (6.1.6.1)
71
- actionpack (= 6.1.6.1)
72
- activejob (= 6.1.6.1)
73
- activerecord (= 6.1.6.1)
74
- activesupport (= 6.1.6.1)
75
- marcel (~> 1.0)
76
- mini_mime (>= 1.1.0)
77
- activesupport (6.1.6.1)
78
- concurrent-ruby (~> 1.0, >= 1.0.2)
79
- i18n (>= 1.6, < 2)
80
- minitest (>= 5.1)
81
- tzinfo (~> 2.0)
82
- zeitwerk (~> 2.3)
83
- addressable (2.8.0)
84
- public_suffix (>= 2.0.2, < 5.0)
85
- ast (2.4.2)
86
- bson (4.15.0)
87
- builder (3.2.4)
88
- concurrent-ruby (1.1.10)
89
- crass (1.0.6)
90
- diff-lcs (1.5.0)
91
- domain_name (0.5.20190701)
92
- unf (>= 0.0.5, < 1.0.0)
93
- erubi (1.11.0)
94
- faraday (2.5.2)
95
- faraday-net_http (>= 2.0, < 3.1)
96
- ruby2_keywords (>= 0.0.4)
97
- faraday-net_http (3.0.0)
98
- ffi (1.15.5)
99
- ffi-compiler (1.0.1)
100
- ffi (>= 1.0.0)
101
- rake
102
- globalid (1.0.0)
103
- activesupport (>= 5.0)
104
- google-protobuf (3.21.5-x86_64-darwin)
105
- google-protobuf (3.21.5-x86_64-linux)
106
- http (5.1.0)
107
- addressable (~> 2.8)
108
- http-cookie (~> 1.0)
109
- http-form_data (~> 2.2)
110
- llhttp-ffi (~> 0.4.0)
111
- http-cookie (1.0.5)
112
- domain_name (~> 0.5)
113
- http-form_data (2.3.0)
114
- i18n (1.12.0)
115
- concurrent-ruby (~> 1.0)
116
- json (2.6.2)
117
- llhttp-ffi (0.4.0)
118
- ffi-compiler (~> 1.0)
119
- rake (~> 13.0)
120
- loofah (2.18.0)
121
- crass (~> 1.0.2)
122
- nokogiri (>= 1.5.9)
123
- mail (2.7.1)
124
- mini_mime (>= 0.1.1)
125
- marcel (1.0.2)
126
- method_source (1.0.0)
127
- mime-types (3.4.1)
128
- mime-types-data (~> 3.2015)
129
- mime-types-data (3.2022.0105)
130
- mini_mime (1.1.2)
131
- minitest (5.16.2)
132
- mongo (2.18.1)
133
- bson (>= 4.14.1, < 5.0.0)
134
- mustermann (2.0.2)
135
- ruby2_keywords (~> 0.0.1)
136
- mysql2 (0.5.4)
137
- netrc (0.11.0)
138
- nio4r (2.5.8)
139
- nokogiri (1.13.8-x86_64-darwin)
140
- racc (~> 1.4)
141
- nokogiri (1.13.8-x86_64-linux)
142
- racc (~> 1.4)
143
- opentelemetry-api (1.0.2)
144
- opentelemetry-common (0.19.6)
145
- opentelemetry-api (~> 1.0)
146
- opentelemetry-exporter-otlp (0.21.1)
147
- google-protobuf (~> 3.7)
148
- opentelemetry-api (~> 1.0)
149
- opentelemetry-common (~> 0.19.3)
150
- opentelemetry-sdk (~> 1.0)
151
- opentelemetry-exporter-zipkin (0.20.0)
152
- opentelemetry-api (~> 1.0)
153
- opentelemetry-common (~> 0.19.6)
154
- opentelemetry-sdk (~> 1.0)
155
- opentelemetry-semantic_conventions
156
- opentelemetry-instrumentation-action_pack (0.2.0)
157
- opentelemetry-api (~> 1.0)
158
- opentelemetry-instrumentation-base (~> 0.21.0)
159
- opentelemetry-instrumentation-rack (~> 0.21.0)
160
- opentelemetry-instrumentation-action_view (0.3.0)
161
- opentelemetry-api (~> 1.0)
162
- opentelemetry-instrumentation-active_support (~> 0.1)
163
- opentelemetry-instrumentation-base (~> 0.20)
164
- opentelemetry-instrumentation-active_record (0.4.0)
165
- opentelemetry-api (~> 1.0)
166
- opentelemetry-instrumentation-base (~> 0.21.0)
167
- ruby2_keywords
168
- opentelemetry-instrumentation-active_support (0.2.0)
169
- opentelemetry-api (~> 1.0)
170
- opentelemetry-instrumentation-base (~> 0.21.0)
171
- opentelemetry-instrumentation-base (0.21.0)
172
- opentelemetry-api (~> 1.0)
173
- opentelemetry-registry (~> 0.1)
174
- opentelemetry-instrumentation-faraday (0.21.0)
175
- opentelemetry-api (~> 1.0)
176
- opentelemetry-common (~> 0.19.3)
177
- opentelemetry-instrumentation-base (~> 0.21.0)
178
- opentelemetry-instrumentation-http (0.20.0)
179
- opentelemetry-api (~> 1.0)
180
- opentelemetry-instrumentation-base (~> 0.21.0)
181
- opentelemetry-instrumentation-mongo (0.20.0)
182
- opentelemetry-api (~> 1.0)
183
- opentelemetry-instrumentation-base (~> 0.21.0)
184
- opentelemetry-instrumentation-mysql2 (0.21.0)
185
- opentelemetry-api (~> 1.0)
186
- opentelemetry-instrumentation-base (~> 0.21.0)
187
- opentelemetry-instrumentation-net_http (0.20.0)
188
- opentelemetry-api (~> 1.0)
189
- opentelemetry-common (~> 0.19.3)
190
- opentelemetry-instrumentation-base (~> 0.21.0)
191
- opentelemetry-instrumentation-pg (0.21.0)
192
- opentelemetry-api (~> 1.0)
193
- opentelemetry-instrumentation-base (~> 0.21.0)
194
- opentelemetry-instrumentation-rack (0.21.0)
195
- opentelemetry-api (~> 1.0)
196
- opentelemetry-common (~> 0.19.3)
197
- opentelemetry-instrumentation-base (~> 0.21.0)
198
- opentelemetry-instrumentation-rails (0.22.0)
199
- opentelemetry-api (~> 1.0)
200
- opentelemetry-instrumentation-action_pack (~> 0.2.0)
201
- opentelemetry-instrumentation-action_view (~> 0.3.0)
202
- opentelemetry-instrumentation-active_record (~> 0.4.0)
203
- opentelemetry-instrumentation-active_support (~> 0.2.0)
204
- opentelemetry-instrumentation-base (~> 0.21.0)
205
- opentelemetry-instrumentation-restclient (0.20.0)
206
- opentelemetry-api (~> 1.0)
207
- opentelemetry-common (~> 0.19.3)
208
- opentelemetry-instrumentation-base (~> 0.21.0)
209
- opentelemetry-instrumentation-sinatra (0.20.0)
210
- opentelemetry-api (~> 1.0)
211
- opentelemetry-common (~> 0.19.3)
212
- opentelemetry-instrumentation-base (~> 0.21.0)
213
- opentelemetry-propagator-b3 (0.20.0)
214
- opentelemetry-api (~> 1.0)
215
- opentelemetry-registry (0.1.0)
216
- opentelemetry-api (~> 1.0.1)
217
- opentelemetry-sdk (1.1.0)
218
- opentelemetry-api (~> 1.0)
219
- opentelemetry-common (~> 0.19.3)
220
- opentelemetry-registry (~> 0.1)
221
- opentelemetry-semantic_conventions
222
- opentelemetry-semantic_conventions (1.8.0)
223
- opentelemetry-api (~> 1.0)
224
- parallel (1.22.1)
225
- parser (3.1.2.0)
226
- ast (~> 2.4.1)
227
- pg (1.4.3)
228
- public_suffix (4.0.7)
229
- puma (5.2.2)
230
- nio4r (~> 2.0)
231
- racc (1.6.0)
232
- rack (2.2.4)
233
- rack-protection (2.2.2)
234
- rack
235
- rack-test (1.1.0)
236
- rack (>= 1.0, < 3)
237
- rails (6.1.6.1)
238
- actioncable (= 6.1.6.1)
239
- actionmailbox (= 6.1.6.1)
240
- actionmailer (= 6.1.6.1)
241
- actionpack (= 6.1.6.1)
242
- actiontext (= 6.1.6.1)
243
- actionview (= 6.1.6.1)
244
- activejob (= 6.1.6.1)
245
- activemodel (= 6.1.6.1)
246
- activerecord (= 6.1.6.1)
247
- activestorage (= 6.1.6.1)
248
- activesupport (= 6.1.6.1)
249
- bundler (>= 1.15.0)
250
- railties (= 6.1.6.1)
251
- sprockets-rails (>= 2.0.0)
252
- rails-dom-testing (2.0.3)
253
- activesupport (>= 4.2.0)
254
- nokogiri (>= 1.6)
255
- rails-html-sanitizer (1.4.3)
256
- loofah (~> 2.3)
257
- railties (6.1.6.1)
258
- actionpack (= 6.1.6.1)
259
- activesupport (= 6.1.6.1)
260
- method_source
261
- rake (>= 12.2)
262
- thor (~> 1.0)
263
- rainbow (3.1.1)
264
- rake (13.0.6)
265
- regexp_parser (2.5.0)
266
- rest-client (2.0.2)
267
- http-cookie (>= 1.0.2, < 2.0)
268
- mime-types (>= 1.16, < 4.0)
269
- netrc (~> 0.8)
270
- rexml (3.2.5)
271
- rspec (3.11.0)
272
- rspec-core (~> 3.11.0)
273
- rspec-expectations (~> 3.11.0)
274
- rspec-mocks (~> 3.11.0)
275
- rspec-core (3.11.0)
276
- rspec-support (~> 3.11.0)
277
- rspec-expectations (3.11.0)
278
- diff-lcs (>= 1.2.0, < 2.0)
279
- rspec-support (~> 3.11.0)
280
- rspec-mocks (3.11.1)
281
- diff-lcs (>= 1.2.0, < 2.0)
282
- rspec-support (~> 3.11.0)
283
- rspec-support (3.11.0)
284
- rubocop (1.32.0)
285
- json (~> 2.3)
286
- parallel (~> 1.10)
287
- parser (>= 3.1.0.0)
288
- rainbow (>= 2.2.2, < 4.0)
289
- regexp_parser (>= 1.8, < 3.0)
290
- rexml (>= 3.2.5, < 4.0)
291
- rubocop-ast (>= 1.19.1, < 2.0)
292
- ruby-progressbar (~> 1.7)
293
- unicode-display_width (>= 1.4.0, < 3.0)
294
- rubocop-ast (1.19.1)
295
- parser (>= 3.1.1.0)
296
- ruby-progressbar (1.11.0)
297
- ruby2_keywords (0.0.5)
298
- sinatra (2.2.2)
299
- mustermann (~> 2.0)
300
- rack (~> 2.2)
301
- rack-protection (= 2.2.2)
302
- tilt (~> 2.0)
303
- sprockets (4.1.1)
304
- concurrent-ruby (~> 1.0)
305
- rack (> 1, < 3)
306
- sprockets-rails (3.4.2)
307
- actionpack (>= 5.2)
308
- activesupport (>= 5.2)
309
- sprockets (>= 3.0.0)
310
- thor (1.2.1)
311
- tilt (2.0.11)
312
- tzinfo (2.0.5)
313
- concurrent-ruby (~> 1.0)
314
- unf (0.1.4)
315
- unf_ext
316
- unf_ext (0.0.8.2)
317
- unicode-display_width (2.2.0)
318
- websocket-driver (0.7.5)
319
- websocket-extensions (>= 0.1.0)
320
- websocket-extensions (0.1.5)
321
- zeitwerk (2.6.0)
322
-
323
- PLATFORMS
324
- x86_64-darwin-20
325
- x86_64-darwin-21
326
- x86_64-linux
327
-
328
- DEPENDENCIES
329
- faraday (~> 2.5.2)
330
- http (~> 5.1.0)
331
- hypertrace-agent!
332
- mongo (~> 2)
333
- mysql2 (~> 0.5.2)
334
- nio4r (~> 2.0)
335
- pg (~> 1.4.3)
336
- puma (~> 5.2.2)
337
- rack-test (~> 1.1)
338
- rails (~> 6.1.3)
339
- rake (~> 13.0)
340
- rest-client (~> 2.0.0)
341
- rspec (~> 3.0)
342
- rubocop (~> 1.21)
343
- sinatra (~> 2.1)
344
-
345
- BUNDLED WITH
346
- 2.3.4