traceview 3.5.1 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/gemfiles/libraries.gemfile +2 -1
- data/gemfiles/rails32.gemfile +2 -1
- data/lib/traceview/base.rb +1 -1
- data/lib/traceview/config.rb +29 -8
- data/lib/traceview/inst/{bunny.rb → bunny-client.rb} +11 -12
- data/lib/traceview/inst/bunny-consumer.rb +92 -0
- data/lib/traceview/version.rb +2 -2
- data/test/instrumentation/{bunny_exchange_test.rb → bunny_client_test.rb} +1 -1
- data/test/instrumentation/bunny_consumer_test.rb +204 -0
- data/test/support/auto_tracing_test.rb +10 -0
- data/test/support/config_test.rb +5 -3
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6660066c10caaa82692450f3cb605aaf60246058
|
4
|
+
data.tar.gz: e35fb9b72aa97cee508e5c94ec45352af8db210c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 225128b2074fe06f2129fd8402a8ece3a544b70c1958db4023f51292f0a68ef25800ee24cdcee88597f3ed86d2876edd93e0f9865dd9d76356998b059d8c4c85
|
7
|
+
data.tar.gz: 098564e82e0f401224f12693a79ad40e77ff7fa3382d439026232366d61998cd26ac702999ef0fb3002d28ce9cb77dd1b17ca532897ba6733139df63d9d64251
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,17 @@ 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.6.0
|
8
|
+
|
9
|
+
This minor release includes the following new feature:
|
10
|
+
|
11
|
+
* New [bunny](https://github.com/ruby-amqp/bunny) (Rabbitmq) consumer instrumentation: #160
|
12
|
+
|
13
|
+
Pushed to Rubygems:
|
14
|
+
|
15
|
+
https://rubygems.org/gems/traceview/versions/3.6.0
|
16
|
+
https://rubygems.org/gems/traceview/versions/3.6.0-java
|
17
|
+
|
7
18
|
# traceview 3.5.1
|
8
19
|
|
9
20
|
This patch release includes the following fixes:
|
data/gemfiles/libraries.gemfile
CHANGED
@@ -16,11 +16,12 @@ group :development, :test do
|
|
16
16
|
gem 'minitest-reporters', '< 1.0.18'
|
17
17
|
gem 'minitest-debugger', :require => false
|
18
18
|
gem 'rack-test'
|
19
|
-
gem 'puma'
|
20
19
|
if RUBY_VERSION < '1.9.3'
|
21
20
|
gem 'bson', '<= 1.12.3'
|
21
|
+
gem 'puma', '< 3.0'
|
22
22
|
else
|
23
23
|
gem 'bson', '< 4.0'
|
24
|
+
gem 'puma'
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
data/gemfiles/rails32.gemfile
CHANGED
@@ -19,11 +19,12 @@ group :development, :test do
|
|
19
19
|
gem 'minitest-reporters', '< 1.0.18'
|
20
20
|
gem 'minitest-debugger', :require => false
|
21
21
|
gem 'rack-test'
|
22
|
-
gem 'puma'
|
23
22
|
if RUBY_VERSION < '1.9.3'
|
24
23
|
gem 'bson', '<= 1.12.3'
|
24
|
+
gem 'puma', '< 3.0'
|
25
25
|
else
|
26
26
|
gem 'bson', '< 4.0'
|
27
|
+
gem 'puma'
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
data/lib/traceview/base.rb
CHANGED
@@ -142,7 +142,7 @@ module TraceViewBase
|
|
142
142
|
# DelayedJob or Sidekiq workers.
|
143
143
|
#
|
144
144
|
def entry_layer?(layer)
|
145
|
-
%w(delayed_job-worker sidekiq-worker resque-worker).include?(layer.to_s)
|
145
|
+
%w(delayed_job-worker sidekiq-worker resque-worker rabbitmq-consumer).include?(layer.to_s)
|
146
146
|
end
|
147
147
|
|
148
148
|
##
|
data/lib/traceview/config.rb
CHANGED
@@ -11,13 +11,14 @@ module TraceView
|
|
11
11
|
module Config
|
12
12
|
@@config = {}
|
13
13
|
|
14
|
-
@@instrumentation = [:action_controller, :action_view, :active_record,
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
14
|
+
@@instrumentation = [:action_controller, :action_view, :active_record,
|
15
|
+
:bunnyclient, :bunnyconsumer, :cassandra, :curb,
|
16
|
+
:dalli, :delayed_jobclient, :delayed_jobworker,
|
17
|
+
:em_http_request, :excon, :faraday, :grape,
|
18
|
+
:httpclient, :nethttp, :memcached,
|
19
|
+
:memcache, :mongo, :moped, :rack, :redis,
|
20
|
+
:resqueclient, :resqueworker, :rest_client,
|
21
|
+
:sequel, :sidekiqclient, :sidekiqworker, :typhoeus]
|
21
22
|
|
22
23
|
# Subgrouping of instrumentation
|
23
24
|
@@http_clients = [:curb, :excon, :em_http_request, :faraday, :httpclient, :nethttp, :rest_client, :typhoeus]
|
@@ -44,7 +45,8 @@ module TraceView
|
|
44
45
|
# Set collect_backtraces defaults
|
45
46
|
TraceView::Config[:action_controller][:collect_backtraces] = true
|
46
47
|
TraceView::Config[:active_record][:collect_backtraces] = true
|
47
|
-
TraceView::Config[:
|
48
|
+
TraceView::Config[:bunnyclient][:collect_backtraces] = false
|
49
|
+
TraceView::Config[:bunnyconsumer][:collect_backtraces] = false
|
48
50
|
TraceView::Config[:action_view][:collect_backtraces] = true
|
49
51
|
TraceView::Config[:cassandra][:collect_backtraces] = true
|
50
52
|
TraceView::Config[:curb][:collect_backtraces] = true
|
@@ -61,6 +63,7 @@ module TraceView
|
|
61
63
|
TraceView::Config[:mongo][:collect_backtraces] = true
|
62
64
|
TraceView::Config[:moped][:collect_backtraces] = true
|
63
65
|
TraceView::Config[:nethttp][:collect_backtraces] = true
|
66
|
+
TraceView::Config[:rack][:collect_backtraces] = false
|
64
67
|
TraceView::Config[:redis][:collect_backtraces] = false
|
65
68
|
TraceView::Config[:resqueclient][:collect_backtraces] = true
|
66
69
|
TraceView::Config[:resqueworker][:collect_backtraces] = false
|
@@ -147,6 +150,7 @@ module TraceView
|
|
147
150
|
# <tt>rescue_from</tt> are not reported to the TraceView
|
148
151
|
# dashboard by default. Setting this value to true will
|
149
152
|
# report all raised exception regardless.
|
153
|
+
#
|
150
154
|
@@config[:report_rescued_errors] = false
|
151
155
|
|
152
156
|
# By default, the curb instrumentation will not link
|
@@ -163,8 +167,25 @@ module TraceView
|
|
163
167
|
# Alternatively, if you would like to install the separate
|
164
168
|
# libcurl instrumentation, see here:
|
165
169
|
# http://docs.appneta.com/installing-libcurl-instrumentation
|
170
|
+
#
|
166
171
|
@@config[:curb][:cross_host] = false
|
167
172
|
|
173
|
+
# The bunny (Rabbitmq) instrumentation can optionally report
|
174
|
+
# Controller and Action values to allow filtering of bunny
|
175
|
+
# message handling in # the UI. Use of Controller and Action
|
176
|
+
# for filters is temporary until the UI is updated with
|
177
|
+
# additional filters.
|
178
|
+
#
|
179
|
+
# These values identify which properties of
|
180
|
+
# Bunny::MessageProperties to report as Controller
|
181
|
+
# and Action. The defaults are to report :app_id (as
|
182
|
+
# Controller) and :type (as Action). If these values
|
183
|
+
# are not specified in the publish, then nothing
|
184
|
+
# will be reported here.
|
185
|
+
#
|
186
|
+
@@config[:bunnyconsumer][:controller] = :app_id
|
187
|
+
@@config[:bunnyconsumer][:action] = :type
|
188
|
+
|
168
189
|
# Environment support for OpenShift.
|
169
190
|
if ENV.key?('OPENSHIFT_TRACEVIEW_TLYZER_IP')
|
170
191
|
# We're running on OpenShift
|
@@ -55,6 +55,7 @@ module TraceView
|
|
55
55
|
kvs[:RemoteHost] = @connection.host
|
56
56
|
kvs[:RemotePort] = @connection.port.to_i
|
57
57
|
kvs[:VirtualHost] = @connection.vhost
|
58
|
+
kvs[:Backtrace] = TV::API.backtrace if TV::Config[:bunnyclient][:collect_backtraces]
|
58
59
|
kvs
|
59
60
|
rescue => e
|
60
61
|
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
@@ -68,9 +69,7 @@ module TraceView
|
|
68
69
|
return basic_publish_without_traceview(payload, exchange, routing_key, opts) if !TraceView.tracing?
|
69
70
|
|
70
71
|
begin
|
71
|
-
kvs =
|
72
|
-
kvs[:Spec] = :pushq
|
73
|
-
kvs[:Flavor] = :rabbitmq # broker name?
|
72
|
+
kvs = collect_channel_kvs
|
74
73
|
|
75
74
|
if exchange.respond_to?(:name)
|
76
75
|
kvs[:ExchangeName] = exchange.name
|
@@ -80,16 +79,16 @@ module TraceView
|
|
80
79
|
kvs[:ExchangeName] = :default
|
81
80
|
end
|
82
81
|
|
83
|
-
kvs[:Queue]
|
84
|
-
kvs[:RoutingKey]
|
85
|
-
kvs[:
|
86
|
-
kvs[:RemotePort] = @connection.port.to_i
|
87
|
-
|
88
|
-
kvs[:Op] = :publish
|
89
|
-
kvs[:VirtualHost] = @connection.vhost
|
82
|
+
kvs[:Queue] = opts[:queue] if opts.key?(:queue)
|
83
|
+
kvs[:RoutingKey] = routing_key if routing_key
|
84
|
+
kvs[:Op] = :publish
|
90
85
|
|
91
86
|
TraceView::API.log_entry('rabbitmq-client')
|
92
87
|
|
88
|
+
# Pass the tracing context as a header
|
89
|
+
opts[:headers] ||= {}
|
90
|
+
opts[:headers][:SourceTrace] = TraceView::Context.toString if TraceView.tracing?
|
91
|
+
|
93
92
|
basic_publish_without_traceview(payload, exchange, routing_key, opts)
|
94
93
|
rescue => e
|
95
94
|
TraceView::API.log_exception(nil, e)
|
@@ -142,8 +141,8 @@ module TraceView
|
|
142
141
|
end
|
143
142
|
end
|
144
143
|
|
145
|
-
if TraceView::Config[:
|
146
|
-
::TraceView.logger.info '[traceview/loading] Instrumenting bunny' if TraceView::Config[:verbose]
|
144
|
+
if TraceView::Config[:bunnyclient][:enabled] && defined?(::Bunny)
|
145
|
+
::TraceView.logger.info '[traceview/loading] Instrumenting bunny client' if TraceView::Config[:verbose]
|
147
146
|
::TraceView::Util.send_include(::Bunny::Exchange, ::TraceView::Inst::BunnyExchange)
|
148
147
|
::TraceView::Util.send_include(::Bunny::Channel, ::TraceView::Inst::BunnyChannel)
|
149
148
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# Copyright (c) 2016 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
module TraceView
|
5
|
+
module Inst
|
6
|
+
module BunnyConsumer
|
7
|
+
def self.included(klass)
|
8
|
+
::TraceView::Util.method_alias(klass, :call, ::Bunny::Consumer)
|
9
|
+
end
|
10
|
+
|
11
|
+
def collect_consumer_kvs(args)
|
12
|
+
begin
|
13
|
+
kvs = {}
|
14
|
+
kvs[:Spec] = :job
|
15
|
+
kvs[:Flavor] = :rabbitmq
|
16
|
+
kvs[:RemoteHost] = @channel.connection.host
|
17
|
+
kvs[:RemotePort] = @channel.connection.port.to_i
|
18
|
+
kvs[:VirtualHost] = @channel.connection.vhost
|
19
|
+
|
20
|
+
mp = args[1]
|
21
|
+
kvs[:RoutingKey] = args[0].routing_key if args[0].routing_key
|
22
|
+
kvs[:MsgID] = args[1].message_id if mp.message_id
|
23
|
+
kvs[:AppID] = args[1].app_id if mp.app_id
|
24
|
+
kvs[:Priority] = args[1].priority if mp.priority
|
25
|
+
|
26
|
+
if @queue.respond_to?(:name)
|
27
|
+
kvs[:Queue] = @queue.name
|
28
|
+
else
|
29
|
+
kvs[:Queue] = @queue
|
30
|
+
end
|
31
|
+
|
32
|
+
# Report configurable Controller/Action KVs
|
33
|
+
# See TraceView::Config[:bunny] in lib/traceview/config.rb
|
34
|
+
# Used for dashboard trace filtering
|
35
|
+
controller_key = TV::Config[:bunnyconsumer][:controller]
|
36
|
+
if mp.respond_to?(controller_key)
|
37
|
+
value = mp.method(controller_key).call
|
38
|
+
kvs[:Controller] = value if value
|
39
|
+
end
|
40
|
+
|
41
|
+
action_key = TV::Config[:bunnyconsumer][:action]
|
42
|
+
if mp.respond_to?(action_key)
|
43
|
+
value = mp.method(action_key).call
|
44
|
+
kvs[:Action] = value if value
|
45
|
+
end
|
46
|
+
|
47
|
+
if kvs[:Queue]
|
48
|
+
kvs[:URL] = "/bunny/#{kvs[:Queue]}"
|
49
|
+
else
|
50
|
+
kvs[:URL] = "/bunny/consumer"
|
51
|
+
end
|
52
|
+
|
53
|
+
if TV::Config[:bunnyconsumer][:log_args] && @arguments
|
54
|
+
kvs[:Args] = @arguments.to_s
|
55
|
+
end
|
56
|
+
|
57
|
+
kvs[:Backtrace] = TV::API.backtrace if TV::Config[:bunnyconsumer][:collect_backtraces]
|
58
|
+
|
59
|
+
kvs
|
60
|
+
rescue => e
|
61
|
+
TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
|
62
|
+
ensure
|
63
|
+
return kvs
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def call_with_traceview(*args)
|
68
|
+
report_kvs = collect_consumer_kvs(args)
|
69
|
+
|
70
|
+
# If SourceTrace was passed, capture and report it
|
71
|
+
headers = args[1][:headers]
|
72
|
+
|
73
|
+
if headers && headers['SourceTrace']
|
74
|
+
report_kvs[:SourceTrace] = headers['SourceTrace']
|
75
|
+
|
76
|
+
# Remove SourceTrace
|
77
|
+
headers.delete('SourceTrace')
|
78
|
+
end
|
79
|
+
|
80
|
+
result = TraceView::API.start_trace('rabbitmq-consumer', nil, report_kvs) do
|
81
|
+
call_without_traceview(*args)
|
82
|
+
end
|
83
|
+
result[0]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
if TraceView::Config[:bunnyconsumer][:enabled] && defined?(::Bunny)
|
90
|
+
::TraceView.logger.info '[traceview/loading] Instrumenting bunny consumer' if TraceView::Config[:verbose]
|
91
|
+
::TraceView::Util.send_include(::Bunny::Consumer, ::TraceView::Inst::BunnyConsumer)
|
92
|
+
end
|
data/lib/traceview/version.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
require 'minitest_helper'
|
5
5
|
|
6
6
|
unless defined?(JRUBY_VERSION)
|
7
|
-
class
|
7
|
+
class BunnyClientTest < Minitest::Test
|
8
8
|
def setup
|
9
9
|
# Support specific environment variables to support remote rabbitmq servers
|
10
10
|
ENV['TV_RABBITMQ_SERVER'] = "127.0.0.1" unless ENV['TV_RABBITMQ_SERVER']
|
@@ -0,0 +1,204 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
require 'minitest_helper'
|
5
|
+
|
6
|
+
unless defined?(JRUBY_VERSION)
|
7
|
+
class BunnyConsumerTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
# Support specific environment variables to support remote rabbitmq servers
|
10
|
+
ENV['TV_RABBITMQ_SERVER'] = "127.0.0.1" unless ENV['TV_RABBITMQ_SERVER']
|
11
|
+
ENV['TV_RABBITMQ_PORT'] = "5672" unless ENV['TV_RABBITMQ_PORT']
|
12
|
+
ENV['TV_RABBITMQ_USERNAME'] = "guest" unless ENV['TV_RABBITMQ_USERNAME']
|
13
|
+
ENV['TV_RABBITMQ_PASSWORD'] = "guest" unless ENV['TV_RABBITMQ_PASSWORD']
|
14
|
+
ENV['TV_RABBITMQ_VHOST'] = "/" unless ENV['TV_RABBITMQ_VHOST']
|
15
|
+
|
16
|
+
@connection_params = {}
|
17
|
+
@connection_params[:host] = ENV['TV_RABBITMQ_SERVER']
|
18
|
+
@connection_params[:port] = ENV['TV_RABBITMQ_PORT']
|
19
|
+
@connection_params[:vhost] = ENV['TV_RABBITMQ_VHOST']
|
20
|
+
@connection_params[:user] = ENV['TV_RABBITMQ_USERNAME']
|
21
|
+
@connection_params[:pass] = ENV['TV_RABBITMQ_PASSWORD']
|
22
|
+
|
23
|
+
clear_all_traces
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_consume
|
27
|
+
@conn = Bunny.new(@connection_params)
|
28
|
+
@conn.start
|
29
|
+
@ch = @conn.create_channel
|
30
|
+
@queue = @ch.queue("tv.ruby.consumer.test", :exclusive => true)
|
31
|
+
@exchange = @ch.default_exchange
|
32
|
+
|
33
|
+
@queue.subscribe(:block => false, :manual_ack => true) do |delivery_info, properties, payload|
|
34
|
+
# Make an http call to spice things up
|
35
|
+
uri = URI('http://127.0.0.1:8101/')
|
36
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
37
|
+
http.get('/?q=1').read_body
|
38
|
+
end
|
39
|
+
|
40
|
+
TraceView::API.start_trace('bunny_consume_test') do
|
41
|
+
@exchange.publish("The Tortoise and the Hare", :routing_key => @queue.name, :app_id => "msg_app", :type => :generic)
|
42
|
+
end
|
43
|
+
|
44
|
+
sleep 1
|
45
|
+
|
46
|
+
traces = get_all_traces
|
47
|
+
|
48
|
+
traces.count.must_equal 12
|
49
|
+
valid_edges?(traces)
|
50
|
+
|
51
|
+
traces[5]['Layer'].must_equal "net-http"
|
52
|
+
traces[5]['Label'].must_equal "entry"
|
53
|
+
traces[10]['Layer'].must_equal "net-http"
|
54
|
+
traces[10]['Label'].must_equal "exit"
|
55
|
+
|
56
|
+
traces[4]['Spec'].must_equal "job"
|
57
|
+
traces[4]['Flavor'].must_equal "rabbitmq"
|
58
|
+
traces[4]['Queue'].must_equal "tv.ruby.consumer.test"
|
59
|
+
traces[4]['RemoteHost'].must_equal @connection_params[:host]
|
60
|
+
traces[4]['RemotePort'].must_equal @connection_params[:port].to_i
|
61
|
+
traces[4]['VirtualHost'].must_equal @connection_params[:vhost]
|
62
|
+
traces[4]['RoutingKey'].must_equal "tv.ruby.consumer.test"
|
63
|
+
traces[4]['Controller'].must_equal "msg_app"
|
64
|
+
traces[4]['Action'].must_equal "generic"
|
65
|
+
traces[4]['URL'].must_equal "/bunny/tv.ruby.consumer.test"
|
66
|
+
traces[4].key?('SourceTrace').must_equal true
|
67
|
+
traces[4].key?('Backtrace').must_equal false
|
68
|
+
|
69
|
+
@conn.close
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_blocking_consume
|
73
|
+
skip if RUBY_VERSION < '2.0'
|
74
|
+
@conn = Bunny.new(@connection_params)
|
75
|
+
@conn.start
|
76
|
+
@ch = @conn.create_channel
|
77
|
+
@queue = @ch.queue("tv.ruby.consumer.blocking.test", :exclusive => true)
|
78
|
+
@exchange = @ch.default_exchange
|
79
|
+
|
80
|
+
Thread.new {
|
81
|
+
@queue.subscribe(:block => true, :manual_ack => true) do |delivery_info, properties, payload|
|
82
|
+
# Make an http call to spice things up
|
83
|
+
uri = URI('http://127.0.0.1:8101/')
|
84
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
85
|
+
http.get('/?q=1').read_body
|
86
|
+
end
|
87
|
+
}
|
88
|
+
|
89
|
+
@exchange.publish("The Tortoise and the Hare", :routing_key => @queue.name, :app_id => "msg_app", :type => :generic)
|
90
|
+
|
91
|
+
sleep 1
|
92
|
+
|
93
|
+
traces = get_all_traces
|
94
|
+
traces.count.must_equal 8
|
95
|
+
|
96
|
+
validate_outer_layers(traces, "rabbitmq-consumer")
|
97
|
+
valid_edges?(traces)
|
98
|
+
|
99
|
+
traces[1]['Layer'].must_equal "net-http"
|
100
|
+
traces[1]['Label'].must_equal "entry"
|
101
|
+
traces[6]['Layer'].must_equal "net-http"
|
102
|
+
traces[6]['Label'].must_equal "exit"
|
103
|
+
|
104
|
+
traces[0]['Spec'].must_equal "job"
|
105
|
+
traces[0]['Flavor'].must_equal "rabbitmq"
|
106
|
+
traces[0]['Queue'].must_equal "tv.ruby.consumer.blocking.test"
|
107
|
+
traces[0]['RemoteHost'].must_equal @connection_params[:host]
|
108
|
+
traces[0]['RemotePort'].must_equal @connection_params[:port].to_i
|
109
|
+
traces[0]['VirtualHost'].must_equal @connection_params[:vhost]
|
110
|
+
traces[0]['RoutingKey'].must_equal "tv.ruby.consumer.blocking.test"
|
111
|
+
traces[0]['Controller'].must_equal "msg_app"
|
112
|
+
traces[0]['Action'].must_equal "generic"
|
113
|
+
traces[0]['URL'].must_equal "/bunny/tv.ruby.consumer.blocking.test"
|
114
|
+
traces[0].key?('Backtrace').must_equal false
|
115
|
+
|
116
|
+
@conn.close
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_consume_error_handling
|
120
|
+
@conn = Bunny.new(@connection_params)
|
121
|
+
@conn.start
|
122
|
+
@ch = @conn.create_channel
|
123
|
+
@queue = @ch.queue("tv.ruby.consumer.error.test", :exclusive => true)
|
124
|
+
@exchange = @ch.default_exchange
|
125
|
+
|
126
|
+
@queue.subscribe(:block => false, :manual_ack => true) do |delivery_info, properties, payload|
|
127
|
+
raise "blah"
|
128
|
+
end
|
129
|
+
|
130
|
+
@exchange.publish("The Tortoise and the Hare", :routing_key => @queue.name, :app_id => "msg_app", :type => :generic)
|
131
|
+
|
132
|
+
sleep 1
|
133
|
+
|
134
|
+
traces = get_all_traces
|
135
|
+
traces.count.must_equal 3
|
136
|
+
|
137
|
+
validate_outer_layers(traces, "rabbitmq-consumer")
|
138
|
+
valid_edges?(traces)
|
139
|
+
|
140
|
+
traces[0]['Spec'].must_equal "job"
|
141
|
+
traces[0]['Flavor'].must_equal "rabbitmq"
|
142
|
+
traces[0]['Queue'].must_equal "tv.ruby.consumer.error.test"
|
143
|
+
traces[0]['RemoteHost'].must_equal @connection_params[:host]
|
144
|
+
traces[0]['RemotePort'].must_equal @connection_params[:port].to_i
|
145
|
+
traces[0]['VirtualHost'].must_equal @connection_params[:vhost]
|
146
|
+
traces[0]['RoutingKey'].must_equal "tv.ruby.consumer.error.test"
|
147
|
+
traces[0]['Controller'].must_equal "msg_app"
|
148
|
+
traces[0]['Action'].must_equal "generic"
|
149
|
+
traces[0]['URL'].must_equal "/bunny/tv.ruby.consumer.error.test"
|
150
|
+
traces[0].key?('Backtrace').must_equal false
|
151
|
+
|
152
|
+
traces[1]['Layer'].must_equal "rabbitmq-consumer"
|
153
|
+
traces[1]['Label'].must_equal "error"
|
154
|
+
traces[1]['ErrorClass'].must_equal "RuntimeError"
|
155
|
+
traces[1]['ErrorMsg'].must_equal "blah"
|
156
|
+
traces[1].key?('Backtrace').must_equal true
|
157
|
+
|
158
|
+
traces[2]['Layer'].must_equal "rabbitmq-consumer"
|
159
|
+
traces[2]['Label'].must_equal "exit"
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_message_id_capture
|
163
|
+
@conn = Bunny.new(@connection_params)
|
164
|
+
@conn.start
|
165
|
+
@ch = @conn.create_channel
|
166
|
+
@queue = @ch.queue("tv.ruby.consumer.msgid.test", :exclusive => true)
|
167
|
+
@exchange = @ch.default_exchange
|
168
|
+
|
169
|
+
@queue.subscribe(:block => false, :manual_ack => true) do |delivery_info, properties, payload|
|
170
|
+
# Make an http call to spice things up
|
171
|
+
uri = URI('http://127.0.0.1:8101/')
|
172
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
173
|
+
http.get('/?q=1').read_body
|
174
|
+
end
|
175
|
+
|
176
|
+
TraceView::API.start_trace('bunny_consume_test') do
|
177
|
+
@exchange.publish("The Tortoise and the Hare", :message_id => "1234", :routing_key => @queue.name, :app_id => "msg_app", :type => :generic)
|
178
|
+
end
|
179
|
+
|
180
|
+
sleep 1
|
181
|
+
|
182
|
+
traces = get_all_traces
|
183
|
+
|
184
|
+
traces.count.must_equal 12
|
185
|
+
valid_edges?(traces)
|
186
|
+
|
187
|
+
traces[4]['Spec'].must_equal "job"
|
188
|
+
traces[4]['Flavor'].must_equal "rabbitmq"
|
189
|
+
traces[4]['Queue'].must_equal "tv.ruby.consumer.msgid.test"
|
190
|
+
traces[4]['RemoteHost'].must_equal @connection_params[:host]
|
191
|
+
traces[4]['RemotePort'].must_equal @connection_params[:port].to_i
|
192
|
+
traces[4]['VirtualHost'].must_equal @connection_params[:vhost]
|
193
|
+
traces[4]['RoutingKey'].must_equal "tv.ruby.consumer.msgid.test"
|
194
|
+
traces[4]['Controller'].must_equal "msg_app"
|
195
|
+
traces[4]['Action'].must_equal "generic"
|
196
|
+
traces[4]['URL'].must_equal "/bunny/tv.ruby.consumer.msgid.test"
|
197
|
+
traces[4]['MsgID'].must_equal "1234"
|
198
|
+
traces[4].key?('SourceTrace').must_equal true
|
199
|
+
traces[4].key?('Backtrace').must_equal false
|
200
|
+
|
201
|
+
@conn.close
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
@@ -16,12 +16,14 @@ class AutoTraceTest < Minitest::Test
|
|
16
16
|
TraceView.entry_layer?('delayed_job-worker').must_equal true
|
17
17
|
TraceView.entry_layer?('sidekiq-worker').must_equal true
|
18
18
|
TraceView.entry_layer?('resque-worker').must_equal true
|
19
|
+
TraceView.entry_layer?('rabbitmq-consumer').must_equal true
|
19
20
|
TraceView.entry_layer?('asdf-worker').must_equal false
|
20
21
|
end
|
21
22
|
|
22
23
|
def test_entry_layers_supports_symbols
|
23
24
|
TraceView.entry_layer?(:'delayed_job-worker').must_equal true
|
24
25
|
TraceView.entry_layer?(:'resque-worker').must_equal true
|
26
|
+
TraceView.entry_layer?(:'rabbitmq-consumer').must_equal true
|
25
27
|
TraceView.entry_layer?(:asdfworker).must_equal false
|
26
28
|
end
|
27
29
|
|
@@ -49,6 +51,14 @@ class AutoTraceTest < Minitest::Test
|
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
54
|
+
def test_trace_when_default_tm_rabbitmq
|
55
|
+
TraceView::Config[:tracing_mode] = :through
|
56
|
+
|
57
|
+
TV::API.start_trace('rabbitmq-consumer') do
|
58
|
+
TraceView.tracing?.must_equal true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
52
62
|
def test_dont_trace_when_never
|
53
63
|
TraceView::Config[:tracing_mode] = :never
|
54
64
|
|
data/test/support/config_test.rb
CHANGED
@@ -30,12 +30,13 @@ 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 29
|
34
34
|
|
35
35
|
TraceView::Config[:action_controller][:enabled].must_equal true
|
36
36
|
TraceView::Config[:action_view][:enabled].must_equal true
|
37
37
|
TraceView::Config[:active_record][:enabled].must_equal true
|
38
|
-
TraceView::Config[:
|
38
|
+
TraceView::Config[:bunnyclient][:enabled].must_equal true
|
39
|
+
TraceView::Config[:bunnyconsumer][:enabled].must_equal true
|
39
40
|
TraceView::Config[:cassandra][:enabled].must_equal true
|
40
41
|
TraceView::Config[:curb][:enabled].must_equal true
|
41
42
|
TraceView::Config[:dalli][:enabled].must_equal true
|
@@ -64,7 +65,8 @@ describe "TraceView::Config" do
|
|
64
65
|
TraceView::Config[:action_controller][:log_args].must_equal true
|
65
66
|
TraceView::Config[:action_view][:log_args].must_equal true
|
66
67
|
TraceView::Config[:active_record][:log_args].must_equal true
|
67
|
-
TraceView::Config[:
|
68
|
+
TraceView::Config[:bunnyclient][:log_args].must_equal true
|
69
|
+
TraceView::Config[:bunnyconsumer][:log_args].must_equal true
|
68
70
|
TraceView::Config[:cassandra][:log_args].must_equal true
|
69
71
|
TraceView::Config[:curb][:log_args].must_equal true
|
70
72
|
TraceView::Config[:dalli][:log_args].must_equal true
|
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.
|
4
|
+
version: 3.6.0
|
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: 2016-02
|
12
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -164,7 +164,8 @@ files:
|
|
164
164
|
- lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb
|
165
165
|
- lib/traceview/frameworks/sinatra.rb
|
166
166
|
- lib/traceview/frameworks/sinatra/templates.rb
|
167
|
-
- lib/traceview/inst/bunny.rb
|
167
|
+
- lib/traceview/inst/bunny-client.rb
|
168
|
+
- lib/traceview/inst/bunny-consumer.rb
|
168
169
|
- lib/traceview/inst/curb.rb
|
169
170
|
- lib/traceview/inst/dalli.rb
|
170
171
|
- lib/traceview/inst/delayed_job.rb
|
@@ -207,7 +208,8 @@ files:
|
|
207
208
|
- test/frameworks/rails3x_test.rb
|
208
209
|
- test/frameworks/rails4x_test.rb
|
209
210
|
- test/frameworks/sinatra_test.rb
|
210
|
-
- test/instrumentation/
|
211
|
+
- test/instrumentation/bunny_client_test.rb
|
212
|
+
- test/instrumentation/bunny_consumer_test.rb
|
211
213
|
- test/instrumentation/cassandra_test.rb
|
212
214
|
- test/instrumentation/curb_test.rb
|
213
215
|
- test/instrumentation/dalli_test.rb
|
@@ -304,6 +306,7 @@ test_files:
|
|
304
306
|
- test/servers/rackapp_8101.rb
|
305
307
|
- test/instrumentation/excon_test.rb
|
306
308
|
- test/instrumentation/sequel_pg_test.rb
|
309
|
+
- test/instrumentation/bunny_client_test.rb
|
307
310
|
- test/instrumentation/moped_test.rb
|
308
311
|
- test/instrumentation/httpclient_test.rb
|
309
312
|
- test/instrumentation/sequel_mysql_test.rb
|
@@ -314,9 +317,9 @@ test_files:
|
|
314
317
|
- test/instrumentation/sidekiq-client_test.rb
|
315
318
|
- test/instrumentation/cassandra_test.rb
|
316
319
|
- test/instrumentation/redis_strings_test.rb
|
317
|
-
- test/instrumentation/bunny_exchange_test.rb
|
318
320
|
- test/instrumentation/typhoeus_test.rb
|
319
321
|
- test/instrumentation/sequel_mysql2_test.rb
|
322
|
+
- test/instrumentation/bunny_consumer_test.rb
|
320
323
|
- test/instrumentation/sidekiq-worker_test.rb
|
321
324
|
- test/instrumentation/redis_misc_test.rb
|
322
325
|
- test/instrumentation/faraday_test.rb
|