traceview 3.4.2 → 3.5.0

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: e3d357444f67c44151415cc11102caeb7ba583bb
4
- data.tar.gz: de197ddc6816f8cc9e92aca0cf830c7d5fd917bf
3
+ metadata.gz: 718c8c2d0eed8cffd68bb1ea59e5b0abb2994c89
4
+ data.tar.gz: e5a296bf5be33a24b5c3e840abdca79ed335fc0b
5
5
  SHA512:
6
- metadata.gz: 0b1e49a8be926b89fc5017d7702e815a5c74d37275f9803280596716f9fc4c730038edea85992cc58e7875d496b7ae0cfbe2f8ca10ee9af51e65ccdaf8ef169f
7
- data.tar.gz: e82c11d3a9e64ee2d475b5fb144081047508c0b7a1d29c6dd823d22a1b56ffb8ab1e89267a1e232d83a46a316c7d2d969dfa4baa6ed939a6f46c20cf31837637
6
+ metadata.gz: 58609d4affcf11a28874e99bf25bf2128858333e8beaeabc49b72587930068fb9dfc769356aa65fdc7b62250f5a8787c88147fd1f25b17130e17737b0d12247a
7
+ data.tar.gz: 827a942d268ec76020ee4e72f5719855e0e390a7aa02acb9ebfbd752ae4d0d225cc314c6a12aefc80d6a22f9cfc509c1cdc9736a8e9a4add5070ed37d450406a
data/.travis.yml CHANGED
@@ -65,3 +65,4 @@ services:
65
65
  - memcached
66
66
  - cassandra
67
67
  - redis
