instana 1.10.2-java → 1.10.3-java

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.fasterer.yml +23 -0
  3. data/Gemfile +1 -1
  4. data/benchmarks/10k-rack-traces.rb +92 -0
  5. data/benchmarks/Gemfile.lock +38 -0
  6. data/benchmarks/rack_vanilla_vs_traced.rb +9 -4
  7. data/gemfiles/rails52.gemfile +52 -0
  8. data/lib/instana/agent.rb +56 -32
  9. data/lib/instana/agent/helpers.rb +1 -1
  10. data/lib/instana/collector.rb +3 -3
  11. data/lib/instana/config.rb +2 -5
  12. data/lib/instana/frameworks/cuba.rb +1 -1
  13. data/lib/instana/frameworks/instrumentation/action_controller.rb +2 -2
  14. data/lib/instana/frameworks/instrumentation/action_view.rb +1 -1
  15. data/lib/instana/frameworks/instrumentation/active_record.rb +3 -3
  16. data/lib/instana/frameworks/rails.rb +2 -2
  17. data/lib/instana/frameworks/roda.rb +1 -1
  18. data/lib/instana/frameworks/sinatra.rb +1 -1
  19. data/lib/instana/instrumentation/dalli.rb +1 -1
  20. data/lib/instana/instrumentation/excon.rb +1 -1
  21. data/lib/instana/instrumentation/grpc.rb +2 -2
  22. data/lib/instana/instrumentation/net-http.rb +1 -1
  23. data/lib/instana/instrumentation/redis.rb +1 -1
  24. data/lib/instana/instrumentation/resque.rb +2 -2
  25. data/lib/instana/instrumentation/rest-client.rb +1 -1
  26. data/lib/instana/instrumentation/sidekiq-client.rb +1 -1
  27. data/lib/instana/instrumentation/sidekiq-worker.rb +1 -1
  28. data/lib/instana/tracing/span.rb +14 -6
  29. data/lib/instana/version.rb +1 -1
  30. data/test/agent/agent_test.rb +10 -5
  31. data/test/instrumentation/dalli_test.rb +7 -7
  32. data/test/instrumentation/excon_test.rb +3 -3
  33. data/test/instrumentation/rest-client_test.rb +1 -1
  34. data/test/instrumentation/sidekiq-client_test.rb +2 -2
  35. data/test/tracing/custom_test.rb +4 -0
  36. data/test/tracing/tracer_test.rb +36 -4
  37. metadata +6 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e716dcf93b11c25ee83a4e0904ecc06973fa35977ee1228864e5b641c029a0d
4
- data.tar.gz: 7c1e5da1f2475e3d517caa740116cd617ca47a79fc6b1ac6830e4eea019fd386
3
+ metadata.gz: 5dba3779f4bc86e26583716484fd49063e9e56ad27d19fb78c5a255544d44fac
4
+ data.tar.gz: 24f0f1fb3fe6d12d58b531a2e11f7e36f81a210758a51a794b464bb0fc554ba0
5
5
  SHA512:
6
- metadata.gz: 004c60e166e9bbb42468f79c4e9657656098ee5a0fe6716069029925815d2eca7060106d51c6459a27a6eb99836d24ff15cc7709377199fc769b3231273cfcd9
7
- data.tar.gz: 771071609061b33f003300ab2e767b1c5cf357808ca4b0baa9c88a270a76ec36232f23ef22cdaba811759643f9c1999fa716781493a362be8f7042acc81bb339
6
+ metadata.gz: 6e5a55cd765dbaac1af1544b40a026be3f37aa73f9c2cf97b928b784b31e48cb30b021c5891b711ec4c96094fd3ae8c731229de13366865c71912e05716adbcd
7
+ data.tar.gz: 82a5504c73b5c04e7ae76f52c712920b06d5be10e0ccd36253d16576ccbe6e7d28a27a885e3ff845dd8b711177fd00a66588fa5c877f01be70151c20505d948c
data/.fasterer.yml ADDED
@@ -0,0 +1,23 @@
1
+ speedups:
2
+ rescue_vs_respond_to: true
3
+ module_eval: true
4
+ shuffle_first_vs_sample: true
5
+ for_loop_vs_each: true
6
+ each_with_index_vs_while: false
7
+ map_flatten_vs_flat_map: true
8
+ reverse_each_vs_reverse_each: true
9
+ select_first_vs_detect: true
10
+ sort_vs_sort_by: true
11
+ fetch_with_argument_vs_block: true
12
+ keys_each_vs_each_key: true
13
+ hash_merge_bang_vs_hash_brackets: true
14
+ block_vs_symbol_to_proc: true
15
+ proc_call_vs_yield: true
16
+ gsub_vs_tr: true
17
+ select_last_vs_reverse_detect: true
18
+ getter_vs_attr_reader: true
19
+ setter_vs_attr_writer: true
20
+
21
+ exclude_paths:
22
+ - 'vendor/**/*.rb'
23
+ - 'db/schema.rb'
data/Gemfile CHANGED
@@ -30,7 +30,7 @@ group :development do
30
30
  gem 'byebug', '< 9.1.0', :platform => [:mri_19, :mri_20]
31
31
  gem 'pry-byebug', :platform => [:mri_19, :mri_20]
32
32
  else
33
- gem 'pry-byebug', :platform => [:mri_19, :mri_20]
33
+ gem 'pry-byebug', :platform => :ruby
34
34
  end
35
35
  else
36
36
  gem 'pry', '0.9.12.4'
