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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2412fa020c6024d7fc8b193b80f5d6f6f1fd19d8
4
- data.tar.gz: 474664b165f3982c5e9dc37b5b42eb72ba290276
3
+ metadata.gz: 730a56babc918a4dcc1b47caff72d4f5be3f9b8f
4
+ data.tar.gz: 86356f63bb250a19dd1dcb1b61691770166c68af
5
5
  SHA512:
6
- metadata.gz: 81ea925e87f846f88c942eed0b9003f29a4e24ffdf0b110e75e7d7217673a3aa7cad473685d019b47fa109d90cd1ad52e583ac44d21b4421086f86b807c8963e
7
- data.tar.gz: 61970fc5980437ce975e99fb7ca8b66967d032692718b0bc3ac8cd6079e7dee144de78bd29377ec27a7a02bd91b0266b6302b5b7ef0ca444ecc6c02c8c560b0e
6
+ metadata.gz: 22f6ca27664ae20d8216bf8fe388c80c9da58fab2953313970b9a5beb08b4b7d8943db8a4fc2173d1c991b6764c691fd55e2fb7d5091cbbcb078dbdc58545c27
7
+ data.tar.gz: 0eb31e31b5f991e846f5795c0a65ccb46788099a9562a3b1fdf922005ba54d24054f5664e40a43b73f2903d34f4ca92aefae7fc5f55ba8dd137aa5a0e1474218
data/.travis.yml CHANGED
@@ -7,12 +7,9 @@ cache:
7
7
 
8
8
  rvm:
9
9
  - 2.2.3
10
- - 2.1.7
11
- - 2.0.0
12
10
  - 1.9.3
13
11
  - 1.8.7
14
- - ree
15
- - jruby-19mode
12
+ - jruby-9.0.0.0
16
13
 
17
14
  gemfile:
18
15
  - gemfiles/libraries.gemfile
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
@@ -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'
@@ -14,8 +14,8 @@ module TraceView
14
14
  @@instrumentation = [:action_controller, :action_view, :active_record,
15
15
  :cassandra, :curb, :dalli, :em_http_request, :excon, :faraday,
16
16
  :grape, :httpclient, :nethttp, :memcached, :memcache, :mongo,
17
- :moped, :rack, :redis, :resque, :rest_client, :sequel, :sidekiqclient,
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[:resque][:collect_backtraces] = true
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
- # Special instrument specific flags
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 Resque
10
- def self.included(base)
11
- base.send :extend, ::Resque
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[:Op] = op.to_s
19
- report_kvs[:Class] = klass.to_s if klass
21
+ report_kvs[:Spec] = :pushq
22
+ report_kvs[:Flavor] = :resque
23
+ report_kvs[:JobName] = klass.to_s
20
24
 
21
- if TraceView::Config[:resque][:log_args]
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[:resque][:collect_backtraces]
33
- rescue
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[:Op] = :perform
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[:URL] = '/resque/' + job.queue
94
- report_kvs[:Method] = 'NONE'
95
- report_kvs[:Queue] = job.queue
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[:resque][:log_args]
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
- last_arg = job.payload['args'].last
116
+ report_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:resqueworker][:collect_backtraces]
111
117
  rescue
112
118
  end
113
119
 
114
- if last_arg.is_a?(Hash) && last_arg.key?('parent_trace_id')
115
- begin
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.module_eval do
153
- include TraceView::Inst::Resque
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]['X-Trace'] = TraceView::Context.toString if TraceView.tracing?
30
+ args[1]['SourceTrace'] = TraceView::Context.toString if TraceView.tracing?
33
31
 
34
32
  result = yield
35
33
 
36
- report_kvs = { :JobID => result["jid"] }
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] = :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]
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'].to_s}"
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
- incoming_context = nil
38
- if args[1].is_a?(Hash) && TraceView::XTrace.valid?(args[1]['X-Trace'])
39
- incoming_context = args[1]['X-Trace']
40
- report_kvs[:Async] = true
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', incoming_context, report_kvs) do
49
+ result = TraceView::API.start_trace('sidekiq-worker', nil, report_kvs) do
44
50
  yield
