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
@@ -15,7 +15,7 @@ class TracerTest < Minitest::Test
|
|
15
15
|
::Instana.config[:tracing][:enabled] = false
|
16
16
|
assert_equal false, ::Instana.tracer.tracing?
|
17
17
|
|
18
|
-
::Instana.tracer.
|
18
|
+
::Instana.tracer.in_span(:rack, attributes: {:one => 1}) do
|
19
19
|
assert_equal false, ::Instana.tracer.tracing?
|
20
20
|
end
|
21
21
|
|
@@ -27,7 +27,7 @@ class TracerTest < Minitest::Test
|
|
27
27
|
|
28
28
|
assert_equal false, ::Instana.tracer.tracing?
|
29
29
|
|
30
|
-
::Instana.tracer.
|
30
|
+
::Instana.tracer.in_span(:rack, attributes: {:one => 1}) do
|
31
31
|
assert_equal true, ::Instana.tracer.tracing?
|
32
32
|
sleep 0.1
|
33
33
|
end
|
@@ -53,7 +53,7 @@ class TracerTest < Minitest::Test
|
|
53
53
|
|
54
54
|
ipv4 = '111.111.111.111'
|
55
55
|
|
56
|
-
::Instana.tracer.
|
56
|
+
::Instana.tracer.in_span(:rack, attributes: {:ipaddr => ipv4}) do
|
57
57
|
assert_equal true, ::Instana.tracer.tracing?
|
58
58
|
sleep 0.1
|
59
59
|
end
|
@@ -77,10 +77,10 @@ class TracerTest < Minitest::Test
|
|
77
77
|
clear_all!
|
78
78
|
exception_raised = false
|
79
79
|
begin
|
80
|
-
::Instana.tracer.
|
81
|
-
raise
|
80
|
+
::Instana.tracer.in_span(:rack, attributes: {:one => 1}) do
|
81
|
+
raise StandardError, 'Error in block - this should continue to propogate outside of tracing'
|
82
82
|
end
|
83
|
-
rescue
|
83
|
+
rescue StandardError
|
84
84
|
exception_raised = true
|
85
85
|
end
|
86
86
|
|
@@ -92,7 +92,7 @@ class TracerTest < Minitest::Test
|
|
92
92
|
first_span = spans.first
|
93
93
|
assert_equal :rack, first_span[:n]
|
94
94
|
assert first_span[:ts].is_a?(Integer)
|
95
|
-
assert first_span[:ts]
|
95
|
+
assert first_span[:ts].positive?
|
96
96
|
assert first_span[:d].is_a?(Integer)
|
97
97
|
assert first_span[:d].between?(0, 5)
|
98
98
|
assert first_span.key?(:data)
|
@@ -105,9 +105,9 @@ class TracerTest < Minitest::Test
|
|
105
105
|
|
106
106
|
def test_complex_trace_block
|
107
107
|
clear_all!
|
108
|
-
::Instana.tracer.
|
108
|
+
::Instana.tracer.in_span(:rack, attributes: {:one => 1}) do
|
109
109
|
sleep 0.2
|
110
|
-
::Instana.tracer.
|
110
|
+
::Instana.tracer.in_span(:sub_block, attributes: {:sub_two => 2}) do
|
111
111
|
sleep 0.2
|
112
112
|
end
|
113
113
|
end
|
@@ -132,9 +132,9 @@ class TracerTest < Minitest::Test
|
|
132
132
|
|
133
133
|
def test_custom_complex_trace_block
|
134
134
|
clear_all!
|
135
|
-
::Instana.tracer.
|
135
|
+
::Instana.tracer.in_span(:root_span, attributes: {:one => 1}) do
|
136
136
|
sleep 0.2
|
137
|
-
::Instana.tracer.
|
137
|
+
::Instana.tracer.in_span(:sub_span, attributes: {:sub_two => 2}) do
|
138
138
|
sleep 0.2
|
139
139
|
end
|
140
140
|
end
|
@@ -167,11 +167,12 @@ class TracerTest < Minitest::Test
|
|
167
167
|
|
168
168
|
assert_equal false, ::Instana.tracer.tracing?
|
169
169
|
# Start tracing
|
170
|
-
::Instana.tracer.
|
170
|
+
span = ::Instana.tracer.start_span(:rack, attributes: {:one => 1})
|
171
171
|
assert_equal true, ::Instana.tracer.tracing?
|
172
|
-
|
172
|
+
span.set_tags({:info_logged => 1})
|
173
173
|
# End tracing
|
174
|
-
|
174
|
+
span.set_tags({:close_one => 1})
|
175
|
+
span.finish
|
175
176
|
assert_equal false, ::Instana.tracer.tracing?
|
176
177
|
|
177
178
|
spans = ::Instana.processor.queued_spans
|
@@ -184,20 +185,25 @@ class TracerTest < Minitest::Test
|
|
184
185
|
assert_equal false, ::Instana.tracer.tracing?
|
185
186
|
|
186
187
|
# Start tracing
|
187
|
-
::Instana.tracer.
|
188
|
+
span = ::Instana.tracer.start_span(:rack, attributes: {:one => 1})
|
188
189
|
assert_equal true, ::Instana.tracer.tracing?
|
189
|
-
|
190
|
+
span.set_tags({:info_logged => 1})
|
190
191
|
|
191
|
-
# Start tracing a sub span
|
192
|
-
::Instana.
|
192
|
+
# Start tracing a sub span with context propagation
|
193
|
+
span1 = ::Instana::Trace.with_span(span) do
|
194
|
+
::Instana.tracer.start_span(:sub_task)
|
195
|
+
end
|
193
196
|
assert_equal true, ::Instana.tracer.tracing?
|
194
|
-
|
197
|
+
span1.set_tags({:sub_task_info => 1})
|
195
198
|
# Exit from the sub span
|
196
|
-
|
199
|
+
span1.set_tags({:sub_task_exit_info => 1})
|
200
|
+
|
201
|
+
span1.finish
|
197
202
|
assert_equal true, ::Instana.tracer.tracing?
|
198
203
|
|
199
204
|
# End tracing
|
200
|
-
|
205
|
+
span.set_tags({:close_one => 1})
|
206
|
+
span.finish
|
201
207
|
assert_equal false, ::Instana.tracer.tracing?
|
202
208
|
|
203
209
|
spans = ::Instana.processor.queued_spans
|
@@ -227,12 +233,12 @@ class TracerTest < Minitest::Test
|
|
227
233
|
clear_all!
|
228
234
|
exception_raised = false
|
229
235
|
begin
|
230
|
-
::Instana.tracer.
|
231
|
-
::Instana.tracer.
|
232
|
-
raise
|
236
|
+
::Instana.tracer.in_span(:test_trace, attributes: {:one => 1}) do
|
237
|
+
::Instana.tracer.in_span(:test_trace_two) do
|
238
|
+
raise StandardError, "Block exception test error"
|
233
239
|
end
|
234
240
|
end
|
235
|
-
rescue
|
241
|
+
rescue StandardError
|
236
242
|
exception_raised = true
|
237
243
|
end
|
238
244
|
|
@@ -255,10 +261,14 @@ class TracerTest < Minitest::Test
|
|
255
261
|
|
256
262
|
def test_low_level_error_logging
|
257
263
|
clear_all!
|
258
|
-
::Instana.tracer.
|
259
|
-
|
260
|
-
|
261
|
-
|
264
|
+
span = ::Instana.tracer.start_span(:test_trace, attributes: {:one => 1})
|
265
|
+
span.set_tags({:info_logged => 1})
|
266
|
+
span.record_exception(Exception.new("Low level tracing api error"))
|
267
|
+
span.set_tags({:close_one => 1})
|
268
|
+
span.finish
|
269
|
+
# ::Instana.tracer.log_info({:info_logged => 1})
|
270
|
+
# ::Instana.tracer.log_error(Exception.new("Low level tracing api error"))
|
271
|
+
# ::Instana.tracer.log_end(:test_trace, {:close_one => 1})
|
262
272
|
|
263
273
|
spans = ::Instana.processor.queued_spans
|
264
274
|
assert_equal 1, spans.length
|
@@ -294,16 +304,17 @@ class TracerTest < Minitest::Test
|
|
294
304
|
clear_all!
|
295
305
|
|
296
306
|
refute ::Instana.tracer.tracing_span?(:rack)
|
297
|
-
::Instana.tracer.
|
307
|
+
::Instana.tracer.start_span(:rack)
|
298
308
|
assert ::Instana.tracer.tracing_span?(:rack)
|
299
309
|
end
|
300
310
|
|
301
311
|
def test_log_exit_warn_span_name
|
302
312
|
logger = Minitest::Mock.new
|
303
313
|
logger.expect(:warn, true, [String])
|
304
|
-
subject = Instana::Tracer.new(logger: logger)
|
305
314
|
|
306
|
-
subject.
|
315
|
+
subject = Instana::Tracer.new(nil, nil, ::Instana::Trace::TracerProvider.new, logger)
|
316
|
+
|
317
|
+
subject.start_span(:sample)
|
307
318
|
subject.log_exit(:roda)
|
308
319
|
|
309
320
|
logger.verify
|
@@ -314,9 +325,9 @@ class TracerTest < Minitest::Test
|
|
314
325
|
|
315
326
|
logger = Minitest::Mock.new
|
316
327
|
logger.expect(:warn, true, [String])
|
317
|
-
subject = Instana::Tracer.new(
|
328
|
+
subject = Instana::Tracer.new(nil, nil, ::Instana::Trace::TracerProvider.new, logger)
|
318
329
|
|
319
|
-
subject.
|
330
|
+
subject.start_span(:sample)
|
320
331
|
subject.log_end(:roda)
|
321
332
|
|
322
333
|
logger.verify
|
@@ -325,7 +336,7 @@ class TracerTest < Minitest::Test
|
|
325
336
|
def test_log_entry_span
|
326
337
|
clear_all!
|
327
338
|
|
328
|
-
subject = Instana::Tracer.new
|
339
|
+
subject = Instana::Tracer.new(nil, nil, ::Instana::Trace::TracerProvider.new)
|
329
340
|
span = Instana::Span.new(:rack)
|
330
341
|
|
331
342
|
subject.log_entry(:sample, {}, ::Instana::Util.now_in_ms, span)
|
@@ -336,8 +347,8 @@ class TracerTest < Minitest::Test
|
|
336
347
|
def test_log_entry_span_context
|
337
348
|
clear_all!
|
338
349
|
|
339
|
-
subject = Instana::Tracer.new
|
340
|
-
span_context = Instana::SpanContext.new('test', 'test')
|
350
|
+
subject = Instana::Tracer.new(nil, nil, nil)
|
351
|
+
span_context = Instana::SpanContext.new(trace_id: 'test', span_id: 'test')
|
341
352
|
|
342
353
|
subject.log_entry(:sample, {}, ::Instana::Util.now_in_ms, span_context)
|
343
354
|
assert subject.tracing?
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: instana
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Giacomo Lombardo
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bundler
|
@@ -80,6 +79,34 @@ dependencies:
|
|
80
79
|
- - ">="
|
81
80
|
- !ruby/object:Gem::Version
|
82
81
|
version: '0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: irb
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: benchmark
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
83
110
|
- !ruby/object:Gem::Dependency
|
84
111
|
name: base64
|
85
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +121,20 @@ dependencies:
|
|
94
121
|
- - ">="
|
95
122
|
- !ruby/object:Gem::Version
|
96
123
|
version: '0.1'
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: logger
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
type: :runtime
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
97
138
|
- !ruby/object:Gem::Dependency
|
98
139
|
name: concurrent-ruby
|
99
140
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +177,34 @@ dependencies:
|
|
136
177
|
- - ">="
|
137
178
|
- !ruby/object:Gem::Version
|
138
179
|
version: 1.2.2
|
180
|
+
- !ruby/object:Gem::Dependency
|
181
|
+
name: opentelemetry-api
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '1.4'
|
187
|
+
type: :runtime
|
188
|
+
prerelease: false
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - "~>"
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '1.4'
|
194
|
+
- !ruby/object:Gem::Dependency
|
195
|
+
name: opentelemetry-common
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0'
|
201
|
+
type: :runtime
|
202
|
+
prerelease: false
|
203
|
+
version_requirements: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
139
208
|
- !ruby/object:Gem::Dependency
|
140
209
|
name: oj
|
141
210
|
requirement: !ruby/object:Gem::Requirement
|
@@ -182,6 +251,8 @@ files:
|
|
182
251
|
- ".tekton/github-webhook-ingress.yaml"
|
183
252
|
- ".tekton/pipeline.yaml"
|
184
253
|
- ".tekton/pipelinerun.yaml"
|
254
|
+
- ".tekton/prepuller-restart-service-account.yaml"
|
255
|
+
- ".tekton/ruby-tracer-prepuller-cronjob.yaml"
|
185
256
|
- ".tekton/ruby-tracer-prepuller.yaml"
|
186
257
|
- ".tekton/run_unittests.sh"
|
187
258
|
- ".tekton/scheduled-eventlistener.yaml"
|
@@ -199,7 +270,7 @@ files:
|
|
199
270
|
- bin/setup
|
200
271
|
- docker-compose.yml
|
201
272
|
- download.sh
|
202
|
-
- examples/
|
273
|
+
- examples/otel.rb
|
203
274
|
- examples/tracing.rb
|
204
275
|
- extras/license_header.rb
|
205
276
|
- gemfiles/.bundle/config
|
@@ -334,9 +405,9 @@ files:
|
|
334
405
|
- lib/instana/instrumentation/sidekiq-worker.rb
|
335
406
|
- lib/instana/instrumented_logger.rb
|
336
407
|
- lib/instana/logger_delegator.rb
|
337
|
-
- lib/instana/open_tracing/carrier.rb
|
338
|
-
- lib/instana/open_tracing/instana_tracer.rb
|
339
408
|
- lib/instana/rack.rb
|
409
|
+
- lib/instana/samplers/result.rb
|
410
|
+
- lib/instana/samplers/samplers.rb
|
340
411
|
- lib/instana/secrets.rb
|
341
412
|
- lib/instana/serverless.rb
|
342
413
|
- lib/instana/setup.rb
|
@@ -349,13 +420,17 @@ files:
|
|
349
420
|
- lib/instana/snapshot/google_cloud_run_process.rb
|
350
421
|
- lib/instana/snapshot/lambda_function.rb
|
351
422
|
- lib/instana/snapshot/ruby_process.rb
|
352
|
-
- lib/instana/
|
353
|
-
- lib/instana/
|
354
|
-
- lib/instana/
|
355
|
-
- lib/instana/
|
423
|
+
- lib/instana/trace.rb
|
424
|
+
- lib/instana/trace/export.rb
|
425
|
+
- lib/instana/trace/processor.rb
|
426
|
+
- lib/instana/trace/span.rb
|
427
|
+
- lib/instana/trace/span_context.rb
|
428
|
+
- lib/instana/trace/span_kind.rb
|
429
|
+
- lib/instana/trace/span_limits.rb
|
430
|
+
- lib/instana/trace/tracer.rb
|
431
|
+
- lib/instana/trace/tracer_provider.rb
|
356
432
|
- lib/instana/util.rb
|
357
433
|
- lib/instana/version.rb
|
358
|
-
- lib/opentracing.rb
|
359
434
|
- log/.keep
|
360
435
|
- sonar-project.properties
|
361
436
|
- test/activator_test.rb
|
@@ -426,15 +501,15 @@ files:
|
|
426
501
|
- test/support/helpers.rb
|
427
502
|
- test/support/mock_timer.rb
|
428
503
|
- test/test_helper.rb
|
429
|
-
- test/
|
430
|
-
- test/
|
431
|
-
- test/
|
432
|
-
- test/
|
433
|
-
- test/
|
434
|
-
- test/
|
435
|
-
- test/
|
436
|
-
- test/
|
437
|
-
- test/
|
504
|
+
- test/trace/custom_test.rb
|
505
|
+
- test/trace/id_management_test.rb
|
506
|
+
- test/trace/instrumented_logger_test.rb
|
507
|
+
- test/trace/processor_test.rb
|
508
|
+
- test/trace/span_context_test.rb
|
509
|
+
- test/trace/span_test.rb
|
510
|
+
- test/trace/tracer_async_test.rb
|
511
|
+
- test/trace/tracer_provider_test.rb
|
512
|
+
- test/trace/tracer_test.rb
|
438
513
|
- test/util_test.rb
|
439
514
|
homepage: https://www.instana.com/
|
440
515
|
licenses:
|
@@ -444,7 +519,6 @@ metadata:
|
|
444
519
|
documentation_uri: https://docs.instana.io/ecosystem/ruby/
|
445
520
|
homepage_uri: https://www.instana.com/
|
446
521
|
source_code_uri: https://github.com/instana/ruby-sensor
|
447
|
-
post_install_message:
|
448
522
|
rdoc_options: []
|
449
523
|
require_paths:
|
450
524
|
- lib
|
@@ -459,8 +533,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
459
533
|
- !ruby/object:Gem::Version
|
460
534
|
version: '0'
|
461
535
|
requirements: []
|
462
|
-
rubygems_version: 3.
|
463
|
-
signing_key:
|
536
|
+
rubygems_version: 3.7.1
|
464
537
|
specification_version: 4
|
465
538
|
summary: Ruby Distributed Tracing & Metrics Sensor for Instana
|
466
539
|
test_files:
|
@@ -532,13 +605,13 @@ test_files:
|
|
532
605
|
- test/support/helpers.rb
|
533
606
|
- test/support/mock_timer.rb
|
534
607
|
- test/test_helper.rb
|
535
|
-
- test/
|
536
|
-
- test/
|
537
|
-
- test/
|
538
|
-
- test/
|
539
|
-
- test/
|
540
|
-
- test/
|
541
|
-
- test/
|
542
|
-
- test/
|
543
|
-
- test/
|
608
|
+
- test/trace/custom_test.rb
|
609
|
+
- test/trace/id_management_test.rb
|
610
|
+
- test/trace/instrumented_logger_test.rb
|
611
|
+
- test/trace/processor_test.rb
|
612
|
+
- test/trace/span_context_test.rb
|
613
|
+
- test/trace/span_test.rb
|
614
|
+
- test/trace/tracer_async_test.rb
|
615
|
+
- test/trace/tracer_provider_test.rb
|
616
|
+
- test/trace/tracer_test.rb
|
544
617
|
- test/util_test.rb
|
data/examples/opentracing.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# This file contains a basic OpenTracing example.
|
2
|
-
#
|
3
|
-
# Note: The instana gem automatically sets the Instana tracer
|
4
|
-
# to `OpenTracing.global_tracer`. Once the gem is loaded, you can
|
5
|
-
# immediately start making OpenTracing calls.
|
6
|
-
#
|
7
|
-
|
8
|
-
# (c) Copyright IBM Corp. 2021
|
9
|
-
# (c) Copyright Instana Inc. 2018
|
10
|
-
|
11
|
-
require "opentracing"
|
12
|
-
|
13
|
-
entry_span = OpenTracing.start_span("HandMadeRackServer")
|
14
|
-
|
15
|
-
entry_span.set_tag(:'http.method', :get)
|
16
|
-
entry_span.set_tag(:'http.url', "/users")
|
17
|
-
entry_span.set_tag(:'span.kind', "entry")
|
18
|
-
|
19
|
-
intermediate_span = OpenTracing.start_span("myintermediate", :child_of => entry_span)
|
20
|
-
intermediate_span.finish()
|
21
|
-
|
22
|
-
db_span = OpenTracing.start_span('mydbspan', :child_of => entry_span)
|
23
|
-
db_span.set_tag(:'db.instance', "users")
|
24
|
-
db_span.set_tag(:'db.statement', "SELECT * FROM user_table")
|
25
|
-
db_span.set_tag(:'db.type', "mysql")
|
26
|
-
db_span.set_tag(:'db.user', "mysql_login")
|
27
|
-
db_span.set_tag(:'span.kind', "exit")
|
28
|
-
db_span.finish()
|
29
|
-
|
30
|
-
intermediate_span = OpenTracing.start_span("myintermediate", :child_of => entry_span)
|
31
|
-
intermediate_span.log("ALLOK", :message => "All seems ok")
|
32
|
-
intermediate_span.finish()
|
33
|
-
|
34
|
-
entry_span.set_tag(:'http.status_code', 200)
|
35
|
-
entry_span.finish()
|
@@ -1,99 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2021
|
3
|
-
|
4
|
-
require 'delegate'
|
5
|
-
# :nocov:
|
6
|
-
module OpenTracing
|
7
|
-
class InstanaTracer < SimpleDelegator
|
8
|
-
Span = ::Instana::Span
|
9
|
-
|
10
|
-
# Start a new span
|
11
|
-
#
|
12
|
-
# @param operation_name [String] The name of the operation represented by the span
|
13
|
-
# @param child_of [Span] A span to be used as the ChildOf reference
|
14
|
-
# @param start_time [Time] the start time of the span
|
15
|
-
# @param tags [Hash] Starting tags for the span
|
16
|
-
#
|
17
|
-
# @return [Span]
|
18
|
-
#
|
19
|
-
def start_span(operation_name, child_of: nil, start_time: ::Instana::Util.now_in_ms, tags: nil)
|
20
|
-
new_span = if child_of && (child_of.is_a?(::Instana::Span) || child_of.is_a?(::Instana::SpanContext))
|
21
|
-
Span.new(operation_name, parent_ctx: child_of, start_time: start_time)
|
22
|
-
else
|
23
|
-
Span.new(operation_name, start_time: start_time)
|
24
|
-
end
|
25
|
-
new_span.set_tags(tags) if tags
|
26
|
-
new_span
|
27
|
-
end
|
28
|
-
|
29
|
-
# Start a new span which is the child of the current span
|
30
|
-
#
|
31
|
-
# @param operation_name [String] The name of the operation represented by the span
|
32
|
-
# @param child_of [Span] A span to be used as the ChildOf reference
|
33
|
-
# @param start_time [Time] the start time of the span
|
34
|
-
# @param tags [Hash] Starting tags for the span
|
35
|
-
#
|
36
|
-
# @return [Span]
|
37
|
-
#
|
38
|
-
def start_active_span(operation_name, child_of: active_span, start_time: ::Instana::Util.now_in_ms, tags: nil)
|
39
|
-
::Instana.tracer.current_span = start_span(operation_name, child_of: child_of, start_time: start_time, tags: tags)
|
40
|
-
block_given? ? yield(::Instana.tracer.current_span) : ::Instana.tracer.current_span
|
41
|
-
end
|
42
|
-
|
43
|
-
# Returns the currently active span
|
44
|
-
#
|
45
|
-
# @return [Span]
|
46
|
-
#
|
47
|
-
def active_span
|
48
|
-
::Instana.tracer.current_span
|
49
|
-
end
|
50
|
-
|
51
|
-
# Inject a span into the given carrier
|
52
|
-
#
|
53
|
-
# @param span_context [SpanContext]
|
54
|
-
# @param format [OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY, OpenTracing::FORMAT_RACK]
|
55
|
-
# @param carrier [Carrier]
|
56
|
-
#
|
57
|
-
def inject(span_context, format, carrier)
|
58
|
-
case format
|
59
|
-
when OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY
|
60
|
-
::Instana.logger.debug 'Unsupported inject format'
|
61
|
-
when OpenTracing::FORMAT_RACK
|
62
|
-
carrier['X-Instana-T'] = ::Instana::Util.id_to_header(span_context.trace_id)
|
63
|
-
carrier['X-Instana-S'] = ::Instana::Util.id_to_header(span_context.span_id)
|
64
|
-
else
|
65
|
-
::Instana.logger.debug 'Unknown inject format'
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Extract a span from a carrier
|
70
|
-
#
|
71
|
-
# @param format [OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY, OpenTracing::FORMAT_RACK]
|
72
|
-
# @param carrier [Carrier]
|
73
|
-
#
|
74
|
-
# @return [SpanContext]
|
75
|
-
#
|
76
|
-
def extract(format, carrier)
|
77
|
-
case format
|
78
|
-
when OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY
|
79
|
-
::Instana.logger.debug 'Unsupported extract format'
|
80
|
-
when OpenTracing::FORMAT_RACK
|
81
|
-
::Instana::SpanContext.new(::Instana::Util.header_to_id(carrier['HTTP_X_INSTANA_T']),
|
82
|
-
::Instana::Util.header_to_id(carrier['HTTP_X_INSTANA_S']))
|
83
|
-
else
|
84
|
-
::Instana.logger.debug 'Unknown inject format'
|
85
|
-
nil
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def method_missing(method, *args, &block)
|
90
|
-
::Instana.logger.warn { "You are invoking `#{m}` on Instana::Tracer via OpenTracing." }
|
91
|
-
super(method, *args, &block)
|
92
|
-
end
|
93
|
-
|
94
|
-
def respond_to_missing?(*)
|
95
|
-
super(method)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
# :nocov:
|