@@ -0,0 +1,92 @@
1
+ require "bundler"
2
+
3
+ require 'rack'
4
+ require 'rack/builder'
5
+ require 'rack/handler/puma'
6
+ require 'net/http'
7
+ require "cgi"
8
+ Bundler.require(:default)
9
+ require "instana/rack"
10
+ require 'ruby-prof'
11
+
12
+ Thread.new do
13
+ app = Rack::Builder.new {
14
+ map "/" do
15
+ run Proc.new {
16
+ [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
17
+ }
18
+ end
19
+ map "/error" do
20
+ run Proc.new {
21
+ [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
22
+ }
23
+ end
24
+ }
25
+
26
+ Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7011})
27
+ end
28
+
29
+ Thread.new do
30
+ app = Rack::Builder.new {
31
+ use ::Instana::Rack
32
+ map "/" do
33
+ run Proc.new {
34
+ [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
35
+ }
36
+ end
37
+ map "/error" do
38
+ run Proc.new {
39
+ [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
40
+ }
41
+ end
42
+ }
43
+
44
+ Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7012})
45
+ end
46
+
47
+ puts ""
48
+ puts "Vanilla Rack server started in background thread on localhost:7011"
49
+ puts "Instrumented Rack server started in background thread on localhost:7012"
50
+ puts ""
51
+ puts "Waiting on successful announce to host agent..."
52
+ puts ""
53
+
54
+ #RubyProf.measure_mode = RubyProf::WALL_TIME
55
+ #RubyProf.measure_mode = RubyProf::PROCESS_TIME
56
+ RubyProf.measure_mode = RubyProf::ALLOCATIONS
57
+ #RubyProf.measure_mode = RubyProf::MEMORY
58
+
59
+ while !::Instana.agent.ready? do
60
+ sleep 2
61
+ end
62
+
63
+ puts "Starting 10k Traces..."
64
+
65
+ # uri = URI.parse("http://127.0.0.1:7011/")
66
+ # ::Net::HTTP.start(uri.host, uri.port) do |hc|
67
+ # x.report("vanilla") {
68
+ # 10_000.times {
69
+ # req = Net::HTTP::Get.new(uri.request_uri)
70
+ # hc.request(req)
71
+ # }
72
+ # }
73
+ # end
74
+
75
+ uri = URI.parse("http://127.0.0.1:7012/")
76
+ result = RubyProf.profile do
77
+ 1.times {
78
+ ::Instana.tracer.start_or_continue_trace(:job, {:kind => :entry}) do
79
+ ::Net::HTTP.start(uri.host, uri.port) do |hc|
80
+ ::Instana.tracer.start_or_continue_trace(:rack_call) do
81
+ req = Net::HTTP::Get.new(uri.request_uri)
82
+ hc.request(req)
83
+ end
84
+ end
85
+ end
86
+ }
87
+ end
88
+
89
+ puts "Done - displaying results..."
90
+
91
+ printer = RubyProf::FlatPrinter.new(result)
92
+ printer.print(STDOUT, {})
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ instana (1.9.6)
5
+ ffi (>= 1.0.11)
6
+ get_process_mem (>= 0.2.1)
7
+ oj (>= 3.0.11)
8
+ sys-proctable (>= 0.9.2)
9
+ timers (>= 4.0.0)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ ffi (1.11.1)
15
+ get_process_mem (0.2.4)
16
+ ffi (~> 1.0)
17
+ nio4r (2.4.0)
18
+ oj (3.8.1)
19
+ puma (4.1.0)
20
+ nio4r (~> 2.0)
21
+ rack (2.0.7)
22
+ ruby-prof (1.0.0)
23
+ sys-proctable (1.2.2)
24
+ ffi
25
+ timers (4.3.0)
26
+
27
+ PLATFORMS
28
+ ruby
29
+ x86_64-darwin-18
30
+
31
+ DEPENDENCIES
32
+ instana!
33
+ puma
34
+ rack
35
+ ruby-prof
36
+
37
+ BUNDLED WITH
38
+ 2.0.2
@@ -44,11 +44,16 @@ Thread.new do
44
44
  Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7012})
45
45
  end
46
46
 
47
- sleep(2)
48
- puts "Rack server started in background thread on localhost:7011"
49
- puts "Sleeping for 10 to allow announce"
50
- sleep(10)
47
+ puts ""
48
+ puts "Vanilla Rack server started in background thread on localhost:7011"
49
+ puts "Instrumented Rack server started in background thread on localhost:7012"
50
+ puts ""
51
+ puts "Waiting on successful announce to host agent..."
52
+ puts ""
51
53
 
54
+ while !::Instana.agent.ready? do
55
+ sleep 2
56
+ end
52
57
 
53
58
  puts "Starting benchmarks"
54
59
  Benchmark.bm do |x|
@@ -0,0 +1,52 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development, :test do
4
+ gem 'rake'
5
+ gem 'minitest', '5.9.1'
6
+ gem 'minitest-reporters'
7
+ gem 'minitest-debugger', :require => false
8
+ gem 'rack-test'
9
+ gem 'webmock'
10
+ gem 'puma'
11
+ # public_suffix dropped support for Ruby 2.1 and earlier.
12
+ gem 'public_suffix', '< 3.0'
13
+ end
14
+
15
+ group :development do
16
+ gem 'ruby-debug', :platforms => [:mri_18, :jruby]
17
+ gem 'debugger', :platform => :mri_19
18
+
19
+ if RUBY_VERSION > '1.8.7'
20
+ gem 'pry'
21
+
22
+ if RUBY_VERSION < '2.2'
23
+ gem 'byebug', '< 9.1.0'
24
+ gem 'pry-byebug'
25
+ else
26
+ gem 'pry-byebug'
27
+ end
28
+ else
29
+ gem 'pry', '0.9.12.4'
30
+ end
31
+ end
32
+
33
+ gem 'rails', '~> 5.2'
34
+ gem 'sass-rails', '~> 5.0'
35
+ gem 'uglifier', '>= 1.3.0'
36
+ gem 'coffee-rails', '~> 4.2'
37
+ # gem 'therubyracer', platforms: :ruby
38
+
39
+ gem 'jquery-rails'
40
+ gem 'turbolinks', '~> 5'
41
+ gem 'jbuilder', '~> 2.5'
42
+
43
+ gem 'pg'
44
+ gem 'mysql2', '0.4.10'
45
+
46
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
47
+ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
48
+
49
+ # Include the Instana Ruby gem's base set of gems
50
+ gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
51
+
52
+ # vim:syntax=ruby
data/lib/instana/agent.rb CHANGED
@@ -26,11 +26,17 @@ module Instana
26
26
  attr_accessor :thread_spawn_lock
