traceview 3.2.1-java → 3.3.0-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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/CHANGELOG.md +26 -0
- data/README.md +4 -10
- data/Rakefile +6 -3
- data/gemfiles/libraries.gemfile +2 -1
- data/gemfiles/rails23.gemfile +5 -0
- data/gemfiles/rails30.gemfile +5 -0
- data/gemfiles/rails31.gemfile +5 -0
- data/gemfiles/rails32.gemfile +5 -0
- data/lib/joboe_metal.rb +79 -66
- data/lib/oboe_metal.rb +67 -54
- data/lib/traceview.rb +2 -0
- data/lib/traceview/api/layerinit.rb +7 -5
- data/lib/traceview/api/logging.rb +8 -1
- data/lib/traceview/config.rb +7 -2
- data/lib/traceview/inst/sidekiq-client.rb +54 -0
- data/lib/traceview/inst/sidekiq-worker.rb +61 -0
- data/lib/traceview/test.rb +20 -0
- data/lib/traceview/util.rb +1 -0
- data/lib/traceview/version.rb +2 -2
- data/test/instrumentation/curb_test.rb +1 -1
- data/test/instrumentation/sidekiq-client_test.rb +131 -0
- data/test/instrumentation/sidekiq-worker_test.rb +180 -0
- data/test/jobs/db_worker_job.rb +29 -0
- data/test/jobs/error_worker_job.rb +10 -0
- data/test/jobs/remote_call_worker_job.rb +20 -0
- data/test/minitest_helper.rb +4 -1
- data/test/reporter/reporter_test.rb +14 -0
- data/test/servers/sidekiq.rb +35 -0
- data/test/servers/sidekiq.yml +7 -0
- data/test/servers/sidekiq_initializer.rb +22 -0
- data/test/support/config_test.rb +5 -1
- data/test/support/liboboe_settings_test.rb +1 -0
- metadata +23 -3
data/lib/traceview.rb
CHANGED
@@ -57,6 +57,8 @@ begin
|
|
57
57
|
# it will load all of the Ruby instrumentation
|
58
58
|
require 'traceview/ruby'
|
59
59
|
require 'oboe/backward_compatibility'
|
60
|
+
|
61
|
+
require 'traceview/test' if ENV['TRACEVIEW_GEM_TEST']
|
60
62
|
rescue => e
|
61
63
|
$stderr.puts "[traceview/error] Problem loading: #{e.inspect}"
|
62
64
|
$stderr.puts e.backtrace
|
@@ -11,11 +11,13 @@ module TraceView
|
|
11
11
|
# layer.
|
12
12
|
#
|
13
13
|
def report_init(layer = 'rack')
|
14
|
-
# Don't send __Init in development or
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
# Don't send __Init in development, test or if the gem
|
15
|
+
# isn't fully loaded (e.g. missing c-extension)
|
16
|
+
if %w(development test).include? ENV['RACK_ENV'] ||
|
17
|
+
ENV.key?('TRACEVIEW_GEM_TEST') ||
|
18
|
+
!TraceView.loaded
|
19
|
+
return
|
20
|
+
end
|
19
21
|
|
20
22
|
platform_info = TraceView::Util.build_init_report
|
21
23
|
|
@@ -1,6 +1,13 @@
|
|
1
1
|
# Copyright (c) 2013 AppNeta, Inc.
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
|
+
# Make sure Set is loaded if possible.
|
5
|
+
begin
|
6
|
+
require 'set'
|
7
|
+
rescue LoadError
|
8
|
+
class Set; end
|
9
|
+
end
|
10
|
+
|
4
11
|
module TraceView
|
5
12
|
module API
|
6
13
|
##
|
@@ -105,7 +112,7 @@ module TraceView
|
|
105
112
|
# sample rate and sample source
|
106
113
|
opts[:SampleRate] = TraceView.sample_rate
|
107
114
|
opts[:SampleSource] = TraceView.sample_source
|
108
|
-
opts[:TraceOrigin]
|
115
|
+
opts[:TraceOrigin] = :always_sampled
|
109
116
|
|
110
117
|
log_event(layer, 'entry', TraceView::Context.startTrace, opts)
|
111
118
|
end
|
data/lib/traceview/config.rb
CHANGED
@@ -14,8 +14,8 @@ module TraceView
|
|
14
14
|
@@instrumentation = [:action_controller, :action_view, :active_record,
|
15
15
|
:cassandra, :curb, :dalli, :em_http_request, :excon, :faraday,
|
16
16
|
:grape, :httpclient, :nethttp, :memcached, :memcache, :mongo,
|
17
|
-
:moped, :rack, :redis, :resque, :rest_client, :sequel,
|
18
|
-
:typhoeus]
|
17
|
+
:moped, :rack, :redis, :resque, :rest_client, :sequel, :sidekiqclient,
|
18
|
+
:sidekiqworker, :typhoeus]
|
19
19
|
|
20
20
|
# Subgrouping of instrumentation
|
21
21
|
@@http_clients = [:curb, :excon, :em_http_request, :faraday, :httpclient, :nethttp, :rest_client, :typhoeus]
|
@@ -60,6 +60,8 @@ module TraceView
|
|
60
60
|
TraceView::Config[:resque][:collect_backtraces] = true
|
61
61
|
TraceView::Config[:rest_client][:collect_backtraces] = false
|
62
62
|
TraceView::Config[:sequel][:collect_backtraces] = true
|
63
|
+
TraceView::Config[:sidekiqclient][:collect_backtraces] = false
|
64
|
+
TraceView::Config[:sidekiqworker][:collect_backtraces] = false
|
63
65
|
TraceView::Config[:typhoeus][:collect_backtraces] = false
|
64
66
|
|
65
67
|
# Special instrument specific flags
|
@@ -214,6 +216,9 @@ module TraceView
|
|
214
216
|
@@config[key.to_sym] = value.to_i
|
215
217
|
TraceView.set_sample_rate(value) if TraceView.loaded
|
216
218
|
|
219
|
+
elsif key == :action_blacklist
|
220
|
+
TraceView.logger.warn "[traceview/deprecation] :action_blacklist will be deprecated in a future version."
|
221
|
+
|
217
222
|
elsif key == :include_url_query_params
|
218
223
|
# Obey the global flag and update all of the per instrumentation
|
219
224
|
# <tt>:log_args</tt> values.
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module TraceView
|
2
|
+
class SidekiqClient
|
3
|
+
def collect_kvs(args)
|
4
|
+
begin
|
5
|
+
# Attempt to collect up pertinent info. If we hit something unexpected,
|
6
|
+
# keep calm and instrument on.
|
7
|
+
|
8
|
+
report_kvs = {}
|
9
|
+
worker_class, msg, queue, _ = args
|
10
|
+
|
11
|
+
report_kvs[:Spec] = :msgclient
|
12
|
+
report_kvs[:Flavor] = :sidekiq
|
13
|
+
report_kvs[:Queue] = queue
|
14
|
+
report_kvs[:Retry] = msg['retry']
|
15
|
+
report_kvs[:JobName] = worker_class
|
16
|
+
report_kvs[:MsgID] = msg['jid']
|
17
|
+
report_kvs[:Args] = msg['args'].to_s[0..1024] if TV::Config[:sidekiqclient][:log_args]
|
18
|
+
report_kvs[:Backtrace] = TV::API.backtrace if TV::Config[:sidekiqclient][:collect_backtraces]
|
19
|
+
rescue => e
|
20
|
+
TraceView.logger.warn "[traceview/sidekiq] Non-fatal error capturing KVs: #{e.message}"
|
21
|
+
end
|
22
|
+
report_kvs
|
23
|
+
end
|
24
|
+
|
25
|
+
def call(*args)
|
26
|
+
# args: 0: worker_class, 1: msg, 2: queue, 3: redis_pool
|
27
|
+
|
28
|
+
result = nil
|
29
|
+
report_kvs = collect_kvs(args)
|
30
|
+
|
31
|
+
TraceView::API.log_entry('sidekiq-client', report_kvs)
|
32
|
+
args[1]['X-Trace'] = TraceView::Context.toString if TraceView.tracing?
|
33
|
+
|
34
|
+
result = yield
|
35
|
+
|
36
|
+
report_kvs = { :JobID => result["jid"] }
|
37
|
+
result
|
38
|
+
rescue => e
|
39
|
+
TraceView::API.log_exception('sidekiq-client', e, report_kvs)
|
40
|
+
raise
|
41
|
+
ensure
|
42
|
+
TraceView::API.log_exit('sidekiq-client', report_kvs)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
if defined?(::Sidekiq) && RUBY_VERSION >= '2.0' && TraceView::Config[:sidekiqclient][:enabled]
|
48
|
+
::Sidekiq.configure_client do |config|
|
49
|
+
config.client_middleware do |chain|
|
50
|
+
::TraceView.logger.info '[traceview/loading] Adding Sidekiq client middleware' if TraceView::Config[:verbose]
|
51
|
+
chain.add ::TraceView::SidekiqClient
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module TraceView
|
2
|
+
class SidekiqWorker
|
3
|
+
def collect_kvs(args)
|
4
|
+
begin
|
5
|
+
# Attempt to collect up pertinent info. If we hit something unexpected,
|
6
|
+
# keep calm and instrument on.
|
7
|
+
report_kvs = {}
|
8
|
+
worker, msg, queue = args
|
9
|
+
|
10
|
+
# Background Job Spec KVs
|
11
|
+
report_kvs[:Spec] = :job
|
12
|
+
report_kvs[:Flavor] = :sidekiq
|
13
|
+
report_kvs[:Queue] = queue
|
14
|
+
report_kvs[:Retry] = msg['retry']
|
15
|
+
report_kvs[:JobName] = worker.class.to_s
|
16
|
+
report_kvs[:MsgID] = msg['jid']
|
17
|
+
report_kvs[:Args] = msg['args'].to_s[0..1024] if TV::Config[:sidekiqworker][:log_args]
|
18
|
+
report_kvs['Backtrace'] = TV::API.backtrace if TV::Config[:sidekiqworker][:collect_backtraces]
|
19
|
+
|
20
|
+
# Webserver Spec KVs
|
21
|
+
report_kvs['HTTP-Host'] = Socket.gethostname
|
22
|
+
report_kvs[:Controller] = "Sidekiq_#{queue}"
|
23
|
+
report_kvs[:Action] = msg['class']
|
24
|
+
report_kvs[:URL] = "/sidekiq/#{queue}/#{msg['class'].to_s}"
|
25
|
+
rescue => e
|
26
|
+
TraceView.logger.warn "[traceview/sidekiq] Non-fatal error capturing KVs: #{e.message}"
|
27
|
+
end
|
28
|
+
report_kvs
|
29
|
+
end
|
30
|
+
|
31
|
+
def call(*args)
|
32
|
+
# args: 0: worker, 1: msg, 2: queue
|
33
|
+
result = nil
|
34
|
+
report_kvs = collect_kvs(args)
|
35
|
+
|
36
|
+
# Continue the trace from the enqueue side?
|
37
|
+
incoming_context = nil
|
38
|
+
if args[1].is_a?(Hash) && TraceView::XTrace.valid?(args[1]['X-Trace'])
|
39
|
+
incoming_context = args[1]['X-Trace']
|
40
|
+
report_kvs[:Async] = true
|
41
|
+
end
|
42
|
+
|
43
|
+
result = TraceView::API.start_trace('sidekiq-worker', incoming_context, report_kvs) do
|
44
|
+
yield
|
45
|
+
end
|
46
|
+
|
47
|
+
result[0]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
if defined?(::Sidekiq) && RUBY_VERSION >= '2.0' && TraceView::Config[:sidekiqworker][:enabled]
|
53
|
+
::TraceView.logger.info '[traceview/loading] Instrumenting sidekiq' if TraceView::Config[:verbose]
|
54
|
+
|
55
|
+
::Sidekiq.configure_server do |config|
|
56
|
+
config.server_middleware do |chain|
|
57
|
+
::TraceView.logger.info '[traceview/loading] Adding Sidekiq worker middleware' if TraceView::Config[:verbose]
|
58
|
+
chain.add ::TraceView::SidekiqWorker
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
module TraceView
|
5
|
+
module Test
|
6
|
+
class << self
|
7
|
+
def load_extras
|
8
|
+
# If we're using the libraries gemfile (with sidekiq and resque)
|
9
|
+
if File.basename(ENV['BUNDLE_GEMFILE']) =~ /libraries/
|
10
|
+
# Load all of the test workers
|
11
|
+
pattern = File.join(File.dirname(__FILE__), '../../test/jobs/', '*.rb')
|
12
|
+
Dir.glob(pattern) do |f|
|
13
|
+
TV.logger.debug "Loading test job file: #{f}"
|
14
|
+
require f
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/traceview/util.rb
CHANGED
@@ -215,6 +215,7 @@ module TraceView
|
|
215
215
|
platform_info['Ruby.Redis.Version'] = "Redis-#{::Redis::VERSION}" if defined?(::Redis::VERSION)
|
216
216
|
platform_info['Ruby.Resque.Version'] = "Resque-#{::Resque::VERSION}" if defined?(::Resque::VERSION)
|
217
217
|
platform_info['Ruby.RestClient.Version'] = "RestClient-#{::RestClient::VERSION}" if defined?(::RestClient::VERSION)
|
218
|
+
platform_info['Ruby.Sidekiq.Version'] = "Sidekiq-#{::Sidekiq::VERSION}" if defined?(::Sidekiq::VERSION)
|
218
219
|
platform_info['Ruby.Typhoeus.Version'] = "Typhoeus-#{::Typhoeus::VERSION}" if defined?(::Typhoeus::VERSION)
|
219
220
|
|
220
221
|
# Special case since the Mongo 1.x driver doesn't embed the version number in the gem directly
|
data/lib/traceview/version.rb
CHANGED
@@ -0,0 +1,131 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
if RUBY_VERSION >= '2.0'
|
5
|
+
require 'minitest_helper'
|
6
|
+
require 'sidekiq'
|
7
|
+
require_relative "../jobs/remote_call_worker_job"
|
8
|
+
require_relative "../jobs/db_worker_job"
|
9
|
+
require_relative "../jobs/error_worker_job"
|
10
|
+
|
11
|
+
class SidekiqClientTest < Minitest::Test
|
12
|
+
def setup
|
13
|
+
clear_all_traces
|
14
|
+
@collect_backtraces = TraceView::Config[:sidekiqclient][:collect_backtraces]
|
15
|
+
@log_args = TraceView::Config[:sidekiqclient][:log_args]
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
TraceView::Config[:sidekiqclient][:collect_backtraces] = @collect_backtraces
|
20
|
+
TraceView::Config[:sidekiqclient][:log_args] = @log_args
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_enqueue
|
24
|
+
# Queue up a job to be run
|
25
|
+
jid, _ = ::TraceView::API.start_trace(:enqueue_test) do
|
26
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Allow the job to be run
|
30
|
+
sleep 5
|
31
|
+
|
32
|
+
traces = get_all_traces
|
33
|
+
assert_equal 23, traces.count, "Trace count"
|
34
|
+
valid_edges?(traces)
|
35
|
+
|
36
|
+
assert_equal 'sidekiq-client', traces[1]['Layer']
|
37
|
+
assert_equal 'entry', traces[1]['Label']
|
38
|
+
|
39
|
+
assert_equal 'msgclient', traces[1]['Spec']
|
40
|
+
assert_equal 'sidekiq', traces[1]['Flavor']
|
41
|
+
assert_equal 'critical', traces[1]['Queue']
|
42
|
+
assert_equal jid, traces[1]['MsgID']
|
43
|
+
assert_equal '[1, 2, 3]', traces[1]['Args']
|
44
|
+
assert_equal "RemoteCallWorkerJob", traces[1]['JobName']
|
45
|
+
assert_equal 'false', traces[1]['Retry']
|
46
|
+
assert_equal false, traces[1].key?('Backtrace')
|
47
|
+
|
48
|
+
assert_equal 'sidekiq-client', traces[2]['Layer']
|
49
|
+
assert_equal 'exit', traces[2]['Label']
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_collect_backtraces_default_value
|
53
|
+
assert_equal TV::Config[:sidekiqclient][:collect_backtraces], false, "default backtrace collection"
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_log_args_default_value
|
57
|
+
assert_equal TV::Config[:sidekiqclient][:log_args], true, "log_args default "
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_obey_collect_backtraces_when_false
|
61
|
+
TraceView::Config[:sidekiqclient][:collect_backtraces] = false
|
62
|
+
|
63
|
+
# Queue up a job to be run
|
64
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
65
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Allow the job to be run
|
69
|
+
sleep 5
|
70
|
+
|
71
|
+
traces = get_all_traces
|
72
|
+
assert_equal 23, traces.count, "Trace count"
|
73
|
+
valid_edges?(traces)
|
74
|
+
assert_equal 'sidekiq-client', traces[1]['Layer']
|
75
|
+
assert_equal false, traces[1].key?('Backtrace')
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_obey_collect_backtraces_when_true
|
79
|
+
TraceView::Config[:sidekiqclient][:collect_backtraces] = true
|
80
|
+
|
81
|
+
# Queue up a job to be run
|
82
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
83
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Allow the job to be run
|
87
|
+
sleep 5
|
88
|
+
|
89
|
+
traces = get_all_traces
|
90
|
+
assert_equal 23, traces.count, "Trace count"
|
91
|
+
valid_edges?(traces)
|
92
|
+
assert_equal 'sidekiq-client', traces[1]['Layer']
|
93
|
+
assert_equal true, traces[1].key?('Backtrace')
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_obey_log_args_when_false
|
97
|
+
TraceView::Config[:sidekiqclient][:log_args] = false
|
98
|
+
|
99
|
+
# Queue up a job to be run
|
100
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
101
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Allow the job to be run
|
105
|
+
sleep 5
|
106
|
+
|
107
|
+
traces = get_all_traces
|
108
|
+
assert_equal 23, traces.count, "Trace count"
|
109
|
+
valid_edges?(traces)
|
110
|
+
assert_equal false, traces[1].key?('Args')
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_obey_log_args_when_true
|
114
|
+
TraceView::Config[:sidekiqclient][:log_args] = true
|
115
|
+
|
116
|
+
# Queue up a job to be run
|
117
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
118
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Allow the job to be run
|
122
|
+
sleep 5
|
123
|
+
|
124
|
+
traces = get_all_traces
|
125
|
+
assert_equal 23, traces.count, "Trace count"
|
126
|
+
valid_edges?(traces)
|
127
|
+
assert_equal true, traces[1].key?('Args')
|
128
|
+
assert_equal '[1, 2, 3]', traces[1]['Args']
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
if RUBY_VERSION >= '2.0'
|
5
|
+
require 'minitest_helper'
|
6
|
+
require 'sidekiq'
|
7
|
+
require_relative "../jobs/remote_call_worker_job"
|
8
|
+
require_relative "../jobs/db_worker_job"
|
9
|
+
require_relative "../jobs/error_worker_job"
|
10
|
+
|
11
|
+
class SidekiqWorkerTest < Minitest::Test
|
12
|
+
def setup
|
13
|
+
clear_all_traces
|
14
|
+
@collect_backtraces = TraceView::Config[:sidekiqworker][:collect_backtraces]
|
15
|
+
@log_args = TraceView::Config[:sidekiqworker][:log_args]
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
TraceView::Config[:sidekiqworker][:collect_backtraces] = @collect_backtraces
|
20
|
+
TraceView::Config[:sidekiqworker][:log_args] = @log_args
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_reports_version_init
|
24
|
+
init_kvs = ::TraceView::Util.build_init_report
|
25
|
+
assert init_kvs.key?('Ruby.Sidekiq.Version')
|
26
|
+
assert_equal "Sidekiq-#{::Sidekiq::VERSION}", init_kvs['Ruby.Sidekiq.Version']
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_job_run
|
30
|
+
# Queue up a job to be run
|
31
|
+
jid = Sidekiq::Client.push('queue' => 'critical', 'class' => RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
32
|
+
|
33
|
+
# Allow the job to be run
|
34
|
+
sleep 5
|
35
|
+
|
36
|
+
traces = get_all_traces
|
37
|
+
assert_equal 17, traces.count, "Trace count"
|
38
|
+
validate_outer_layers(traces, "sidekiq-worker")
|
39
|
+
valid_edges?(traces)
|
40
|
+
|
41
|
+
# Validate entry layer KVs
|
42
|
+
assert_equal 'always_sampled', traces[0]['TraceOrigin'], "is always_sampled"
|
43
|
+
assert_equal true, traces[0].key?('SampleRate'), "has SampleRate KV"
|
44
|
+
assert_equal true, traces[0].key?('SampleSource'), "has SampleSource KV"
|
45
|
+
|
46
|
+
# Validate Webserver Spec KVs
|
47
|
+
assert_equal Socket.gethostname, traces[0]['HTTP-Host']
|
48
|
+
assert_equal "Sidekiq_critical", traces[0]['Controller']
|
49
|
+
assert_equal "RemoteCallWorkerJob", traces[0]['Action']
|
50
|
+
assert_equal "/sidekiq/critical/RemoteCallWorkerJob", traces[0]['URL']
|
51
|
+
|
52
|
+
# Validate Job Spec KVs
|
53
|
+
assert_equal "job", traces[0]['Spec']
|
54
|
+
assert_equal 'sidekiq', traces[0]['Flavor']
|
55
|
+
assert_equal "RemoteCallWorkerJob", traces[0]['JobName']
|
56
|
+
assert_equal jid, traces[0]['MsgID']
|
57
|
+
assert_equal "critical", traces[0]['Queue']
|
58
|
+
assert_equal "[1, 2, 3]", traces[0]['Args']
|
59
|
+
assert_equal "false", traces[0]['Retry']
|
60
|
+
|
61
|
+
assert_equal false, traces[0].key?('Backtrace')
|
62
|
+
assert_equal "net-http", traces[4]['Layer']
|
63
|
+
assert_equal "entry", traces[4]['Label']
|
64
|
+
assert_equal "memcache", traces[15]['Layer']
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_jobs_with_errors
|
68
|
+
# Queue up a job to be run
|
69
|
+
jid = Sidekiq::Client.push('queue' => 'critical', 'class' => ErrorWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
70
|
+
|
71
|
+
# Allow the job to be run
|
72
|
+
sleep 5
|
73
|
+
|
74
|
+
traces = get_all_traces
|
75
|
+
assert_equal 3, traces.count, "Trace count"
|
76
|
+
validate_outer_layers(traces, "sidekiq-worker")
|
77
|
+
valid_edges?(traces)
|
78
|
+
|
79
|
+
# Validate Webserver Spec KVs
|
80
|
+
assert_equal Socket.gethostname, traces[0]['HTTP-Host']
|
81
|
+
assert_equal "Sidekiq_critical", traces[0]['Controller']
|
82
|
+
assert_equal "ErrorWorkerJob", traces[0]['Action']
|
83
|
+
assert_equal "/sidekiq/critical/ErrorWorkerJob", traces[0]['URL']
|
84
|
+
|
85
|
+
# Validate Job Spec KVs
|
86
|
+
assert_equal "job", traces[0]['Spec']
|
87
|
+
assert_equal 'sidekiq', traces[0]['Flavor']
|
88
|
+
assert_equal "ErrorWorkerJob", traces[0]['JobName']
|
89
|
+
assert_equal jid, traces[0]['MsgID']
|
90
|
+
assert_equal "critical", traces[0]['Queue']
|
91
|
+
assert_equal "[1, 2, 3]", traces[0]['Args']
|
92
|
+
assert_equal "false", traces[0]['Retry']
|
93
|
+
|
94
|
+
assert_equal traces[1]['Layer'], 'sidekiq-worker'
|
95
|
+
assert_equal traces[1]['Label'], 'error'
|
96
|
+
assert_equal traces[1]['ErrorClass'], "RuntimeError"
|
97
|
+
assert traces[1].key?('ErrorMsg')
|
98
|
+
assert traces[1].key?('Backtrace')
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_collect_backtraces_default_value
|
102
|
+
assert_equal TV::Config[:sidekiqworker][:collect_backtraces], false, "default backtrace collection"
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_log_args_default_value
|
106
|
+
assert_equal TV::Config[:sidekiqworker][:log_args], true, "log_args default "
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_obey_collect_backtraces_when_false
|
110
|
+
TraceView::Config[:sidekiqworker][:collect_backtraces] = false
|
111
|
+
|
112
|
+
# Queue up a job to be run
|
113
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
114
|
+
|
115
|
+
# Allow the job to be run
|
116
|
+
sleep 5
|
117
|
+
|
118
|
+
traces = get_all_traces
|
119
|
+
assert_equal 17, traces.count, "Trace count"
|
120
|
+
valid_edges?(traces)
|
121
|
+
assert_equal 'sidekiq-worker', traces[0]['Layer']
|
122
|
+
assert_equal false, traces[0].key?('Backtrace')
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_obey_collect_backtraces_when_true
|
126
|
+
# FIXME: This can't be tested with the current Sidekiq minitest integration (e.g. already booted
|
127
|
+
# sidekiq in a different process)
|
128
|
+
skip
|
129
|
+
|
130
|
+
TraceView::Config[:sidekiqworker][:collect_backtraces] = true
|
131
|
+
|
132
|
+
# Queue up a job to be run
|
133
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
134
|
+
|
135
|
+
# Allow the job to be run
|
136
|
+
sleep 5
|
137
|
+
|
138
|
+
traces = get_all_traces
|
139
|
+
assert_equal 17, traces.count, "Trace count"
|
140
|
+
valid_edges?(traces)
|
141
|
+
assert_equal 'sidekiq-worker', traces[0]['Layer']
|
142
|
+
assert_equal true, traces[0].key?('Backtrace')
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_obey_log_args_when_false
|
146
|
+
# FIXME: This can't be tested with the current Sidekiq minitest integration (e.g. already booted
|
147
|
+
# sidekiq in a different process)
|
148
|
+
skip
|
149
|
+
|
150
|
+
TraceView::Config[:sidekiqworker][:log_args] = false
|
151
|
+
|
152
|
+
# Queue up a job to be run
|
153
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
154
|
+
|
155
|
+
# Allow the job to be run
|
156
|
+
sleep 5
|
157
|
+
|
158
|
+
traces = get_all_traces
|
159
|
+
assert_equal 17, traces.count, "Trace count"
|
160
|
+
valid_edges?(traces)
|
161
|
+
assert_equal false, traces[0].key?('Args')
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_obey_log_args_when_true
|
165
|
+
TraceView::Config[:sidekiqworker][:log_args] = true
|
166
|
+
|
167
|
+
# Queue up a job to be run
|
168
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
169
|
+
|
170
|
+
# Allow the job to be run
|
171
|
+
sleep 5
|
172
|
+
|
173
|
+
traces = get_all_traces
|
174
|
+
assert_equal 17, traces.count, "Trace count"
|
175
|
+
valid_edges?(traces)
|
176
|
+
assert_equal true, traces[0].key?('Args')
|
177
|
+
assert_equal '[1, 2, 3]', traces[0]['Args']
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|