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
@@ -1,382 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2017
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
require 'rack/test'
|
6
|
-
|
7
|
-
if Rack.release >= '3.0.0'
|
8
|
-
require 'rackup/lobster'
|
9
|
-
else
|
10
|
-
require 'rack/lobster'
|
11
|
-
end
|
12
|
-
|
13
|
-
require "opentracing"
|
14
|
-
|
15
|
-
module Instana
|
16
|
-
class OTRack1
|
17
|
-
def initialize(app)
|
18
|
-
@app = app
|
19
|
-
end
|
20
|
-
|
21
|
-
def call(env)
|
22
|
-
otrack1_span = OpenTracing.start_span(:otrack1)
|
23
|
-
result = @app.call(env)
|
24
|
-
otrack1_span.finish
|
25
|
-
result
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class OTRack2
|
30
|
-
def initialize(app)
|
31
|
-
@app = app
|
32
|
-
end
|
33
|
-
|
34
|
-
def call(env)
|
35
|
-
otrack2_span = OpenTracing.start_span(:otrack2)
|
36
|
-
result = @app.call(env)
|
37
|
-
otrack2_span.finish
|
38
|
-
result
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class OpenTracerTest < Minitest::Test
|
44
|
-
include Rack::Test::Methods
|
45
|
-
|
46
|
-
def app
|
47
|
-
@app = Rack::Builder.new {
|
48
|
-
use Instana::Rack
|
49
|
-
use Instana::OTRack1
|
50
|
-
use Rack::CommonLogger
|
51
|
-
use Rack::ShowExceptions
|
52
|
-
use Instana::OTRack2
|
53
|
-
map "/mrlobster" do
|
54
|
-
if Rack.release >= '3.0.0'
|
55
|
-
run Rackup::Lobster.new
|
56
|
-
else
|
57
|
-
run Rack::Lobster.new
|
58
|
-
end
|
59
|
-
end
|
60
|
-
}
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_supplies_all_ot_interfaces
|
64
|
-
clear_all!
|
65
|
-
assert defined?(OpenTracing)
|
66
|
-
assert OpenTracing.respond_to?(:global_tracer)
|
67
|
-
assert OpenTracing.global_tracer.respond_to?(:start_span)
|
68
|
-
assert OpenTracing.global_tracer.respond_to?(:inject)
|
69
|
-
assert OpenTracing.global_tracer.respond_to?(:extract)
|
70
|
-
|
71
|
-
assert OpenTracing.respond_to?(:start_span)
|
72
|
-
|
73
|
-
assert defined?(OpenTracing::Carrier)
|
74
|
-
carrier = OpenTracing::Carrier.new
|
75
|
-
assert carrier.respond_to?(:[])
|
76
|
-
assert carrier.respond_to?(:[]=)
|
77
|
-
assert carrier.respond_to?(:each)
|
78
|
-
|
79
|
-
span = OpenTracing.start_span(:blah)
|
80
|
-
assert span.respond_to?(:finish)
|
81
|
-
assert span.respond_to?(:set_tag)
|
82
|
-
assert span.respond_to?(:tags)
|
83
|
-
assert span.respond_to?(:operation_name=)
|
84
|
-
assert span.respond_to?(:set_baggage_item)
|
85
|
-
assert span.respond_to?(:get_baggage_item)
|
86
|
-
assert span.respond_to?(:context)
|
87
|
-
assert span.respond_to?(:log)
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_basic_get_with_opentracing
|
91
|
-
clear_all!
|
92
|
-
get '/mrlobster'
|
93
|
-
assert last_response.ok?
|
94
|
-
|
95
|
-
spans = ::Instana.processor.queued_spans
|
96
|
-
assert_equal 3, spans.length
|
97
|
-
|
98
|
-
first_span = find_first_span_by_name(spans, :rack)
|
99
|
-
second_span = find_first_span_by_name(spans, :otrack1)
|
100
|
-
third_span = find_first_span_by_name(spans, :otrack2)
|
101
|
-
|
102
|
-
assert_equal :rack, first_span[:n]
|
103
|
-
assert first_span[:ts].is_a?(Integer)
|
104
|
-
assert first_span[:ts] > 0
|
105
|
-
assert first_span[:d].is_a?(Integer)
|
106
|
-
assert first_span[:d].between?(0, 5)
|
107
|
-
assert first_span.key?(:data)
|
108
|
-
assert first_span[:data].key?(:http)
|
109
|
-
assert_equal "GET", first_span[:data][:http][:method]
|
110
|
-
assert_equal "/mrlobster", first_span[:data][:http][:url]
|
111
|
-
assert_equal 200, first_span[:data][:http][:status]
|
112
|
-
assert_equal 'example.org', first_span[:data][:http][:host]
|
113
|
-
assert_equal :otrack1, second_span[:data][:sdk][:name]
|
114
|
-
assert second_span.key?(:data)
|
115
|
-
assert second_span[:data].key?(:sdk)
|
116
|
-
assert second_span[:data][:sdk].key?(:name)
|
117
|
-
assert_equal :otrack2, third_span[:data][:sdk][:name]
|
118
|
-
assert third_span.key?(:data)
|
119
|
-
assert third_span[:data].key?(:sdk)
|
120
|
-
assert third_span[:data][:sdk].key?(:name)
|
121
|
-
|
122
|
-
# ID Validation
|
123
|
-
refute_equal first_span[:t], second_span[:t]
|
124
|
-
refute_equal second_span[:t], third_span[:t]
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_get_with_inject_extract
|
128
|
-
clear_all!
|
129
|
-
|
130
|
-
trace_id = ::Instana::Util.generate_id
|
131
|
-
span_id = ::Instana::Util.generate_id
|
132
|
-
|
133
|
-
header 'X-Instana-T', ::Instana::Util.id_to_header(trace_id)
|
134
|
-
header 'X-Instana-S', ::Instana::Util.id_to_header(span_id)
|
135
|
-
|
136
|
-
get '/mrlobster'
|
137
|
-
assert last_response.ok?
|
138
|
-
|
139
|
-
spans = ::Instana.processor.queued_spans
|
140
|
-
|
141
|
-
assert_equal 3, spans.length
|
142
|
-
first_span = find_first_span_by_name(spans, :rack)
|
143
|
-
|
144
|
-
# Make sure context was picked up and continued in the resulting
|
145
|
-
# trace
|
146
|
-
assert_equal trace_id, first_span[:t]
|
147
|
-
assert_equal span_id, first_span[:p]
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_start_span_with_tags
|
151
|
-
clear_all!
|
152
|
-
span = OpenTracing.start_span('my_app_entry')
|
153
|
-
|
154
|
-
assert span.is_a?(::Instana::Span)
|
155
|
-
|
156
|
-
span.set_tag(:tag_integer, 1234)
|
157
|
-
span.set_tag(:tag_boolean, true)
|
158
|
-
span.set_tag(:tag_array, [1,2,3,4])
|
159
|
-
span.set_tag(:tag_string, "1234")
|
160
|
-
|
161
|
-
assert_equal 1234, span.tags(:tag_integer)
|
162
|
-
assert_equal true, span.tags(:tag_boolean)
|
163
|
-
assert_equal [1,2,3,4], span.tags(:tag_array)
|
164
|
-
assert_equal "1234", span.tags(:tag_string)
|
165
|
-
span.finish
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_start_span_with_custom_start_time
|
169
|
-
clear_all!
|
170
|
-
now = Time.now
|
171
|
-
now_in_ms = ::Instana::Util.time_to_ms(now)
|
172
|
-
|
173
|
-
span = OpenTracing.start_span('my_app_entry', :start_time => now)
|
174
|
-
|
175
|
-
assert span.is_a?(::Instana::Span)
|
176
|
-
|
177
|
-
span.set_tag(:tag_integer, 1234)
|
178
|
-
span.set_tag(:tag_boolean, true)
|
179
|
-
span.set_tag(:tag_array, [1,2,3,4])
|
180
|
-
span.set_tag(:tag_string, "1234")
|
181
|
-
|
182
|
-
assert_equal 1234, span.tags(:tag_integer)
|
183
|
-
assert_equal true, span.tags(:tag_boolean)
|
184
|
-
assert_equal [1,2,3,4], span.tags(:tag_array)
|
185
|
-
assert_equal "1234", span.tags(:tag_string)
|
186
|
-
span.finish
|
187
|
-
|
188
|
-
assert span[:ts].is_a?(Integer)
|
189
|
-
assert_equal now_in_ms, span[:ts]
|
190
|
-
assert span[:d].is_a?(Integer)
|
191
|
-
assert span[:d].between?(0, 5)
|
192
|
-
end
|
193
|
-
|
194
|
-
def test_span_kind_translation
|
195
|
-
clear_all!
|
196
|
-
span = OpenTracing.start_span('my_app_entry')
|
197
|
-
|
198
|
-
assert span.is_a?(::Instana::Span)
|
199
|
-
|
200
|
-
span.set_tag(:'span.kind', :server)
|
201
|
-
assert_equal :entry, span[:data][:sdk][:type]
|
202
|
-
assert_equal 1, span[:k]
|
203
|
-
|
204
|
-
span.set_tag(:'span.kind', :consumer)
|
205
|
-
assert_equal :entry, span[:data][:sdk][:type]
|
206
|
-
assert_equal 1, span[:k]
|
207
|
-
|
208
|
-
span.set_tag(:'span.kind', :client)
|
209
|
-
assert_equal :exit, span[:data][:sdk][:type]
|
210
|
-
assert_equal 2, span[:k]
|
211
|
-
|
212
|
-
span.set_tag(:'span.kind', :producer)
|
213
|
-
assert_equal :exit, span[:data][:sdk][:type]
|
214
|
-
assert_equal 2, span[:k]
|
215
|
-
|
216
|
-
span[:data][:sdk].delete(:type)
|
217
|
-
span.set_tag(:'span.kind', :blah)
|
218
|
-
assert_equal :intermediate, span[:data][:sdk][:type]
|
219
|
-
assert_equal 3, span[:k]
|
220
|
-
assert_equal :blah, span[:data][:sdk][:custom][:tags][:'span.kind']
|
221
|
-
|
222
|
-
span.finish
|
223
|
-
end
|
224
|
-
|
225
|
-
def test_start_span_with_baggage
|
226
|
-
clear_all!
|
227
|
-
span = OpenTracing.start_span('my_app_entry')
|
228
|
-
span.set_baggage_item(:baggage_integer, 1234)
|
229
|
-
span.set_baggage_item(:baggage_boolean, false)
|
230
|
-
span.set_baggage_item(:baggage_array, [1,2,3,4])
|
231
|
-
span.set_baggage_item(:baggage_string, '1234')
|
232
|
-
|
233
|
-
assert_equal 1234, span.get_baggage_item(:baggage_integer)
|
234
|
-
assert_equal false, span.get_baggage_item(:baggage_boolean)
|
235
|
-
assert_equal [1,2,3,4], span.get_baggage_item(:baggage_array)
|
236
|
-
assert_equal "1234", span.get_baggage_item(:baggage_string)
|
237
|
-
span.finish
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_start_span_with_timestamps
|
241
|
-
clear_all!
|
242
|
-
span_tags = {:start_tag => 1234, :another_tag => 'tag_value'}
|
243
|
-
|
244
|
-
ts_start = Time.now - 1 # Put start time a bit in the past
|
245
|
-
ts_start_ms = ::Instana::Util.time_to_ms(ts_start)
|
246
|
-
|
247
|
-
span = OpenTracing.start_span('my_app_entry', tags: span_tags, start_time: ts_start)
|
248
|
-
sleep 0.1
|
249
|
-
|
250
|
-
ts_finish = Time.now + 5 # Put end time in the future
|
251
|
-
ts_finish_ms = ::Instana::Util.time_to_ms(ts_finish)
|
252
|
-
|
253
|
-
span.finish(ts_finish)
|
254
|
-
|
255
|
-
assert_equal ts_start_ms, span[:ts]
|
256
|
-
assert_equal (ts_finish_ms - ts_start_ms), span[:d]
|
257
|
-
|
258
|
-
assert_equal 1234, span[:data][:sdk][:custom][:tags][:start_tag]
|
259
|
-
assert_equal 'tag_value', span[:data][:sdk][:custom][:tags][:another_tag]
|
260
|
-
end
|
261
|
-
|
262
|
-
def test_nested_spans_using_child_of
|
263
|
-
clear_all!
|
264
|
-
entry_span = OpenTracing.start_span(:rack)
|
265
|
-
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
266
|
-
av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
|
267
|
-
sleep 0.1
|
268
|
-
av_span.finish
|
269
|
-
ac_span.finish
|
270
|
-
entry_span.finish
|
271
|
-
|
272
|
-
spans = ::Instana.processor.queued_spans
|
273
|
-
assert_equal 3, spans.length
|
274
|
-
|
275
|
-
first_span = find_first_span_by_name(spans, :rack)
|
276
|
-
second_span = find_first_span_by_name(spans, :action_controller)
|
277
|
-
third_span = find_first_span_by_name(spans, :action_view)
|
278
|
-
|
279
|
-
# IDs
|
280
|
-
assert_equal first_span[:t], second_span[:t]
|
281
|
-
assert_equal second_span[:t], third_span[:t]
|
282
|
-
|
283
|
-
# Linkage
|
284
|
-
assert first_span[:p].nil?
|
285
|
-
assert_equal first_span[:s], second_span[:p]
|
286
|
-
assert_equal second_span[:s], third_span[:p]
|
287
|
-
end
|
288
|
-
|
289
|
-
def test_nested_spans_with_baggage
|
290
|
-
clear_all!
|
291
|
-
entry_span = OpenTracing.start_span(:rack)
|
292
|
-
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
293
|
-
ac_span.set_baggage_item(:my_bag, 1)
|
294
|
-
av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
|
295
|
-
sleep 0.1
|
296
|
-
av_span.finish
|
297
|
-
ac_span.finish
|
298
|
-
entry_span.finish
|
299
|
-
|
300
|
-
spans = ::Instana.processor.queued_spans
|
301
|
-
assert_equal 3, spans.length
|
302
|
-
|
303
|
-
first_span = find_first_span_by_name(spans, :rack)
|
304
|
-
second_span = find_first_span_by_name(spans, :action_controller)
|
305
|
-
third_span = find_first_span_by_name(spans, :action_view)
|
306
|
-
|
307
|
-
# IDs
|
308
|
-
assert_equal first_span[:t], second_span[:t]
|
309
|
-
assert_equal second_span[:t], third_span[:t]
|
310
|
-
|
311
|
-
# Linkage
|
312
|
-
assert first_span[:p].nil?
|
313
|
-
assert_equal first_span[:s], second_span[:p]
|
314
|
-
assert_equal second_span[:s], third_span[:p]
|
315
|
-
|
316
|
-
# Every span should have baggage
|
317
|
-
assert_equal({}, entry_span.context.baggage)
|
318
|
-
assert_equal({:my_bag=>1}, ac_span.context.baggage)
|
319
|
-
assert_equal({:my_bag=>1}, av_span.context.baggage)
|
320
|
-
end
|
321
|
-
|
322
|
-
def test_context_should_carry_baggage
|
323
|
-
clear_all!
|
324
|
-
|
325
|
-
entry_span = OpenTracing.start_span(:rack)
|
326
|
-
entry_span_context = entry_span.context
|
327
|
-
|
328
|
-
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
329
|
-
ac_span.set_baggage_item(:my_bag, 1)
|
330
|
-
ac_span_context = ac_span.context
|
331
|
-
|
332
|
-
av_span = OpenTracing.start_span(:action_view, child_of: entry_span)
|
333
|
-
av_span_context = av_span.context
|
334
|
-
|
335
|
-
sleep 0.1
|
336
|
-
|
337
|
-
av_span.finish
|
338
|
-
ac_span.finish
|
339
|
-
entry_span.finish
|
340
|
-
|
341
|
-
spans = ::Instana.processor.queued_spans
|
342
|
-
assert_equal 3, spans.length
|
343
|
-
|
344
|
-
assert_equal({}, entry_span.context.baggage)
|
345
|
-
assert_equal({:my_bag=>1}, ac_span.context.baggage)
|
346
|
-
assert_equal({}, av_span.context.baggage)
|
347
|
-
end
|
348
|
-
|
349
|
-
def test_start_active_span
|
350
|
-
clear_all!
|
351
|
-
|
352
|
-
span = OpenTracing.start_active_span(:rack)
|
353
|
-
assert_equal ::Instana::Tracer.current_span, span
|
354
|
-
|
355
|
-
sleep 0.1
|
356
|
-
|
357
|
-
span.finish
|
358
|
-
|
359
|
-
spans = ::Instana.processor.queued_spans
|
360
|
-
assert_equal 1, spans.length
|
361
|
-
end
|
362
|
-
|
363
|
-
def test_active_span
|
364
|
-
clear_all!
|
365
|
-
|
366
|
-
span = OpenTracing.start_active_span(:rack)
|
367
|
-
assert_equal OpenTracing.active_span, span
|
368
|
-
end
|
369
|
-
|
370
|
-
def test_active_span_block
|
371
|
-
clear_all!
|
372
|
-
|
373
|
-
obj = OpenTracing.start_active_span(:rack) { 1 }
|
374
|
-
assert_equal 1, obj
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_span_rename
|
378
|
-
span = OpenTracing.start_active_span(:rack)
|
379
|
-
span.operation_name = 'test'
|
380
|
-
assert_equal 'test', span.name
|
381
|
-
end
|
382
|
-
end
|