45
51
  end
46
52
 
@@ -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/', '*.rb')
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
@@ -8,7 +8,7 @@ module TraceView
8
8
  module Version
9
9
  MAJOR = 3
10
10
  MINOR = 3
11
- PATCH = 1
11
+ PATCH = 3
12
12
  BUILD = nil
13
13
 
14
14
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -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
- require 'minitest_helper'
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
- describe "Resque" do
7
- before do
8
- clear_all_traces
16
+ def teardown
17
+ TraceView::Config[:resqueclient][:collect_backtraces] = @collect_backtraces
18
+ TraceView::Config[:resqueclient][:log_args] = @log_args
19
+ end
9
20
 
10
- # These are standard entry/exit KVs that are passed up with all moped operations
11
- @entry_kvs = {
12
- 'Layer' => 'resque',
13
- 'Label' => 'entry' }
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
- @exit_kvs = { 'Layer' => 'resque', 'Label' => 'exit' }
16
- end
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
- it 'Stock Resque should be loaded, defined and ready' do
19
- defined?(::Resque).wont_match nil
20
- defined?(::Resque::Worker).wont_match nil
21
- defined?(::Resque::Job).wont_match nil
22
- end
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
- it 'Resque should have traceview methods defined' do
25
- [ :enqueue, :enqueue_to, :dequeue ].each do |m|
26
- ::Resque.method_defined?("#{m}_with_traceview").must_equal true
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
- ::Resque::Worker.method_defined?("perform_with_traceview").must_equal true
30
- ::Resque::Job.method_defined?("fail_with_traceview").must_equal true
31
- end
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
- it "should trace enqueue" do
34
- skip
35
- TraceView::API.start_trace('resque-client_test', '', {}) do
36
- Resque.enqueue(TraceViewResqueJob, { :generate => :activerecord, :delay => rand(5..30).to_f })
37
- Resque.enqueue(TraceViewResqueJobThatFails)
38
- Resque.dequeue(TraceViewResqueJob, { :generate => :moped })
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
- traces = get_all_traces
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
- traces.count.must_equal 4
44
- validate_outer_layers(traces, 'resque-client_test')
80
+ def test_collect_backtraces_default_value
81
+ assert_equal TV::Config[:resqueclient][:collect_backtraces], true, "default backtrace collection"
82
+ end
45
83
 
46
- validate_event_keys(traces[1], @entry_kvs)
47
- validate_event_keys(traces[2], @exit_kvs)
48
- end
84
+ def test_log_args_default_value
85
+ assert_equal TV::Config[:resqueclient][:log_args], true, "log_args default "
86
+ end
49
87
 
50
- it "should trace dequeue" do
51
- skip
52
- TraceView::API.start_trace('resque-client_test', '', {}) do
53
- Resque.dequeue(TraceViewResqueJob, { :generate => :moped })
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
- traces = get_all_traces
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
- traces.count.must_equal 4
59
- validate_outer_layers(traces, 'resque-client_test')
148
+ assert_equal false, traces[1].key?('Args')
60
149
 
61
- validate_event_keys(traces[1], @entry_kvs)
62
- validate_event_keys(traces[2], @exit_kvs)
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,10 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ class ResqueErrorWorkerJob
5
+ @queue = :critical
6
+
7
+ def self.perform(*args)
8
+ raise "This is a worker error yeah!"
9
+ end
10
+ 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
@@ -62,8 +62,12 @@ when /rails3/
62
62
  when /frameworks/
63
63
  when /libraries/
64
64
  if RUBY_VERSION >= '2.0'
65
- # Background Sidekiq thread
66
- require './test/servers/sidekiq.rb'
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
-
@@ -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"
@@ -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 24
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[:resque][:enabled].must_equal true
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[:resque][:log_args].must_equal true
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.1
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-10-21 00:00:00.000000000 Z
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