instana 1.11.5 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -153,4 +153,16 @@ class ActionControllerTest < Minitest::Test
153
153
  assert ac_span.key?(:stack)
154
154
  assert 1, ac_span[:ec]
155
155
  end
156
+
157
+ def test_path_template
158
+ clear_all!
159
+
160
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/world'))
161
+
162
+ spans = ::Instana.processor.queued_spans
163
+ rack_span = find_first_span_by_name(spans, :rack)
164
+
165
+ assert_equal false, rack_span.key?(:error)
166
+ assert_equal '/test/world(.:format)', rack_span[:data][:http][:path_tpl]
167
+ end
156
168
  end
@@ -40,5 +40,19 @@ if defined?(::Roda)
40
40
  assert first_span[:data][:http].key?(:host)
41
41
  assert_equal "example.org", first_span[:data][:http][:host]
42
42
  end
43
+
44
+ def test_path_template
45
+ clear_all!
46
+
47
+ r = get '/greet/instana'
48
+ assert last_response.ok?
49
+
50
+ spans = ::Instana.processor.queued_spans
51
+ assert_equal 1, spans.count
52
+
53
+ first_span = spans.first
54
+ assert_equal :rack, first_span[:n]
55
+ assert_equal '/greet/{name}', first_span[:data][:http][:path_tpl]
56
+ end
43
57
  end
44
58
  end
@@ -1,4 +1,4 @@
1
-
1
+ require 'sinatra'
2
2
  if defined?(::Sinatra)
3
3
  require 'test_helper'
4
4
  require File.expand_path(File.dirname(__FILE__) + '/../apps/sinatra')
@@ -17,28 +17,50 @@ if defined?(::Sinatra)
17
17
  r = get '/'
18
18
  assert last_response.ok?
19
19
 
20
- assert r.headers.key?("X-Instana-T")
21
- assert r.headers.key?("X-Instana-S")
22
20
 
23
21
  spans = ::Instana.processor.queued_spans
24
22
  assert_equal 1, spans.count
25
23
 
26
- first_span = spans.first
27
- assert_equal :rack, first_span[:n]
28
- assert first_span.key?(:data)
29
- assert first_span[:data].key?(:http)
24
+ rack_span = spans.first
25
+ assert_equal :rack, rack_span[:n]
26
+ # ::Instana::Util.pry!
30
27
 
31
- assert first_span[:data][:http].key?(:method)
32
- assert_equal "GET", first_span[:data][:http][:method]
28
+ assert r.headers.key?("X-Instana-T")
29
+ assert r.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
30
+ assert r.headers.key?("X-Instana-S")
31
+ assert r.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
32
+ assert r.headers.key?("X-Instana-L")
33
+ assert r.headers["X-Instana-L"] == '1'
34
+ assert r.headers.key?("Server-Timing")
35
+ assert r.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
36
+
37
+ assert rack_span.key?(:data)
38
+ assert rack_span[:data].key?(:http)
39
+ assert rack_span[:data][:http].key?(:method)
40
+ assert_equal "GET", rack_span[:data][:http][:method]
33
41
 
34
- assert first_span[:data][:http].key?(:url)
35
- assert_equal "/", first_span[:data][:http][:url]
42
+ assert rack_span[:data][:http].key?(:url)
43
+ assert_equal "/", rack_span[:data][:http][:url]
36
44
 
37
- assert first_span[:data][:http].key?(:status)
38
- assert_equal 200, first_span[:data][:http][:status]
45
+ assert rack_span[:data][:http].key?(:status)
46
+ assert_equal 200, rack_span[:data][:http][:status]
39
47
 