27
27
  attr_accessor :extra_headers
28
28
 
29
+ attr_accessor :testmode
30
+
29
31
  LOCALHOST = '127.0.0.1'.freeze
30
32
  MIME_JSON = 'application/json'.freeze
31
33
  DISCOVERY_PATH = 'com.instana.plugin.ruby.discovery'.freeze
34
+ METRICS_PATH = "com.instana.plugin.ruby.%s"
35
+ TRACES_PATH = "com.instana.plugin.ruby/traces.%s"
32
36
 
33
37
  def initialize
38
+ @testmode = ENV.key?('INSTANA_TEST')
39
+
34
40
  # Supported two states (unannounced & announced)
35
41
  @state = :unannounced
36
42
 
@@ -44,6 +50,7 @@ module Instana
44
50
  # Two timers, one for each state (unannounced & announced)
45
51
  @timers = ::Timers::Group.new
46
52
  @announce_timer = nil
53
+ @pending_timer = nil
47
54
  @collect_timer = nil
48
55
 
49
56
  @thread_spawn_lock = Mutex.new
@@ -111,15 +118,31 @@ module Instana
111
118
  # The announce timer
112
119
  # We attempt to announce this ruby sensor to the host agent.
113
120
  # In case of failure, we try again in 30 seconds.
114
- @announce_timer = @timers.every(30) do
121
+ @announce_timer = @timers.now_and_every(30) do
115
122
  if @state == :unannounced
116
123
  if host_agent_available? && announce_sensor
117
124
  transition_to(:announced)
118
- ::Instana.logger.info "Host agent available. We're in business. (#{@state} pid:#{Process.pid} #{@process[:name]})"
125
+ ::Instana.logger.debug "Announce successful. Waiting on ready. (#{@state} pid:#{Process.pid} #{@process[:name]})"
119
126
  end
120
127
  end
121
128
  end
122
129
 
130
+ # The pending timer
131
+ # Handles the time between successful announce and when the host agent METRICS_PATH and TRACES_PATH
132
+ # no longer return 404s and are truly ready to accept data.
133
+ @pending_timer = @timers.now_and_every(1) do
134
+ path = sprintf(METRICS_PATH, @process[:report_pid])
135
+ uri = URI.parse("http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/#{path}")
136
+ req = Net::HTTP::Post.new(uri)
137
+ req.body = Oj.dump({}, OJ_OPTIONS)
138
+
139
+ response = make_host_agent_request(req)
140
+ if response && (response.code.to_i == 200)
141
+ transition_to(:ready)
142
+ ::Instana.logger.info "Host agent available. We're in business. (#{@state} pid:#{Process.pid} #{@process[:name]})"
143
+ end
144
+ end
145
+
123
146
  # The collect timer
124
147
  # If we are in announced state, send metric data (only delta reporting)
125
148
  # every ::Instana.config[:collector][:interval] seconds.
@@ -129,7 +152,7 @@ module Instana
129
152
  # then we just skip.
130
153
  unless (Time.now - @last_collect_run) < ::Instana.config[:collector][:interval]
131
154
  @last_collect_run = Time.now
132
- if @state == :announced
155
+ if @state == :ready
133
156
  if !::Instana.collector.collect_and_report
134
157
  # If report has been failing for more than 1 minute,
135
158
  # fall back to unannounced state
@@ -151,16 +174,22 @@ module Instana
151
174
  def start
152
175
  if !host_agent_available?
153
176
  if !ENV.key?("INSTANA_QUIET")
154
- ::Instana.logger.warn "Host agent not available. Will retry periodically. (Set env INSTANA_QUIET=1 to shut these messages off)"
177
+ ::Instana.logger.info "Instana host agent not available. Will retry periodically. (Set env INSTANA_QUIET=1 to shut these messages off)"
155
178
  end
156
179
  end
157
180
 
158
181
  while true
159
182
  if @state == :unannounced
160
- @collect_timer.pause
161
183
  @announce_timer.resume
162
- else
184
+ @pending_timer.pause
185
+ @collect_timer.pause
186
+ elsif @state == :announced
187
+ @announce_timer.pause
188
+ @pending_timer.resume
189
+ @collect_timer.pause
190
+ elsif @state == :ready
163
191
  @announce_timer.pause
192
+ @pending_timer.pause
164
193
  @collect_timer.resume
165
194
  end
166
195
  @timers.wait
@@ -169,11 +198,12 @@ module Instana
169
198
  ::Instana.logger.warn { "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" }
170
199
  ::Instana.logger.debug { e.backtrace.join("\r\n") }
171
200
  ensure
172
- if @state == :announced
201
+ if @state == :ready
173
202
  # Pause the timers so they don't fire while we are
174
203
  # reporting traces
175
- @collect_timer.pause
176
204
  @announce_timer.pause
205
+ @pending_timer.pause
206
+ @collect_timer.pause
177
207
 
178
208
  ::Instana.logger.debug { "#{Thread.current}: Agent exiting. Reporting final spans (if any)." }
179
209
  ::Instana.processor.send
@@ -198,7 +228,7 @@ module Instana
198
228
  announce_payload[:name] = @process[:name]
199
229
  announce_payload[:args] = @process[:arguments]
200
230
 
201
- if @is_linux && !ENV.key?('INSTANA_TEST')
231
+ if @is_linux && !@testmode
202
232
  # We create an open socket to the host agent in case we are running in a container
203
233
  # and the real pid needs to be detected.
204
234
  socket = TCPSocket.new @discovered[:agent_host], @discovered[:agent_port]
@@ -241,12 +271,12 @@ module Instana
241
271
  # @return [Boolean] true on success, false otherwise
242
272
  #
243
273
  def report_metrics(payload)
244
- unless @discovered
245
- ::Instana.logger.debug("#{__method__} called but discovery hasn't run yet!")
274
+ if @state != :ready && !@testmode
275
+ ::Instana.logger.debug "report_metrics called but agent not in ready state."
246
276
  return false
247
277
  end
248
278
 
