traceview 3.3.1 → 3.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -4
- data/CHANGELOG.md +15 -0
- data/Rakefile +9 -1
- data/gemfiles/libraries.gemfile +2 -1
- data/lib/traceview/config.rb +15 -11
- data/lib/traceview/inst/resque.rb +37 -80
- data/lib/traceview/inst/sidekiq-client.rb +2 -4
- data/lib/traceview/inst/sidekiq-worker.rb +21 -15
- data/lib/traceview/test.rb +2 -2
- data/lib/traceview/version.rb +1 -1
- data/test/instrumentation/delayed_job-client_test.rb +128 -0
- data/test/instrumentation/delayed_job-worker_test.rb +177 -0
- data/test/instrumentation/resque_test.rb +163 -43
- data/test/instrumentation/sidekiq-client_test.rb +4 -4
- data/test/instrumentation/sidekiq-worker_test.rb +4 -4
- data/test/jobs/resque/db_worker_job.rb +29 -0
- data/test/jobs/resque/error_worker_job.rb +10 -0
- data/test/jobs/resque/remote_call_worker_job.rb +20 -0
- data/test/jobs/{db_worker_job.rb → sidekiq/db_worker_job.rb} +0 -0
- data/test/jobs/{error_worker_job.rb → sidekiq/error_worker_job.rb} +0 -0
- data/test/jobs/{remote_call_worker_job.rb → sidekiq/remote_call_worker_job.rb} +0 -0
- data/test/minitest_helper.rb +6 -3
- data/test/servers/sidekiq.rb +0 -8
- data/test/servers/sidekiq_initializer.rb +3 -3
- data/test/support/config_test.rb +5 -4
- metadata +18 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 730a56babc918a4dcc1b47caff72d4f5be3f9b8f
|
4
|
+
data.tar.gz: 86356f63bb250a19dd1dcb1b61691770166c68af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22f6ca27664ae20d8216bf8fe388c80c9da58fab2953313970b9a5beb08b4b7d8943db8a4fc2173d1c991b6764c691fd55e2fb7d5091cbbcb078dbdc58545c27
|
7
|
+
data.tar.gz: 0eb31e31b5f991e846f5795c0a65ccb46788099a9562a3b1fdf922005ba54d24054f5664e40a43b73f2903d34f4ca92aefae7fc5f55ba8dd137aa5a0e1474218
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,21 @@ https://github.com/appneta/oboe-ruby/releases
|
|
4
4
|
|
5
5
|
Dates in this file are in the format MM/DD/YYYY.
|
6
6
|
|
7
|
+
# traceview 3.3.3
|
8
|
+
|
9
|
+
This patch release includes the following fixes:
|
10
|
+
|
11
|
+
* Sidekiq instrumentation: don't carry context between enqueue and job run: #150
|
12
|
+
* Sidekiq instrumentation: Update KV reporting to follow TV specs: #150
|
13
|
+
* Resque instrumentation: Update instrumentation to follow TV specs: #146
|
14
|
+
* Resque instrumentation: `:link_workers` option deprecated: #146
|
15
|
+
* [JRuby 9000](http://jruby.org/) validated: Add JRuby 9000 to test suite: #149
|
16
|
+
|
17
|
+
Pushed to Rubygems:
|
18
|
+
|
19
|
+
https://rubygems.org/gems/traceview/versions/3.3.2
|
20
|
+
https://rubygems.org/gems/traceview/versions/3.3.2-java
|
21
|
+
|
7
22
|
# traceview 3.3.1
|
8
23
|
|
9
24
|
This patch release includes the following fixes:
|
data/Rakefile
CHANGED
@@ -124,4 +124,12 @@ task :console do
|
|
124
124
|
Pry.start
|
125
125
|
end
|
126
126
|
|
127
|
-
|
127
|
+
# Used when testing Resque locally
|
128
|
+
task "resque:setup" do
|
129
|
+
require 'resque/tasks'
|
130
|
+
require 'traceview/test'
|
131
|
+
ENV['TRACEVIEW_GEM_VERBOSE'] = 'true'
|
132
|
+
Bundler.require(:default, :development)
|
133
|
+
TraceView::Config[:tracing_mode] = :always
|
134
|
+
TV::Test.load_extras
|
135
|
+
end
|
data/gemfiles/libraries.gemfile
CHANGED
@@ -52,11 +52,12 @@ gem 'httpclient'
|
|
52
52
|
gem 'memcache-client'
|
53
53
|
gem 'mongo'
|
54
54
|
gem 'redis'
|
55
|
-
gem 'resque'
|
55
|
+
gem 'resque' unless defined?(JRUBY_VERSION) && RUBY_VERSION > '1.9.3'
|
56
56
|
gem 'sequel'
|
57
57
|
gem "sidekiq" if RUBY_VERSION >= '2.0'
|
58
58
|
gem 'typhoeus'
|
59
59
|
|
60
|
+
|
60
61
|
# Database adapter gems needed by sequel
|
61
62
|
if defined?(JRUBY_VERSION)
|
62
63
|
gem 'jdbc-postgresql'
|
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, :
|
18
|
-
:sidekiqworker, :typhoeus]
|
17
|
+
:moped, :rack, :redis, :resqueclient, :resqueworker,
|
18
|
+
:rest_client, :sequel, :sidekiqclient, :sidekiqworker, :typhoeus]
|
19
19
|
|
20
20
|
# Subgrouping of instrumentation
|
21
21
|
@@http_clients = [:curb, :excon, :em_http_request, :faraday, :httpclient, :nethttp, :rest_client, :typhoeus]
|
@@ -57,21 +57,16 @@ module TraceView
|
|
57
57
|
TraceView::Config[:moped][:collect_backtraces] = true
|
58
58
|
TraceView::Config[:nethttp][:collect_backtraces] = true
|
59
59
|
TraceView::Config[:redis][:collect_backtraces] = false
|
60
|
-
TraceView::Config[:
|
60
|
+
TraceView::Config[:resqueclient][:collect_backtraces] = true
|
61
|
+
TraceView::Config[:resqueworker][:collect_backtraces] = false
|
61
62
|
TraceView::Config[:rest_client][:collect_backtraces] = false
|
62
63
|
TraceView::Config[:sequel][:collect_backtraces] = true
|
63
64
|
TraceView::Config[:sidekiqclient][:collect_backtraces] = false
|
64
65
|
TraceView::Config[:sidekiqworker][:collect_backtraces] = false
|
65
66
|
TraceView::Config[:typhoeus][:collect_backtraces] = false
|
66
67
|
|
67
|
-
#
|
68
|
-
|
69
|
-
# :link_workers - associates enqueue operations with the jobs they queue by piggybacking
|
70
|
-
# an additional argument that is stripped prior to job proecessing
|
71
|
-
# !!Note: Make sure both the queue side and the Resque workers are instrumented
|
72
|
-
# or jobs will fail
|
73
|
-
# (Default: false)
|
74
|
-
@@config[:resque][:link_workers] = false
|
68
|
+
# Legacy Resque config support. To be removed in a future version
|
69
|
+
@@config[:resque] = {}
|
75
70
|
|
76
71
|
# Setup an empty host blacklist (see: TraceView::API::Util.blacklisted?)
|
77
72
|
@@config[:blacklist] = []
|
@@ -192,6 +187,11 @@ module TraceView
|
|
192
187
|
end
|
193
188
|
|
194
189
|
def self.[](key)
|
190
|
+
if key == :resque
|
191
|
+
TraceView.logger.warn "[traceview/warn] :resque config is deprecated. It is now split into :resqueclient and :resqueworker."
|
192
|
+
TraceView.logger.warn "[traceview/warn] Called from #{Kernel.caller[0]}"
|
193
|
+
end
|
194
|
+
|
195
195
|
@@config[key.to_sym]
|
196
196
|
end
|
197
197
|
|
@@ -219,6 +219,10 @@ module TraceView
|
|
219
219
|
elsif key == :action_blacklist
|
220
220
|
TraceView.logger.warn "[traceview/unsupported] :action_blacklist has been deprecated and no longer functions."
|
221
221
|
|
222
|
+
elsif key == :resque
|
223
|
+
TraceView.logger.warn "[traceview/warn] :resque config is deprecated. It is now split into :resqueclient and :resqueworker."
|
224
|
+
TraceView.logger.warn "[traceview/warn] Called from #{Kernel.caller[0]}"
|
225
|
+
|
222
226
|
elsif key == :include_url_query_params
|
223
227
|
# Obey the global flag and update all of the per instrumentation
|
224
228
|
# <tt>:log_args</tt> values.
|
@@ -6,19 +6,23 @@ require 'json'
|
|
6
6
|
|
7
7
|
module TraceView
|
8
8
|
module Inst
|
9
|
-
module
|
10
|
-
def self.included(
|
11
|
-
|
9
|
+
module ResqueClient
|
10
|
+
def self.included(klass)
|
11
|
+
klass.send :extend, ::Resque
|
12
|
+
::TraceView::Util.method_alias(klass, :enqueue, ::Resque)
|
13
|
+
::TraceView::Util.method_alias(klass, :enqueue_to, ::Resque)
|
14
|
+
::TraceView::Util.method_alias(klass, :dequeue, ::Resque)
|
12
15
|
end
|
13
16
|
|
14
17
|
def extract_trace_details(op, klass, args)
|
15
18
|
report_kvs = {}
|
16
19
|
|
17
20
|
begin
|
18
|
-
report_kvs[:
|
19
|
-
report_kvs[:
|
21
|
+
report_kvs[:Spec] = :pushq
|
22
|
+
report_kvs[:Flavor] = :resque
|
23
|
+
report_kvs[:JobName] = klass.to_s
|
20
24
|
|
21
|
-
if TraceView::Config[:
|
25
|
+
if TraceView::Config[:resqueclient][:log_args]
|
22
26
|
kv_args = args.to_json
|
23
27
|
|
24
28
|
# Limit the argument json string to 1024 bytes
|
@@ -29,8 +33,10 @@ module TraceView
|
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
32
|
-
report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:
|
33
|
-
|
36
|
+
report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:resqueclient][:collect_backtraces]
|
37
|
+
report_kvs[:Queue] = klass.instance_variable_get(:@queue)
|
38
|
+
rescue => e
|
39
|
+
TraceView.logger.debug "[traceview/resque] Error collecting resqueclient KVs: #{e.message}"
|
34
40
|
end
|
35
41
|
|
36
42
|
report_kvs
|
@@ -41,7 +47,6 @@ module TraceView
|
|
41
47
|
report_kvs = extract_trace_details(:enqueue, klass, args)
|
42
48
|
|
43
49
|
TraceView::API.trace('resque-client', report_kvs, :enqueue) do
|
44
|
-
args.push(:parent_trace_id => TraceView::Context.toString) if TraceView::Config[:resque][:link_workers]
|
45
50
|
enqueue_without_traceview(klass, *args)
|
46
51
|
end
|
47
52
|
else
|
@@ -55,7 +60,6 @@ module TraceView
|
|
55
60
|
report_kvs[:Queue] = queue.to_s if queue
|
56
61
|
|
57
62
|
TraceView::API.trace('resque-client', report_kvs) do
|
58
|
-
args.push(:parent_trace_id => TraceView::Context.toString) if TraceView::Config[:resque][:link_workers]
|
59
63
|
enqueue_to_without_traceview(queue, klass, *args)
|
60
64
|
end
|
61
65
|
else
|
@@ -77,26 +81,28 @@ module TraceView
|
|
77
81
|
end
|
78
82
|
|
79
83
|
module ResqueWorker
|
84
|
+
def self.included(klass)
|
85
|
+
::TraceView::Util.method_alias(klass, :perform, ::Resque::Worker)
|
86
|
+
end
|
87
|
+
|
80
88
|
def perform_with_traceview(job)
|
81
89
|
report_kvs = {}
|
82
|
-
last_arg = nil
|
83
90
|
|
84
91
|
begin
|
85
|
-
report_kvs[:
|
92
|
+
report_kvs[:Spec] = :job
|
93
|
+
report_kvs[:Flavor] = :resque
|
94
|
+
report_kvs[:JobName] = job.payload['class'].to_s
|
95
|
+
report_kvs[:Queue] = job.queue
|
86
96
|
|
87
97
|
# Set these keys for the ability to separate out
|
88
98
|
# background tasks into a separate app on the server-side UI
|
89
|
-
report_kvs[:Controller] = :Resque
|
90
|
-
report_kvs[:Action] = :perform
|
91
99
|
|
92
100
|
report_kvs['HTTP-Host'] = Socket.gethostname
|
93
|
-
report_kvs[:
|
94
|
-
report_kvs[:
|
95
|
-
report_kvs[:
|
96
|
-
|
97
|
-
report_kvs[:Class] = job.payload['class']
|
101
|
+
report_kvs[:Controller] = "Resque_#{job.queue}"
|
102
|
+
report_kvs[:Action] = job.payload['class'].to_s
|
103
|
+
report_kvs[:URL] = "/resque/#{job.queue}/#{job.payload['class']}"
|
98
104
|
|
99
|
-
if TraceView::Config[:
|
105
|
+
if TraceView::Config[:resqueworker][:log_args]
|
100
106
|
kv_args = job.payload['args'].to_json
|
101
107
|
|
102
108
|
# Limit the argument json string to 1024 bytes
|
@@ -107,35 +113,21 @@ module TraceView
|
|
107
113
|
end
|
108
114
|
end
|
109
115
|
|
110
|
-
|
116
|
+
report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:resqueworker][:collect_backtraces]
|
111
117
|
rescue
|
112
118
|
end
|
113
119
|
|
114
|
-
|
115
|
-
|
116
|
-
# Since the enqueue was traced, we force trace the actual job execution and reference
|
117
|
-
# the enqueue trace with ParentTraceID
|
118
|
-
report_kvs[:ParentTraceID] = last_arg['parent_trace_id']
|
119
|
-
job.payload['args'].pop
|
120
|
-
|
121
|
-
rescue
|
122
|
-
end
|
123
|
-
|
124
|
-
# Force this trace regardless of sampling rate so that child trace can be
|
125
|
-
# link to parent trace.
|
126
|
-
TraceView::API.start_trace('resque-worker', nil, report_kvs.merge('Force' => true)) do
|
127
|
-
perform_without_traceview(job)
|
128
|
-
end
|
129
|
-
|
130
|
-
else
|
131
|
-
TraceView::API.start_trace('resque-worker', nil, report_kvs) do
|
132
|
-
perform_without_traceview(job)
|
133
|
-
end
|
120
|
+
TraceView::API.start_trace('resque-worker', nil, report_kvs) do
|
121
|
+
perform_without_traceview(job)
|
134
122
|
end
|
135
123
|
end
|
136
124
|
end
|
137
125
|
|
138
126
|
module ResqueJob
|
127
|
+
def self.included(klass)
|
128
|
+
::TraceView::Util.method_alias(klass, :fail, ::Resque::Job)
|
129
|
+
end
|
130
|
+
|
139
131
|
def fail_with_traceview(exception)
|
140
132
|
if TraceView.tracing?
|
141
133
|
TraceView::API.log_exception('resque', exception)
|
@@ -146,47 +138,12 @@ module TraceView
|
|
146
138
|
end
|
147
139
|
end
|
148
140
|
|
149
|
-
if defined?(::Resque)
|
141
|
+
if defined?(::Resque) && RUBY_VERSION >= '1.9.3'
|
150
142
|
TraceView.logger.info '[traceview/loading] Instrumenting resque' if TraceView::Config[:verbose]
|
151
143
|
|
152
|
-
::Resque
|
153
|
-
|
154
|
-
|
155
|
-
[:enqueue, :enqueue_to, :dequeue].each do |m|
|
156
|
-
if method_defined?(m)
|
157
|
-
module_eval "alias #{m}_without_traceview #{m}"
|
158
|
-
module_eval "alias #{m} #{m}_with_traceview"
|
159
|
-
elsif TraceView::Config[:verbose]
|
160
|
-
TraceView.logger.warn "[traceview/loading] Couldn't properly instrument Resque (#{m}). Partial traces may occur."
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
if defined?(::Resque::Worker)
|
166
|
-
::Resque::Worker.class_eval do
|
167
|
-
include TraceView::Inst::ResqueWorker
|
168
|
-
|
169
|
-
if method_defined?(:perform)
|
170
|
-
alias perform_without_traceview perform
|
171
|
-
alias perform perform_with_traceview
|
172
|
-
elsif TraceView::Config[:verbose]
|
173
|
-
TraceView.logger.warn '[traceview/loading] Couldn\'t properly instrument ResqueWorker (perform). Partial traces may occur.'
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
if defined?(::Resque::Job)
|
179
|
-
::Resque::Job.class_eval do
|
180
|
-
include TraceView::Inst::ResqueJob
|
181
|
-
|
182
|
-
if method_defined?(:fail)
|
183
|
-
alias fail_without_traceview fail
|
184
|
-
alias fail fail_with_traceview
|
185
|
-
elsif TraceView::Config[:verbose]
|
186
|
-
TraceView.logger.warn '[traceview/loading] Couldn\'t properly instrument ResqueWorker (fail). Partial traces may occur.'
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
144
|
+
::TraceView::Util.send_include(::Resque, ::TraceView::Inst::ResqueClient)
|
145
|
+
::TraceView::Util.send_include(::Resque::Worker, ::TraceView::Inst::ResqueWorker)
|
146
|
+
::TraceView::Util.send_include(::Resque::Job, ::TraceView::Inst::ResqueJob)
|
190
147
|
end
|
191
148
|
|
192
149
|
|
@@ -24,16 +24,14 @@ module TraceView
|
|
24
24
|
|
25
25
|
def call(*args)
|
26
26
|
# args: 0: worker_class, 1: msg, 2: queue, 3: redis_pool
|
27
|
-
|
28
|
-
result = nil
|
29
27
|
report_kvs = collect_kvs(args)
|
30
28
|
|
31
29
|
TraceView::API.log_entry('sidekiq-client', report_kvs)
|
32
|
-
args[1]['
|
30
|
+
args[1]['SourceTrace'] = TraceView::Context.toString if TraceView.tracing?
|
33
31
|
|
34
32
|
result = yield
|
35
33
|
|
36
|
-
report_kvs = { :JobID => result[
|
34
|
+
report_kvs = { :JobID => result['jid'] }
|
37
35
|
result
|
38
36
|
rescue => e
|
39
37
|
TraceView::API.log_exception('sidekiq-client', e, report_kvs)
|
@@ -8,20 +8,20 @@ module TraceView
|
|
8
8
|
worker, msg, queue = args
|
9
9
|
|
10
10
|
# Background Job Spec KVs
|
11
|
-
report_kvs[:Spec]
|
12
|
-
report_kvs[:Flavor]
|
13
|
-
report_kvs[:Queue]
|
14
|
-
report_kvs[:Retry]
|
15
|
-
report_kvs[:JobName]
|
16
|
-
report_kvs[:MsgID]
|
17
|
-
report_kvs[:Args]
|
18
|
-
report_kvs['Backtrace'] = TV::API.backtrace
|
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
19
|
|
20
20
|
# Webserver Spec KVs
|
21
21
|
report_kvs['HTTP-Host'] = Socket.gethostname
|
22
22
|
report_kvs[:Controller] = "Sidekiq_#{queue}"
|
23
23
|
report_kvs[:Action] = msg['class']
|
24
|
-
report_kvs[:URL] = "/sidekiq/#{queue}/#{msg['class']
|
24
|
+
report_kvs[:URL] = "/sidekiq/#{queue}/#{msg['class']}"
|
25
25
|
rescue => e
|
26
26
|
TraceView.logger.warn "[traceview/sidekiq] Non-fatal error capturing KVs: #{e.message}"
|
27
27
|
end
|
@@ -30,17 +30,23 @@ module TraceView
|
|
30
30
|
|
31
31
|
def call(*args)
|
32
32
|
# args: 0: worker, 1: msg, 2: queue
|
33
|
-
result = nil
|
34
33
|
report_kvs = collect_kvs(args)
|
35
34
|
|
35
|
+
# Something is happening across Celluloid threads where liboboe settings
|
36
|
+
# are being lost. So we re-set the tracing mode to assure
|
37
|
+
# we sample as desired. Setting the tracing mode will re-update
|
38
|
+
# the liboboe settings.
|
39
|
+
TraceView::Config[:tracing_mode] = TraceView::Config[:tracing_mode]
|
40
|
+
|
36
41
|
# Continue the trace from the enqueue side?
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
if args[1].is_a?(Hash) && TraceView::XTrace.valid?(args[1]['SourceTrace'])
|
43
|
+
report_kvs[:SourceTrace] = args[1]['SourceTrace']
|
44
|
+
|
45
|
+
# Pass the source trace in the TV-Meta flag field to indicate tracing
|
46
|
+
report_kvs['X-TV-Meta'] = args[1]['SourceTrace']
|
41
47
|
end
|
42
48
|
|
43
|
-
result = TraceView::API.start_trace('sidekiq-worker',
|
49
|
+
result = TraceView::API.start_trace('sidekiq-worker', nil, report_kvs) do
|
44
50
|
yield
|
45
51
|
end
|
46
52
|
|
data/lib/traceview/test.rb
CHANGED
@@ -8,9 +8,9 @@ module TraceView
|
|
8
8
|
# If we're using the libraries gemfile (with sidekiq and resque)
|
9
9
|
if File.basename(ENV['BUNDLE_GEMFILE']) =~ /libraries/
|
10
10
|
# Load all of the test workers
|
11
|
-
pattern = File.join(File.dirname(__FILE__), '../../test/jobs
|
11
|
+
pattern = File.join(File.dirname(__FILE__), '../../test/jobs/**/', '*.rb')
|
12
12
|
Dir.glob(pattern) do |f|
|
13
|
-
TV.logger.debug "Loading test job file: #{f}"
|
13
|
+
TV.logger.debug "Loading test job file: #{File.basename(f)}"
|
14
14
|
require f
|
15
15
|
end
|
16
16
|
end
|
data/lib/traceview/version.rb
CHANGED
@@ -0,0 +1,128 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
require 'minitest_helper'
|
5
|
+
require_relative "../jobs/delayed_job/remote_call_worker_job"
|
6
|
+
require_relative "../jobs/delayed_job/db_worker_job"
|
7
|
+
require_relative "../jobs/delayed_job/error_worker_job"
|
8
|
+
|
9
|
+
class DelayedJobClientTest < Minitest::Test
|
10
|
+
def setup
|
11
|
+
clear_all_traces
|
12
|
+
@collect_backtraces = TraceView::Config[:delayedjobclient][:collect_backtraces]
|
13
|
+
@log_args = TraceView::Config[:delayedjobclient][:log_args]
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
TraceView::Config[:delayedjobclient][:collect_backtraces] = @collect_backtraces
|
18
|
+
TraceView::Config[:delayedjobclient][:log_args] = @log_args
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_enqueue
|
22
|
+
# Queue up a job to be run
|
23
|
+
jid, _ = ::TraceView::API.start_trace(:enqueue_test) do
|
24
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Allow the job to be run
|
28
|
+
sleep 5
|
29
|
+
|
30
|
+
traces = get_all_traces
|
31
|
+
assert_equal 23, traces.count, "Trace count"
|
32
|
+
valid_edges?(traces)
|
33
|
+
|
34
|
+
assert_equal 'sidekiq-client', traces[1]['Layer']
|
35
|
+
assert_equal 'entry', traces[1]['Label']
|
36
|
+
|
37
|
+
assert_equal 'msgclient', traces[1]['Spec']
|
38
|
+
assert_equal 'sidekiq', traces[1]['Flavor']
|
39
|
+
assert_equal 'critical', traces[1]['Queue']
|
40
|
+
assert_equal jid, traces[1]['MsgID']
|
41
|
+
assert_equal '[1, 2, 3]', traces[1]['Args']
|
42
|
+
assert_equal "RemoteCallWorkerJob", traces[1]['JobName']
|
43
|
+
assert_equal 'false', traces[1]['Retry']
|
44
|
+
assert_equal false, traces[1].key?('Backtrace')
|
45
|
+
|
46
|
+
assert_equal 'sidekiq-client', traces[2]['Layer']
|
47
|
+
assert_equal 'exit', traces[2]['Label']
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_collect_backtraces_default_value
|
51
|
+
assert_equal TV::Config[:delayedjobclient][:collect_backtraces], false, "default backtrace collection"
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_log_args_default_value
|
55
|
+
assert_equal TV::Config[:delayedjobclient][:log_args], true, "log_args default "
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_obey_collect_backtraces_when_false
|
59
|
+
TraceView::Config[:delayedjobclient][:collect_backtraces] = false
|
60
|
+
|
61
|
+
# Queue up a job to be run
|
62
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
63
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Allow the job to be run
|
67
|
+
sleep 5
|
68
|
+
|
69
|
+
traces = get_all_traces
|
70
|
+
assert_equal 23, traces.count, "Trace count"
|
71
|
+
valid_edges?(traces)
|
72
|
+
assert_equal 'sidekiq-client', traces[1]['Layer']
|
73
|
+
assert_equal false, traces[1].key?('Backtrace')
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_obey_collect_backtraces_when_true
|
77
|
+
TraceView::Config[:delayedjobclient][:collect_backtraces] = true
|
78
|
+
|
79
|
+
# Queue up a job to be run
|
80
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
81
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Allow the job to be run
|
85
|
+
sleep 5
|
86
|
+
|
87
|
+
traces = get_all_traces
|
88
|
+
assert_equal 23, traces.count, "Trace count"
|
89
|
+
valid_edges?(traces)
|
90
|
+
assert_equal 'sidekiq-client', traces[1]['Layer']
|
91
|
+
assert_equal true, traces[1].key?('Backtrace')
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_obey_log_args_when_false
|
95
|
+
TraceView::Config[:delayedjobclient][:log_args] = false
|
96
|
+
|
97
|
+
# Queue up a job to be run
|
98
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
99
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Allow the job to be run
|
103
|
+
sleep 5
|
104
|
+
|
105
|
+
traces = get_all_traces
|
106
|
+
assert_equal 23, traces.count, "Trace count"
|
107
|
+
valid_edges?(traces)
|
108
|
+
assert_equal false, traces[1].key?('Args')
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_obey_log_args_when_true
|
112
|
+
TraceView::Config[:delayedjobclient][:log_args] = true
|
113
|
+
|
114
|
+
# Queue up a job to be run
|
115
|
+
::TraceView::API.start_trace(:enqueue_test) do
|
116
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
117
|
+
end
|
118
|
+
|
119
|
+
# Allow the job to be run
|
120
|
+
sleep 5
|
121
|
+
|
122
|
+
traces = get_all_traces
|
123
|
+
assert_equal 23, traces.count, "Trace count"
|
124
|
+
valid_edges?(traces)
|
125
|
+
assert_equal true, traces[1].key?('Args')
|
126
|
+
assert_equal '[1, 2, 3]', traces[1]['Args']
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
require 'minitest_helper'
|
5
|
+
require_relative "../jobs/delayed_job/remote_call_worker_job"
|
6
|
+
require_relative "../jobs/delayed_job/db_worker_job"
|
7
|
+
require_relative "../jobs/delayed_job/error_worker_job"
|
8
|
+
|
9
|
+
class DelayedJobWorkerTest < Minitest::Test
|
10
|
+
def setup
|
11
|
+
clear_all_traces
|
12
|
+
@collect_backtraces = TraceView::Config[:delayedjobworker][:collect_backtraces]
|
13
|
+
@log_args = TraceView::Config[:delayedjobworker][:log_args]
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
TraceView::Config[:delayedjobworker][:collect_backtraces] = @collect_backtraces
|
18
|
+
TraceView::Config[:delayedjobworker][:log_args] = @log_args
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_reports_version_init
|
22
|
+
init_kvs = ::TraceView::Util.build_init_report
|
23
|
+
assert init_kvs.key?('Ruby.Sidekiq.Version')
|
24
|
+
assert_equal "Sidekiq-#{::Sidekiq::VERSION}", init_kvs['Ruby.Sidekiq.Version']
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_job_run
|
28
|
+
# Queue up a job to be run
|
29
|
+
jid = Sidekiq::Client.push('queue' => 'critical', 'class' => RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
30
|
+
|
31
|
+
# Allow the job to be run
|
32
|
+
sleep 5
|
33
|
+
|
34
|
+
traces = get_all_traces
|
35
|
+
assert_equal 17, traces.count, "Trace count"
|
36
|
+
validate_outer_layers(traces, "sidekiq-worker")
|
37
|
+
valid_edges?(traces)
|
38
|
+
|
39
|
+
# Validate entry layer KVs
|
40
|
+
assert_equal 'always_sampled', traces[0]['TraceOrigin'], "is always_sampled"
|
41
|
+
assert_equal true, traces[0].key?('SampleRate'), "has SampleRate KV"
|
42
|
+
assert_equal true, traces[0].key?('SampleSource'), "has SampleSource KV"
|
43
|
+
|
44
|
+
# Validate Webserver Spec KVs
|
45
|
+
assert_equal Socket.gethostname, traces[0]['HTTP-Host']
|
46
|
+
assert_equal "Sidekiq_critical", traces[0]['Controller']
|
47
|
+
assert_equal "RemoteCallWorkerJob", traces[0]['Action']
|
48
|
+
assert_equal "/sidekiq/critical/RemoteCallWorkerJob", traces[0]['URL']
|
49
|
+
|
50
|
+
# Validate Job Spec KVs
|
51
|
+
assert_equal "job", traces[0]['Spec']
|
52
|
+
assert_equal 'sidekiq', traces[0]['Flavor']
|
53
|
+
assert_equal "RemoteCallWorkerJob", traces[0]['JobName']
|
54
|
+
assert_equal jid, traces[0]['MsgID']
|
55
|
+
assert_equal "critical", traces[0]['Queue']
|
56
|
+
assert_equal "[1, 2, 3]", traces[0]['Args']
|
57
|
+
assert_equal "false", traces[0]['Retry']
|
58
|
+
|
59
|
+
assert_equal false, traces[0].key?('Backtrace')
|
60
|
+
assert_equal "net-http", traces[4]['Layer']
|
61
|
+
assert_equal "entry", traces[4]['Label']
|
62
|
+
assert_equal "memcache", traces[15]['Layer']
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_jobs_with_errors
|
66
|
+
# Queue up a job to be run
|
67
|
+
jid = Sidekiq::Client.push('queue' => 'critical', 'class' => ErrorWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
68
|
+
|
69
|
+
# Allow the job to be run
|
70
|
+
sleep 5
|
71
|
+
|
72
|
+
traces = get_all_traces
|
73
|
+
assert_equal 3, traces.count, "Trace count"
|
74
|
+
validate_outer_layers(traces, "sidekiq-worker")
|
75
|
+
valid_edges?(traces)
|
76
|
+
|
77
|
+
# Validate Webserver Spec KVs
|
78
|
+
assert_equal Socket.gethostname, traces[0]['HTTP-Host']
|
79
|
+
assert_equal "Sidekiq_critical", traces[0]['Controller']
|
80
|
+
assert_equal "ErrorWorkerJob", traces[0]['Action']
|
81
|
+
assert_equal "/sidekiq/critical/ErrorWorkerJob", traces[0]['URL']
|
82
|
+
|
83
|
+
# Validate Job Spec KVs
|
84
|
+
assert_equal "job", traces[0]['Spec']
|
85
|
+
assert_equal 'sidekiq', traces[0]['Flavor']
|
86
|
+
assert_equal "ErrorWorkerJob", traces[0]['JobName']
|
87
|
+
assert_equal jid, traces[0]['MsgID']
|
88
|
+
assert_equal "critical", traces[0]['Queue']
|
89
|
+
assert_equal "[1, 2, 3]", traces[0]['Args']
|
90
|
+
assert_equal "false", traces[0]['Retry']
|
91
|
+
|
92
|
+
assert_equal traces[1]['Layer'], 'sidekiq-worker'
|
93
|
+
assert_equal traces[1]['Label'], 'error'
|
94
|
+
assert_equal traces[1]['ErrorClass'], "RuntimeError"
|
95
|
+
assert traces[1].key?('ErrorMsg')
|
96
|
+
assert traces[1].key?('Backtrace')
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_collect_backtraces_default_value
|
100
|
+
assert_equal TV::Config[:delayedjobworker][:collect_backtraces], false, "default backtrace collection"
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_log_args_default_value
|
104
|
+
assert_equal TV::Config[:delayedjobworker][:log_args], true, "log_args default "
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_obey_collect_backtraces_when_false
|
108
|
+
TraceView::Config[:delayedjobworker][:collect_backtraces] = false
|
109
|
+
|
110
|
+
# Queue up a job to be run
|
111
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
112
|
+
|
113
|
+
# Allow the job to be run
|
114
|
+
sleep 5
|
115
|
+
|
116
|
+
traces = get_all_traces
|
117
|
+
assert_equal 17, traces.count, "Trace count"
|
118
|
+
valid_edges?(traces)
|
119
|
+
assert_equal 'sidekiq-worker', traces[0]['Layer']
|
120
|
+
assert_equal false, traces[0].key?('Backtrace')
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_obey_collect_backtraces_when_true
|
124
|
+
# FIXME: This can't be tested with the current Sidekiq minitest integration (e.g. already booted
|
125
|
+
# sidekiq in a different process)
|
126
|
+
skip
|
127
|
+
|
128
|
+
TraceView::Config[:delayedjobworker][:collect_backtraces] = true
|
129
|
+
|
130
|
+
# Queue up a job to be run
|
131
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
132
|
+
|
133
|
+
# Allow the job to be run
|
134
|
+
sleep 5
|
135
|
+
|
136
|
+
traces = get_all_traces
|
137
|
+
assert_equal 17, traces.count, "Trace count"
|
138
|
+
valid_edges?(traces)
|
139
|
+
assert_equal 'sidekiq-worker', traces[0]['Layer']
|
140
|
+
assert_equal true, traces[0].key?('Backtrace')
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_obey_log_args_when_false
|
144
|
+
# FIXME: This can't be tested with the current Sidekiq minitest integration (e.g. already booted
|
145
|
+
# sidekiq in a different process)
|
146
|
+
skip
|
147
|
+
|
148
|
+
TraceView::Config[:delayedjobworker][:log_args] = false
|
149
|
+
|
150
|
+
# Queue up a job to be run
|
151
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
152
|
+
|
153
|
+
# Allow the job to be run
|
154
|
+
sleep 5
|
155
|
+
|
156
|
+
traces = get_all_traces
|
157
|
+
assert_equal 17, traces.count, "Trace count"
|
158
|
+
valid_edges?(traces)
|
159
|
+
assert_equal false, traces[0].key?('Args')
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_obey_log_args_when_true
|
163
|
+
TraceView::Config[:delayedjobworker][:log_args] = true
|
164
|
+
|
165
|
+
# Queue up a job to be run
|
166
|
+
Sidekiq::Client.push('queue' => 'critical', 'class' => ::RemoteCallWorkerJob, 'args' => [1, 2, 3], 'retry' => false)
|
167
|
+
|
168
|
+
# Allow the job to be run
|
169
|
+
sleep 5
|
170
|
+
|
171
|
+
traces = get_all_traces
|
172
|
+
assert_equal 17, traces.count, "Trace count"
|
173
|
+
valid_edges?(traces)
|
174
|
+
assert_equal true, traces[0].key?('Args')
|
175
|
+
assert_equal '[1, 2, 3]', traces[0]['Args']
|
176
|
+
end
|
177
|
+
end
|
@@ -1,65 +1,185 @@
|
|
1
1
|
# Copyright (c) 2015 AppNeta, Inc.
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
|
-
|
4
|
+
if RUBY_VERSION >= '1.9.3' && !defined?(JRUBY_VERSION)
|
5
|
+
require 'minitest_helper'
|
6
|
+
require_relative "../jobs/resque/remote_call_worker_job"
|
7
|
+
require_relative "../jobs/resque/error_worker_job"
|
8
|
+
|
9
|
+
class ResqueClientTest < Minitest::Test
|
10
|
+
def setup
|
11
|
+
clear_all_traces
|
12
|
+
@collect_backtraces = TraceView::Config[:resqueclient][:collect_backtraces]
|
13
|
+
@log_args = TraceView::Config[:resqueclient][:log_args]
|
14
|
+
end
|
5
15
|
|
6
|
-
|
7
|
-
|
8
|
-
|
16
|
+
def teardown
|
17
|
+
TraceView::Config[:resqueclient][:collect_backtraces] = @collect_backtraces
|
18
|
+
TraceView::Config[:resqueclient][:log_args] = @log_args
|
19
|
+
end
|
9
20
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
21
|
+
def test_tv_methods_defined
|
22
|
+
[ :enqueue, :enqueue_to, :dequeue ].each do |m|
|
23
|
+
assert_equal true, ::Resque.method_defined?("#{m}_with_traceview")
|
24
|
+
end
|
14
25
|
|
15
|
-
|
16
|
-
|
26
|
+
assert_equal true, ::Resque::Worker.method_defined?("perform_with_traceview")
|
27
|
+
assert_equal true, ::Resque::Job.method_defined?("fail_with_traceview")
|
28
|
+
end
|
17
29
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
30
|
+
def not_tracing_validation
|
31
|
+
assert_equal true, Resque.enqueue(ResqueRemoteCallWorkerJob), "not tracing; enqueue return value"
|
32
|
+
assert_equal true, Resque.enqueue(ResqueRemoteCallWorkerJob, 1, 2, "3"), "not tracing; enqueue extra params"
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_enqueue
|
36
|
+
TraceView::API.start_trace('resque-client_test', '', {}) do
|
37
|
+
Resque.enqueue(ResqueRemoteCallWorkerJob)
|
38
|
+
end
|
39
|
+
|
40
|
+
traces = get_all_traces
|
23
41
|
|
24
|
-
|
25
|
-
|
26
|
-
|
42
|
+
assert_equal 6, traces.count, "trace count"
|
43
|
+
validate_outer_layers(traces, 'resque-client_test')
|
44
|
+
|
45
|
+
assert_equal "resque-client", traces[1]['Layer'], "entry event layer name"
|
46
|
+
assert_equal "entry", traces[1]['Label'], "entry event label"
|
47
|
+
assert_equal "pushq", traces[1]['Spec']
|
48
|
+
assert_equal "resque", traces[1]['Flavor']
|
49
|
+
assert_equal "ResqueRemoteCallWorkerJob", traces[1]['JobName']
|
50
|
+
assert_equal "critical", traces[1]['Queue']
|
51
|
+
assert_equal "resque-client", traces[4]['Layer'], "exit event layer name"
|
52
|
+
assert_equal "exit", traces[4]['Label'], "exit event label"
|
27
53
|
end
|
28
54
|
|
29
|
-
|
30
|
-
|
31
|
-
|
55
|
+
def test_dequeue
|
56
|
+
TraceView::API.start_trace('resque-client_test', '', {}) do
|
57
|
+
Resque.dequeue(ResqueRemoteCallWorkerJob, { :generate => :moped })
|
58
|
+
end
|
59
|
+
|
60
|
+
traces = get_all_traces
|
61
|
+
|
62
|
+
assert_equal 6, traces.count, "trace count"
|
63
|
+
validate_outer_layers(traces, 'resque-client_test')
|
32
64
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
65
|
+
assert_equal "resque-client", traces[1]['Layer'], "entry event layer name"
|
66
|
+
assert_equal "entry", traces[1]['Label'], "entry event label"
|
67
|
+
assert_equal "pushq", traces[1]['Spec']
|
68
|
+
assert_equal "resque", traces[1]['Flavor']
|
69
|
+
assert_equal "ResqueRemoteCallWorkerJob", traces[1]['JobName']
|
70
|
+
assert_equal "critical", traces[1]['Queue']
|
71
|
+
assert_equal "resque-client", traces[4]['Layer'], "exit event layer name"
|
72
|
+
assert_equal "exit", traces[4]['Label'], "exit event label"
|
39
73
|
end
|
40
74
|
|
41
|
-
|
75
|
+
def test_legacy_resque_config
|
76
|
+
assert_equal true, (TraceView::Config[:resque][:enabled] = true), "set legacy resque config options don't die"
|
77
|
+
assert_equal true, (TraceView::Config[:resque][:link_workers] = true), "set legacy resque config options don't die"
|
78
|
+
end
|
42
79
|
|
43
|
-
|
44
|
-
|
80
|
+
def test_collect_backtraces_default_value
|
81
|
+
assert_equal TV::Config[:resqueclient][:collect_backtraces], true, "default backtrace collection"
|
82
|
+
end
|
45
83
|
|
46
|
-
|
47
|
-
|
48
|
-
|
84
|
+
def test_log_args_default_value
|
85
|
+
assert_equal TV::Config[:resqueclient][:log_args], true, "log_args default "
|
86
|
+
end
|
49
87
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
88
|
+
def test_obey_collect_backtraces_when_false
|
89
|
+
TraceView::Config[:resqueclient][:collect_backtraces] = false
|
90
|
+
|
91
|
+
# Queue up a job to be run
|
92
|
+
::TraceView::API.start_trace('resque-client_test') do
|
93
|
+
Resque.enqueue(ResqueRemoteCallWorkerJob, [1, 2, 3])
|
94
|
+
end
|
95
|
+
|
96
|
+
traces = get_all_traces
|
97
|
+
assert_equal 6, traces.count, "trace count"
|
98
|
+
validate_outer_layers(traces, 'resque-client_test')
|
99
|
+
|
100
|
+
assert_equal false, traces[1].key?('Backtrace')
|
101
|
+
|
102
|
+
assert_equal "resque-client", traces[1]['Layer'], "entry event layer name"
|
103
|
+
assert_equal "entry", traces[1]['Label'], "entry event label"
|
104
|
+
assert_equal "pushq", traces[1]['Spec']
|
105
|
+
assert_equal "resque", traces[1]['Flavor']
|
106
|
+
assert_equal "ResqueRemoteCallWorkerJob", traces[1]['JobName']
|
107
|
+
assert_equal "critical", traces[1]['Queue']
|
108
|
+
assert_equal "resque-client", traces[4]['Layer'], "exit event layer name"
|
109
|
+
assert_equal "exit", traces[4]['Label'], "exit event label"
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_obey_collect_backtraces_when_true
|
113
|
+
TraceView::Config[:resqueclient][:collect_backtraces] = true
|
114
|
+
|
115
|
+
# Queue up a job to be run
|
116
|
+
::TraceView::API.start_trace('resque-client_test') do
|
117
|
+
Resque.enqueue(ResqueRemoteCallWorkerJob, [1, 2, 3])
|
118
|
+
end
|
119
|
+
|
120
|
+
traces = get_all_traces
|
121
|
+
assert_equal 6, traces.count, "trace count"
|
122
|
+
validate_outer_layers(traces, 'resque-client_test')
|
123
|
+
|
124
|
+
assert_equal true, traces[1].key?('Backtrace')
|
125
|
+
|
126
|
+
assert_equal "resque-client", traces[1]['Layer'], "entry event layer name"
|
127
|
+
assert_equal "entry", traces[1]['Label'], "entry event label"
|
128
|
+
assert_equal "pushq", traces[1]['Spec']
|
129
|
+
assert_equal "resque", traces[1]['Flavor']
|
130
|
+
assert_equal "ResqueRemoteCallWorkerJob", traces[1]['JobName']
|
131
|
+
assert_equal "critical", traces[1]['Queue']
|
132
|
+
assert_equal "resque-client", traces[4]['Layer'], "exit event layer name"
|
133
|
+
assert_equal "exit", traces[4]['Label'], "exit event label"
|
54
134
|
end
|
55
135
|
|
56
|
-
|
136
|
+
def test_obey_log_args_when_false
|
137
|
+
TraceView::Config[:resqueclient][:log_args] = false
|
138
|
+
|
139
|
+
# Queue up a job to be run
|
140
|
+
::TraceView::API.start_trace('resque-client_test') do
|
141
|
+
Resque.enqueue(ResqueRemoteCallWorkerJob, [1, 2, 3])
|
142
|
+
end
|
143
|
+
|
144
|
+
traces = get_all_traces
|
145
|
+
assert_equal 6, traces.count, "trace count"
|
146
|
+
validate_outer_layers(traces, 'resque-client_test')
|
57
147
|
|
58
|
-
|
59
|
-
validate_outer_layers(traces, 'resque-client_test')
|
148
|
+
assert_equal false, traces[1].key?('Args')
|
60
149
|
|
61
|
-
|
62
|
-
|
150
|
+
assert_equal "resque-client", traces[1]['Layer'], "entry event layer name"
|
151
|
+
assert_equal "entry", traces[1]['Label'], "entry event label"
|
152
|
+
assert_equal "pushq", traces[1]['Spec']
|
153
|
+
assert_equal "resque", traces[1]['Flavor']
|
154
|
+
assert_equal "ResqueRemoteCallWorkerJob", traces[1]['JobName']
|
155
|
+
assert_equal "critical", traces[1]['Queue']
|
156
|
+
assert_equal "resque-client", traces[4]['Layer'], "exit event layer name"
|
157
|
+
assert_equal "exit", traces[4]['Label'], "exit event label"
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_obey_log_args_when_true
|
161
|
+
TraceView::Config[:resqueclient][:log_args] = true
|
162
|
+
|
163
|
+
# Queue up a job to be run
|
164
|
+
::TraceView::API.start_trace('resque-client_test') do
|
165
|
+
Resque.enqueue(ResqueRemoteCallWorkerJob, 1, 2, 3)
|
166
|
+
end
|
167
|
+
|
168
|
+
traces = get_all_traces
|
169
|
+
assert_equal 6, traces.count, "trace count"
|
170
|
+
validate_outer_layers(traces, 'resque-client_test')
|
171
|
+
|
172
|
+
assert_equal true, traces[1].key?('Args')
|
173
|
+
assert_equal "[1,2,3]", traces[1]['Args']
|
174
|
+
|
175
|
+
assert_equal "resque-client", traces[1]['Layer'], "entry event layer name"
|
176
|
+
assert_equal "entry", traces[1]['Label'], "entry event label"
|
177
|
+
assert_equal "pushq", traces[1]['Spec']
|
178
|
+
assert_equal "resque", traces[1]['Flavor']
|
179
|
+
assert_equal "ResqueRemoteCallWorkerJob", traces[1]['JobName']
|
180
|
+
assert_equal "critical", traces[1]['Queue']
|
181
|
+
assert_equal "resque-client", traces[4]['Layer'], "exit event layer name"
|
182
|
+
assert_equal "exit", traces[4]['Label'], "exit event label"
|
183
|
+
end
|
63
184
|
end
|
64
185
|
end
|
65
|
-
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# Copyright (c) 2015 AppNeta, Inc.
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
|
-
if RUBY_VERSION >= '2.0'
|
4
|
+
if RUBY_VERSION >= '2.0' && !defined?(JRUBY_VERSION)
|
5
5
|
require 'minitest_helper'
|
6
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"
|
7
|
+
require_relative "../jobs/sidekiq/remote_call_worker_job"
|
8
|
+
require_relative "../jobs/sidekiq/db_worker_job"
|
9
|
+
require_relative "../jobs/sidekiq/error_worker_job"
|
10
10
|
|
11
11
|
class SidekiqClientTest < Minitest::Test
|
12
12
|
def setup
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# Copyright (c) 2015 AppNeta, Inc.
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
|
-
if RUBY_VERSION >= '2.0'
|
4
|
+
if RUBY_VERSION >= '2.0' && !defined?(JRUBY_VERSION)
|
5
5
|
require 'minitest_helper'
|
6
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"
|
7
|
+
require_relative "../jobs/sidekiq/remote_call_worker_job"
|
8
|
+
require_relative "../jobs/sidekiq/db_worker_job"
|
9
|
+
require_relative "../jobs/sidekiq/error_worker_job"
|
10
10
|
|
11
11
|
class SidekiqWorkerTest < Minitest::Test
|
12
12
|
def setup
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
class ResqueDBWorkerJob
|
5
|
+
@queue = :normal
|
6
|
+
|
7
|
+
def self.perform(*args)
|
8
|
+
return unless defined?(::Sequel) && !defined?(JRUBY_VERSION)
|
9
|
+
|
10
|
+
if ENV.key?('TRAVIS_MYSQL_PASS')
|
11
|
+
@db = Sequel.connect("mysql2://root:#{ENV['TRAVIS_MYSQL_PASS']}@127.0.0.1:3306/travis_ci_test")
|
12
|
+
else
|
13
|
+
@db = Sequel.connect('mysql2://root@127.0.0.1:3306/travis_ci_test')
|
14
|
+
end
|
15
|
+
|
16
|
+
unless @db.table_exists?(:items)
|
17
|
+
@db.create_table :items do
|
18
|
+
primary_key :id
|
19
|
+
String :name
|
20
|
+
Float :price
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
@db.run('select 1')
|
25
|
+
|
26
|
+
items = @db[:items]
|
27
|
+
items.count
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
class ResqueRemoteCallWorkerJob
|
5
|
+
@queue = :critical
|
6
|
+
|
7
|
+
def self.perform(*args)
|
8
|
+
# Make some random Dalli (memcache) calls and top it
|
9
|
+
# off with an excon call to the background rack webserver.
|
10
|
+
@dc = Dalli::Client.new
|
11
|
+
@dc.get(rand(10).to_s)
|
12
|
+
uri = URI('http://gameface.in/gamers')
|
13
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
14
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
15
|
+
http.request(request)
|
16
|
+
@dc.get(rand(10).to_s)
|
17
|
+
@dc.get(rand(10).to_s)
|
18
|
+
@dc.get_multi([:one, :two, :three, :four, :five, :six])
|
19
|
+
end
|
20
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
data/test/minitest_helper.rb
CHANGED
@@ -62,8 +62,12 @@ when /rails3/
|
|
62
62
|
when /frameworks/
|
63
63
|
when /libraries/
|
64
64
|
if RUBY_VERSION >= '2.0'
|
65
|
-
#
|
66
|
-
|
65
|
+
# Load Sidekiq if TEST isn't defined or if it is, it calls
|
66
|
+
# out the sidekiq tests
|
67
|
+
if !ENV.key?('TEST') || ENV['TEST'] =~ /sidekiq/
|
68
|
+
# Background Sidekiq thread
|
69
|
+
require './test/servers/sidekiq.rb'
|
70
|
+
end
|
67
71
|
end
|
68
72
|
end
|
69
73
|
|
@@ -218,4 +222,3 @@ class MiniTest::Spec
|
|
218
222
|
Rack::Lint.new(@app)
|
219
223
|
end
|
220
224
|
end
|
221
|
-
|
data/test/servers/sidekiq.rb
CHANGED
@@ -25,11 +25,3 @@ end
|
|
25
25
|
|
26
26
|
# Allow Sidekiq to boot up
|
27
27
|
sleep 10
|
28
|
-
|
29
|
-
# Add a hook to shutdown sidekiq after Minitest finished running
|
30
|
-
Minitest.after_run {
|
31
|
-
TraceView.logger.warn "[traceview/servers] Shutting down Sidekiq."
|
32
|
-
pid = File.read("/tmp/sidekiq_#{Process.pid}.pid").chomp
|
33
|
-
Process.kill(:TERM, pid.to_i)
|
34
|
-
File.unlink "/tmp/sidekiq_#{Process.pid}.pid"
|
35
|
-
}
|
@@ -5,9 +5,9 @@ ENV['BUNDLE_GEMFILE'] = Dir.pwd + "/gemfiles/libraries.gemfile"
|
|
5
5
|
|
6
6
|
require 'rubygems'
|
7
7
|
require 'bundler/setup'
|
8
|
-
require_relative '../jobs/db_worker_job'
|
9
|
-
require_relative '../jobs/remote_call_worker_job'
|
10
|
-
require_relative '../jobs/error_worker_job'
|
8
|
+
require_relative '../jobs/sidekiq/db_worker_job'
|
9
|
+
require_relative '../jobs/sidekiq/remote_call_worker_job'
|
10
|
+
require_relative '../jobs/sidekiq/error_worker_job'
|
11
11
|
|
12
12
|
ENV["RACK_ENV"] = "test"
|
13
13
|
ENV["TRACEVIEW_GEM_TEST"] = "true"
|
data/test/support/config_test.rb
CHANGED
@@ -30,7 +30,7 @@ describe "TraceView::Config" do
|
|
30
30
|
instrumentation = TraceView::Config.instrumentation
|
31
31
|
|
32
32
|
# Verify the number of individual instrumentations
|
33
|
-
instrumentation.count.must_equal
|
33
|
+
instrumentation.count.must_equal 25
|
34
34
|
|
35
35
|
TraceView::Config[:action_controller][:enabled].must_equal true
|
36
36
|
TraceView::Config[:action_view][:enabled].must_equal true
|
@@ -50,7 +50,8 @@ describe "TraceView::Config" do
|
|
50
50
|
TraceView::Config[:moped][:enabled].must_equal true
|
51
51
|
TraceView::Config[:rack][:enabled].must_equal true
|
52
52
|
TraceView::Config[:redis][:enabled].must_equal true
|
53
|
-
TraceView::Config[:
|
53
|
+
TraceView::Config[:resqueclient][:enabled].must_equal true
|
54
|
+
TraceView::Config[:resqueworker][:enabled].must_equal true
|
54
55
|
TraceView::Config[:rest_client][:enabled].must_equal true
|
55
56
|
TraceView::Config[:sequel][:enabled].must_equal true
|
56
57
|
TraceView::Config[:sidekiqclient][:enabled].must_equal true
|
@@ -75,14 +76,14 @@ describe "TraceView::Config" do
|
|
75
76
|
TraceView::Config[:moped][:log_args].must_equal true
|
76
77
|
TraceView::Config[:rack][:log_args].must_equal true
|
77
78
|
TraceView::Config[:redis][:log_args].must_equal true
|
78
|
-
TraceView::Config[:
|
79
|
+
TraceView::Config[:resqueclient][:log_args].must_equal true
|
80
|
+
TraceView::Config[:resqueworker][:log_args].must_equal true
|
79
81
|
TraceView::Config[:rest_client][:log_args].must_equal true
|
80
82
|
TraceView::Config[:sequel][:log_args].must_equal true
|
81
83
|
TraceView::Config[:sidekiqclient][:log_args].must_equal true
|
82
84
|
TraceView::Config[:sidekiqworker][:log_args].must_equal true
|
83
85
|
TraceView::Config[:typhoeus][:log_args].must_equal true
|
84
86
|
|
85
|
-
TraceView::Config[:resque][:link_workers].must_equal false
|
86
87
|
TraceView::Config[:blacklist].is_a?(Array).must_equal true
|
87
88
|
|
88
89
|
TraceView::Config[:dnt_regexp].must_equal "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|ttf|woff|svg|less)$"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traceview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Giacomo Lombardo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -165,6 +165,8 @@ files:
|
|
165
165
|
- test/instrumentation/cassandra_test.rb
|
166
166
|
- test/instrumentation/curb_test.rb
|
167
167
|
- test/instrumentation/dalli_test.rb
|
168
|
+
- test/instrumentation/delayed_job-client_test.rb
|
169
|
+
- test/instrumentation/delayed_job-worker_test.rb
|
168
170
|
- test/instrumentation/em_http_request_test.rb
|
169
171
|
- test/instrumentation/excon_test.rb
|
170
172
|
- test/instrumentation/faraday_test.rb
|
@@ -190,9 +192,12 @@ files:
|
|
190
192
|
- test/instrumentation/sidekiq-client_test.rb
|
191
193
|
- test/instrumentation/sidekiq-worker_test.rb
|
192
194
|
- test/instrumentation/typhoeus_test.rb
|
193
|
-
- test/jobs/db_worker_job.rb
|
194
|
-
- test/jobs/error_worker_job.rb
|
195
|
-
- test/jobs/remote_call_worker_job.rb
|
195
|
+
- test/jobs/resque/db_worker_job.rb
|
196
|
+
- test/jobs/resque/error_worker_job.rb
|
197
|
+
- test/jobs/resque/remote_call_worker_job.rb
|
198
|
+
- test/jobs/sidekiq/db_worker_job.rb
|
199
|
+
- test/jobs/sidekiq/error_worker_job.rb
|
200
|
+
- test/jobs/sidekiq/remote_call_worker_job.rb
|
196
201
|
- test/minitest_helper.rb
|
197
202
|
- test/profiling/legacy_method_profiling_test.rb
|
198
203
|
- test/profiling/method_profiling_test.rb
|
@@ -244,6 +249,7 @@ test_files:
|
|
244
249
|
- test/servers/rackapp_8101.rb
|
245
250
|
- test/instrumentation/excon_test.rb
|
246
251
|
- test/instrumentation/sequel_pg_test.rb
|
252
|
+
- test/instrumentation/delayed_job-worker_test.rb
|
247
253
|
- test/instrumentation/moped_test.rb
|
248
254
|
- test/instrumentation/httpclient_test.rb
|
249
255
|
- test/instrumentation/sequel_mysql_test.rb
|
@@ -255,6 +261,7 @@ test_files:
|
|
255
261
|
- test/instrumentation/cassandra_test.rb
|
256
262
|
- test/instrumentation/redis_strings_test.rb
|
257
263
|
- test/instrumentation/typhoeus_test.rb
|
264
|
+
- test/instrumentation/delayed_job-client_test.rb
|
258
265
|
- test/instrumentation/sequel_mysql2_test.rb
|
259
266
|
- test/instrumentation/sidekiq-worker_test.rb
|
260
267
|
- test/instrumentation/redis_misc_test.rb
|
@@ -291,6 +298,9 @@ test_files:
|
|
291
298
|
- test/support/backcompat_test.rb
|
292
299
|
- test/support/xtrace_test.rb
|
293
300
|
- test/minitest_helper.rb
|
294
|
-
- test/jobs/remote_call_worker_job.rb
|
295
|
-
- test/jobs/error_worker_job.rb
|
296
|
-
- test/jobs/db_worker_job.rb
|
301
|
+
- test/jobs/sidekiq/remote_call_worker_job.rb
|
302
|
+
- test/jobs/sidekiq/error_worker_job.rb
|
303
|
+
- test/jobs/sidekiq/db_worker_job.rb
|
304
|
+
- test/jobs/resque/remote_call_worker_job.rb
|
305
|
+
- test/jobs/resque/error_worker_job.rb
|
306
|
+
- test/jobs/resque/db_worker_job.rb
|