instana 1.5.2 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -0
- data/gemfiles/libraries.gemfile +7 -0
- data/lib/instana/config.rb +2 -0
- data/lib/instana/instrumentation/sidekiq-client.rb +38 -0
- data/lib/instana/instrumentation/sidekiq-worker.rb +43 -0
- data/lib/instana/tracing/span.rb +3 -3
- data/lib/instana/version.rb +1 -1
- data/test/instrumentation/grpc_test.rb +2 -0
- data/test/instrumentation/sidekiq-client_test.rb +130 -0
- data/test/instrumentation/sidekiq-worker_test.rb +179 -0
- data/test/jobs/sidekiq_job_1.rb +6 -0
- data/test/jobs/sidekiq_job_2.rb +7 -0
- data/test/servers/sidekiq/worker.rb +29 -0
- data/test/test_helper.rb +30 -0
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d5a3d47c55fdc82fdf62db42d36c098cf4e5855
|
4
|
+
data.tar.gz: 8630f17d5794a9f5786fd53e817b1efbcee0ba1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f50211eafb3e77d5a50aa33f81330e5d1d92116e2bb203ad95928ea46a0746ee1a5826052b21d97db1e81199f9686407589f3a0d05c8de58a7e4f021aad572b
|
7
|
+
data.tar.gz: 8cd886516b92ab60f13746816da3b928a69de26bd2d4779436f1423b0db0693c652cc8b46c90c8439e87e98b06511a6d6fbe2076ccaf6002db3c9f3d7831b9cd
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/gemfiles/libraries.gemfile
CHANGED
@@ -42,6 +42,13 @@ gem 'excon'
|
|
42
42
|
# Memcache
|
43
43
|
gem 'dalli'
|
44
44
|
|
45
|
+
# Background Job queuing and processing
|
46
|
+
if RUBY_VERSION < '2.2'
|
47
|
+
gem 'sidekiq', '~> 4.2.10'
|
48
|
+
else
|
49
|
+
gem 'sidekiq', '> 5.0'
|
50
|
+
end
|
51
|
+
|
45
52
|
# Rack v2 dropped support for Ruby 2.2 and higher.
|
46
53
|
if RUBY_VERSION < '2.2'
|
47
54
|
gem 'rack', '< 2.0'
|
data/lib/instana/config.rb
CHANGED
@@ -40,6 +40,8 @@ module Instana
|
|
40
40
|
@config[:nethttp] = { :enabled => true }
|
41
41
|
@config[:'rest-client'] = { :enabled => true }
|
42
42
|
@config[:grpc] = { :enabled => true }
|
43
|
+
@config[:'sidekiq-client'] = { :enabled => true }
|
44
|
+
@config[:'sidekiq-worker'] = { :enabled => true }
|
43
45
|
end
|
44
46
|
|
45
47
|
def [](key)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Instana
|
2
|
+
module Instrumentation
|
3
|
+
class SidekiqClient
|
4
|
+
def call(worker_class, msg, queue, _redis_pool)
|
5
|
+
kv_payload = { :'sidekiq-client' => {} }
|
6
|
+
kv_payload[:'sidekiq-client'][:queue] = queue
|
7
|
+
kv_payload[:'sidekiq-client'][:job] = worker_class
|
8
|
+
kv_payload[:'sidekiq-client'][:retry] = msg['retry']
|
9
|
+
::Instana.tracer.log_entry(:'sidekiq-client', kv_payload)
|
10
|
+
|
11
|
+
context = ::Instana.tracer.context
|
12
|
+
if context
|
13
|
+
msg['X-Instana-T'] = context.trace_id_header
|
14
|
+
msg['X-Instana-S'] = context.span_id_header
|
15
|
+
end
|
16
|
+
|
17
|
+
result = yield
|
18
|
+
|
19
|
+
kv_payload[:'sidekiq-client'][:job_id] = result['jid']
|
20
|
+
result
|
21
|
+
rescue => e
|
22
|
+
::Instana.tracer.log_error(e)
|
23
|
+
raise
|
24
|
+
ensure
|
25
|
+
::Instana.tracer.log_exit(:'sidekiq-client', kv_payload)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
if defined?(::Sidekiq) && ::Instana.config[:'sidekiq-client'][:enabled]
|
32
|
+
::Sidekiq.configure_client do |cfg|
|
33
|
+
cfg.client_middleware do |chain|
|
34
|
+
::Instana.logger.warn "Instrumenting Sidekiq client"
|
35
|
+
chain.add ::Instana::Instrumentation::SidekiqClient
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Instana
|
2
|
+
module Instrumentation
|
3
|
+
class SidekiqWorker
|
4
|
+
def call(_worker, msg, _queue)
|
5
|
+
kv_payload = { :'sidekiq-worker' => {} }
|
6
|
+
kv_payload[:'sidekiq-worker'][:job_id] = msg['jid']
|
7
|
+
kv_payload[:'sidekiq-worker'][:queue] = msg['queue']
|
8
|
+
kv_payload[:'sidekiq-worker'][:job] = msg['class']
|
9
|
+
kv_payload[:'sidekiq-worker'][:retry] = msg['retry']
|
10
|
+
|
11
|
+
context = {}
|
12
|
+
if msg.key?('X-Instana-T')
|
13
|
+
trace_id = msg.delete('X-Instana-T')
|
14
|
+
span_id = msg.delete('X-Instana-S')
|
15
|
+
context[:trace_id] = ::Instana::Util.header_to_id(trace_id)
|
16
|
+
context[:span_id] = ::Instana::Util.header_to_id(span_id) if span_id
|
17
|
+
end
|
18
|
+
|
19
|
+
::Instana.tracer.log_start_or_continue(
|
20
|
+
:'sidekiq-worker', kv_payload, context
|
21
|
+
)
|
22
|
+
|
23
|
+
yield
|
24
|
+
rescue => e
|
25
|
+
kv_payload[:'sidekiq-worker'][:error] = true
|
26
|
+
::Instana.tracer.log_info(kv_payload)
|
27
|
+
::Instana.tracer.log_error(e)
|
28
|
+
raise
|
29
|
+
ensure
|
30
|
+
::Instana.tracer.log_end(:'sidekiq-worker', {}) if ::Instana.tracer.tracing?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if defined?(::Sidekiq) && ::Instana.config[:'sidekiq-worker'][:enabled]
|
37
|
+
::Sidekiq.configure_server do |cfg|
|
38
|
+
cfg.server_middleware do |chain|
|
39
|
+
::Instana.logger.warn "Instrumenting Sidekiq worker"
|
40
|
+
chain.add ::Instana::Instrumentation::SidekiqWorker
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/instana/tracing/span.rb
CHANGED
@@ -2,9 +2,9 @@ module Instana
|
|
2
2
|
class Span
|
3
3
|
REGISTERED_SPANS = [ :actioncontroller, :actionview, :activerecord, :excon,
|
4
4
|
:memcache, :'net-http', :rack, :render, :'rpc-client',
|
5
|
-
:'rpc-server' ].freeze
|
6
|
-
ENTRY_SPANS = [ :rack, :'rpc-server' ].freeze
|
7
|
-
EXIT_SPANS = [ :activerecord, :excon, :'net-http', :'rpc-client' ].freeze
|
5
|
+
:'rpc-server', :'sidekiq-client', :'sidekiq-worker' ].freeze
|
6
|
+
ENTRY_SPANS = [ :rack, :'rpc-server', :'sidekiq-worker' ].freeze
|
7
|
+
EXIT_SPANS = [ :activerecord, :excon, :'net-http', :'rpc-client', :'sidekiq-client' ].freeze
|
8
8
|
HTTP_SPANS = [ :rack, :excon, :'net-http' ].freeze
|
9
9
|
|
10
10
|
attr_accessor :parent
|
data/lib/instana/version.rb
CHANGED
@@ -76,6 +76,7 @@ class GrpcTest < Minitest::Test
|
|
76
76
|
PingPongService::PingRequest.new(message: 'Hello World')
|
77
77
|
)
|
78
78
|
end
|
79
|
+
sleep 1
|
79
80
|
|
80
81
|
assert 'Hello World', response.message
|
81
82
|
|
@@ -111,6 +112,7 @@ class GrpcTest < Minitest::Test
|
|
111
112
|
end
|
112
113
|
)
|
113
114
|
end
|
115
|
+
sleep 1
|
114
116
|
|
115
117
|
assert '01234', response.message
|
116
118
|
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SidekiqClientTest < Minitest::Test
|
4
|
+
def test_config_defaults
|
5
|
+
assert ::Instana.config[:'sidekiq-client'].is_a?(Hash)
|
6
|
+
assert ::Instana.config[:'sidekiq-client'].key?(:enabled)
|
7
|
+
assert_equal true, ::Instana.config[:'sidekiq-client'][:enabled]
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_enqueue
|
11
|
+
clear_all!
|
12
|
+
|
13
|
+
Instana.tracer.start_or_continue_trace(:sidekiqtests) do
|
14
|
+
::Sidekiq::Client.push(
|
15
|
+
'queue' => 'some_random_queue',
|
16
|
+
'class' => ::SidekiqJobOne,
|
17
|
+
'args' => [1, 2, 3],
|
18
|
+
'retry' => false
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
queue = ::Sidekiq::Queue.new('some_random_queue')
|
23
|
+
job = queue.first
|
24
|
+
|
25
|
+
assert_job_enqueued(job)
|
26
|
+
assert_normal_trace_recorded(job)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_enqueue_failure
|
30
|
+
clear_all!
|
31
|
+
|
32
|
+
Instana.tracer.start_or_continue_trace(:sidekiqtests) do
|
33
|
+
add_sidekiq_exception_middleware
|
34
|
+
begin
|
35
|
+
::Sidekiq::Client.push(
|
36
|
+
'queue' => 'some_random_queue',
|
37
|
+
'class' => ::SidekiqJobTwo,
|
38
|
+
'args' => [1, 2, 3],
|
39
|
+
'retry' => false
|
40
|
+
)
|
41
|
+
rescue; end
|
42
|
+
remove_sidekiq_exception_middleware
|
43
|
+
end
|
44
|
+
|
45
|
+
queue = ::Sidekiq::Queue.new('some_random_queue')
|
46
|
+
assert_equal 0, queue.size
|
47
|
+
|
48
|
+
assert_failure_trace_recorded
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def assert_job_enqueued(job)
|
54
|
+
job_message = JSON.parse(job.value)
|
55
|
+
|
56
|
+
assert_equal 'some_random_queue', job_message['queue']
|
57
|
+
assert_equal 'SidekiqJobOne', job_message['class']
|
58
|
+
assert_equal [1, 2, 3], job_message['args']
|
59
|
+
assert_equal false, job_message['retry']
|
60
|
+
assert_equal false, job_message['X-Instana-T'].nil?
|
61
|
+
assert_equal false, job_message['X-Instana-S'].nil?
|
62
|
+
end
|
63
|
+
|
64
|
+
def assert_normal_trace_recorded(job)
|
65
|
+
assert_equal 1, ::Instana.processor.queue_count
|
66
|
+
client_trace = Instana.processor.queued_traces.first
|
67
|
+
|
68
|
+
assert_equal 2, client_trace.spans.count
|
69
|
+
spans = client_trace.spans.to_a
|
70
|
+
first_span = spans[0]
|
71
|
+
second_span = spans[1]
|
72
|
+
|
73
|
+
assert_equal :sdk, first_span[:n]
|
74
|
+
assert_equal :sidekiqtests, first_span[:data][:sdk][:name]
|
75
|
+
|
76
|
+
assert_equal first_span.id, second_span[:p]
|
77
|
+
|
78
|
+
assert_equal :'sidekiq-client', second_span[:n]
|
79
|
+
assert_equal 'some_random_queue', second_span[:data][:'sidekiq-client'][:queue]
|
80
|
+
assert_equal 'SidekiqJobOne', second_span[:data][:'sidekiq-client'][:job]
|
81
|
+
assert_equal false, second_span[:data][:'sidekiq-client'][:retry]
|
82
|
+
assert_equal job['jid'], second_span[:data][:'sidekiq-client'][:job_id]
|
83
|
+
end
|
84
|
+
|
85
|
+
def assert_failure_trace_recorded
|
86
|
+
assert_equal 1, ::Instana.processor.queue_count
|
87
|
+
client_trace = Instana.processor.queued_traces.first
|
88
|
+
|
89
|
+
assert_equal 2, client_trace.spans.count
|
90
|
+
spans = client_trace.spans.to_a
|
91
|
+
first_span = spans[0]
|
92
|
+
second_span = spans[1]
|
93
|
+
|
94
|
+
assert_equal :sdk, first_span[:n]
|
95
|
+
assert_equal :sidekiqtests, first_span[:data][:sdk][:name]
|
96
|
+
|
97
|
+
assert_equal first_span.id, second_span[:p]
|
98
|
+
|
99
|
+
assert_equal :'sidekiq-client', second_span[:n]
|
100
|
+
assert_equal true, second_span[:error]
|
101
|
+
assert_equal false, second_span[:stack].nil?
|
102
|
+
|
103
|
+
assert_equal 'some_random_queue', second_span[:data][:'sidekiq-client'][:queue]
|
104
|
+
assert_equal 'SidekiqJobTwo', second_span[:data][:'sidekiq-client'][:job]
|
105
|
+
assert_equal false, second_span[:data][:'sidekiq-client'][:retry]
|
106
|
+
assert_equal 'Fail to enqueue job', second_span[:data][:log][:message]
|
107
|
+
end
|
108
|
+
|
109
|
+
SidekiqMiddlewareException = Class.new do
|
110
|
+
def call(*_args)
|
111
|
+
raise 'Fail to enqueue job'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def add_sidekiq_exception_middleware
|
116
|
+
Sidekiq.configure_client do |config|
|
117
|
+
config.client_middleware do |chain|
|
118
|
+
chain.add SidekiqMiddlewareException
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def remove_sidekiq_exception_middleware
|
124
|
+
Sidekiq.configure_client do |config|
|
125
|
+
config.client_middleware do |chain|
|
126
|
+
chain.remove SidekiqMiddlewareException
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SidekiqServerTest < Minitest::Test
|
4
|
+
def test_config_defaults
|
5
|
+
assert ::Instana.config[:'sidekiq-worker'].is_a?(Hash)
|
6
|
+
assert ::Instana.config[:'sidekiq-worker'].key?(:enabled)
|
7
|
+
assert_equal true, ::Instana.config[:'sidekiq-worker'][:enabled]
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_successful_worker_starts_new_trace
|
11
|
+
clear_all!
|
12
|
+
$sidekiq_mode = :server
|
13
|
+
inject_instrumentation
|
14
|
+
|
15
|
+
::Sidekiq.redis_pool.with do |redis|
|
16
|
+
redis.sadd('queues'.freeze, 'important')
|
17
|
+
redis.lpush(
|
18
|
+
'queue:important',
|
19
|
+
<<-JSON
|
20
|
+
{
|
21
|
+
"class":"SidekiqJobOne",
|
22
|
+
"args":[1,2,3],
|
23
|
+
"queue":"important",
|
24
|
+
"jid":"123456789"
|
25
|
+
}
|
26
|
+
JSON
|
27
|
+
)
|
28
|
+
end
|
29
|
+
sleep 1
|
30
|
+
|
31
|
+
assert_equal 1, ::Instana.processor.queue_count
|
32
|
+
assert_successful_worker_trace(::Instana.processor.queued_traces.first)
|
33
|
+
|
34
|
+
$sidekiq_mode = :client
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_failed_worker_starts_new_trace
|
38
|
+
clear_all!
|
39
|
+
$sidekiq_mode = :server
|
40
|
+
inject_instrumentation
|
41
|
+
|
42
|
+
::Sidekiq.redis_pool.with do |redis|
|
43
|
+
redis.sadd('queues'.freeze, 'important')
|
44
|
+
redis.lpush(
|
45
|
+
'queue:important',
|
46
|
+
<<-JSON
|
47
|
+
{
|
48
|
+
"class":"SidekiqJobTwo",
|
49
|
+
"args":[1,2,3],
|
50
|
+
"queue":"important",
|
51
|
+
"jid":"123456789"
|
52
|
+
}
|
53
|
+
JSON
|
54
|
+
)
|
55
|
+
end
|
56
|
+
sleep 1
|
57
|
+
assert_equal 1, ::Instana.processor.queue_count
|
58
|
+
assert_failed_worker_trace(::Instana.processor.queued_traces.first)
|
59
|
+
|
60
|
+
$sidekiq_mode = :client
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_successful_worker_continues_previous_trace
|
64
|
+
clear_all!
|
65
|
+
$sidekiq_mode = :server
|
66
|
+
inject_instrumentation
|
67
|
+
|
68
|
+
Instana.tracer.start_or_continue_trace(:sidekiqtests) do
|
69
|
+
::Sidekiq::Client.push(
|
70
|
+
'queue' => 'important',
|
71
|
+
'class' => ::SidekiqJobOne,
|
72
|
+
'args' => [1, 2, 3]
|
73
|
+
)
|
74
|
+
end
|
75
|
+
sleep 1
|
76
|
+
assert_equal 2, ::Instana.processor.queue_count
|
77
|
+
client_trace, worker_trace = differentiate_trace(
|
78
|
+
Instana.processor.queued_traces.to_a
|
79
|
+
)
|
80
|
+
assert_client_trace(client_trace, ::SidekiqJobOne)
|
81
|
+
assert_successful_worker_trace(worker_trace)
|
82
|
+
|
83
|
+
# Worker trace and client trace are in the same trace
|
84
|
+
assert_equal client_trace.spans.first['t'], worker_trace.spans.first['t']
|
85
|
+
|
86
|
+
$sidekiq_mode = :client
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_failed_worker_continues_previous_trace
|
90
|
+
clear_all!
|
91
|
+
$sidekiq_mode = :server
|
92
|
+
inject_instrumentation
|
93
|
+
|
94
|
+
Instana.tracer.start_or_continue_trace(:sidekiqtests) do
|
95
|
+
::Sidekiq::Client.push(
|
96
|
+
'queue' => 'important',
|
97
|
+
'class' => ::SidekiqJobTwo,
|
98
|
+
'args' => [1, 2, 3]
|
99
|
+
)
|
100
|
+
end
|
101
|
+
sleep 1
|
102
|
+
assert_equal 2, ::Instana.processor.queue_count
|
103
|
+
client_trace, worker_trace = differentiate_trace(
|
104
|
+
Instana.processor.queued_traces.to_a
|
105
|
+
)
|
106
|
+
assert_client_trace(client_trace, ::SidekiqJobTwo)
|
107
|
+
assert_failed_worker_trace(worker_trace)
|
108
|
+
|
109
|
+
# Worker trace and client trace are in the same trace
|
110
|
+
assert_equal client_trace.spans.first['t'], worker_trace.spans.first['t']
|
111
|
+
|
112
|
+
$sidekiq_mode = :client
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def inject_instrumentation
|
118
|
+
# Add the instrumentation again to ensure injection in server mode
|
119
|
+
::Sidekiq.configure_server do |cfg|
|
120
|
+
cfg.server_middleware do |chain|
|
121
|
+
chain.add ::Instana::Instrumentation::SidekiqWorker
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def differentiate_trace(traces)
|
127
|
+
trying_client = traces[0]
|
128
|
+
trying_server = traces[1]
|
129
|
+
|
130
|
+
try_successfully = trying_client.spans.any? do |span|
|
131
|
+
span.name == :'sidekiq-client'
|
132
|
+
end
|
133
|
+
|
134
|
+
if try_successfully
|
135
|
+
[trying_client, trying_server]
|
136
|
+
else
|
137
|
+
[trying_server, trying_client]
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def assert_successful_worker_trace(worker_trace)
|
142
|
+
assert_equal 1, worker_trace.spans.count
|
143
|
+
span = worker_trace.spans.first
|
144
|
+
|
145
|
+
assert_equal :'sidekiq-worker', span[:n]
|
146
|
+
|
147
|
+
assert_equal 'important', span[:data][:'sidekiq-worker'][:queue]
|
148
|
+
assert_equal 'SidekiqJobOne', span[:data][:'sidekiq-worker'][:job]
|
149
|
+
assert_equal false, span[:data][:'sidekiq-worker'][:job_id].nil?
|
150
|
+
end
|
151
|
+
|
152
|
+
def assert_failed_worker_trace(worker_trace)
|
153
|
+
assert_equal 1, worker_trace.spans.count
|
154
|
+
span = worker_trace.spans.first
|
155
|
+
|
156
|
+
assert_equal :'sidekiq-worker', span[:n]
|
157
|
+
|
158
|
+
assert_equal 'important', span[:data][:'sidekiq-worker'][:queue]
|
159
|
+
assert_equal 'SidekiqJobTwo', span[:data][:'sidekiq-worker'][:job]
|
160
|
+
assert_equal false, span[:data][:'sidekiq-worker'][:job_id].nil?
|
161
|
+
|
162
|
+
assert_equal true, span[:data][:'sidekiq-worker'][:error]
|
163
|
+
assert_equal 'Fail to execute the job', span[:data][:log][:message]
|
164
|
+
end
|
165
|
+
|
166
|
+
def assert_client_trace(client_trace, job)
|
167
|
+
assert_equal 2, client_trace.spans.count
|
168
|
+
first_span, second_span = client_trace.spans.to_a
|
169
|
+
|
170
|
+
assert_equal :sdk, first_span[:n]
|
171
|
+
assert_equal :sidekiqtests, first_span[:data][:sdk][:name]
|
172
|
+
|
173
|
+
assert_equal first_span.id, second_span[:p]
|
174
|
+
|
175
|
+
assert_equal :'sidekiq-client', second_span[:n]
|
176
|
+
assert_equal 'important', second_span[:data][:'sidekiq-client'][:queue]
|
177
|
+
assert_equal job.name, second_span[:data][:'sidekiq-client'][:job]
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'sidekiq/launcher'
|
2
|
+
require 'sidekiq/cli'
|
3
|
+
require 'sidekiq/api'
|
4
|
+
require 'sidekiq/processor'
|
5
|
+
|
6
|
+
require Dir.pwd + '/test/jobs/sidekiq_job_1.rb'
|
7
|
+
require Dir.pwd + '/test/jobs/sidekiq_job_2.rb'
|
8
|
+
|
9
|
+
::Instana.logger.info "Booting instrumented sidekiq worker for tests."
|
10
|
+
::Sidekiq.logger.level = ::Logger::FATAL
|
11
|
+
|
12
|
+
sidekiq_thread = Thread.new do
|
13
|
+
launcher = ::Sidekiq::Launcher.new(
|
14
|
+
::Sidekiq.options.merge(
|
15
|
+
queues: ['important'],
|
16
|
+
concurrency: 2
|
17
|
+
)
|
18
|
+
)
|
19
|
+
launcher.run
|
20
|
+
Thread.current[:worker] = launcher
|
21
|
+
end
|
22
|
+
|
23
|
+
Minitest.after_run do
|
24
|
+
::Instana.logger.info "Killing Sidekiq worker"
|
25
|
+
sidekiq_thread[:worker].stop
|
26
|
+
sleep 2
|
27
|
+
end
|
28
|
+
|
29
|
+
sleep 5
|
data/test/test_helper.rb
CHANGED
@@ -22,7 +22,36 @@ when /rails50|rails42|rails32/
|
|
22
22
|
::WebMock.disable_net_connect!(allow_localhost: true)
|
23
23
|
require './test/servers/rails_3205'
|
24
24
|
when /libraries/
|
25
|
+
# Configure gRPC
|
25
26
|
require './test/servers/grpc_50051.rb'
|
27
|
+
|
28
|
+
# Hook into sidekiq to control the current mode
|
29
|
+
$sidekiq_mode = :client
|
30
|
+
class << Sidekiq
|
31
|
+
def server?
|
32
|
+
$sidekiq_mode == :server
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
ENV['I_REDIS_URL'] ||= 'redis://127.0.0.1:6379'
|
37
|
+
|
38
|
+
# Configure redis for sidekiq client
|
39
|
+
Sidekiq.configure_client do |config|
|
40
|
+
config.redis = { url: ENV['I_REDIS_URL'] }
|
41
|
+
end
|
42
|
+
|
43
|
+
# Configure redis for sidekiq worker
|
44
|
+
$sidekiq_mode = :server
|
45
|
+
::Sidekiq.configure_server do |config|
|
46
|
+
config.redis = { url: ENV['I_REDIS_URL'] }
|
47
|
+
end
|
48
|
+
$sidekiq_mode = :client
|
49
|
+
|
50
|
+
require './test/servers/sidekiq/worker'
|
51
|
+
end
|
52
|
+
|
53
|
+
if defined?(::Redis)
|
54
|
+
$redis = Redis.new(url: ENV['I_REDIS_URL'])
|
26
55
|
end
|
27
56
|
|
28
57
|
Minitest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
@@ -33,5 +62,6 @@ Minitest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
|
33
62
|
def clear_all!
|
34
63
|
::Instana.processor.clear!
|
35
64
|
::Instana.tracer.clear!
|
65
|
+
$redis.flushall if $redis
|
36
66
|
nil
|
37
67
|
end
|
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.
|
4
|
+
version: 1.6.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: 2017-07-
|
11
|
+
date: 2017-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -205,6 +205,8 @@ files:
|
|
205
205
|
- lib/instana/instrumentation/net-http.rb
|
206
206
|
- lib/instana/instrumentation/rack.rb
|
207
207
|
- lib/instana/instrumentation/rest-client.rb
|
208
|
+
- lib/instana/instrumentation/sidekiq-client.rb
|
209
|
+
- lib/instana/instrumentation/sidekiq-worker.rb
|
208
210
|
- lib/instana/logger.rb
|
209
211
|
- lib/instana/opentracing/carrier.rb
|
210
212
|
- lib/instana/opentracing/tracer.rb
|
@@ -244,10 +246,15 @@ files:
|
|
244
246
|
- test/instrumentation/grpc_test.rb
|
245
247
|
- test/instrumentation/net-http_test.rb
|
246
248
|
- test/instrumentation/rest-client_test.rb
|
249
|
+
- test/instrumentation/sidekiq-client_test.rb
|
250
|
+
- test/instrumentation/sidekiq-worker_test.rb
|
251
|
+
- test/jobs/sidekiq_job_1.rb
|
252
|
+
- test/jobs/sidekiq_job_2.rb
|
247
253
|
- test/models/block.rb
|
248
254
|
- test/servers/grpc_50051.rb
|
249
255
|
- test/servers/rackapp_6511.rb
|
250
256
|
- test/servers/rails_3205.rb
|
257
|
+
- test/servers/sidekiq/worker.rb
|
251
258
|
- test/test_helper.rb
|
252
259
|
- test/tracing/custom_test.rb
|
253
260
|
- test/tracing/id_management_test.rb
|
@@ -302,10 +309,15 @@ test_files:
|
|
302
309
|
- test/instrumentation/grpc_test.rb
|
303
310
|
- test/instrumentation/net-http_test.rb
|
304
311
|
- test/instrumentation/rest-client_test.rb
|
312
|
+
- test/instrumentation/sidekiq-client_test.rb
|
313
|
+
- test/instrumentation/sidekiq-worker_test.rb
|
314
|
+
- test/jobs/sidekiq_job_1.rb
|
315
|
+
- test/jobs/sidekiq_job_2.rb
|
305
316
|
- test/models/block.rb
|
306
317
|
- test/servers/grpc_50051.rb
|
307
318
|
- test/servers/rackapp_6511.rb
|
308
319
|
- test/servers/rails_3205.rb
|
320
|
+
- test/servers/sidekiq/worker.rb
|
309
321
|
- test/test_helper.rb
|
310
322
|
- test/tracing/custom_test.rb
|
311
323
|
- test/tracing/id_management_test.rb
|