249
- path = "com.instana.plugin.ruby.#{@process[:report_pid]}"
279
+ path = sprintf(METRICS_PATH, @process[:report_pid])
250
280
  uri = URI.parse("http://#{@discovered[:agent_host]}:#{@discovered[:agent_port]}/#{path}")
251
281
  req = Net::HTTP::Post.new(uri)
252
282
 
@@ -274,18 +304,16 @@ module Instana
274
304
 
275
305
  # Accept and report spans to the host agent.
276
306
  #
277
- # @param traces [Array] An array of [Span]
307
+ # @param spans [Array] An array of [Span]
278
308
  # @return [Boolean]
279
309
  #
280
310
  def report_spans(spans)
281
- return unless @state == :announced
282
-
283
- unless @discovered
284
- ::Instana.logger.debug("#{__method__} called but discovery hasn't run yet!")
311
+ if @state != :ready && !@testmode
312
+ ::Instana.logger.debug "report_spans called but agent not in ready state."
285
313
  return false
286
314
  end
287
315
 
288
- path = "com.instana.plugin.ruby/traces.#{@process[:report_pid]}"
316
+ path = sprintf(TRACES_PATH, @process[:report_pid])
289
317
  uri = URI.parse("http://#{@discovered[:agent_host]}:#{@discovered[:agent_port]}/#{path}")
290
318
  req = Net::HTTP::Post.new(uri)
291
319
 
@@ -315,20 +343,12 @@ module Instana
315
343
  @discovered ||= run_discovery
316
344
 
317
345
  if @discovered
318
- # Try default location or manually configured (if so)
319
- uri = URI.parse("http://#{@discovered[:agent_host]}:#{@discovered[:agent_port]}/")
320
- req = Net::HTTP::Get.new(uri)
321
-
322
- response = make_host_agent_request(req)
323
-
324
- if response && (response.code.to_i == 200)
325
- return true
326
- end
346
+ return true
327
347
  end
328
348
  false
329
349
  rescue => e
330
350
  Instana.logger.debug { "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" }
331
- Instana.logger.debug { e.backtrace.join("\r\n") } unless ENV.key?('INSTANA_TEST')
351
+ Instana.logger.debug { e.backtrace.join("\r\n") } unless @testmode
332
352
  return false
333
353
  end
334
354
 
@@ -390,22 +410,26 @@ module Instana
390
410
  def transition_to(state)
391
411
  ::Instana.logger.debug("Transitioning to #{state}")
392
412
  case state
413
+ when :ready
414
+ # announced
415
+ @state = :ready
416
+
417
+ # Reset the entity timer
418
+ @entity_last_seen = Time.now
393
419
  when :announced
394
420
  # announce successful; set state
395
421
  @state = :announced
396
422
 
397
423
  # Reset the entity timer
398
424
  @entity_last_seen = Time.now
399
-
400
425
  when :unannounced
401
426
  @state = :unannounced
402
427
  # Reset our HTTP client
403
428
  @httpclient = nil
404
-
405
429
  else
406
430
  ::Instana.logger.debug "Uknown agent state: #{state}"
407
431
  end
408
- ::Instana.collector.reset_timer!
432
+ ::Instana.collector.reset_snapshot_timer!
409
433
  true
410
434
  end
411
435
 
@@ -434,7 +458,7 @@ module Instana
434
458
  return nil
435
459
  rescue => e
436
460
  Instana.logger.debug { "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" }
437
- Instana.logger.debug { e.backtrace.join("\r\n") } unless ENV.key?('INSTANA_TEST')
461
+ Instana.logger.debug { e.backtrace.join("\r\n") } unless @testmode
438
462
  return nil
439
463
  end
440
464
  end
@@ -52,7 +52,7 @@ module AgentHelpers
52
52
  end
53
53
  end
54
54
 
55
- @state == :announced
55
+ @state == :ready
56
56
  rescue => e
57
57
  Instana.logger.debug { "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" }
58
58
  Instana.logger.debug { e.backtrace.join("\r\n") } unless ENV.key?('INSTANA_TEST')
@@ -21,7 +21,7 @@ module Instana
21
21
 
22
22
  # Register an individual collector.
23
23
  #
24
- # @param [Object] the class of the collector to register
24
+ # @param [Object] klass of the collector to register
25
25
  #
26
26
  def register(klass)
27
27
  ::Instana.logger.debug "Adding #{klass} to collectors..."
@@ -30,9 +30,9 @@ module Instana
30
30
 
31
31
  # Resets the timer on when to send process snapshot data.
32
32
  #
33
- def reset_timer!
33
+ def reset_snapshot_timer!
34
34
  # Set last snapshot to 10 minutes ago
35
- # so we send a snapshot on first report
35
+ # so that we send a snapshot on first report
36
36
  @last_snapshot = Time.now - 601
37
37
  end
38
38
 
@@ -28,11 +28,8 @@ module Instana
28
28
  # Enable/disable tracing (default: enabled)
29
29
  @config[:tracing] = { :enabled => true }
30
30
 
31
- if ENV.key?('INSTANA_DEBUG')
32
- @config[:collector] = { :enabled => true, :interval => 3 }
33
- else
34
- @config[:collector] = { :enabled => true, :interval => 1 }
35
- end
31
+ # Collector interval
32
+ @config[:collector] = { :enabled => true, :interval => 1 }
36
33
 
37
34
  # EUM Related
38
35
  @config[:eum_api_key] = nil
@@ -1,6 +1,6 @@
1
1
  require "instana/rack"
2
2
 
3
3
  if defined?(::Cuba)
4
- ::Instana.logger.info "Instrumenting Cuba"
4
+ ::Instana.logger.debug "Instrumenting Cuba"
5
5
  Cuba.use ::Instana::Rack
6
6
  end
@@ -163,7 +163,7 @@ module Instana
163
163
  end
164
164
 
165
165
  if defined?(::ActionController) && ::Instana.config[:action_controller][:enabled] && ::ActionPack::VERSION::MAJOR >= 2
166
- ::Instana.logger.info "Instrumenting ActionController"
166
+ ::Instana.logger.debug "Instrumenting ActionController"
167
167
  if ActionPack::VERSION::MAJOR >= 5