40
- assert first_span[:data][:http].key?(:host)
41
- assert_equal "example.org", first_span[:data][:http][:host]
48
+ assert rack_span[:data][:http].key?(:host)
49
+ assert_equal "example.org", rack_span[:data][:http][:host]
50
+ end
51
+
52
+ def test_path_template
53
+ clear_all!
54
+
55
+ r = get '/greet/instana'
56
+ assert last_response.ok?
57
+
58
+ spans = ::Instana.processor.queued_spans
59
+ assert_equal 1, spans.count
60
+
61
+ first_span = spans.first
62
+ assert_equal :rack, first_span[:n]
63
+ assert_equal '/greet/:name', first_span[:data][:http][:path_tpl]
42
64
  end
43
65
  end
44
66
  end
@@ -14,7 +14,7 @@ class GrpcTest < Minitest::Test
14
14
 
15
15
  if error
16
16
  assert_equal true, data[:rpc][:error]
17
- assert_equal "2:RuntimeError: #{error}", data[:log][:message]
17
+ assert data[:log][:message].include?("2:RuntimeError: #{error}")
18
18
  end
19
19
  end
20
20
 
@@ -5,8 +5,8 @@ require 'resque'
5
5
 
6
6
  if ENV.key?('REDIS_URL')
7
7
  ::Resque.redis = ENV['REDIS_URL']
8
- elsif ENV.key?('I_REDIS_URL')
9
- ::Resque.redis = ENV['I_REDIS_URL']
8
+ elsif ENV.key?('REDIS_URL')
9
+ ::Resque.redis = ENV['REDIS_URL']
10
10
  else
11
11
  ::Resque.redis = 'localhost:6379'
12
12
  end
@@ -23,16 +23,15 @@ class ResqueClientTest < Minitest::Test
23
23
  end
24
24
 
25
25
  def test_enqueue
26
- ::Instana.tracer.start_or_continue_trace('resque-client_test') do
26
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
27
27
  ::Resque.enqueue(FastJob)
28
28
  end
29
29
 
30
30
  spans = ::Instana.processor.queued_spans
31
- assert_equal 3, spans.length
31
+ assert_equal 2, spans.length
32
32
 
33
33
  sdk_span = find_first_span_by_name(spans, :'resque-client_test')
34
34
  resque_span = find_first_span_by_name(spans, :'resque-client')
35
- redis_span = find_first_span_by_name(spans, :redis)
36
35
 
37
36
  assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
38
37
 
@@ -40,48 +39,42 @@ class ResqueClientTest < Minitest::Test
40
39
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
41
40
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
42
41
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
43
-
44
- assert_equal :redis, redis_span[:n]
45
42
  end
46
43
 
47
44
  def test_enqueue_to
48
- ::Instana.tracer.start_or_continue_trace('resque-client_test') do
45
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
49
46
  ::Resque.enqueue_to(:critical, FastJob)
50
47
  end
51
48
 
52
49
  spans = ::Instana.processor.queued_spans
53
- assert_equal 3, spans.length
50
+ assert_equal 2, spans.length
54
51
 
55
52
  sdk_span = find_first_span_by_name(spans, :'resque-client_test')
56
53
  resque_span = find_first_span_by_name(spans, :'resque-client')
57
- redis_span = find_first_span_by_name(spans, :redis)
58
54
 
59
55
  assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
60
56
  assert_equal :"resque-client", resque_span[:n]
61
57
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
62
58
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
63
59
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
64
- assert_equal :redis, redis_span[:n]
65
60
  end
66
61
 
67
62
  def test_dequeue
68
- ::Instana.tracer.start_or_continue_trace('resque-client_test', '', {}) do
63
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test', '', {}) do
69
64
  ::Resque.dequeue(FastJob, { :generate => :farfalla })
70
65
  end
71
66
 
72
67
  spans = ::Instana.processor.queued_spans
73
- assert_equal 3, spans.length
68
+ assert_equal 2, spans.length
74
69
 
75
70
  sdk_span = find_first_span_by_name(spans, :'resque-client_test')
76
71
  resque_span = find_first_span_by_name(spans, :'resque-client')
77
- redis_span = find_first_span_by_name(spans, :redis)
78
72
 
79
73
  assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