68
+ - rabbitmq
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.5.0
8
+
9
+ This minor release includes the following new feature:
10
+
11
+ * New [bunny](https://github.com/ruby-amqp/bunny) (Rabbitmq) client instrumentation: #129
12
+
13
+ Pushed to Rubygems:
14
+
15
+ https://rubygems.org/gems/traceview/versions/3.5.0
16
+ https://rubygems.org/gems/traceview/versions/3.5.0-java
17
+
7
18
  # traceview 3.4.2
8
19
 
9
20
  This patch release includes the following fixes:
@@ -30,6 +30,12 @@ else
30
30
  gem 'sinatra'
31
31
  end
32
32
 
33
+ if RUBY_VERSION < '2.0.0'
34
+ gem 'bunny', '< 2.0.0'
35
+ else
36
+ gem 'bunny'
37
+ end
38
+
33
39
  gem 'cassandra'
34
40
  gem 'curb' unless defined?(JRUBY_VERSION)
35
41
  gem 'dalli' if RUBY_VERSION > '1.8.7'
@@ -36,7 +36,12 @@ else
36
36
  gem 'pg', '< 0.17'
37
37
  end
38
38
 
39
- gem "rails", "~> 3.2.22"
39
+ if RUBY_VERSION < '1.9'
40
+ # Newer Rails is incompatible with Ruby 1.8.7
41
+ gem "rails", "3.2.19"
42
+ else
43
+ gem "rails", "~> 3.2.22"
44
+ end
40
45
 
41
46
  gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
42
47
  # vim:syntax=ruby
@@ -94,8 +94,9 @@ if defined?(TraceView::Config)
94
94
  # value to false:
95
95
  #
96
96
  # TraceView::Config[:action_controller][:enabled] = true
97
- # TraceView::Config[:active_record][:enabled] = true
98
97
  # TraceView::Config[:action_view][:enabled] = true
98
+ # TraceView::Config[:active_record][:enabled] = true
99
+ # TraceView::Config[:bunny][:enabled] = true
99
100
  # TraceView::Config[:cassandra][:enabled] = true
100
101
  # TraceView::Config[:curb][:enabled] = true
101
102
  # TraceView::Config[:dalli][:enabled] = true
@@ -124,8 +125,9 @@ if defined?(TraceView::Config)
124
125
  # a certain call or operation.
125
126
  #
126
127
  # TraceView::Config[:action_controller][:collect_backtraces] = true
127
- # TraceView::Config[:active_record][:collect_backtraces] = true
128
128
  # TraceView::Config[:action_view][:collect_backtraces] = true
129
+ # TraceView::Config[:active_record][:collect_backtraces] = true
130
+ # TraceView::Config[:bunny][:collect_backtraces] = true
129
131
  # TraceView::Config[:cassandra][:collect_backtraces] = true
130
132
  # TraceView::Config[:curb][:collect_backtraces] = true
131
133
  # TraceView::Config[:dalli][:collect_backtraces] = false
@@ -11,7 +11,7 @@ module TraceView
11
11
  module Config
12
12
  @@config = {}
13
13
 
14
- @@instrumentation = [:action_controller, :action_view, :active_record,
14
+ @@instrumentation = [:action_controller, :action_view, :active_record, :bunny,
15
15
  :cassandra, :curb, :dalli, :delayed_jobclient,
16
16
  :delayed_jobworker, :em_http_request, :excon,
17
17
  :faraday, :grape, :httpclient, :nethttp, :memcached,
@@ -44,6 +44,7 @@ module TraceView
44
44
  # Set collect_backtraces defaults
45
45
  TraceView::Config[:action_controller][:collect_backtraces] = true
46
46
  TraceView::Config[:active_record][:collect_backtraces] = true
47
+ TraceView::Config[:bunny][:collect_backtraces] = true
47
48
  TraceView::Config[:action_view][:collect_backtraces] = true
48
49
  TraceView::Config[:cassandra][:collect_backtraces] = true
49
50
  TraceView::Config[:curb][:collect_backtraces] = true
@@ -0,0 +1,147 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ module TraceView
5
+ module Inst
6
+ module BunnyExchange
7
+ def self.included(klass)
8
+ ::TraceView::Util.method_alias(klass, :delete, ::Bunny::Exchange)
9
+ end
10
+
11
+ def delete_with_traceview(opts = {})
12
+ # If we're not tracing, just do a fast return.
13
+ return delete_without_traceview(opts) if !TraceView.tracing?
14
+
15
+ begin
16
+ kvs = {}
17
+ kvs[:Spec] = :pushq
18
+ kvs[:Flavor] = :rabbitmq
19
+ kvs[:Op] = :delete
20
+ kvs[:ExchangeType] = @type
21
+ kvs[:RemoteHost] = channel.connection.host
22
+ kvs[:RemotePort] = channel.connection.port.to_i
23
+ kvs[:VirtualHost] = channel.connection.vhost
24
+
25
+ if @name.is_a?(String) && !@name.empty?
26
+ kvs[:ExchangeName] = @name
27
+ else
28
+ kvs[:ExchangeName] = :default
29
+ end
30
+
31
+ TraceView::API.log_entry('rabbitmq-client')
32
+
33
+ delete_without_traceview(opts)
34
+ rescue => e
35
+ TraceView::API.log_exception(nil, e)
36
+ raise e
37
+ ensure
38
+ TraceView::API.log_exit('rabbitmq-client', kvs)
39
+ end
40
+ end
41
+ end
42
+
43
+ module BunnyChannel
44
+ def self.included(klass)
45
+ ::TraceView::Util.method_alias(klass, :basic_publish, ::Bunny::Channel)
46
+ ::TraceView::Util.method_alias(klass, :queue, ::Bunny::Channel)
47
+ ::TraceView::Util.method_alias(klass, :wait_for_confirms, ::Bunny::Channel)
48
+ end
49
+
50
+ def collect_channel_kvs
51
+ begin
52
+ kvs = {}
53
+ kvs[:Spec] = :pushq
54
+ kvs[:Flavor] = :rabbitmq
55
+ kvs[:RemoteHost] = @connection.host
56
+ kvs[:RemotePort] = @connection.port.to_i
57
+ kvs[:VirtualHost] = @connection.vhost
58
+ kvs
59
+ rescue => e
60
+ TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" if TraceView::Config[:verbose]
61
+ end
62
+ end
63
+
64
+ def basic_publish_with_traceview(payload, exchange, routing_key, opts = {})
65
+ # If we're not tracing, just do a fast return.
66
+ return basic_publish_without_traceview(payload, exchange, routing_key, opts) if !TraceView.tracing?
67
+
68
+ begin
69
+ kvs = {}
70
+ kvs[:Spec] = :pushq
71
+ kvs[:Flavor] = :rabbitmq # broker name?
72
+
73
+ if exchange.respond_to?(:name)
74
+ kvs[:ExchangeName] = exchange.name
75
+ elsif exchange.respond_to?(:empty?) && !exchange.empty?
76
+ kvs[:ExchangeName] = exchange
77
+ else
78
+ kvs[:ExchangeName] = :default
79
+ end
80
+
81
+ kvs[:Queue] = opts[:queue] if opts.key?(:queue)
82
+ kvs[:RoutingKey] = routing_key if routing_key
83
+ kvs[:RemoteHost] = @connection.host
84
+ kvs[:RemotePort] = @connection.port.to_i
85
+
86
+ kvs[:Op] = :publish
87
+ kvs[:VirtualHost] = @connection.vhost
88
+
89
+ TraceView::API.log_entry('rabbitmq-client')
90
+
91
+ basic_publish_without_traceview(payload, exchange, routing_key, opts)
92
+ rescue => e
93
+ TraceView::API.log_exception(nil, e)
94
+ raise e
95
+ ensure
96
+ TraceView::API.log_exit('rabbitmq-client', kvs)
97
+ end
98
+ end
99
+
100
+ def queue_with_traceview(name = AMQ::Protocol::EMPTY_STRING, opts = {})
101
+ # If we're not tracing, just do a fast return.
102
+ return queue_without_traceview(name, opts) if !TraceView.tracing?
103
+
104
+ begin
105
+ kvs = collect_channel_kvs
106
+ kvs[:Op] = :queue
107
+
108
+ TraceView::API.log_entry('rabbitmq-client')
109
+
110
+ result = queue_without_traceview(name, opts)
111
+ kvs[:Queue] = result.name
112
+ result
113
+ rescue => e
114
+ TraceView::API.log_exception(nil, e)
115
+ raise e
116
+ ensure
117
+ TraceView::API.log_exit('rabbitmq-client', kvs)
118
+ end
119
+ end
120
+
121
+ def wait_for_confirms_with_traceview
122
+ # If we're not tracing, just do a fast return.
123
+ return wait_for_confirms_without_traceview if !TraceView.tracing?
124
+
125
+ begin
126
+ kvs = collect_channel_kvs
127
+ kvs[:Op] = :wait_for_confirms
128
+
129
+ TraceView::API.log_entry('rabbitmq-client')
130
+
131
+ wait_for_confirms_without_traceview
132
+ rescue => e
133
+ TraceView::API.log_exception(nil, e)
134
+ raise e
135
+ ensure
136
+ TraceView::API.log_exit('rabbitmq-client', kvs)
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+
143
+ if TraceView::Config[:bunny][:enabled] && defined?(::Bunny)
144
+ ::TraceView.logger.info '[traceview/loading] Instrumenting bunny' if TraceView::Config[:verbose]
145
+ ::TraceView::Util.send_include(::Bunny::Exchange, ::TraceView::Inst::BunnyExchange)
146
+ ::TraceView::Util.send_include(::Bunny::Channel, ::TraceView::Inst::BunnyChannel)
147
+ end
@@ -7,8 +7,8 @@ module TraceView
7
7
  # traceview.gemspec during gem build process
8
8
  module Version
9
9
  MAJOR = 3
10
- MINOR = 4
11
- PATCH = 2
10
+ MINOR = 5
11
+ PATCH = 0
12
12
  BUILD = nil
13
13
 
14
14
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -0,0 +1,276 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ require 'minitest_helper'
5
+
6
+ unless defined?(JRUBY_VERSION)
7
+ class BunnyTest < 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_publish_default_exchange
27
+ @conn = Bunny.new(@connection_params)
28
+ @conn.start
29
+ @ch = @conn.create_channel
30
+ @queue = @ch.queue("tv.ruby.test")
31
+ @exchange = @ch.default_exchange
32
+
33
+ TraceView::API.start_trace('bunny_tests') do
34
+ @exchange.publish("The Tortoise and the Hare", :routing_key => @queue.name)
35
+ end
36
+
37
+ traces = get_all_traces
38
+ traces.count.must_equal 4
39
+
40
+ validate_outer_layers(traces, "bunny_tests")
41
+ valid_edges?(traces)
42
+
43
+ traces[1]['Layer'].must_equal "rabbitmq-client"
44
+ traces[1]['Label'].must_equal "entry"
45
+ traces[2]['Layer'].must_equal "rabbitmq-client"
46
+ traces[2]['Label'].must_equal "exit"
47
+ traces[2]['Spec'].must_equal "pushq"
48
+ traces[2]['Flavor'].must_equal "rabbitmq"
49
+ traces[2]['ExchangeName'].must_equal "default"
50
+ traces[2]['RoutingKey'].must_equal "tv.ruby.test"
51
+ traces[2]['Op'].must_equal "publish"
52
+ traces[2]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
53
+ traces[2]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
54
+ traces[2]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
55
+
56
+ @conn.close
57
+ end
58
+
59
+ def test_publish_fanout_exchange
60
+ @conn = Bunny.new(@connection_params)
61
+ @conn.start
62
+ @ch = @conn.create_channel
63
+ @exchange = @ch.fanout("tv.ruby.fanout.tests")
64
+
65
+ TraceView::API.start_trace('bunny_tests') do
66
+ @exchange.publish("The Tortoise and the Hare in the fanout exchange.", :routing_key => 'tv.ruby.test').publish("And another...")
67
+ end
68
+
69
+ traces = get_all_traces
70
+ traces.count.must_equal 6
71
+
72
+ validate_outer_layers(traces, "bunny_tests")
73
+ valid_edges?(traces)
74
+
75
+ traces[1]['Layer'].must_equal "rabbitmq-client"
76
+ traces[1]['Label'].must_equal "entry"
77
+ traces[2]['Layer'].must_equal "rabbitmq-client"
78
+ traces[2]['Label'].must_equal "exit"
79
+ traces[2]['Spec'].must_equal "pushq"
80
+ traces[2]['Flavor'].must_equal "rabbitmq"
81
+ traces[2]['ExchangeName'].must_equal "tv.ruby.fanout.tests"
82
+ traces[2]['RoutingKey'].must_equal "tv.ruby.test"
83
+ traces[2]['Op'].must_equal "publish"
84
+ traces[2]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
85
+ traces[2]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
86
+ traces[2]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
87
+
88
+ traces[3]['Layer'].must_equal "rabbitmq-client"
89
+ traces[3]['Label'].must_equal "entry"
90
+ traces[4]['Layer'].must_equal "rabbitmq-client"
91
+ traces[4]['Label'].must_equal "exit"
92
+ traces[4]['Spec'].must_equal "pushq"
93
+ traces[4]['Flavor'].must_equal "rabbitmq"
94
+ traces[4]['ExchangeName'].must_equal "tv.ruby.fanout.tests"
95
+ traces[4].key?('RoutingKey').must_equal false
96
+ traces[4]['Op'].must_equal "publish"
97
+ traces[4]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
98
+ traces[4]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
99
+ traces[4]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
100
+
101
+ @conn.close
102
+ end
103
+
104
+ def test_publish_topic_exchange
105
+ @conn = Bunny.new(@connection_params)
106
+ @conn.start
107
+ @ch = @conn.create_channel
108
+ @exchange = @ch.topic("tv.ruby.topic.tests", :auto_delete => true)
109
+
110
+ TraceView::API.start_trace('bunny_tests') do
111
+ @exchange.publish("The Tortoise and the Hare in the topic exchange.", :routing_key => 'tv.ruby.test.1').publish("And another...", :routing_key => 'tv.ruby.test.2' )
112
+ end
113
+
114
+ traces = get_all_traces
115
+ traces.count.must_equal 6
116
+
117
+ validate_outer_layers(traces, "bunny_tests")
118
+ valid_edges?(traces)
119
+
120
+ traces[1]['Layer'].must_equal "rabbitmq-client"
121
+ traces[1]['Label'].must_equal "entry"
122
+ traces[2]['Layer'].must_equal "rabbitmq-client"
123
+ traces[2]['Label'].must_equal "exit"
124
+ traces[2]['Spec'].must_equal "pushq"
125
+ traces[2]['Flavor'].must_equal "rabbitmq"
126
+ traces[2]['ExchangeName'].must_equal "tv.ruby.topic.tests"
127
+ traces[2]['RoutingKey'].must_equal "tv.ruby.test.1"
128
+ traces[2]['Op'].must_equal "publish"
129
+ traces[2]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
130
+ traces[2]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
131
+ traces[2]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
132
+
133
+ traces[3]['Layer'].must_equal "rabbitmq-client"
134
+ traces[3]['Label'].must_equal "entry"
135
+ traces[4]['Layer'].must_equal "rabbitmq-client"
136
+ traces[4]['Label'].must_equal "exit"
137
+ traces[4]['Spec'].must_equal "pushq"
138
+ traces[4]['Flavor'].must_equal "rabbitmq"
139
+ traces[4]['ExchangeName'].must_equal "tv.ruby.topic.tests"
140
+ traces[4]['RoutingKey'].must_equal "tv.ruby.test.2"
141
+ traces[4]['Op'].must_equal "publish"
142
+ traces[4]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
143
+ traces[4]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
144
+ traces[4]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
145
+
146
+ @conn.close
147
+ end
148
+
149
+ def test_publish_error_handling
150
+ @conn = Bunny.new(@connection_params)
151
+ @conn.start
152
+ @ch = @conn.create_channel
153
+
154
+ begin
155
+ TraceView::API.start_trace('bunny_tests') do
156
+ @exchange = @ch.topic("tv.ruby.error.1", :auto_delete => true)
157
+ @exchange = @ch.fanout("tv.ruby.error.1", :auto_delete => true)
158
+ @exchange.publish("The Tortoise and the Hare in the topic exchange.", :routing_key => 'tv.ruby.test.1').publish("And another...", :routing_key => 'tv.ruby.test.2' )
159
+ end
160
+ rescue
161
+ # Capture intentional redeclaration error
162
+ end
163
+
164
+ traces = get_all_traces
165
+ assert_equal traces.count, 3
166
+
167
+ validate_outer_layers(traces, "bunny_tests")
168
+ valid_edges?(traces)
169
+
170
+ traces[1]['Label'].must_equal "error"
171
+ traces[1]['ErrorClass'].must_equal "Bunny::PreconditionFailed"
172
+ traces[1]['ErrorMsg'].must_match(/PRECONDITION_FAILED/)
173
+ traces[1].key?('Backtrace').must_equal true
174
+
175
+ @conn.close
176
+ end
177
+
178
+ def test_delete_exchange
179
+ @conn = Bunny.new(@connection_params)
180
+ @conn.start
181
+ @ch = @conn.create_channel
182
+ @exchange = @ch.fanout("tv.delete_exchange.test")
183
+ @queue = @ch.queue("", :exclusive => true).bind(@exchange)
184
+
185
+ @ch.confirm_select
186
+ @exchange.publish("", :routing_key => 'tv.ruby.test')
187
+
188
+ TraceView::API.start_trace('bunny_tests') do
189
+ @exchange.delete
190
+ end
191
+
192
+ traces = get_all_traces
193
+ traces.count.must_equal 4
194
+
195
+ validate_outer_layers(traces, "bunny_tests")
196
+
197
+ traces[2]['Spec'].must_equal "pushq"
198
+ traces[2]['Flavor'].must_equal "rabbitmq"
199
+ traces[2]['ExchangeName'].must_equal "tv.delete_exchange.test"
200
+ traces[2]['ExchangeType'].must_equal "fanout"
201
+ traces[2]['Op'].must_equal "delete"
202
+ traces[2]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
203
+ traces[2]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
204
+ traces[2]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
205
+ end
206
+
207
+ def test_wait_for_confirms
208
+ @conn = Bunny.new(@connection_params)
209
+ @conn.start
210
+ @ch = @conn.create_channel
211
+ @exchange = @ch.fanout("tv.ruby.wait_for_confirm.tests")
212
+ @queue = @ch.queue("", :exclusive => true).bind(@exchange)
213
+
214
+ @ch.confirm_select
215
+
216
+ TraceView::API.start_trace('bunny_tests') do
217
+ 1000.times do
218
+ @exchange.publish("", :routing_key => 'tv.ruby.test')
219
+ end
220
+
221
+ @ch.wait_for_confirms
222
+ end
223
+
224
+ traces = get_all_traces
225
+ assert_equal traces.count, 2004
226
+
227
+ validate_outer_layers(traces, "bunny_tests")
228
+
229
+ traces[2000]['Spec'].must_equal "pushq"
230
+ traces[2000]['Flavor'].must_equal "rabbitmq"
231
+ traces[2000]['ExchangeName'].must_equal "tv.ruby.wait_for_confirm.tests"
232
+ traces[2000]['RoutingKey'].must_equal "tv.ruby.test"
233
+ traces[2000]['Op'].must_equal "publish"
234
+ traces[2000]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
235
+ traces[2000]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
236
+ traces[2000]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
237
+
238
+ traces[2001]['Layer'].must_equal "rabbitmq-client"
239
+ traces[2001]['Label'].must_equal "entry"
240
+ traces[2002]['Layer'].must_equal "rabbitmq-client"
241
+ traces[2002]['Label'].must_equal "exit"
242
+ traces[2002]['Spec'].must_equal "pushq"
243
+ traces[2002]['Flavor'].must_equal "rabbitmq"
244
+ traces[2002]['Op'].must_equal "wait_for_confirms"
245
+ traces[2002]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
246
+ traces[2002]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
247
+ traces[2002]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
248
+
249
+ @conn.close
250
+ end
251
+
252
+ def test_channel_queue
253
+ @conn = Bunny.new(@connection_params)
254
+ @conn.start
255
+ @ch = @conn.create_channel
256
+ @exchange = @ch.fanout("tv.queue.test")
257
+
258
+ TraceView::API.start_trace('bunny_tests') do
259
+ @queue = @ch.queue("blah", :exclusive => true).bind(@exchange)
260
+ end
261
+
262
+ traces = get_all_traces
263
+ traces.count.must_equal 4
264
+
265
+ validate_outer_layers(traces, "bunny_tests")
266
+
267
+ traces[2]['Spec'].must_equal "pushq"
268
+ traces[2]['Flavor'].must_equal "rabbitmq"
269
+ traces[2]['Op'].must_equal "queue"
270
+ traces[2]['Queue'].must_equal "blah"
271
+ traces[2]['RemoteHost'].must_equal ENV['TV_RABBITMQ_SERVER']
272
+ traces[2]['RemotePort'].must_equal ENV['TV_RABBITMQ_PORT'].to_i
273
+ traces[2]['VirtualHost'].must_equal ENV['TV_RABBITMQ_VHOST']
274
+ end
275
+ end
276
+ end
@@ -30,11 +30,12 @@ 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 27
33
+ instrumentation.count.must_equal 28
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[:bunny][:enabled].must_equal true
38
39
  TraceView::Config[:cassandra][:enabled].must_equal true
39
40
  TraceView::Config[:curb][:enabled].must_equal true
40
41
  TraceView::Config[:dalli][:enabled].must_equal true
@@ -63,6 +64,7 @@ describe "TraceView::Config" do
63
64
  TraceView::Config[:action_controller][:log_args].must_equal true
64
65
  TraceView::Config[:action_view][:log_args].must_equal true
65
66
  TraceView::Config[:active_record][:log_args].must_equal true
67
+ TraceView::Config[:bunny][:log_args].must_equal true
66
68
  TraceView::Config[:cassandra][:log_args].must_equal true
67
69
  TraceView::Config[:curb][:log_args].must_equal true
68
70
  TraceView::Config[:dalli][:log_args].must_equal true
data/traceview.gemspec CHANGED
@@ -26,17 +26,21 @@ Gem::Specification.new do |s|
26
26
  # Development dependencies used in gem development & testing
27
27
  s.add_development_dependency('rake', '>= 0.9.0')
28
28
 
29
- case RUBY_VERSION
30
- when /^1\.8/
31
- s.add_development_dependency('ruby-debug', '>= 0.10.1')
32
- s.add_development_dependency('pry', '>= 0.9.12.4')
33
- when /^1\.9/
34
- s.add_development_dependency('debugger', '>= 1.6.7')
29
+ unless defined?(JRUBY_VERSION)
30
+ case RUBY_VERSION
31
+ when /^1\.8/
32
+ s.add_development_dependency('ruby-debug', '>= 0.10.1')
33
+ s.add_development_dependency('pry', '>= 0.9.12.4')
34
+ when /^1\.9/
35
+ s.add_development_dependency('debugger', '>= 1.6.7')
36
+ s.add_development_dependency('pry', '>= 0.10.0')
37
+ when /^2\./
38
+ s.add_development_dependency('byebug', '>= 8.0.0')
39
+ s.add_development_dependency('pry', '>= 0.10.0')
40
+ s.add_development_dependency('pry-byebug', '>= 3.0.0')
41
+ end
42
+ else
35
43
  s.add_development_dependency('pry', '>= 0.10.0')
36
- when /^2\./
37
- s.add_development_dependency('byebug', '>= 8.0.0')
38
- s.add_development_dependency('pry', '>= 0.10.0')
39
- s.add_development_dependency('pry-byebug', '>= 3.0.0')
40
44
  end
41
45
 
42
46
  s.required_ruby_version = '>= 1.8.6'
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.2
4
+ version: 3.5.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-01-25 00:00:00.000000000 Z
12
+ date: 2016-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -164,6 +164,7 @@ 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
168
  - lib/traceview/inst/curb.rb
168
169
  - lib/traceview/inst/dalli.rb
169
170
  - lib/traceview/inst/delayed_job.rb
@@ -206,6 +207,7 @@ files:
206
207
  - test/frameworks/rails3x_test.rb
207
208
  - test/frameworks/rails4x_test.rb
208
209
  - test/frameworks/sinatra_test.rb
210
+ - test/instrumentation/bunny_exchange_test.rb
209
211
  - test/instrumentation/cassandra_test.rb
210
212
  - test/instrumentation/curb_test.rb
211
213
  - test/instrumentation/dalli_test.rb
@@ -311,6 +313,7 @@ test_files:
311
313
  - test/instrumentation/sidekiq-client_test.rb
312
314
  - test/instrumentation/cassandra_test.rb
313
315
  - test/instrumentation/redis_strings_test.rb
316
+ - test/instrumentation/bunny_exchange_test.rb
314
317
  - test/instrumentation/typhoeus_test.rb
315
318
  - test/instrumentation/sequel_mysql2_test.rb
316
319
  - test/instrumentation/sidekiq-worker_test.rb