168
168
  ::ActionController::Base.send(:prepend, ::Instana::Instrumentation::ActionController)
169
169
  else
@@ -178,6 +178,6 @@ end
178
178
  # We allow ActionController::API instrumentation in version of Ruby on Rails 3 and higher.
179
179
  #
180
180
  if defined?(::ActionController::API) && ::Instana.config[:action_controller][:enabled] && ::ActionPack::VERSION::MAJOR >= 3
181
- ::Instana.logger.info "Instrumenting ActionController API"
181
+ ::Instana.logger.debug "Instrumenting ActionController API"
182
182
  ::ActionController::API.send(:prepend, ::Instana::Instrumentation::ActionController)
183
183
  end
@@ -38,6 +38,6 @@ module Instana
38
38
  end
39
39
 
40
40
  if defined?(::ActionView) && ::Instana.config[:action_view][:enabled] && ::ActionPack::VERSION::STRING >= '3.1'
41
- ::Instana.logger.info "Instrumenting ActionView"
41
+ ::Instana.logger.debug "Instrumenting ActionView"
42
42
  ::ActionView::PartialRenderer.send(:include, ::Instana::Instrumentation::ActionViewRenderer)
43
43
  end
@@ -8,20 +8,20 @@ if defined?(::ActiveRecord) && ::Instana.config[:active_record][:enabled]
8
8
 
9
9
  # Mysql
10
10
  if defined?(ActiveRecord::ConnectionAdapters::MysqlAdapter)
11
- ::Instana.logger.info "Instrumenting ActiveRecord (mysql)"
11
+ ::Instana.logger.debug "Instrumenting ActiveRecord (mysql)"
12
12
  ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:include, ::Instana::Instrumentation::MysqlAdapter)
13
13
  ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.send(:include, ::Instana::Instrumentation::AbstractMysqlAdapter)
14
14
  end
15
15
 
16
16
  # Mysql2
17
17
  if defined?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
18
- ::Instana.logger.info "Instrumenting ActiveRecord (mysql2)"
18
+ ::Instana.logger.debug "Instrumenting ActiveRecord (mysql2)"
19
19
  ActiveRecord::ConnectionAdapters::Mysql2Adapter.send(:include, ::Instana::Instrumentation::Mysql2Adapter)
20
20
  end
21
21
 
22
22
  # Postgres
23
23
  if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
24
- ::Instana.logger.info "Instrumenting ActiveRecord (postgresql)"
24
+ ::Instana.logger.debug "Instrumenting ActiveRecord (postgresql)"
25
25
  ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send(:include, ::Instana::Instrumentation::PostgreSQLAdapter)
26
26
  end
27
27
  end
@@ -8,7 +8,7 @@ if defined?(::Rails)
8
8
  ::Instana.logger = ::Rails.logger if ::Rails.logger
9
9
 
10
10
  if ::Instana.config[:tracing][:enabled]
11
- ::Instana.logger.info "Instrumenting Rack"
11
+ ::Instana.logger.debug "Instrumenting Rack"
12
12
  ::Rails.configuration.middleware.insert 0, ::Instana::Rack
13
13
  else
14
14
  ::Instana.logger.info "Rack: Tracing disabled via config. Not enabling middleware."
@@ -22,7 +22,7 @@ if defined?(::Rails)
22
22
  ::Instana.logger = ::Rails.logger if ::Rails.logger
23
23
 
24
24
  if ::Instana.config[:tracing][:enabled]
25
- ::Instana.logger.info "Instrumenting Rack"
25
+ ::Instana.logger.debug "Instrumenting Rack"
26
26
  app.config.middleware.insert 0, ::Instana::Rack
27
27
  else
28
28
  ::Instana.logger.info "Rack: Tracing disabled via config. Not enabling middleware."
@@ -1,6 +1,6 @@
1
1
  require "instana/rack"
2
2
 
3
3
  if defined?(::Roda)
4
- ::Instana.logger.info "Instrumenting Roda"
4
+ ::Instana.logger.debug "Instrumenting Roda"
5
5
  Roda.use ::Instana::Rack
6
6
  end
@@ -4,6 +4,6 @@ require "instana/rack"
4
4
  # the latter is based on Sinatra
5
5
 
6
6
  if defined?(::Sinatra)
7
- ::Instana.logger.info "Instrumenting Sinatra"
7
+ ::Instana.logger.debug "Instrumenting Sinatra"
8
8
  ::Sinatra::Base.use ::Instana::Rack
9
9
  end
@@ -72,7 +72,7 @@ module Instana
72
72
  end
73
73
 
74
74
  if defined?(::Dalli) && ::Instana.config[:dalli][:enabled]
75
- ::Instana.logger.info "Instrumenting Dalli"
75
+ ::Instana.logger.debug "Instrumenting Dalli"
76
76
  ::Dalli::Client.send(:include, ::Instana::Instrumentation::Dalli)
77
77
  ::Dalli::Server.send(:include, ::Instana::Instrumentation::DalliServer)
78
78
  end
@@ -68,7 +68,7 @@ if defined?(::Excon) && ::Instana.config[:excon][:enabled]
68
68
  end
69
69
  end
70
70
 
71
- ::Instana.logger.info "Instrumenting Excon"
71
+ ::Instana.logger.debug "Instrumenting Excon"
72
72
  ::Excon.defaults[:middlewares].unshift(::Instana::Instrumentation::Excon)
73
73
  end
74
74
 
@@ -39,7 +39,7 @@ if defined?(GRPC::ActiveCall) && ::Instana.config[:grpc][:enabled]
39
39
  alias #{call_type} #{call_type}_with_instana
40
40
  RUBY
41
41
  end
42
- ::Instana.logger.info 'Instrumenting GRPC client'
42
+ ::Instana.logger.debug 'Instrumenting GRPC client'
43
43
  end
44
44
 
45
45
  if defined?(GRPC::RpcDesc) && ::Instana.config[:grpc][:enabled]
@@ -80,5 +80,5 @@ if defined?(GRPC::RpcDesc) && ::Instana.config[:grpc][:enabled]
80
80
  alias handle_#{call_type} handle_#{call_type}_with_instana