80
- assert_equal :"resque-client", spans[1][:n]
74
+ assert_equal :"resque-client", resque_span[:n]
81
75
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
82
76
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
83
77
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
84
- assert_equal :redis, redis_span[:n]
85
78
  end
86
79
 
87
80
  def test_worker_job
@@ -7,8 +7,8 @@ class ErrorJob
7
7
  def self.perform
8
8
  if ENV.key?('REDIS_URL')
9
9
  redis = Redis.new(:url => ENV['REDIS_URL'])
10
- elsif ENV.key?('I_REDIS_URL')
11
- redis = Redis.new(:url => ENV['I_REDIS_URL'])
10
+ elsif ENV.key?('REDIS_URL')
11
+ redis = Redis.new(:url => ENV['REDIS_URL'])
12
12
  else
13
13
  redis = Redis.new(:url => 'localhost:6379')
14
14
  end
@@ -7,8 +7,8 @@ class FastJob
7
7
  def self.perform
8
8
  if ENV.key?('REDIS_URL')
9
9
  redis = Redis.new(:url => ENV['REDIS_URL'])
10
- elsif ENV.key?('I_REDIS_URL')
11
- redis = Redis.new(:url => ENV['I_REDIS_URL'])
10
+ elsif ENV.key?('REDIS_URL')
11
+ redis = Redis.new(:url => ENV['REDIS_URL'])
12
12
  else
13
13
  redis = Redis.new(:url => 'redis://localhost:6379')
14
14
  end
@@ -0,0 +1,73 @@
1
+ require 'test_helper'
2
+
3
+ class SecretsTest < Minitest::Test
4
+ def setup
5
+ @subject = Instana::Secrets.new
6
+ end
7
+
8
+ def test_equals_ignore_case
9
+ sample_config = {
10
+ "matcher"=>"equals-ignore-case",
11
+ "list"=>["key"]
12
+ }
13
+
14
+ url = url_for(%w(key Str kEy KEY))
15
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(key kEy KEY)
16
+ end
17
+
18
+ def test_equals
19
+ sample_config = {
20
+ "matcher"=>"equals",
21
+ "list"=>["key", "kEy"]
22
+ }
23
+
24
+ url = url_for(%w(key Str kEy KEY))
25
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(key kEy)
26
+ end
27
+
28
+ def test_contains_ignore_case
29
+ sample_config = {
30
+ "matcher"=>"contains-ignore-case",
31
+ "list"=>["stan"]
32
+ }
33
+
34
+ url = url_for(%w(instantiate conTESTant sample))
35
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate conTESTant)
36
+ end
37
+
38
+ def test_contains
39
+ sample_config = {
40
+ "matcher"=>"contains",
41
+ "list"=>["stan"]
42
+ }
43
+
44
+ url = url_for(%w(instantiate conTESTant sample))
45
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate)
46
+
47
+ end
48
+
49
+ def test_regexp
50
+ sample_config = {
51
+ "matcher"=>"regex",
52
+ "list"=>["l{2}"]
53
+ }
54
+
55
+ url = url_for(%w(ball foot move))
56
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(ball)
57
+ end
58
+
59
+ private
60
+
61
+ def url_for(keys)
62
+ url = URI('http://example.com')
63
+ url.query = URI.encode_www_form(keys.map { |k| [k, rand(1..100)]})
64
+ url.to_s
65
+ end
66
+
67
+ def assert_redacted(str, keys)
68
+ url = URI(str)
69
+ params = CGI.parse(url.query)
70
+
71
+ assert_equal keys, params.select { |_, v| v == %w(<redacted>) }.keys, 'to be redacted'
72
+ end
73
+ end
@@ -39,17 +39,17 @@ when /libraries/
39
39
  end
40
40
  end
41
41
 
42
- ENV['I_REDIS_URL'] ||= 'redis://127.0.0.1:6379'
42
+ ENV['REDIS_URL'] ||= 'redis://127.0.0.1:6379'
43
43
 
44
44
  # Configure redis for sidekiq client
45
45
  Sidekiq.configure_client do |config|
