instana 1.217.0 → 2.0.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +101 -225
- data/.tekton/.currency/scripts/generate_report.py +194 -22
- data/.tekton/pipeline.yaml +65 -152
- data/.tekton/prepuller-restart-service-account.yaml +31 -0
- data/.tekton/ruby-tracer-prepuller-cronjob.yaml +20 -0
- data/.tekton/ruby-tracer-prepuller.yaml +27 -26
- data/.tekton/task.yaml +31 -27
- data/Gemfile +5 -0
- data/README.md +2 -1
- data/Rakefile +1 -1
- data/examples/otel.rb +98 -0
- data/examples/tracing.rb +1 -0
- data/gemfiles/rails_61.gemfile +1 -0
- data/gemfiles/rails_70.gemfile +1 -0
- data/instana.gemspec +5 -0
- data/lib/instana/base.rb +4 -2
- data/lib/instana/instrumentation/action_cable.rb +8 -4
- data/lib/instana/instrumentation/action_controller.rb +2 -4
- data/lib/instana/instrumentation/action_mailer.rb +1 -1
- data/lib/instana/instrumentation/action_view.rb +4 -4
- data/lib/instana/instrumentation/active_job.rb +26 -13
- data/lib/instana/instrumentation/active_record.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_lambda.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
- data/lib/instana/instrumentation/dalli.rb +1 -1
- data/lib/instana/instrumentation/excon.rb +2 -2
- data/lib/instana/instrumentation/graphql.rb +3 -3
- data/lib/instana/instrumentation/grpc.rb +14 -13
- data/lib/instana/instrumentation/mongo.rb +3 -3
- data/lib/instana/instrumentation/net-http.rb +5 -4
- data/lib/instana/instrumentation/rack.rb +36 -4
- data/lib/instana/instrumentation/redis.rb +1 -1
- data/lib/instana/instrumentation/resque.rb +10 -8
- data/lib/instana/instrumentation/rest-client.rb +4 -4
- data/lib/instana/instrumentation/sequel.rb +3 -3
- data/lib/instana/instrumentation/shoryuken.rb +4 -1
- data/lib/instana/instrumentation/sidekiq-client.rb +21 -19
- data/lib/instana/instrumentation/sidekiq-worker.rb +22 -21
- data/lib/instana/instrumented_logger.rb +1 -1
- data/lib/instana/samplers/result.rb +32 -0
- data/lib/instana/samplers/samplers.rb +76 -0
- data/lib/instana/serverless.rb +4 -2
- data/lib/instana/setup.rb +4 -5
- data/lib/instana/trace/export.rb +36 -0
- data/lib/instana/{tracing → trace}/processor.rb +19 -15
- data/lib/instana/trace/span.rb +532 -0
- data/lib/instana/{tracing → trace}/span_context.rb +17 -8
- data/lib/instana/trace/span_kind.rb +51 -0
- data/lib/instana/trace/span_limits.rb +63 -0
- data/lib/instana/{tracer.rb → trace/tracer.rb} +106 -54
- data/lib/instana/trace/tracer_provider.rb +198 -0
- data/lib/instana/trace.rb +74 -0
- data/lib/instana/util.rb +11 -0
- data/lib/instana/version.rb +1 -1
- data/test/frameworks/sinatra_test.rb +2 -1
- data/test/instrumentation/aws_test.rb +7 -7
- data/test/instrumentation/dalli_test.rb +8 -8
- data/test/instrumentation/excon_test.rb +3 -3
- data/test/instrumentation/graphql_test.rb +4 -4
- data/test/instrumentation/grpc_test.rb +8 -8
- data/test/instrumentation/mongo_test.rb +1 -1
- data/test/instrumentation/net_http_test.rb +6 -6
- data/test/instrumentation/rails_action_cable_test.rb +2 -2
- data/test/instrumentation/rails_action_mailer_test.rb +1 -1
- data/test/instrumentation/rails_active_job_test.rb +1 -1
- data/test/instrumentation/rails_active_record_database_missing_test.rb +2 -3
- data/test/instrumentation/rails_active_record_test.rb +8 -7
- data/test/instrumentation/redis_test.rb +7 -7
- data/test/instrumentation/resque_test.rb +5 -5
- data/test/instrumentation/rest_client_test.rb +1 -2
- data/test/instrumentation/sequel_test.rb +12 -6
- data/test/instrumentation/sidekiq-client_test.rb +2 -2
- data/test/instrumentation/sidekiq-worker_test.rb +2 -2
- data/test/{tracing → trace}/custom_test.rb +32 -25
- data/test/{tracing → trace}/id_management_test.rb +0 -2
- data/test/{tracing → trace}/instrumented_logger_test.rb +1 -1
- data/test/{tracing → trace}/processor_test.rb +6 -6
- data/test/{tracing → trace}/span_context_test.rb +3 -3
- data/test/{tracing → trace}/span_test.rb +7 -7
- data/test/{tracing → trace}/tracer_async_test.rb +43 -30
- data/test/trace/tracer_provider_test.rb +148 -0
- data/test/{tracing → trace}/tracer_test.rb +48 -37
- metadata +105 -32
- data/examples/opentracing.rb +0 -35
- data/lib/instana/open_tracing/carrier.rb +0 -7
- data/lib/instana/open_tracing/instana_tracer.rb +0 -99
- data/lib/instana/tracing/span.rb +0 -431
- data/lib/opentracing.rb +0 -32
- data/test/tracing/opentracing_test.rb +0 -382
data/lib/instana/tracing/span.rb
DELETED
@@ -1,431 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2016
|
3
|
-
|
4
|
-
module Instana
|
5
|
-
class Span
|
6
|
-
REGISTERED_SPANS = [ :actioncontroller, :actionview, :activerecord, :excon,
|
7
|
-
:memcache, :'net-http', :rack, :render, :'rpc-client',
|
8
|
-
:'rpc-server', :'sidekiq-client', :'sidekiq-worker',
|
9
|
-
:redis, :'resque-client', :'resque-worker', :'graphql.server', :dynamodb, :s3, :sns, :sqs, :'aws.lambda.entry', :activejob, :log, :"mail.actionmailer",
|
10
|
-
:"aws.lambda.invoke", :mongo, :sequel ].freeze
|
11
|
-
ENTRY_SPANS = [ :rack, :'resque-worker', :'rpc-server', :'sidekiq-worker', :'graphql.server', :sqs,
|
12
|
-
:'aws.lambda.entry' ].freeze
|
13
|
-
EXIT_SPANS = [ :activerecord, :excon, :'net-http', :'resque-client',
|
14
|
-
:'rpc-client', :'sidekiq-client', :redis, :dynamodb, :s3, :sns, :sqs, :log, :"mail.actionmailer",
|
15
|
-
:"aws.lambda.invoke", :mongo, :sequel ].freeze
|
16
|
-
HTTP_SPANS = [ :rack, :excon, :'net-http' ].freeze
|
17
|
-
|
18
|
-
attr_accessor :parent
|
19
|
-
attr_accessor :baggage
|
20
|
-
attr_accessor :is_root
|
21
|
-
attr_accessor :context
|
22
|
-
|
23
|
-
def initialize(name, parent_ctx: nil, start_time: ::Instana::Util.now_in_ms)
|
24
|
-
@data = {}
|
25
|
-
|
26
|
-
if parent_ctx.is_a?(::Instana::Span)
|
27
|
-
@parent = parent_ctx
|
28
|
-
parent_ctx = parent_ctx.context
|
29
|
-
end
|
30
|
-
|
31
|
-
if parent_ctx.is_a?(::Instana::SpanContext)
|
32
|
-
@is_root = false
|
33
|
-
|
34
|
-
# If we have a parent trace, link to it
|
35
|
-
if parent_ctx.trace_id
|
36
|
-
@data[:t] = parent_ctx.trace_id # Trace ID
|
37
|
-
@data[:p] = parent_ctx.span_id # Parent ID
|
38
|
-
else
|
39
|
-
@data[:t] = ::Instana::Util.generate_id
|
40
|
-
end
|
41
|
-
|
42
|
-
@data[:s] = ::Instana::Util.generate_id # Span ID
|
43
|
-
|
44
|
-
@baggage = parent_ctx.baggage.dup
|
45
|
-
@level = parent_ctx.level
|
46
|
-
else
|
47
|
-
# No parent specified so we're starting a new Trace - this will be the root span
|
48
|
-
@is_root = true
|
49
|
-
@level = 1
|
50
|
-
|
51
|
-
id = ::Instana::Util.generate_id
|
52
|
-
@data[:t] = id # Trace ID
|
53
|
-
@data[:s] = id # Span ID
|
54
|
-
end
|
55
|
-
|
56
|
-
@data[:data] = {}
|
57
|
-
|
58
|
-
if ENV.key?('INSTANA_SERVICE_NAME')
|
59
|
-
@data[:data][:service] = ENV['INSTANA_SERVICE_NAME']
|
60
|
-
end
|
61
|
-
|
62
|
-
# Entity Source
|
63
|
-
@data[:f] = ::Instana.agent.source
|
64
|
-
# Start time
|
65
|
-
if start_time.is_a?(Time)
|
66
|
-
@data[:ts] = ::Instana::Util.time_to_ms(start_time)
|
67
|
-
else
|
68
|
-
@data[:ts] = start_time
|
69
|
-
end
|
70
|
-
|
71
|
-
# Check for custom tracing
|
72
|
-
if REGISTERED_SPANS.include?(name.to_sym)
|
73
|
-
@data[:n] = name.to_sym
|
74
|
-
else
|
75
|
-
configure_custom(name)
|
76
|
-
end
|
77
|
-
|
78
|
-
::Instana.processor.start_span(self)
|
79
|
-
|
80
|
-
# Attach a backtrace to all exit spans
|
81
|
-
add_stack if ::Instana.config[:collect_backtraces] && exit_span?
|
82
|
-
end
|
83
|
-
|
84
|
-
# Adds a backtrace to this span
|
85
|
-
#
|
86
|
-
# @param limit [Integer] Limit the backtrace to the top <limit> frames
|
87
|
-
#
|
88
|
-
def add_stack(limit: 30, stack: Kernel.caller)
|
89
|
-
cleaner = ::Instana.config[:backtrace_cleaner]
|
90
|
-
stack = cleaner.call(stack) if cleaner
|
91
|
-
|
92
|
-
@data[:stack] = stack
|
93
|
-
.map do |call|
|
94
|
-
file, line, *method = call.split(':')
|
95
|
-
|
96
|
-
{
|
97
|
-
c: file,
|
98
|
-
n: line,
|
99
|
-
m: method.join(' ')
|
100
|
-
}
|
101
|
-
end.take(limit > 40 ? 40 : limit)
|
102
|
-
end
|
103
|
-
|
104
|
-
# Log an error into the span
|
105
|
-
#
|
106
|
-
# @param e [Exception] The exception to be logged
|
107
|
-
#
|
108
|
-
def add_error(e)
|
109
|
-
@data[:error] = true
|
110
|
-
|
111
|
-
if @data.key?(:ec)
|
112
|
-
@data[:ec] = @data[:ec] + 1
|
113
|
-
else
|
114
|
-
@data[:ec] = 1
|
115
|
-
end
|
116
|
-
|
117
|
-
# If a valid exception has been passed in, log the information about it
|
118
|
-
# In case of just logging an error for things such as HTTP client 5xx
|
119
|
-
# responses, an exception/backtrace may not exist.
|
120
|
-
if e
|
121
|
-
if e.backtrace.is_a?(Array)
|
122
|
-
add_stack(stack: e.backtrace)
|
123
|
-
end
|
124
|
-
|
125
|
-
if HTTP_SPANS.include?(@data[:n])
|
126
|
-
set_tags(:http => { :error => "#{e.class}: #{e.message}" })
|
127
|
-
elsif @data[:n] == :activerecord
|
128
|
-
@data[:data][:activerecord][:error] = e.message
|
129
|
-
else
|
130
|
-
log(:error, Time.now, message: e.message, parameters: e.class.to_s)
|
131
|
-
end
|
132
|
-
e.instance_variable_set(:@instana_logged, true)
|
133
|
-
end
|
134
|
-
self
|
135
|
-
end
|
136
|
-
|
137
|
-
|
138
|
-
# Configure this span to be a custom span per the
|
139
|
-
# SDK generic span type.
|
140
|
-
#
|
141
|
-
# Default to an intermediate kind span. Can be overridden by
|
142
|
-
# setting a span.kind tag.
|
143
|
-
#
|
144
|
-
# @param name [String] name of the span
|
145
|
-
# @param kvs [Hash] list of key values to be reported in the span
|
146
|
-
#
|
147
|
-
def configure_custom(name)
|
148
|
-
@data[:n] = :sdk
|
149
|
-
@data[:data] = { :sdk => { :name => name.to_sym } }
|
150
|
-
@data[:data][:sdk][:custom] = { :tags => {}, :logs => {} }
|
151
|
-
|
152
|
-
if @is_root
|
153
|
-
# For custom root spans (via SDK or opentracing), default to entry type
|
154
|
-
@data[:k] = 1
|
155
|
-
@data[:data][:sdk][:type] = :entry
|
156
|
-
else
|
157
|
-
@data[:k] = 3
|
158
|
-
@data[:data][:sdk][:type] = :intermediate
|
159
|
-
end
|
160
|
-
self
|
161
|
-
end
|
162
|
-
|
163
|
-
# Closes out the span. This difference between this and
|
164
|
-
# the finish method tells us how the tracing is being
|
165
|
-
# performed (with OpenTracing or Instana default)
|
166
|
-
#
|
167
|
-
# @param end_time [Time] custom end time, if not now
|
168
|
-
# @return [Span]
|
169
|
-
#
|
170
|
-
def close(end_time = ::Instana::Util.now_in_ms)
|
171
|
-
if end_time.is_a?(Time)
|
172
|
-
end_time = ::Instana::Util.time_to_ms(end_time)
|
173
|
-
end
|
174
|
-
|
175
|
-
@data[:d] = end_time - @data[:ts]
|
176
|
-
|
177
|
-
# Add this span to the queue for reporting
|
178
|
-
::Instana.processor.add_span(self)
|
179
|
-
|
180
|
-
self
|
181
|
-
end
|
182
|
-
|
183
|
-
#############################################################
|
184
|
-
# Accessors
|
185
|
-
#############################################################
|
186
|
-
|
187
|
-
# Retrieve the context of this span.
|
188
|
-
#
|
189
|
-
# @return [Instana::SpanContext]
|
190
|
-
#
|
191
|
-
def context
|
192
|
-
@context ||= ::Instana::SpanContext.new(@data[:t], @data[:s], @level, @baggage)
|
193
|
-
end
|
194
|
-
|
195
|
-
# Retrieve the ID for this span
|
196
|
-
#
|
197
|
-
# @return [Integer] the span ID
|
198
|
-
def id
|
199
|
-
@data[:s]
|
200
|
-
end
|
201
|
-
|
202
|
-
# Retrieve the Trace ID for this span
|
203
|
-
#
|
204
|
-
# @return [Integer] the Trace ID
|
205
|
-
def trace_id
|
206
|
-
@data[:t]
|
207
|
-
end
|
208
|
-
|
209
|
-
# Retrieve the parent ID of this span
|
210
|
-
#
|
211
|
-
# @return [Integer] parent span ID
|
212
|
-
def parent_id
|
213
|
-
@data[:p]
|
214
|
-
end
|
215
|
-
|
216
|
-
# Set the parent ID of this span
|
217
|
-
#
|
218
|
-
# @return [Integer] parent span ID
|
219
|
-
def parent_id=(id)
|
220
|
-
@data[:p] = id
|
221
|
-
end
|
222
|
-
|
223
|
-
# Get the name (operation) of this Span
|
224
|
-
#
|
225
|
-
# @return [String] or [Symbol] representing the span name
|
226
|
-
def name
|
227
|
-
if custom?
|
228
|
-
@data[:data][:sdk][:name]
|
229
|
-
else
|
230
|
-
@data[:n]
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
# Set the name (operation) for this Span
|
235
|
-
#
|
236
|
-
# @params name [String] or [Symbol]
|
237
|
-
#
|
238
|
-
def name=(n)
|
239
|
-
if custom?
|
240
|
-
@data[:data][:sdk][:name] = n
|
241
|
-
else
|
242
|
-
@data[:n] = n
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
# Get the duration value for this Span
|
247
|
-
#
|
248
|
-
# @return [Integer] the duration in milliseconds
|
249
|
-
def duration
|
250
|
-
@data[:d]
|
251
|
-
end
|
252
|
-
|
253
|
-
# Hash accessor to the internal @data hash
|
254
|
-
#
|
255
|
-
def [](key)
|
256
|
-
@data[key.to_sym]
|
257
|
-
end
|
258
|
-
|
259
|
-
# Hash setter to the internal @data hash
|
260
|
-
#
|
261
|
-
def []=(key, value)
|
262
|
-
@data[key.to_sym] = value
|
263
|
-
end
|
264
|
-
|
265
|
-
# Hash key query to the internal @data hash
|
266
|
-
#
|
267
|
-
def key?(k)
|
268
|
-
@data.key?(k.to_sym)
|
269
|
-
end
|
270
|
-
|
271
|
-
# Get the raw @data hash that summarizes this span
|
272
|
-
#
|
273
|
-
def raw
|
274
|
-
@data
|
275
|
-
end
|
276
|
-
|
277
|
-
# Indicates whether this span is a custom or registered Span
|
278
|
-
def custom?
|
279
|
-
@data[:n] == :sdk
|
280
|
-
end
|
281
|
-
|
282
|
-
def inspect
|
283
|
-
@data.inspect
|
284
|
-
end
|
285
|
-
|
286
|
-
# Check to see if the current span indicates an exit from application
|
287
|
-
# code and into an external service
|
288
|
-
def exit_span?
|
289
|
-
EXIT_SPANS.include?(@data[:n])
|
290
|
-
end
|
291
|
-
|
292
|
-
#############################################################
|
293
|
-
# OpenTracing Compatibility Methods
|
294
|
-
#############################################################
|
295
|
-
|
296
|
-
# Set the name of the operation
|
297
|
-
# Spec: OpenTracing API
|
298
|
-
#
|
299
|
-
# @params name [String] or [Symbol]
|
300
|
-
#
|
301
|
-
def operation_name=(name)
|
302
|
-
@data[:n] = name
|
303
|
-
end
|
304
|
-
|
305
|
-
# Set a tag value on this span
|
306
|
-
# Spec: OpenTracing API
|
307
|
-
#
|
308
|
-
# @param key [String] the key of the tag
|
309
|
-
# @param value [String, Numeric, Boolean] the value of the tag. If it's not
|
310
|
-
# a String, Numeric, or Boolean it will be encoded with to_s
|
311
|
-
#
|
312
|
-
def set_tag(key, value)
|
313
|
-
if ![Symbol, String].include?(key.class)
|
314
|
-
key = key.to_s
|
315
|
-
end
|
316
|
-
|
317
|
-
# If <value> is not a Symbol, String, Array, Hash or Numeric - convert to string
|
318
|
-
if ![Symbol, String, Array, TrueClass, FalseClass, Hash].include?(value.class) && !value.is_a?(Numeric)
|
319
|
-
value = value.to_s
|
320
|
-
end
|
321
|
-
|
322
|
-
if custom?
|
323
|
-
@data[:data][:sdk][:custom] ||= {}
|
324
|
-
@data[:data][:sdk][:custom][:tags] ||= {}
|
325
|
-
@data[:data][:sdk][:custom][:tags][key] = value
|
326
|
-
|
327
|
-
if key.to_sym == :'span.kind'
|
328
|
-
case value.to_sym
|
329
|
-
when :entry, :server, :consumer
|
330
|
-
@data[:data][:sdk][:type] = :entry
|
331
|
-
@data[:k] = 1
|
332
|
-
when :exit, :client, :producer
|
333
|
-
@data[:data][:sdk][:type] = :exit
|
334
|
-
@data[:k] = 2
|
335
|
-
else
|
336
|
-
@data[:data][:sdk][:type] = :intermediate
|
337
|
-
@data[:k] = 3
|
338
|
-
end
|
339
|
-
end
|
340
|
-
else
|
341
|
-
if value.is_a?(Hash) && @data[:data][key].is_a?(Hash)
|
342
|
-
@data[:data][key].merge!(value)
|
343
|
-
else
|
344
|
-
@data[:data][key] = value
|
345
|
-
end
|
346
|
-
end
|
347
|
-
self
|
348
|
-
end
|
349
|
-
|
350
|
-
# Helper method to add multiple tags to this span
|
351
|
-
#
|
352
|
-
# @params tags [Hash]
|
353
|
-
# @return [Span]
|
354
|
-
#
|
355
|
-
def set_tags(tags)
|
356
|
-
return unless tags.is_a?(Hash)
|
357
|
-
tags.each do |k,v|
|
358
|
-
set_tag(k, v)
|
359
|
-
end
|
360
|
-
self
|
361
|
-
end
|
362
|
-
|
363
|
-
# Set a baggage item on the span
|
364
|
-
# Spec: OpenTracing API
|
365
|
-
#
|
366
|
-
# @param key [String] the key of the baggage item
|
367
|
-
# @param value [String] the value of the baggage item
|
368
|
-
def set_baggage_item(key, value)
|
369
|
-
@baggage ||= {}
|
370
|
-
@baggage[key] = value
|
371
|
-
|
372
|
-
# Init/Update the SpanContext item
|
373
|
-
if @context
|
374
|
-
@context.baggage = @baggage
|
375
|
-
else
|
376
|
-
@context ||= ::Instana::SpanContext.new(@data[:t], @data[:s], @level, @baggage)
|
377
|
-
end
|
378
|
-
self
|
379
|
-
end
|
380
|
-
|
381
|
-
# Get a baggage item
|
382
|
-
# Spec: OpenTracing API
|
383
|
-
#
|
384
|
-
# @param key [String] the key of the baggage item
|
385
|
-
# @return Value of the baggage item
|
386
|
-
#
|
387
|
-
def get_baggage_item(key)
|
388
|
-
@baggage[key]
|
389
|
-
end
|
390
|
-
|
391
|
-
# Retrieve the hash of tags for this span
|
392
|
-
#
|
393
|
-
def tags(key = nil)
|
394
|
-
if custom?
|
395
|
-
tags = @data[:data][:sdk][:custom][:tags]
|
396
|
-
else
|
397
|
-
tags = @data[:data]
|
398
|
-
end
|
399
|
-
key ? tags[key] : tags
|
400
|
-
end
|
401
|
-
|
402
|
-
# Add a log entry to this span
|
403
|
-
# Spec: OpenTracing API
|
404
|
-
#
|
405
|
-
# @param event [String] event name for the log
|
406
|
-
# @param timestamp [Time] time of the log
|
407
|
-
# @param fields [Hash] Additional information to log
|
408
|
-
#
|
409
|
-
def log(event = nil, timestamp = Time.now, **fields)
|
410
|
-
ts = ::Instana::Util.time_to_ms(timestamp).to_s
|
411
|
-
if custom?
|
412
|
-
@data[:data][:sdk][:custom][:logs][ts] = fields
|
413
|
-
@data[:data][:sdk][:custom][:logs][ts][:event] = event
|
414
|
-
else
|
415
|
-
set_tags(:log => fields)
|
416
|
-
end
|
417
|
-
rescue StandardError => e
|
418
|
-
Instana.logger.debug { "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" }
|
419
|
-
end
|
420
|
-
|
421
|
-
# Finish the {Span}
|
422
|
-
# Spec: OpenTracing API
|
423
|
-
#
|
424
|
-
# @param end_time [Time] custom end time, if not now
|
425
|
-
#
|
426
|
-
def finish(end_time = ::Instana::Util.now_in_ms)
|
427
|
-
close(end_time)
|
428
|
-
self
|
429
|
-
end
|
430
|
-
end
|
431
|
-
end
|
data/lib/opentracing.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2017
|
3
|
-
|
4
|
-
require "instana/open_tracing/carrier"
|
5
|
-
require "instana/open_tracing/instana_tracer"
|
6
|
-
|
7
|
-
module OpenTracing
|
8
|
-
class << self
|
9
|
-
# Text format for #inject and #extract
|
10
|
-
FORMAT_TEXT_MAP = 1
|
11
|
-
|
12
|
-
# Binary format for #inject and #extract
|
13
|
-
FORMAT_BINARY = 2
|
14
|
-
|
15
|
-
# Ruby Specific format to handle how Rack changes environment variables.
|
16
|
-
FORMAT_RACK = 3
|
17
|
-
|
18
|
-
attr_accessor :global_tracer
|
19
|
-
|
20
|
-
def method_missing(method_name, *args, **kwargs, &block)
|
21
|
-
@global_tracer.send(method_name, *args, **kwargs, &block)
|
22
|
-
end
|
23
|
-
|
24
|
-
def respond_to_missing?(name, all)
|
25
|
-
@global_tracer.respond_to?(name, all)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Set the global tracer to our OT tracer
|
31
|
-
# which supports the OT specification
|
32
|
-
OpenTracing.global_tracer = OpenTracing::InstanaTracer.new(::Instana.tracer)
|