81
81
  RUBY
82
82
  end
83
- ::Instana.logger.info 'Instrumenting GRPC server'
83
+ ::Instana.logger.debug 'Instrumenting GRPC server'
84
84
  end
@@ -58,7 +58,7 @@ if defined?(::Net::HTTP) && ::Instana.config[:nethttp][:enabled]
58
58
  ::Instana.tracer.log_exit(:'net-http', kv_payload) unless do_skip
59
59
  end
60
60
 
61
- Instana.logger.info "Instrumenting Net::HTTP"
61
+ ::Instana.logger.debug "Instrumenting Net::HTTP"
62
62
 
63
63
  alias request_without_instana request
64
64
  alias request request_with_instana
@@ -44,7 +44,7 @@ if defined?(::Redis) && ::Instana.config[:redis][:enabled]
44
44
  ::Instana.tracer.log_exit(:redis, {})
45
45
  end
46
46
 
47
- ::Instana.logger.info "Instrumenting Redis"
47
+ ::Instana.logger.debug "Instrumenting Redis"
48
48
 
49
49
  alias call_without_instana call
50
50
  alias call call_with_instana
@@ -108,12 +108,12 @@ end
108
108
  if defined?(::Resque) && RUBY_VERSION >= '1.9.3'
109
109
 
110
110
  if ::Instana.config[:'resque-client'][:enabled]
111
- ::Instana.logger.info 'Instrumenting Resque Client'
111
+ ::Instana.logger.debug 'Instrumenting Resque Client'
112
112
  ::Instana::Util.send_include(::Resque, ::Instana::Instrumentation::ResqueClient)
113
113
  end
114
114
 
115
115
  if ::Instana.config[:'resque-worker'][:enabled]
116
- ::Instana.logger.info 'Instrumenting Resque Worker'
116
+ ::Instana.logger.debug 'Instrumenting Resque Worker'
117
117
 
118
118
  ::Instana::Util.send_include(::Resque::Worker, ::Instana::Instrumentation::ResqueWorker)
119
119
  ::Instana::Util.send_include(::Resque::Job, ::Instana::Instrumentation::ResqueJob)
@@ -29,6 +29,6 @@ module Instana
29
29
  end
30
30
 
31
31
  if defined?(::RestClient::Request) && ::Instana.config[:'rest-client'][:enabled]
32
- ::Instana.logger.info "Instrumenting RestClient"
32
+ ::Instana.logger.debug "Instrumenting RestClient"
33
33
  ::RestClient::Request.send(:include, ::Instana::Instrumentation::RestClientRequest)
34
34
  end
@@ -38,7 +38,7 @@ end
38
38
  if defined?(::Sidekiq) && ::Instana.config[:'sidekiq-client'][:enabled]
39
39
  ::Sidekiq.configure_client do |cfg|
40
40
  cfg.client_middleware do |chain|
41
- ::Instana.logger.info "Instrumenting Sidekiq client"
41
+ ::Instana.logger.debug "Instrumenting Sidekiq client"
42
42
  chain.add ::Instana::Instrumentation::SidekiqClient
43
43
  end
44
44
  end
@@ -47,7 +47,7 @@ end
47
47
  if defined?(::Sidekiq) && ::Instana.config[:'sidekiq-worker'][:enabled]
48
48
  ::Sidekiq.configure_server do |cfg|
49
49
  cfg.server_middleware do |chain|
50
- ::Instana.logger.info "Instrumenting Sidekiq worker"
50
+ ::Instana.logger.debug "Instrumenting Sidekiq worker"
51
51
  chain.add ::Instana::Instrumentation::SidekiqWorker
52
52
  end
53
53
  end
@@ -22,7 +22,7 @@ module Instana
22
22
  id = ::Instana::Util.generate_id
23
23
  @data[:t] = id # Trace ID
24
24
  @data[:s] = id # Span ID
25
- is_root = true
25
+ @is_root = true
26
26
  else
27
27
  if parent_ctx.is_a?(::Instana::Span)
28
28
  @parent = parent_ctx
@@ -41,7 +41,7 @@ module Instana
41
41
  @baggage = nil
42
42
  end
43
43
 
44
- is_root = false
44
+ @is_root = false
45
45
  end
46
46
 
47
47
  @data[:data] = {}
@@ -143,9 +143,17 @@ module Instana
143
143
  #
144
144
  def configure_custom(name)
145
145
  @data[:n] = :sdk
146
- @data[:k] = 3
147
- @data[:data] = { :sdk => { :name => name.to_sym, :type => :intermediate } }
146
+ @data[:data] = { :sdk => { :name => name.to_sym } }
148
147
  @data[:data][:sdk][:custom] = { :tags => {}, :logs => {} }
148
+
149
+ if @is_root
150
+ # For custom root spans (via SDK or opentracing), default to entry type
151
+ @data[:k] = 1
152
+ @data[:data][:sdk][:type] = :entry
153
+ else
154
+ @data[:k] = 3
155
+ @data[:data][:sdk][:type] = :intermediate
156
+ end
149
157
  self
150
158
  end
151
159
 
@@ -300,10 +308,10 @@ module Instana
300
308
 
301
309
  if key.to_sym == :'span.kind'
302
310
  case value.to_sym
303
- when :server, :consumer
311
+ when :entry, :server, :consumer
304
312
  @data[:data][:sdk][:type] = :entry
305
313
  @data[:k] = 1
306
- when :client, :producer
314
+ when :exit, :client, :producer
307
315
  @data[:data][:sdk][:type] = :exit
308
316
  @data[:k] = 2
309
317
  else
@@ -1,4 +1,4 @@
1
1
  module Instana
2
- VERSION = "1.10.2"
2
+ VERSION = "1.10.3"
3
3
  VERSION_FULL = "instana-#{VERSION}"
4
4
  end
@@ -5,6 +5,11 @@ class AgentTest < Minitest::Test
5
5
 
6
6
  Oj = ::Instana::Oj unless defined?(Oj)
7
7
 