46
- config.redis = { url: ENV['I_REDIS_URL'] }
46
+ config.redis = { url: ENV['REDIS_URL'] }
47
47
  end
48
48
 
49
49
  # Configure redis for sidekiq worker
50
50
  $sidekiq_mode = :server
51
51
  ::Sidekiq.configure_server do |config|
52
- config.redis = { url: ENV['I_REDIS_URL'] }
52
+ config.redis = { url: ENV['REDIS_URL'] }
53
53
  end
54
54
  $sidekiq_mode = :client
55
55
 
@@ -46,6 +46,37 @@ class TracerTest < Minitest::Test
46
46
  assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
47
47
  end
48
48
 
49
+ def test_exotic_tag_types
50
+ clear_all!
51
+
52
+ assert_equal false, ::Instana.tracer.tracing?
53
+
54
+ require 'resolv'
55
+ r = Resolv::DNS.new
56
+ ipv4 = r.getaddress("www.pwpush.com")
57
+
58
+ ::Instana.tracer.start_or_continue_trace(:rack, {:ipaddr => ipv4}) do
59
+ assert_equal true, ::Instana.tracer.tracing?
60
+ sleep 0.1
61
+ end
62
+
63
+ spans = ::Instana.processor.queued_spans
64
+ assert_equal 1, spans.length
65
+
66
+ first_span = spans.first
67
+ assert_equal :rack, first_span[:n]
68
+ assert first_span[:ts].is_a?(Integer)
69
+ assert first_span[:d].is_a?(Integer)
70
+ assert first_span[:d].between?(100, 130)
71
+ assert first_span.key?(:data)
72
+ assert first_span[:data].key?(:ipaddr)
73
+ assert first_span[:data][:ipaddr].is_a?(String)
74
+ assert first_span.key?(:f)
75
+ assert first_span[:f].key?(:e)
76
+ assert first_span[:f].key?(:h)
77
+ assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
78
+ end
79
+
49
80
  def test_errors_are_properly_propagated
50
81
  clear_all!
51
82
  exception_raised = false
@@ -198,7 +229,6 @@ class TracerTest < Minitest::Test
198
229
  assert_equal sdk_span[:k], 3
199
230
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_info], 1
200
231
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_exit_info], 1
201
-
202
232
  end
203
233
 
204
234
  def test_block_tracing_error_capture
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.11.5
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Giacomo Lombardo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-24 00:00:00.000000000 Z
11
+ date: 2021-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -173,11 +173,11 @@ executables: []
173
173
  extensions: []
174
174
  extra_rdoc_files: []
175
175
  files:
176
+ - ".circleci/config.yml"
176
177
  - ".codeclimate.yml"
177
178
  - ".fasterer.yml"
178
179
  - ".gitignore"
179
180
  - ".rubocop.yml"
180
- - ".travis.yml"
181
181
  - Dockerfile
182
182
  - Gemfile
183
183
  - LICENSE
@@ -242,6 +242,7 @@ files:
242
242
  - lib/instana/opentracing/carrier.rb
243
243
  - lib/instana/opentracing/tracer.rb
244
244
  - lib/instana/rack.rb
245
+ - lib/instana/secrets.rb
245
246
  - lib/instana/setup.rb
246
247
  - lib/instana/test.rb
247
248
  - lib/instana/thread_local.rb
@@ -287,6 +288,7 @@ files:
287
288
  - test/jobs/sidekiq_job_2.rb
288
289
  - test/models/block.rb
289
290
  - test/models/block6.rb
291
+ - test/secrets_test.rb
290
292
  - test/servers/grpc_50051.rb
291
293
  - test/servers/helpers/sidekiq_worker_initializer.rb
292
294
  - test/servers/rackapp_6511.rb
@@ -296,7 +298,6 @@ files:
296
298
  - test/tracing/custom_test.rb
297
299
  - test/tracing/id_management_test.rb
298
300
  - test/tracing/opentracing_test.rb
