hypertrace-agent 0.1.0

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.
@@ -0,0 +1,61 @@
1
+ module OpenTelemetry::Instrumentation::RestClient::Patches::Request
2
+ private
3
+
4
+ def trace_request
5
+ http_method = method.upcase
6
+ instrumentation_attrs = {
7
+ 'http.scheme' => self.use_ssl? ? "https" : "http",
8
+ 'http.method' => http_method.to_s,
9
+ 'http.url' => OpenTelemetry::Common::Utilities.cleanse_url(url)
10
+ }
11
+ config = OpenTelemetry::Instrumentation::RestClient::Instrumentation.instance.config
12
+ header_map = self.processed_headers
13
+ ht_attributes = Hypertrace::Instrumentation::DataCapture.headers_to_attribute_keys(header_map,
14
+ Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
15
+ content_type = header_map.find{|k,v|k.downcase == 'content-type'}&.last
16
+ if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type,
17
+ Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
18
+ body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(self.payload.to_s)
19
+ ht_attributes['http.request.body'] = body_cap if body_cap
20
+ end
21
+
22
+ instrumentation_attrs['peer.service'] = config[:peer_service] if config[:peer_service]
23
+ span = tracer.start_span(
24
+ "HTTP #{http_method}",
25
+ attributes: instrumentation_attrs.merge(
26
+ OpenTelemetry::Common::HTTP::ClientContext.attributes,
27
+ ht_attributes
28
+ ),
29
+ kind: :client
30
+ )
31
+
32
+ OpenTelemetry::Trace.with_span(span) do
33
+ OpenTelemetry.propagation.inject(processed_headers)
34
+ end
35
+
36
+ yield(span).tap do |response|
37
+ # Verify return value is a response.
38
+ # If so, add additional attributes.
39
+ if response.is_a?(::RestClient::Response)
40
+ headers = response.headers
41
+ Hypertrace::Instrumentation::DataCapture.headers_to_attribute_keys(headers, Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE) do |attr_key, attr_value|
42
+ span.set_attribute(attr_key, attr_value)
43
+ end
44
+ content_type = headers[:content_type]
45
+ if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE)
46
+ body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(response.body)
47
+ span.set_attribute('http.response.body', body_cap) if body_cap
48
+ end
49
+ span.set_attribute('http.status_code', response.code)
50
+ span.status = OpenTelemetry::Trace::Status.error unless (100..399).include?(response.code.to_i)
51
+ end
52
+ end
53
+ rescue ::RestClient::ExceptionWithResponse => e
54
+ span.set_attribute('http.status_code', e.http_code)
55
+ span.status = OpenTelemetry::Trace::Status.error unless (100..399).include?(e.http_code.to_i)
56
+
57
+ raise e
58
+ ensure
59
+ span.finish
60
+ end
61
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Re-open sinatra middleware to customize middleware to call our Hypertrace specific capture
4
+ class OpenTelemetry::Instrumentation::Sinatra::Middlewares::TracerMiddleware
5
+ def call env
6
+ extracted_context = OpenTelemetry.propagation.extract(
7
+ env,
8
+ getter: OpenTelemetry::Common::Propagation.rack_env_getter
9
+ )
10
+ OpenTelemetry::Context.with_current(extracted_context) do
11
+ attrs = Hypertrace::Instrumentation::RackCompatible.extract_req_headers_as_attributes(env, 'http.request.header')
12
+ if Hypertrace::Instrumentation::RackCompatible.should_record_env?(env)
13
+ body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(env['rack.input'])
14
+ attrs['http.request.body'] = body_cap if body_cap
15
+ end
16
+
17
+ tracer.in_span(
18
+ env['PATH_INFO'],
19
+ attributes: request_span_attributes(env: env).merge!(attrs),
20
+ kind: :server
21
+ ) do |span|
22
+ @app.call(env).tap do |resp|
23
+ response_attributes = Hypertrace::Instrumentation::RackCompatible.extract_response_headers_as_attributes(resp, 'http.response.header')
24
+ if Hypertrace::Instrumentation::RackCompatible.should_record_rack_array?(resp)
25
+ cap_body = Hypertrace::Instrumentation::RackCompatible.extract_response_body(resp)
26
+ response_attributes['http.response.body'] = cap_body if cap_body
27
+ end
28
+ span.add_attributes(response_attributes)
29
+ trace_response(span, env, resp)
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ def request_span_attributes(env:)
36
+ attributes = {
37
+ 'http.method' => env['REQUEST_METHOD'],
38
+ 'http.host' => env['HTTP_HOST'] || 'unknown',
39
+ 'http.scheme' => env['rack.url_scheme'],
40
+ 'http.target' => env['QUERY_STRING'].empty? ? env['PATH_INFO'] : "#{env['PATH_INFO']}?#{env['QUERY_STRING']}"
41
+ }
42
+
43
+ attributes['http.user_agent'] = env['HTTP_USER_AGENT'] if env['HTTP_USER_AGENT']
44
+ attributes
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ module Hypertrace
2
+ module Instrumentation
3
+ end
4
+ end
@@ -0,0 +1,28 @@
1
+ require 'logger'
2
+
3
+ module Hypertrace
4
+ module Logging
5
+ def log
6
+ @_logger ||= begin
7
+ l = Logger.new(STDOUT)
8
+ l.level = get_level
9
+ l.progname = 'Hypertrace'
10
+ l
11
+ end
12
+ end
13
+
14
+ private
15
+ def get_level
16
+ level_map = {
17
+ "debug" => Logger::DEBUG,
18
+ 'info' => Logger::INFO,
19
+ 'warn' => Logger::WARN,
20
+ 'error' => Logger::ERROR
21
+ }
22
+
23
+ level = Hypertrace::EnvVarSettings.env_value('LOG_LEVEL') || ''
24
+
25
+ level_map.fetch(level.downcase, Logger::INFO)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,156 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'opentelemetry-sdk'
4
+ require 'opentelemetry/exporter/zipkin'
5
+ require 'opentelemetry/exporter/otlp'
6
+ require 'opentelemetry/propagator/b3'
7
+ require 'opentelemetry/trace/propagation/trace_context'
8
+ require 'opentelemetry/instrumentation/faraday'
9
+ require 'opentelemetry/instrumentation/net/http'
10
+ require 'opentelemetry/instrumentation/http'
11
+ require 'opentelemetry/instrumentation/mongo'
12
+ require 'opentelemetry/instrumentation/mysql2'
13
+ require 'opentelemetry/instrumentation/pg'
14
+ require 'opentelemetry/instrumentation/rack'
15
+ require 'opentelemetry/instrumentation/rails'
16
+ require 'opentelemetry/instrumentation/restclient'
17
+ require 'opentelemetry/instrumentation/sinatra'
18
+ require_relative './instrumentation'
19
+ require_relative './instrumentation/data_capture'
20
+
21
+ require_relative './instrumentation/rack_compatible'
22
+ require_relative './config'
23
+ require_relative './instrumentation/sinatra'
24
+ require_relative './version'
25
+
26
+ require 'singleton'
27
+
28
+ # We can't name the class 'Hypertrace::Agent' because the built proto definitions
29
+ # create a module Hypertrace::Agent :(
30
+ # RubyAgent is repetitve, but want to remain somewhat consistent compared to python/node
31
+ class Hypertrace::RubyAgent
32
+ include Hypertrace::Logging
33
+ include Singleton
34
+
35
+ def self.instrument!
36
+ self.instance.instrument!
37
+ end
38
+
39
+ def self.config
40
+ self.instance.config
41
+ end
42
+
43
+ def initialize(version = Hypertrace::VERSION)
44
+ log.info {"Initializing Hypertrace"}
45
+ configure_otel_logger!
46
+ @config = Hypertrace::Config::Config.new
47
+ @version = version
48
+ log.info {"Hypertrace version: #{Hypertrace::VERSION}"}
49
+ log.info {"Ruby version: #{RUBY_VERSION}"}
50
+ end
51
+
52
+ def config
53
+ @config.config
54
+ end
55
+
56
+ def instrument!
57
+ initalize_tracer
58
+ end
59
+
60
+ def initalize_tracer
61
+ resource = OpenTelemetry::SDK::Resources::Resource.create(create_resource_attributes)
62
+
63
+ # TODO: Extra resource Attributes From Config
64
+ exporter = create_exporter
65
+ OpenTelemetry::SDK.configure do |c|
66
+ if ENV['HT_CI_TEST'] != nil
67
+ span_processor = OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(EXPORTER)
68
+ c.add_span_processor span_processor
69
+ else
70
+ c.add_span_processor OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter)
71
+ end
72
+ c.resource = resource
73
+
74
+ c.use 'OpenTelemetry::Instrumentation::ActionPack'
75
+ c.use 'OpenTelemetry::Instrumentation::ActionView'
76
+ c.use 'OpenTelemetry::Instrumentation::ActiveRecord'
77
+ c.use 'OpenTelemetry::Instrumentation::ActiveSupport'
78
+ c.use 'OpenTelemetry::Instrumentation::Faraday'
79
+ c.use 'OpenTelemetry::Instrumentation::Mongo'
80
+ c.use 'OpenTelemetry::Instrumentation::Mysql2'
81
+ c.use 'OpenTelemetry::Instrumentation::PG'
82
+ c.use 'OpenTelemetry::Instrumentation::Rack'
83
+ c.use 'OpenTelemetry::Instrumentation::Sinatra'
84
+ c.use 'OpenTelemetry::Instrumentation::Net::HTTP'
85
+ c.use 'OpenTelemetry::Instrumentation::HTTP'
86
+ c.use 'OpenTelemetry::Instrumentation::RestClient'
87
+ end
88
+
89
+ apply_custom_patch './instrumentation/rack'
90
+ apply_custom_patch './instrumentation/net_http_patch'
91
+ apply_custom_patch './instrumentation/http_patch'
92
+ apply_custom_patch './instrumentation/faraday_patch'
93
+ apply_custom_patch './instrumentation/rest_client_patch'
94
+
95
+ configure_propagators
96
+ end
97
+
98
+ private
99
+
100
+ def create_exporter
101
+ exporter = nil
102
+ if config.reporting.trace_reporter_type == :OTLP
103
+ verify_mode = config.reporting.secure.value ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
104
+ exporter = OpenTelemetry::Exporter::OTLP::Exporter.new(endpoint: config.reporting.endpoint.value,
105
+ ssl_verify_mode: verify_mode)
106
+ return exporter
107
+ end
108
+ if config.reporting.trace_reporter_type == :ZIPKIN
109
+ exporter = OpenTelemetry::Exporter::Zipkin::Exporter.new(endpoint: config.reporting.endpoint.value)
110
+ return exporter
111
+ end
112
+ end
113
+
114
+ def configure_propagators
115
+ propagator_list = []
116
+
117
+ [config.propagation_formats.to_a].each do |format|
118
+ if format[0] == :TRACECONTEXT
119
+ propagator_list << OpenTelemetry::Trace::Propagation::TraceContext.text_map_propagator
120
+ elsif format[0] == :B3
121
+ propagator_list << OpenTelemetry::Propagator::B3::Single.text_map_propagator
122
+ end
123
+ end
124
+ if propagator_list.empty?
125
+ log.warn{"No propagators were added!"}
126
+ end
127
+ OpenTelemetry.propagation = OpenTelemetry::Context::Propagation::CompositeTextMapPropagator.compose_propagators(propagator_list.compact)
128
+ end
129
+
130
+ private
131
+
132
+ def apply_custom_patch file
133
+ begin
134
+ require_relative file
135
+ log.debug{"Applied patch for #{file}"}
136
+ rescue => _e
137
+ log.debug{"Unable to apply patch for #{file} this is most likely because the library is unavailable or an unsupported version"}
138
+ end
139
+ end
140
+
141
+ def create_resource_attributes
142
+ {
143
+ 'service.name': config.service_name.value,
144
+ 'service.instance.id': Process.pid,
145
+ 'telemetry.sdk.version': @version,
146
+ 'telemetry.sdk.name': 'hypertrace',
147
+ 'telemetry.sdk.language': 'ruby'
148
+ }.transform_keys(&:to_s)
149
+ end
150
+
151
+ NULL_LOGGER = Logger.new(File::NULL)
152
+
153
+ def configure_otel_logger!
154
+ OpenTelemetry.logger = NULL_LOGGER
155
+ end
156
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hypertrace
4
+ VERSION = "0.1.0"
5
+ end
data/lib/hypertrace.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hypertrace
4
+ class Error < StandardError; end
5
+ end
6
+
7
+ require_relative './hypertrace/version'
8
+ require_relative './hypertrace/env_var_settings'
9
+ require_relative './hypertrace/logging'
10
+ require_relative './hypertrace/config'
11
+ require_relative './hypertrace/ruby_agent'
12
+
13
+
data/rubyagent.gemspec ADDED
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/hypertrace/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "hypertrace-agent"
7
+ spec.version = Hypertrace::VERSION
8
+ spec.authors = ["prodion23"]
9
+ spec.email = ["Write your email address"]
10
+
11
+ spec.summary = "Write a short summary, because RubyGems requires one."
12
+ spec.description = "Hypertrace ..."
13
+ spec.homepage = "https://hypertrace.com"
14
+ spec.required_ruby_version = ">= 2.6.0"
15
+
16
+ # spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
17
+
18
+ spec.metadata["homepage_uri"] = spec.homepage
19
+ spec.metadata["source_code_uri"] = "https://github.com/hypertrace/rubyagent"
20
+ # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
+ `git ls-files -z`.split("\x0").reject do |f|
26
+ (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
27
+ end
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ # Uncomment to register a new dependency of your gem
34
+ # spec.add_dependency "example-gem", "~> 1.0"
35
+ spec.add_dependency 'google-protobuf', '3.21.5'
36
+ spec.add_dependency 'opentelemetry-api', '1.0.2'
37
+ spec.add_dependency 'opentelemetry-sdk', '1.1.0'
38
+ spec.add_dependency 'opentelemetry-propagator-b3', '0.20.0'
39
+ spec.add_dependency 'opentelemetry-exporter-otlp', '0.21.1'
40
+ spec.add_dependency 'opentelemetry-exporter-zipkin', '0.20.0'
41
+ spec.add_dependency 'opentelemetry-instrumentation-faraday', '0.21.0'
42
+ spec.add_dependency 'opentelemetry-instrumentation-mysql2', '0.21.0'
43
+ spec.add_dependency 'opentelemetry-instrumentation-pg', '0.21.0'
44
+ spec.add_dependency 'opentelemetry-instrumentation-mongo', '0.20.0'
45
+ spec.add_dependency 'opentelemetry-instrumentation-net_http', '0.20.0'
46
+ spec.add_dependency 'opentelemetry-instrumentation-http', '0.20.0'
47
+ spec.add_dependency 'opentelemetry-instrumentation-rails', '0.22.0'
48
+ spec.add_dependency 'opentelemetry-instrumentation-restclient', '0.20.0'
49
+ spec.add_dependency 'opentelemetry-instrumentation-sinatra', '0.20.0'
50
+
51
+ # For more information and examples about making a new gem, check out our
52
+ # guide at: https://bundler.io/guides/creating_gem.html
53
+ end
data/sig/rubyagent.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module Rubyagent
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,288 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hypertrace-agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - prodion23
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-09-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: google-protobuf
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 3.21.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.21.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: opentelemetry-api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: opentelemetry-sdk
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: opentelemetry-propagator-b3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.20.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.20.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: opentelemetry-exporter-otlp
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.21.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.21.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: opentelemetry-exporter-zipkin
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.20.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.20.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: opentelemetry-instrumentation-faraday
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.21.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.21.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: opentelemetry-instrumentation-mysql2
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.21.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 0.21.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: opentelemetry-instrumentation-pg
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 0.21.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 0.21.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: opentelemetry-instrumentation-mongo
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 0.20.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 0.20.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: opentelemetry-instrumentation-net_http
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 0.20.0
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 0.20.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: opentelemetry-instrumentation-http
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 0.20.0
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 0.20.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: opentelemetry-instrumentation-rails
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 0.22.0
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 0.22.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: opentelemetry-instrumentation-restclient
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 0.20.0
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 0.20.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: opentelemetry-instrumentation-sinatra
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '='
214
+ - !ruby/object:Gem::Version
215
+ version: 0.20.0
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '='
221
+ - !ruby/object:Gem::Version
222
+ version: 0.20.0
223
+ description: Hypertrace ...
224
+ email:
225
+ - Write your email address
226
+ executables: []
227
+ extensions: []
228
+ extra_rdoc_files: []
229
+ files:
230
+ - ".rspec"
231
+ - ".rubocop.yml"
232
+ - ".ruby-gemset"
233
+ - ".ruby-version"
234
+ - Gemfile
235
+ - Gemfile.lock
236
+ - LICENSE
237
+ - README.md
238
+ - Rakefile
239
+ - bin/console
240
+ - bin/setup
241
+ - build_proto.sh
242
+ - examples/sinatra/app.rb
243
+ - lib/hypertrace.rb
244
+ - lib/hypertrace/config.rb
245
+ - lib/hypertrace/config/config.rb
246
+ - lib/hypertrace/config/config_pb.rb
247
+ - lib/hypertrace/config/default.rb
248
+ - lib/hypertrace/config/environment.rb
249
+ - lib/hypertrace/env_var_settings.rb
250
+ - lib/hypertrace/instrumentation.rb
251
+ - lib/hypertrace/instrumentation/data_capture.rb
252
+ - lib/hypertrace/instrumentation/faraday_patch.rb
253
+ - lib/hypertrace/instrumentation/http_patch.rb
254
+ - lib/hypertrace/instrumentation/net_http_patch.rb
255
+ - lib/hypertrace/instrumentation/rack.rb
256
+ - lib/hypertrace/instrumentation/rack_compatible.rb
257
+ - lib/hypertrace/instrumentation/rest_client_patch.rb
258
+ - lib/hypertrace/instrumentation/sinatra.rb
259
+ - lib/hypertrace/logging.rb
260
+ - lib/hypertrace/ruby_agent.rb
261
+ - lib/hypertrace/version.rb
262
+ - rubyagent.gemspec
263
+ - sig/rubyagent.rbs
264
+ homepage: https://hypertrace.com
265
+ licenses: []
266
+ metadata:
267
+ homepage_uri: https://hypertrace.com
268
+ source_code_uri: https://github.com/hypertrace/rubyagent
269
+ post_install_message:
270
+ rdoc_options: []
271
+ require_paths:
272
+ - lib
273
+ required_ruby_version: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ">="
276
+ - !ruby/object:Gem::Version
277
+ version: 2.6.0
278
+ required_rubygems_version: !ruby/object:Gem::Requirement
279
+ requirements:
280
+ - - ">="
281
+ - !ruby/object:Gem::Version
282
+ version: '0'
283
+ requirements: []
284
+ rubygems_version: 3.3.7
285
+ signing_key:
286
+ specification_version: 4
287
+ summary: Write a short summary, because RubyGems requires one.
288
+ test_files: []