8
+ def teardown
9
+ WebMock.reset!
10
+ ::Instana.agent.instance_variable_set(:@discovered, nil)
11
+ end
12
+
8
13
  def test_agent_host_detection
9
14
  url = "http://#{::Instana.config[:agent_host]}:#{::Instana.config[:agent_port]}/"
10
15
  stub_request(:get, url)
@@ -28,6 +33,7 @@ class AgentTest < Minitest::Test
28
33
  docker_url = "http://#{::Instana.agent.instance_variable_get(:@default_gateway)}:#{::Instana.config[:agent_port]}/"
29
34
  stub_request(:get, url).to_raise(Errno::ECONNREFUSED)
30
35
  stub_request(:get, docker_url).to_raise(Errno::ECONNREFUSED)
36
+
31
37
  discovered = ::Instana.agent.run_discovery
32
38
 
33
39
  assert_equal nil, discovered
@@ -134,10 +140,9 @@ class AgentTest < Minitest::Test
134
140
  discovery[:agent_port] = ::Instana.config[:agent_port]
135
141
  ::Instana.agent.instance_variable_set(:@discovered, discovery)
136
142
 
137
- localhost_url = "http://#{::Instana::Agent::LOCALHOST}:#{::Instana.config[:agent_port]}/"
138
- stub_request(:get, localhost_url).to_timeout
139
- docker_url = "http://#{::Instana.agent.instance_variable_get(:@default_gateway)}:#{::Instana.config[:agent_port]}/"
140
- stub_request(:get, docker_url).to_timeout
141
- assert_equal false, ::Instana.agent.host_agent_available?
143
+ localhost_url = "http://#{::Instana::Agent::LOCALHOST}:#{::Instana.config[:agent_port]}/com.instana.plugin.ruby.discovery"
144
+ stub_request(:any, localhost_url).to_timeout
145
+
146
+ assert_equal false, ::Instana.agent.announce_sensor
142
147
  end
143
148
  end
@@ -30,7 +30,7 @@ class DalliTest < Minitest::Test
30
30
  first_span = spans[1]
31
31
  second_span = spans[0]
32
32
 
33
- validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
33
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :entry})
34
34
 
35
35
  assert_equal :memcache, second_span[:n]
36
36
  assert_equal false, second_span.key?(:error)
@@ -63,7 +63,7 @@ class DalliTest < Minitest::Test
63
63
  first_span = spans[1]
64
64
  second_span = spans[0]
65
65
 
66
- validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
66
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :entry})
67
67
 
68
68
  assert_equal :memcache, second_span[:n]
69
69
  assert_equal false, second_span.key?(:error)
@@ -97,7 +97,7 @@ class DalliTest < Minitest::Test
97
97
  first_span = spans[1]
98
98
  second_span = spans[0]
99
99
 
100
- validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
100
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :entry})
101
101
 
102
102
  assert_equal :memcache, second_span[:n]
103
103
  assert_equal false, second_span.key?(:error)
@@ -131,7 +131,7 @@ class DalliTest < Minitest::Test
131
131
  first_span = spans[1]
132
132
  second_span = spans[0]
133
133
 
134
- validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
134
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :entry})
135
135
 
136
136
  assert_equal :memcache, second_span[:n]
137
137
  assert_equal false, second_span.key?(:error)
@@ -165,7 +165,7 @@ class DalliTest < Minitest::Test
165
165
  first_span = spans[1]
166
166
  second_span = spans[0]
167
167
 
168
- validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
168
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :entry})
169
169
 
170
170
  assert_equal :memcache, second_span[:n]
171
171
  assert_equal false, second_span.key?(:error)
@@ -199,7 +199,7 @@ class DalliTest < Minitest::Test
199
199
  first_span = spans[1]
200
200
  second_span = spans[0]
201
201
 
202
- validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
202
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :entry})
203
203
 
204
204
  assert_equal :memcache, second_span[:n]
205
205
  assert_equal false, second_span.key?(:error)
@@ -232,7 +232,7 @@ class DalliTest < Minitest::Test
232
232
  first_span = spans[1]
233
233
  second_span = spans[0]
234
234
 
235
- validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
235
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :entry})
236
236
 
237
237
  assert_equal :memcache, second_span[:n]
238
238
  assert_equal false, second_span.key?(:error)
@@ -29,7 +29,7 @@ class ExconTest < Minitest::Test
29
29
  excon_span = find_first_span_by_name(spans, :excon)
30
30
  rack_span = find_first_span_by_name(spans, :rack)
31
31
 
32
- validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :intermediate})
32
+ validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :entry})
33
33
 
34
34
  # data keys/values
35
35
  refute_nil excon_span.key?(:data)
@@ -72,7 +72,7 @@ class ExconTest < Minitest::Test
72
72
  excon_span = find_first_span_by_name(spans, :excon)
73
73
  sdk_span = find_first_span_by_name(spans, :'excon-test')
74
74
 
75
- validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :intermediate})
75
+ validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :entry})
76
76
 
77
77
  assert_equal sdk_span[:s], excon_span[:p]
78
78
  assert_equal excon_span[:s], rack_span[:p]
@@ -111,7 +111,7 @@ class ExconTest < Minitest::Test
111
111
  excon_spans = find_spans_by_name(spans, :excon)
112
112
  sdk_span = find_first_span_by_name(spans, :'excon-test')
113
113
 
114
- validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :intermediate})
114
+ validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :entry})
115
115
 
116
116
  assert_equal 3, rack_spans.length
117
117
  assert_equal 3, excon_spans.length
@@ -25,7 +25,7 @@ class RestClientTest < Minitest::Test
25
25
  rest_span = find_first_span_by_name(spans, :'rest-client')
26
26
  net_span = find_first_span_by_name(spans, :'net-http')
27
27
 
28
- validate_sdk_span(sdk_span, {:name => :'restclient-test', :type => :intermediate})
28
+ validate_sdk_span(sdk_span, {:name => :'restclient-test', :type => :entry})
29
29
  validate_sdk_span(rest_span, {:name => :'rest-client', :type => :intermediate})
