traceview 3.2.1-java → 3.3.0-java

Sign up to get free protection for your applications and to get access to all the features.
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 test
15
- return if %w(development test).include? ENV['RACK_ENV']
16
-
17
- # Don't send __Init if the c-extension hasn't loaded
18
- return unless TraceView.loaded
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] = :always_sampled
115
+ opts[:TraceOrigin] = :always_sampled
109
116
 
110
117
  log_event(layer, 'entry', TraceView::Context.startTrace, opts)
111
118
  end
@@ -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
@@ -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
@@ -7,8 +7,8 @@ module TraceView
7
7
  # traceview.gemspec during gem build process
8
8
  module Version
9
9
  MAJOR = 3
10
- MINOR = 2
11
- PATCH = 1
10
+ MINOR = 3
11
+ PATCH = 0
12
12
  BUILD = nil
13
13
 
14
14
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -1,7 +1,7 @@
1
1
  # Copyright (c) 2015 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
- if RUBY_VERSION > '1.8.7'
4
+ if RUBY_VERSION > '1.8.7' && !defined?(JRUBY_VERSION)
5
5
 
6
6
  require 'minitest_helper'
7
7
  require 'traceview/inst/rack'
@@ -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