traceview 3.4.0 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -8
- data/CHANGELOG.md +14 -0
- data/gemfiles/delayed_job.gemfile +0 -12
- data/gemfiles/frameworks.gemfile +9 -14
- data/gemfiles/libraries.gemfile +0 -12
- data/gemfiles/rails23.gemfile +0 -12
- data/gemfiles/rails30.gemfile +0 -12
- data/gemfiles/rails31.gemfile +0 -12
- data/gemfiles/rails32.gemfile +0 -12
- data/gemfiles/rails40.gemfile +0 -12
- data/gemfiles/rails41.gemfile +0 -12
- data/gemfiles/rails42.gemfile +0 -12
- data/lib/joboe_metal.rb +6 -2
- data/lib/oboe_metal.rb +5 -1
- data/lib/traceview/api/logging.rb +6 -1
- data/lib/traceview/base.rb +1 -1
- data/lib/traceview/frameworks/grape.rb +9 -4
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +13 -4
- data/lib/traceview/inst/rack.rb +3 -2
- data/lib/traceview/version.rb +1 -1
- data/test/frameworks/apps/padrino_simple.rb +1 -1
- data/test/frameworks/rails3x_test.rb +41 -1
- data/test/frameworks/rails4x_test.rb +41 -1
- data/test/models/widget.rb +18 -13
- data/test/servers/rails3x_8140.rb +8 -0
- data/test/servers/rails4x_8140.rb +8 -0
- data/test/support/{auto_tracing.rb → auto_tracing_test.rb} +14 -1
- data/test/support/avw_handling_test.rb +76 -0
- data/traceview.gemspec +16 -1
- metadata +51 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bda294e0067e87b9af61f29fcbcbba2067fd303
|
4
|
+
data.tar.gz: eb61919fb53e67280672a1eb802b4c1ecf755b02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 617b228a1328c791c90c69342bb033e45fde13c09a07c882113077251cbc8daaeeda68550aa8be000cf612a230d4e50fc6e603837a733ac1636c0f6b406ed448
|
7
|
+
data.tar.gz: b56c282a787c2e1826d4eb87ba37e2ee62ec1f10bdd880860a08eb49301294d97ef6d36b05932f2b28cf55997b965c4894dbaa537804e2d24831e47ce7a48ebb
|
data/.travis.yml
CHANGED
@@ -35,14 +35,6 @@ matrix:
|
|
35
35
|
- rvm: 1.8.7
|
36
36
|
gemfile: gemfiles/frameworks.gemfile
|
37
37
|
|
38
|
-
allow_failures:
|
39
|
-
- rvm: jruby-9.0.4.0
|
40
|
-
gemfile: gemfiles/rails32.gemfile
|
41
|
-
|
42
|
-
- rvm: jruby-9.0.4.0
|
43
|
-
gemfile: gemfiles/rails42.gemfile
|
44
|
-
|
45
|
-
|
46
38
|
# Attempt Travis/Cassandra fix re: https://github.com/travis-ci/travis-ci/issues/1484
|
47
39
|
# Updated Cassandra: https://github.com/travis-ci/travis-ci/issues/1650
|
48
40
|
before_install:
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,20 @@ 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.4.1
|
8
|
+
|
9
|
+
This patch release includes the following fixes:
|
10
|
+
|
11
|
+
* Instrumentation updates to support Grape version 0.14: #153
|
12
|
+
* Fix Rack layer AVW header handling and analysis: #154
|
13
|
+
* Sidekiq workers are now auto instrumented: #155
|
14
|
+
* Fix ActiveRecord reporting invalid SQL Flavor: #156
|
15
|
+
|
16
|
+
Pushed to Rubygems:
|
17
|
+
|
18
|
+
https://rubygems.org/gems/traceview/versions/3.4.1
|
19
|
+
https://rubygems.org/gems/traceview/versions/3.4.1-java
|
20
|
+
|
7
21
|
# traceview 3.4.0
|
8
22
|
|
9
23
|
This minor release includes the following features & fixes:
|
@@ -10,18 +10,6 @@ group :development, :test do
|
|
10
10
|
gem 'bson'
|
11
11
|
end
|
12
12
|
|
13
|
-
group :development do
|
14
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
15
|
-
gem 'debugger', :platform => :mri_19
|
16
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
17
|
-
if RUBY_VERSION > '1.8.7'
|
18
|
-
gem 'pry'
|
19
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
20
|
-
else
|
21
|
-
gem 'pry', '0.9.12.4'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
13
|
if defined?(JRUBY_VERSION)
|
26
14
|
gem 'sinatra', :require => false
|
27
15
|
gem 'activerecord-jdbc-adapter'
|
data/gemfiles/frameworks.gemfile
CHANGED
@@ -14,26 +14,21 @@ group :development, :test do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
group :development do
|
18
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
19
|
-
gem 'debugger', :platform => :mri_19
|
20
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
21
|
-
if RUBY_VERSION > '1.8.7'
|
22
|
-
gem 'pry'
|
23
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
24
|
-
else
|
25
|
-
gem 'pry', '0.9.12.4'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
17
|
if defined?(JRUBY_VERSION)
|
30
18
|
gem 'sinatra', :require => false
|
31
19
|
else
|
32
20
|
gem 'sinatra'
|
33
21
|
end
|
34
22
|
|
35
|
-
gem "grape"
|
36
|
-
|
23
|
+
gem "grape"
|
24
|
+
|
25
|
+
if defined?(JRUBY_VERSION)
|
26
|
+
# Limit padrino gem under JRuby as version 0.13.0 throws
|
27
|
+
# a bundler load error
|
28
|
+
gem "padrino", '< 0.13.0'
|
29
|
+
else
|
30
|
+
gem 'padrino'
|
31
|
+
end
|
37
32
|
|
38
33
|
gemspec :path => File.expand_path(File.dirname(__FILE__) + '/../')
|
39
34
|
# vim:syntax=ruby
|
data/gemfiles/libraries.gemfile
CHANGED
@@ -24,18 +24,6 @@ group :development, :test do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
group :development do
|
28
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
29
|
-
gem 'debugger', :platform => :mri_19
|
30
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
31
|
-
if RUBY_VERSION > '1.8.7'
|
32
|
-
gem 'pry'
|
33
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
34
|
-
else
|
35
|
-
gem 'pry', '0.9.12.4'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
27
|
if defined?(JRUBY_VERSION)
|
40
28
|
gem 'sinatra', :require => false
|
41
29
|
else
|
data/gemfiles/rails23.gemfile
CHANGED
@@ -27,18 +27,6 @@ group :development, :test do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
group :development do
|
31
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
32
|
-
gem 'debugger', :platform => :mri_19
|
33
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
34
|
-
if RUBY_VERSION > '1.8.7'
|
35
|
-
gem 'pry'
|
36
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
37
|
-
else
|
38
|
-
gem 'pry', '0.9.12.4'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
30
|
if defined?(JRUBY_VERSION)
|
43
31
|
gem 'sinatra', :require => false
|
44
32
|
else
|
data/gemfiles/rails30.gemfile
CHANGED
@@ -27,18 +27,6 @@ group :development, :test do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
group :development do
|
31
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
32
|
-
gem 'debugger', :platform => :mri_19
|
33
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
34
|
-
if RUBY_VERSION > '1.8.7'
|
35
|
-
gem 'pry'
|
36
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
37
|
-
else
|
38
|
-
gem 'pry', '0.9.12.4'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
30
|
if defined?(JRUBY_VERSION)
|
43
31
|
gem 'sinatra', :require => false
|
44
32
|
gem 'activerecord-jdbc-adapter'
|
data/gemfiles/rails31.gemfile
CHANGED
@@ -27,18 +27,6 @@ group :development, :test do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
group :development do
|
31
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
32
|
-
gem 'debugger', :platform => :mri_19
|
33
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
34
|
-
if RUBY_VERSION > '1.8.7'
|
35
|
-
gem 'pry'
|
36
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
37
|
-
else
|
38
|
-
gem 'pry', '0.9.12.4'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
30
|
if defined?(JRUBY_VERSION)
|
43
31
|
gem 'sinatra', :require => false
|
44
32
|
gem 'activerecord-jdbc-adapter'
|
data/gemfiles/rails32.gemfile
CHANGED
@@ -27,18 +27,6 @@ group :development, :test do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
group :development do
|
31
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
32
|
-
gem 'debugger', :platform => :mri_19
|
33
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
34
|
-
if RUBY_VERSION > '1.8.7'
|
35
|
-
gem 'pry'
|
36
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
37
|
-
else
|
38
|
-
gem 'pry', '0.9.12.4'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
30
|
if defined?(JRUBY_VERSION)
|
43
31
|
gem 'sinatra', :require => false
|
44
32
|
gem 'activerecord-jdbc-adapter'
|
data/gemfiles/rails40.gemfile
CHANGED
@@ -10,18 +10,6 @@ group :development, :test do
|
|
10
10
|
gem 'bson'
|
11
11
|
end
|
12
12
|
|
13
|
-
group :development do
|
14
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
15
|
-
gem 'debugger', :platform => :mri_19
|
16
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
17
|
-
if RUBY_VERSION > '1.8.7'
|
18
|
-
gem 'pry'
|
19
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
20
|
-
else
|
21
|
-
gem 'pry', '0.9.12.4'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
13
|
if defined?(JRUBY_VERSION)
|
26
14
|
gem 'sinatra', :require => false
|
27
15
|
gem 'activerecord-jdbc-adapter'
|
data/gemfiles/rails41.gemfile
CHANGED
@@ -10,18 +10,6 @@ group :development, :test do
|
|
10
10
|
gem 'bson'
|
11
11
|
end
|
12
12
|
|
13
|
-
group :development do
|
14
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
15
|
-
gem 'debugger', :platform => :mri_19
|
16
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
17
|
-
if RUBY_VERSION > '1.8.7'
|
18
|
-
gem 'pry'
|
19
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
20
|
-
else
|
21
|
-
gem 'pry', '0.9.12.4'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
13
|
if defined?(JRUBY_VERSION)
|
26
14
|
gem 'sinatra', :require => false
|
27
15
|
gem 'activerecord-jdbc-adapter'
|
data/gemfiles/rails42.gemfile
CHANGED
@@ -10,18 +10,6 @@ group :development, :test do
|
|
10
10
|
gem 'bson'
|
11
11
|
end
|
12
12
|
|
13
|
-
group :development do
|
14
|
-
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
15
|
-
gem 'debugger', :platform => :mri_19
|
16
|
-
gem 'byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
17
|
-
if RUBY_VERSION > '1.8.7'
|
18
|
-
gem 'pry'
|
19
|
-
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21, :mri_22 ]
|
20
|
-
else
|
21
|
-
gem 'pry', '0.9.12.4'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
13
|
if defined?(JRUBY_VERSION)
|
26
14
|
gem 'sinatra', :require => false
|
27
15
|
gem 'activerecord-jdbc-adapter'
|
data/lib/joboe_metal.rb
CHANGED
@@ -145,9 +145,13 @@ module TraceView
|
|
145
145
|
class << self
|
146
146
|
def sample?(opts = {})
|
147
147
|
begin
|
148
|
-
|
148
|
+
# Return false if no-op mode
|
149
|
+
return false if !TraceView.loaded
|
149
150
|
|
150
|
-
|
151
|
+
# Return false if never or through mode without AVW flag
|
152
|
+
return false if TraceView.never? || (TraceView.through? && !opts.key?('X-TV-Meta'))
|
153
|
+
|
154
|
+
return true if ENV.key?('TRACEVIEW_GEM_TEST') && !opts.key?('X-TV-Meta')
|
151
155
|
|
152
156
|
# Validation to make Joboe happy. Assure that we have the KVs and that they
|
153
157
|
# are not empty strings.
|
data/lib/oboe_metal.rb
CHANGED
@@ -98,7 +98,11 @@ module TraceView
|
|
98
98
|
class << self
|
99
99
|
def sample?(opts = {})
|
100
100
|
begin
|
101
|
-
|
101
|
+
# Return false if no-op mode
|
102
|
+
return false if !TraceView.loaded
|
103
|
+
|
104
|
+
# Return false if never or through mode without AVW flag
|
105
|
+
return false if TraceView.never? || (TraceView.through? && !opts.key?('X-TV-Meta'))
|
102
106
|
|
103
107
|
# Assure defaults since SWIG enforces Strings
|
104
108
|
layer = opts[:layer] ? opts[:layer].to_s.strip : ''
|
@@ -125,7 +125,12 @@ module TraceView
|
|
125
125
|
# sample rate and sample source
|
126
126
|
opts[:SampleRate] = TraceView.sample_rate
|
127
127
|
opts[:SampleSource] = TraceView.sample_source
|
128
|
-
|
128
|
+
|
129
|
+
if TraceView.through? && opts.key?('X-TV-Meta')
|
130
|
+
opts[:TraceOrigin] = :avw_sampled
|
131
|
+
else
|
132
|
+
opts[:TraceOrigin] = :always_sampled
|
133
|
+
end
|
129
134
|
|
130
135
|
log_event(layer, 'entry', TraceView::Context.startTrace, opts)
|
131
136
|
end
|
data/lib/traceview/base.rb
CHANGED
@@ -20,12 +20,17 @@ module TraceView
|
|
20
20
|
::TraceView::Util.method_alias(klass, :run, ::Grape::Endpoint)
|
21
21
|
end
|
22
22
|
|
23
|
-
def run_with_traceview(
|
23
|
+
def run_with_traceview(*args)
|
24
24
|
if TraceView.tracing?
|
25
25
|
report_kvs = {}
|
26
26
|
|
27
27
|
report_kvs[:Controller] = self.class
|
28
|
-
|
28
|
+
|
29
|
+
if args.empty?
|
30
|
+
report_kvs[:Action] = env['PATH_INFO']
|
31
|
+
else
|
32
|
+
report_kvs[:Action] = args[0]['PATH_INFO']
|
33
|
+
end
|
29
34
|
|
30
35
|
# Fall back to the raw tracing API so we can pass KVs
|
31
36
|
# back on exit (a limitation of the TraceView::API.trace
|
@@ -34,12 +39,12 @@ module TraceView
|
|
34
39
|
::TraceView::API.log_entry('grape', {})
|
35
40
|
|
36
41
|
begin
|
37
|
-
run_without_traceview(
|
42
|
+
run_without_traceview(*args)
|
38
43
|
ensure
|
39
44
|
::TraceView::API.log_exit('grape', report_kvs)
|
40
45
|
end
|
41
46
|
else
|
42
|
-
run_without_traceview(
|
47
|
+
run_without_traceview(*args)
|
43
48
|
end
|
44
49
|
end
|
45
50
|
end
|
@@ -25,12 +25,21 @@ module TraceView
|
|
25
25
|
if ::Rails::VERSION::MAJOR == 2
|
26
26
|
config = ::Rails.configuration.database_configuration[::Rails.env]
|
27
27
|
else
|
28
|
-
config = ::
|
28
|
+
config = ActiveRecord::Base.connection.instance_variable_get(:@config)
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
if config
|
32
|
+
opts[:Database] = config['database'] if config.key?('database')
|
33
|
+
opts[:RemoteHost] = config['host'] if config.key?('host')
|
34
|
+
adapter_name = config[:adapter]
|
35
|
+
|
36
|
+
case adapter_name
|
37
|
+
when /mysql/i
|
38
|
+
opts[:Flavor] = 'mysql'
|
39
|
+
when /postgres/i
|
40
|
+
opts[:Flavor] = 'postgresql'
|
41
|
+
end
|
42
|
+
end
|
34
43
|
rescue StandardError => e
|
35
44
|
TraceView.logger.debug "Exception raised capturing ActiveRecord KVs: #{e.inspect}"
|
36
45
|
TraceView.logger.debug e.backtrace.join('\n')
|
data/lib/traceview/inst/rack.rb
CHANGED
@@ -27,8 +27,6 @@ module TraceView
|
|
27
27
|
report_kvs['Query-String'] = ::CGI.unescape(req.query_string) unless req.query_string.empty?
|
28
28
|
end
|
29
29
|
|
30
|
-
report_kvs['X-TV-Meta'] = env['HTTP_X_TV_META'] if env.key?('HTTP_X_TV_META')
|
31
|
-
|
32
30
|
# Report any request queue'ing headers. Report as 'Request-Start' or the summed Queue-Time
|
33
31
|
report_kvs['Request-Start'] = env['HTTP_X_REQUEST_START'] if env.key?('HTTP_X_REQUEST_START')
|
34
32
|
report_kvs['Request-Start'] = env['HTTP_X_QUEUE_START'] if env.key?('HTTP_X_QUEUE_START')
|
@@ -73,6 +71,9 @@ module TraceView
|
|
73
71
|
report_kvs[:URL] = ::CGI.unescape(req.path)
|
74
72
|
end
|
75
73
|
|
74
|
+
# Detect and log AVW headers for sampling analysis
|
75
|
+
report_kvs['X-TV-Meta'] = env['HTTP_X_TV_META'] if env.key?('HTTP_X_TV_META')
|
76
|
+
|
76
77
|
# Check for and validate X-Trace request header to pick up tracing context
|
77
78
|
xtrace = env.is_a?(Hash) ? env['HTTP_X_TRACE'] : nil
|
78
79
|
xtrace_header = xtrace if xtrace && TraceView::XTrace.valid?(xtrace)
|
data/lib/traceview/version.rb
CHANGED
@@ -5,7 +5,7 @@ require "minitest_helper"
|
|
5
5
|
|
6
6
|
if defined?(::Rails)
|
7
7
|
|
8
|
-
describe "
|
8
|
+
describe "Rails3x" do
|
9
9
|
before do
|
10
10
|
clear_all_traces
|
11
11
|
end
|
@@ -97,5 +97,45 @@ if defined?(::Rails)
|
|
97
97
|
r.header.key?('X-Trace').must_equal true
|
98
98
|
r.header['X-Trace'].must_equal traces[4]['X-Trace']
|
99
99
|
end
|
100
|
+
|
101
|
+
it "should trace rails db calls" do
|
102
|
+
# Skip for JRuby since the java instrumentation
|
103
|
+
# handles DB instrumentation for JRuby
|
104
|
+
skip if defined?(JRUBY_VERSION)
|
105
|
+
|
106
|
+
uri = URI.parse('http://127.0.0.1:8140/hello/db')
|
107
|
+
r = Net::HTTP.get_response(uri)
|
108
|
+
|
109
|
+
traces = get_all_traces
|
110
|
+
|
111
|
+
traces.count.must_equal 12
|
112
|
+
valid_edges?(traces).must_equal true
|
113
|
+
validate_outer_layers(traces, 'rack')
|
114
|
+
|
115
|
+
traces[4]['Layer'].must_equal "activerecord"
|
116
|
+
traces[4]['Label'].must_equal "entry"
|
117
|
+
traces[4]['Flavor'].must_equal "postgresql"
|
118
|
+
traces[4]['Query'].must_equal "SELECT \"widgets\".* FROM \"widgets\" "
|
119
|
+
traces[4]['Name'].must_equal "Widget Load"
|
120
|
+
traces[4].key?('Backtrace').must_equal true
|
121
|
+
|
122
|
+
traces[5]['Layer'].must_equal "activerecord"
|
123
|
+
traces[5]['Label'].must_equal "exit"
|
124
|
+
|
125
|
+
traces[6]['Layer'].must_equal "activerecord"
|
126
|
+
traces[6]['Label'].must_equal "entry"
|
127
|
+
traces[6]['Flavor'].must_equal "postgresql"
|
128
|
+
traces[6]['Query'].must_equal "INSERT INTO \"widgets\" (\"created_at\", \"description\", \"name\", \"updated_at\") VALUES ($1, $2, $3, $4) RETURNING \"id\""
|
129
|
+
traces[6]['Name'].must_equal "SQL"
|
130
|
+
traces[6].key?('Backtrace').must_equal true
|
131
|
+
traces[6].key?('QueryArgs').must_equal true
|
132
|
+
|
133
|
+
traces[7]['Layer'].must_equal "activerecord"
|
134
|
+
traces[7]['Label'].must_equal "exit"
|
135
|
+
|
136
|
+
# Validate the existence of the response header
|
137
|
+
r.header.key?('X-Trace').must_equal true
|
138
|
+
r.header['X-Trace'].must_equal traces[11]['X-Trace']
|
139
|
+
end
|
100
140
|
end
|
101
141
|
end
|
@@ -5,7 +5,7 @@ require "minitest_helper"
|
|
5
5
|
|
6
6
|
if defined?(::Rails)
|
7
7
|
|
8
|
-
describe "
|
8
|
+
describe "Rails4x" do
|
9
9
|
before do
|
10
10
|
clear_all_traces
|
11
11
|
end
|
@@ -55,6 +55,46 @@ if defined?(::Rails)
|
|
55
55
|
r.header['X-Trace'].must_equal traces[6]['X-Trace']
|
56
56
|
end
|
57
57
|
|
58
|
+
it "should trace rails db calls" do
|
59
|
+
# Skip for JRuby since the java instrumentation
|
60
|
+
# handles DB instrumentation for JRuby
|
61
|
+
skip if defined?(JRUBY_VERSION)
|
62
|
+
|
63
|
+
uri = URI.parse('http://127.0.0.1:8140/hello/db')
|
64
|
+
r = Net::HTTP.get_response(uri)
|
65
|
+
|
66
|
+
traces = get_all_traces
|
67
|
+
|
68
|
+
traces.count.must_equal 11
|
69
|
+
valid_edges?(traces).must_equal true
|
70
|
+
validate_outer_layers(traces, 'rack')
|
71
|
+
|
72
|
+
traces[3]['Layer'].must_equal "activerecord"
|
73
|
+
traces[3]['Label'].must_equal "entry"
|
74
|
+
traces[3]['Flavor'].must_equal "postgresql"
|
75
|
+
traces[3]['Query'].must_equal "SELECT \"widgets\".* FROM \"widgets\" ORDER BY \"widgets\".\"id\" ASC LIMIT 1"
|
76
|
+
traces[3]['Name'].must_equal "Widget Load"
|
77
|
+
traces[3].key?('Backtrace').must_equal true
|
78
|
+
|
79
|
+
traces[4]['Layer'].must_equal "activerecord"
|
80
|
+
traces[4]['Label'].must_equal "exit"
|
81
|
+
|
82
|
+
traces[5]['Layer'].must_equal "activerecord"
|
83
|
+
traces[5]['Label'].must_equal "entry"
|
84
|
+
traces[5]['Flavor'].must_equal "postgresql"
|
85
|
+
traces[5]['Query'].must_equal "INSERT INTO \"widgets\" (\"name\", \"description\", \"created_at\", \"updated_at\") VALUES ($1, $2, $3, $4) RETURNING \"id\""
|
86
|
+
traces[5]['Name'].must_equal "SQL"
|
87
|
+
traces[5].key?('Backtrace').must_equal true
|
88
|
+
traces[5].key?('QueryArgs').must_equal true
|
89
|
+
|
90
|
+
traces[6]['Layer'].must_equal "activerecord"
|
91
|
+
traces[6]['Label'].must_equal "exit"
|
92
|
+
|
93
|
+
# Validate the existence of the response header
|
94
|
+
r.header.key?('X-Trace').must_equal true
|
95
|
+
r.header['X-Trace'].must_equal traces[10]['X-Trace']
|
96
|
+
end
|
97
|
+
|
58
98
|
it "should trace a request to a rails metal stack" do
|
59
99
|
|
60
100
|
uri = URI.parse('http://127.0.0.1:8140/hello/metal')
|
data/test/models/widget.rb
CHANGED
@@ -1,19 +1,24 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
# Somehow the Padrino::Reloader v14 is detecting and loading
|
2
|
+
# this file when it shouldn't. Block it from loading for
|
3
|
+
# Padrino for now.
|
4
|
+
unless defined?(Padrino)
|
5
|
+
class Widget < ActiveRecord::Base
|
6
|
+
def do_work(*args)
|
7
|
+
Widget.first
|
8
|
+
end
|
5
9
|
|
6
|
-
|
7
|
-
|
10
|
+
def do_error(*args)
|
11
|
+
raise "FakeTestError"
|
12
|
+
end
|
8
13
|
end
|
9
|
-
end
|
10
14
|
|
11
|
-
class CreateWidgets < ActiveRecord::Migration
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
class CreateWidgets < ActiveRecord::Migration
|
16
|
+
def change
|
17
|
+
create_table :widgets do |t|
|
18
|
+
t.string :name
|
19
|
+
t.text :description
|
20
|
+
t.timestamps
|
21
|
+
end
|
17
22
|
end
|
18
23
|
end
|
19
24
|
end
|
@@ -39,6 +39,7 @@ class Rails32MetalStack < Rails::Application
|
|
39
39
|
routes.append do
|
40
40
|
get "/hello/world" => "hello#world"
|
41
41
|
get "/hello/metal" => "ferro#world"
|
42
|
+
get "/hello/db" => "hello#db"
|
42
43
|
end
|
43
44
|
|
44
45
|
# Enable cache classes. Production style.
|
@@ -72,6 +73,13 @@ class HelloController < ActionController::Base
|
|
72
73
|
def world
|
73
74
|
render :text => "Hello world!"
|
74
75
|
end
|
76
|
+
|
77
|
+
def db
|
78
|
+
Widget.all.first
|
79
|
+
w = Widget.new(:name => 'blah', :description => 'This is an amazing widget.')
|
80
|
+
w.save
|
81
|
+
render :text => "Hello database!"
|
82
|
+
end
|
75
83
|
end
|
76
84
|
|
77
85
|
class FerroController < ActionController::Metal
|
@@ -40,6 +40,7 @@ class Rails40MetalStack < Rails::Application
|
|
40
40
|
routes.append do
|
41
41
|
get "/hello/world" => "hello#world"
|
42
42
|
get "/hello/metal" => "ferro#world"
|
43
|
+
get "/hello/db" => "hello#db"
|
43
44
|
end
|
44
45
|
|
45
46
|
# Enable cache classes. Production style.
|
@@ -73,6 +74,13 @@ class HelloController < ActionController::Base
|
|
73
74
|
def world
|
74
75
|
render :text => "Hello world!"
|
75
76
|
end
|
77
|
+
|
78
|
+
def db
|
79
|
+
Widget.all.first
|
80
|
+
w = Widget.new(:name => 'blah', :description => 'This is an amazing widget.')
|
81
|
+
w.save
|
82
|
+
render :text => "Hello database!"
|
83
|
+
end
|
76
84
|
end
|
77
85
|
|
78
86
|
class FerroController < ActionController::Metal
|
@@ -14,6 +14,7 @@ class AutoTraceTest < Minitest::Test
|
|
14
14
|
|
15
15
|
def test_entry_layers
|
16
16
|
TraceView.entry_layer?('delayed_job-worker').must_equal true
|
17
|
+
TraceView.entry_layer?('sidekiq-worker').must_equal true
|
17
18
|
TraceView.entry_layer?('asdf-worker').must_equal false
|
18
19
|
end
|
19
20
|
|
@@ -22,7 +23,7 @@ class AutoTraceTest < Minitest::Test
|
|
22
23
|
TraceView.entry_layer?(:asdfworker).must_equal false
|
23
24
|
end
|
24
25
|
|
25
|
-
def
|
26
|
+
def test_trace_when_default_tm_dj
|
26
27
|
TraceView::Config[:tracing_mode] = :through
|
27
28
|
|
28
29
|
TV::API.start_trace('delayed_job-worker') do
|
@@ -30,11 +31,23 @@ class AutoTraceTest < Minitest::Test
|
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
34
|
+
def test_trace_when_default_tm_sidekiq
|
35
|
+
TraceView::Config[:tracing_mode] = :through
|
36
|
+
|
37
|
+
TV::API.start_trace('sidekiq-worker') do
|
38
|
+
TraceView.tracing?.must_equal true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
33
42
|
def test_dont_trace_when_never
|
34
43
|
TraceView::Config[:tracing_mode] = :never
|
35
44
|
|
36
45
|
TV::API.start_trace('delayed_job-worker') do
|
37
46
|
TraceView.tracing?.must_equal false
|
38
47
|
end
|
48
|
+
|
49
|
+
TV::API.start_trace('asdf') do
|
50
|
+
TraceView.tracing?.must_equal false
|
51
|
+
end
|
39
52
|
end
|
40
53
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
require 'minitest_helper'
|
5
|
+
require 'rack/test'
|
6
|
+
require 'rack/lobster'
|
7
|
+
require 'traceview/inst/rack'
|
8
|
+
|
9
|
+
class AVWTraceTest < Minitest::Test
|
10
|
+
include Rack::Test::Methods
|
11
|
+
|
12
|
+
def app
|
13
|
+
@app = Rack::Builder.new {
|
14
|
+
use Rack::CommonLogger
|
15
|
+
use Rack::ShowExceptions
|
16
|
+
use TraceView::Rack
|
17
|
+
map "/lobster" do
|
18
|
+
use Rack::Lint
|
19
|
+
run Rack::Lobster.new
|
20
|
+
end
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def setup
|
25
|
+
clear_all_traces
|
26
|
+
@tm = TraceView::Config[:tracing_mode]
|
27
|
+
end
|
28
|
+
|
29
|
+
def teardown
|
30
|
+
TraceView::Config[:tracing_mode] = @tm
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_avw_collection_with_through
|
34
|
+
# Skip under JRuby/Joboe for now. Due to Java instrumentation
|
35
|
+
# variation that is being investigated in TVI-2348
|
36
|
+
skip if defined?(JRUBY_VERSION)
|
37
|
+
|
38
|
+
TV::Config[:tracing_mode] = :through
|
39
|
+
header('X-TV-Meta', 'abcdefghijklmnopqrstuvwxyz')
|
40
|
+
|
41
|
+
get "/lobster"
|
42
|
+
|
43
|
+
traces = get_all_traces
|
44
|
+
|
45
|
+
traces.count.must_equal 3
|
46
|
+
traces[0]['TraceOrigin'].must_equal "avw_sampled"
|
47
|
+
validate_outer_layers(traces, 'rack')
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_avw_collection_with_always
|
51
|
+
# Skip under JRuby/Joboe for now. Due to Java instrumentation
|
52
|
+
# variation that is being investigated in TVI-2348
|
53
|
+
skip if defined?(JRUBY_VERSION)
|
54
|
+
|
55
|
+
TV::Config[:tracing_mode] = :always
|
56
|
+
header('X-TV-Meta', 'abcdefghijklmnopqrstuvwxyz')
|
57
|
+
|
58
|
+
get "/lobster"
|
59
|
+
|
60
|
+
traces = get_all_traces
|
61
|
+
|
62
|
+
traces.count.must_equal 3
|
63
|
+
traces[0]['TraceOrigin'].must_equal "always_sampled"
|
64
|
+
validate_outer_layers(traces, 'rack')
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_avw_collection_with_never
|
68
|
+
TV::Config[:tracing_mode] = :never
|
69
|
+
header('X-TV-Meta', 'abcdefghijklmnopqrstuvwxyz')
|
70
|
+
|
71
|
+
get "/lobster"
|
72
|
+
|
73
|
+
traces = get_all_traces
|
74
|
+
traces.count.must_equal 0
|
75
|
+
end
|
76
|
+
end
|
data/traceview.gemspec
CHANGED
@@ -23,7 +23,22 @@ Gem::Specification.new do |s|
|
|
23
23
|
|
24
24
|
s.add_runtime_dependency('json', '>= 0')
|
25
25
|
s.add_runtime_dependency('bson', '< 4.0')
|
26
|
-
|
26
|
+
|
27
|
+
# Development dependencies used in gem development & testing
|
28
|
+
s.add_development_dependency('rake', '>= 0.9.0')
|
29
|
+
|
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
|
27
42
|
|
28
43
|
s.required_ruby_version = '>= 1.8.6'
|
29
44
|
end
|
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.
|
4
|
+
version: 3.4.1
|
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:
|
12
|
+
date: 2016-01-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -45,14 +45,56 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 0.9.0
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 0.9.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: byebug
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 8.0.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 8.0.0
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: pry
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.10.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.10.0
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: pry-byebug
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 3.0.0
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 3.0.0
|
56
98
|
description: The TraceView gem provides performance instrumentation for MRI Ruby,
|
57
99
|
JRuby and related frameworks.
|
58
100
|
email: traceviewsupport@appneta.com
|
@@ -229,7 +271,8 @@ files:
|
|
229
271
|
- test/servers/sidekiq.rb
|
230
272
|
- test/servers/sidekiq.yml
|
231
273
|
- test/servers/sidekiq_initializer.rb
|
232
|
-
- test/support/
|
274
|
+
- test/support/auto_tracing_test.rb
|
275
|
+
- test/support/avw_handling_test.rb
|
233
276
|
- test/support/backcompat_test.rb
|
234
277
|
- test/support/config_test.rb
|
235
278
|
- test/support/dnt_test.rb
|
@@ -259,7 +302,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
302
|
version: '0'
|
260
303
|
requirements: []
|
261
304
|
rubyforge_project:
|
262
|
-
rubygems_version: 2.
|
305
|
+
rubygems_version: 2.5.1
|
263
306
|
signing_key:
|
264
307
|
specification_version: 4
|
265
308
|
summary: AppNeta TraceView performance instrumentation gem for Ruby
|
@@ -315,13 +358,14 @@ test_files:
|
|
315
358
|
- test/queues/delayed_job-client_test.rb
|
316
359
|
- test/support/config_test.rb
|
317
360
|
- test/support/noop_test.rb
|
318
|
-
- test/support/auto_tracing.rb
|
319
361
|
- test/support/dnt_test.rb
|
320
362
|
- test/support/sql_sanitize_test.rb
|
363
|
+
- test/support/avw_handling_test.rb
|
321
364
|
- test/support/tvalias_test.rb
|
322
365
|
- test/support/liboboe_settings_test.rb
|
323
366
|
- test/support/backcompat_test.rb
|
324
367
|
- test/support/xtrace_test.rb
|
368
|
+
- test/support/auto_tracing_test.rb
|
325
369
|
- test/minitest_helper.rb
|
326
370
|
- test/jobs/sidekiq/remote_call_worker_job.rb
|
327
371
|
- test/jobs/sidekiq/error_worker_job.rb
|