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.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +101 -225
  3. data/.tekton/.currency/scripts/generate_report.py +194 -22
  4. data/.tekton/pipeline.yaml +65 -152
  5. data/.tekton/prepuller-restart-service-account.yaml +31 -0
  6. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +20 -0
  7. data/.tekton/ruby-tracer-prepuller.yaml +27 -26
  8. data/.tekton/task.yaml +31 -27
  9. data/Gemfile +5 -0
  10. data/README.md +2 -1
  11. data/Rakefile +1 -1
  12. data/examples/otel.rb +98 -0
  13. data/examples/tracing.rb +1 -0
  14. data/gemfiles/rails_61.gemfile +1 -0
  15. data/gemfiles/rails_70.gemfile +1 -0
  16. data/instana.gemspec +5 -0
  17. data/lib/instana/base.rb +4 -2
  18. data/lib/instana/instrumentation/action_cable.rb +8 -4
  19. data/lib/instana/instrumentation/action_controller.rb +2 -4
  20. data/lib/instana/instrumentation/action_mailer.rb +1 -1
  21. data/lib/instana/instrumentation/action_view.rb +4 -4
  22. data/lib/instana/instrumentation/active_job.rb +26 -13
  23. data/lib/instana/instrumentation/active_record.rb +1 -1
  24. data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +1 -1
  25. data/lib/instana/instrumentation/aws_sdk_lambda.rb +1 -1
  26. data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
  27. data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
  28. data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
  29. data/lib/instana/instrumentation/dalli.rb +1 -1
  30. data/lib/instana/instrumentation/excon.rb +2 -2
  31. data/lib/instana/instrumentation/graphql.rb +3 -3
  32. data/lib/instana/instrumentation/grpc.rb +14 -13
  33. data/lib/instana/instrumentation/mongo.rb +3 -3
  34. data/lib/instana/instrumentation/net-http.rb +5 -4
  35. data/lib/instana/instrumentation/rack.rb +36 -4
  36. data/lib/instana/instrumentation/redis.rb +1 -1
  37. data/lib/instana/instrumentation/resque.rb +10 -8
  38. data/lib/instana/instrumentation/rest-client.rb +4 -4
  39. data/lib/instana/instrumentation/sequel.rb +3 -3
  40. data/lib/instana/instrumentation/shoryuken.rb +4 -1
  41. data/lib/instana/instrumentation/sidekiq-client.rb +21 -19
  42. data/lib/instana/instrumentation/sidekiq-worker.rb +22 -21
  43. data/lib/instana/instrumented_logger.rb +1 -1
  44. data/lib/instana/samplers/result.rb +32 -0
  45. data/lib/instana/samplers/samplers.rb +76 -0
  46. data/lib/instana/serverless.rb +4 -2
  47. data/lib/instana/setup.rb +4 -5
  48. data/lib/instana/trace/export.rb +36 -0
  49. data/lib/instana/{tracing → trace}/processor.rb +19 -15
  50. data/lib/instana/trace/span.rb +532 -0
  51. data/lib/instana/{tracing → trace}/span_context.rb +17 -8
  52. data/lib/instana/trace/span_kind.rb +51 -0
  53. data/lib/instana/trace/span_limits.rb +63 -0
  54. data/lib/instana/{tracer.rb → trace/tracer.rb} +106 -54
  55. data/lib/instana/trace/tracer_provider.rb +198 -0
  56. data/lib/instana/trace.rb +74 -0
  57. data/lib/instana/util.rb +11 -0
  58. data/lib/instana/version.rb +1 -1
  59. data/test/frameworks/sinatra_test.rb +2 -1
  60. data/test/instrumentation/aws_test.rb +7 -7
  61. data/test/instrumentation/dalli_test.rb +8 -8
  62. data/test/instrumentation/excon_test.rb +3 -3
  63. data/test/instrumentation/graphql_test.rb +4 -4
  64. data/test/instrumentation/grpc_test.rb +8 -8
  65. data/test/instrumentation/mongo_test.rb +1 -1
  66. data/test/instrumentation/net_http_test.rb +6 -6
  67. data/test/instrumentation/rails_action_cable_test.rb +2 -2
  68. data/test/instrumentation/rails_action_mailer_test.rb +1 -1
  69. data/test/instrumentation/rails_active_job_test.rb +1 -1
  70. data/test/instrumentation/rails_active_record_database_missing_test.rb +2 -3
  71. data/test/instrumentation/rails_active_record_test.rb +8 -7
  72. data/test/instrumentation/redis_test.rb +7 -7
  73. data/test/instrumentation/resque_test.rb +5 -5
  74. data/test/instrumentation/rest_client_test.rb +1 -2
  75. data/test/instrumentation/sequel_test.rb +12 -6
  76. data/test/instrumentation/sidekiq-client_test.rb +2 -2
  77. data/test/instrumentation/sidekiq-worker_test.rb +2 -2
  78. data/test/{tracing → trace}/custom_test.rb +32 -25
  79. data/test/{tracing → trace}/id_management_test.rb +0 -2
  80. data/test/{tracing → trace}/instrumented_logger_test.rb +1 -1
  81. data/test/{tracing → trace}/processor_test.rb +6 -6
  82. data/test/{tracing → trace}/span_context_test.rb +3 -3
  83. data/test/{tracing → trace}/span_test.rb +7 -7
  84. data/test/{tracing → trace}/tracer_async_test.rb +43 -30
  85. data/test/trace/tracer_provider_test.rb +148 -0
  86. data/test/{tracing → trace}/tracer_test.rb +48 -37
  87. metadata +105 -32
  88. data/examples/opentracing.rb +0 -35
  89. data/lib/instana/open_tracing/carrier.rb +0 -7
  90. data/lib/instana/open_tracing/instana_tracer.rb +0 -99
  91. data/lib/instana/tracing/span.rb +0 -431
  92. data/lib/opentracing.rb +0 -32
  93. 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