instana 1.5.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|