traceview 3.4.2 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +11 -0
- data/gemfiles/libraries.gemfile +6 -0
- data/gemfiles/rails32.gemfile +6 -1
- data/lib/rails/generators/traceview/templates/traceview_initializer.rb +4 -2
- data/lib/traceview/config.rb +2 -1
- data/lib/traceview/inst/bunny.rb +147 -0
- data/lib/traceview/version.rb +2 -2
- data/test/instrumentation/bunny_exchange_test.rb +276 -0
- data/test/support/config_test.rb +3 -1
- data/traceview.gemspec +14 -10
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 718c8c2d0eed8cffd68bb1ea59e5b0abb2994c89
|
4
|
+
data.tar.gz: e5a296bf5be33a24b5c3e840abdca79ed335fc0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58609d4affcf11a28874e99bf25bf2128858333e8beaeabc49b72587930068fb9dfc769356aa65fdc7b62250f5a8787c88147fd1f25b17130e17737b0d12247a
|
7
|
+
data.tar.gz: 827a942d268ec76020ee4e72f5719855e0e390a7aa02acb9ebfbd752ae4d0d225cc314c6a12aefc80d6a22f9cfc509c1cdc9736a8e9a4add5070ed37d450406a
|
data/.travis.yml
CHANGED
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:
|
data/gemfiles/libraries.gemfile
CHANGED
data/gemfiles/rails32.gemfile
CHANGED
@@ -36,7 +36,12 @@ else
|
|
36
36
|
gem 'pg', '< 0.17'
|
37
37
|
end
|
38
38
|
|
39
|
-
|
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
|
data/lib/traceview/config.rb
CHANGED
@@ -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
|
data/lib/traceview/version.rb
CHANGED
@@ -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
|
data/test/support/config_test.rb
CHANGED
@@ -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
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
+
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-
|
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
|