traceview 3.3.1 → 3.3.3
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 +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
|