30
30
 
31
31
  # Span name validation
@@ -72,7 +72,7 @@ class SidekiqClientTest < Minitest::Test
72
72
  second_span = spans[0]
73
73
 
74
74
  assert_equal first_span[:s], second_span[:p]
75
- validate_sdk_span(first_span, {:name => :sidekiqtests, :type => :intermediate})
75
+ validate_sdk_span(first_span, {:name => :sidekiqtests, :type => :entry})
76
76
 
77
77
  assert_equal :'sidekiq-client', second_span[:n]
78
78
  assert_equal 'some_random_queue', second_span[:data][:'sidekiq-client'][:queue]
@@ -89,7 +89,7 @@ class SidekiqClientTest < Minitest::Test
89
89
  second_span = spans[0]
90
90
 
91
91
  assert_equal first_span[:s], second_span[:p]
92
- validate_sdk_span(first_span, {:name => :sidekiqtests, :type => :intermediate})
92
+ validate_sdk_span(first_span, {:name => :sidekiqtests, :type => :entry})
93
93
 
94
94
  assert_equal :'sidekiq-client', second_span[:n]
95
95
  assert_equal true, second_span[:error]
@@ -31,6 +31,10 @@ class CustomTracingTest < Minitest::Test
31
31
  assert_equal :custom_trace, first_span[:data][:sdk][:name]
32
32
  assert_equal 1, first_span[:data][:sdk][:custom][:tags][:one]
33
33
 
34
+ # Custom tracing root spans should default to entry type
35
+ assert_equal 1, first_span[:k]
36
+ assert_equal :entry, first_span[:data][:sdk][:type]
37
+
34
38
  assert first_span.key?(:f)
35
39
  assert first_span[:f].key?(:e)
36
40
  assert first_span[:f].key?(:h)
@@ -105,6 +105,38 @@ class TracerTest < Minitest::Test
105
105
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_two], 2
106
106
  end
107
107
 
108
+ def test_custom_complex_trace_block
109
+ clear_all!
110
+ ::Instana.tracer.start_or_continue_trace(:root_span, {:one => 1}) do
111
+ sleep 0.2
112
+ ::Instana.tracer.trace(:sub_span, {:sub_two => 2}) do
113
+ sleep 0.2
114
+ end
115
+ end
116
+
117
+ spans = ::Instana.processor.queued_spans
118
+ assert_equal 2, spans.length
119
+
120
+ root_span = find_first_span_by_name(spans, :root_span)
121
+ sub_span = find_first_span_by_name(spans, :sub_span)
122
+
123
+ assert_equal root_span[:n], :sdk
124
+ assert_equal root_span[:data][:sdk][:name], :root_span
125
+ assert_equal root_span[:data][:sdk][:type], :entry
126
+ assert_equal root_span[:k], 1
127
+ assert_equal root_span[:p], nil
128
+ assert_equal root_span[:t], root_span[:s]
129
+ assert_equal root_span[:data][:sdk][:custom][:tags][:one], 1
130
+
131
+ assert_equal sub_span[:n], :sdk
132
+ assert_equal sub_span[:data][:sdk][:name], :sub_span
133
+ assert_equal sub_span[:data][:sdk][:type], :intermediate
134
+ assert_equal sub_span[:k], 3
135
+ assert_equal sub_span[:p], root_span[:s]
136
+ assert_equal sub_span[:t], root_span[:t]
137
+ assert_equal sub_span[:data][:sdk][:custom][:tags][:sub_two], 2
138
+ end
139
+
108
140
  def test_basic_low_level_tracing
109
141
  clear_all!
110
142
 
@@ -189,8 +221,8 @@ class TracerTest < Minitest::Test
189
221
 
190
222
  assert_equal sdk_span[:n], :sdk
191
223
  assert_equal sdk_span[:data][:sdk][:name], :test_trace
192
- assert_equal sdk_span[:data][:sdk][:type], :intermediate
193
- assert_equal sdk_span[:k], 3
224
+ assert_equal sdk_span[:data][:sdk][:type], :entry
225
+ assert_equal sdk_span[:k], 1
194
226
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:one], 1
195
227
  assert_equal sdk_span[:error], true
196
228
  assert_equal sdk_span[:ec], 1
@@ -211,8 +243,8 @@ class TracerTest < Minitest::Test
211
243
 
212
244
  assert_equal sdk_span[:n], :sdk
213
245
  assert_equal sdk_span[:data][:sdk][:name], :test_trace
214
- assert_equal sdk_span[:data][:sdk][:type], :intermediate
215
- assert_equal sdk_span[:k], 3
246
+ assert_equal sdk_span[:data][:sdk][:type], :entry
247
+ assert_equal sdk_span[:k], 1
216
248
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:one], 1
217
249
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:info_logged], 1
218
250
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:close_one], 1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instana
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.2
4
+ version: 1.10.3
5
5
  platform: java
6
6
  authors:
7
7
  - Peter Giacomo Lombardo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-09 00:00:00.000000000 Z
11
+ date: 2019-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -131,6 +131,7 @@ extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
133
  - ".codeclimate.yml"
134
+ - ".fasterer.yml"
134
135
  - ".gitignore"
135
136
  - ".rubocop.yml"
136
137
  - ".travis.yml"
@@ -142,7 +143,9 @@ files:
142
143
  - Rakefile
143
144
  - Tracing.md
144
145
  - Troubleshooting.md
146
+ - benchmarks/10k-rack-traces.rb
145
147
  - benchmarks/Gemfile
148
+ - benchmarks/Gemfile.lock
146
149
  - benchmarks/id_generation.rb
147
150
  - benchmarks/opentracing.rb
148
151
  - benchmarks/rack_vanilla_vs_traced.rb
@@ -156,6 +159,7 @@ files:
156
159
  - gemfiles/rails32.gemfile
157
160
  - gemfiles/rails42.gemfile
158
161
  - gemfiles/rails50.gemfile
162
+ - gemfiles/rails52.gemfile
159
163
  - instana.gemspec
160
164
  - lib/instana.rb
161
165
  - lib/instana/agent.rb