299
- - test/tracing/trace_test.rb
300
301
  - test/tracing/tracer_async_test.rb
301
302
  - test/tracing/tracer_test.rb
302
303
  homepage: https://www.instana.com/
@@ -322,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
322
323
  - !ruby/object:Gem::Version
323
324
  version: '0'
324
325
  requirements: []
325
- rubygems_version: 3.0.6
326
+ rubygems_version: 3.1.4
326
327
  signing_key:
327
328
  specification_version: 4
328
329
  summary: Ruby Distributed Tracing & Metrics Sensor for Instana
@@ -332,11 +333,11 @@ test_files:
332
333
  - test/tracing/tracer_test.rb
333
334
  - test/tracing/custom_test.rb
334
335
  - test/tracing/opentracing_test.rb
335
- - test/tracing/trace_test.rb
336
336
  - test/tracing/tracer_async_test.rb
337
337
  - test/agent/agent_test.rb
338
338
  - test/models/block.rb
339
339
  - test/models/block6.rb
340
+ - test/secrets_test.rb
340
341
  - test/instrumentation/sidekiq-client_test.rb
341
342
  - test/instrumentation/resque_test.rb
342
343
  - test/instrumentation/sidekiq-worker_test.rb
@@ -1,43 +0,0 @@
1
- language: ruby
2
-
3
- cache:
4
- bundler: true
5
- directories:
6
- - vendor/bundle
7
-
8
- rvm:
9
- - 2.6
10
- - 2.4
11
-
12
- before_install:
13
- - gem update --system
14
- - gem install bundler
15
- - gem --version
16
-
17
- before_script:
18
- - psql -c 'create database travis_ci_test;' -U postgres
19
- - mysql -e 'CREATE DATABASE travis_ci_test;'
20
-
21
- script: "bundle exec rake test"
22
-
23
- services:
24
- - memcached
25
- - redis
26
- - mysql
27
- - postgresql
28
-
29
- gemfile:
30
- - Gemfile
31
- - gemfiles/libraries.gemfile
32
- - gemfiles/rails50.gemfile
33
- - gemfiles/rails60.gemfile
34
-
35
- matrix:
36
- exclude:
37
- - rvm: 2.4
38
- gemfile: gemfiles/rails60.gemfile
39
-
40
- notifications:
41
- slack:
42
- rooms:
43
- secure: Ae9tJmBO9/sgYWthHRS5uufAf8s6uIMdtmQn+gBkcAXaMWJgt1IAzpIj98Qsg15/lhHS8ezwCe7WIAWC4mM1cnwl/hP195dbgLzF4D2uOjaIXj55ckIIE06jBX1yHapu0vMFSaKwgL4auEEVg4xkehBb9TzLNG/LbExadZQOIkeLdtgU04VrPfDC9pZWPplXT4kzjMZkMESzBYaCfNl6eenu0sHdoxSvngv52MImog6aZQKT+k3ccAa1yzZNhUdy4gSZi1HafXdSCn4UTPDtkNIlsWBW8yprICLxZV/NvgUTEEJYSHO6Ucx9Er22LzKtNbEYlAs1GErGWjDzpqvvXt/5UwNx0rLDrVKI/xMIELEbT047mSgJ8tpVd0ErGA/bnDfbF2oDFTAEXq4jaeAMaVR9Q1CW0ZZF2Jh5jOKc41U+AVGgaMDaBA0ukDSeXvJcnteZ9EllOO8ZAtC2FKtBNnj36W13KTR0TkjMCl+KOiVJXnOyRJIR+CUL9BdDuODBVPZHqZaZ48N+MOG9dRb+fvkdTnwh7hU+UmR08kOsd4x+dDlm4dBrFrB8v8udQ7XuBN9AOZty2CPWFUSJM1BxtetyS3We0L6lQ8o/B9STFNK4KTa/M8wNq1Fm85h3ZKHHIHDpQnXM6vD8SV1p9u91C5UI8rEyxzW5IaT2oqXsCzU=