traceview 3.0.1-java → 3.0.2-java

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: cc688a94875fe16ca06230262e394f32d6b4c7a5
4
- data.tar.gz: b1fccdc95e5c3ab0ed4fa06a7fb96c72670f58ef
3
+ metadata.gz: 9e68c98dd85b4d497aa11725c0cb0b6c00f8d13f
4
+ data.tar.gz: 417a5fd2832ab517c553306fe83571301d7c559e
5
5
  SHA512:
6
- metadata.gz: 820011918c977cfeed3f4e5352541248db7c3bd3299e8cdaf92b7a43b1417c1c706139b5436ebc11a3d1705bcbc0e2ecf0b39d487805de4671c4e3b828b874be
7
- data.tar.gz: e781653662060e351a369a2339f7c74f6d6d565254654e0862e15a49d99e0262f07263e6b057be8e4b51272ed4ddf5d78298eae9d3f1f932d7432c0559d90069
6
+ metadata.gz: 025c32911cf43d88a79b053df70740f44595e6769b528285734a344896cb9ba9bbebff3254db07a493a5fbd1e0a64fe8b137e76b8e5525cba4a545b2042af278
7
+ data.tar.gz: 2e213936151b38b5c9a50c46018f4629421a29e1171055f50c6163f5fca1f3138de19e7061f2aa4a3cec42ea70e2c19940f85be13c7ff6cae5b7773a2128f806
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  oboe*.gem
2
2
  Gemfile.lock
3
+ gemfiles/*.lock
3
4
  .ruby-version
4
5
  *~
5
6
  *.swp
data/CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@ 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.0.2
8
+
9
+ This patch release includes the following fixes:
10
+
11
+ * Add alternate module capitalization for easiness: #126
12
+ * Cassandra instrumentation loading for wrong client: #125
13
+ * Fix broken no-op mode when missing host libs: #124
14
+
15
+ Pushed to Rubygems:
16
+
17
+ https://rubygems.org/gems/traceview/versions/3.0.2
18
+ https://rubygems.org/gems/traceview/versions/3.0.2-java
19
+
7
20
  # traceview 3.0.1
8
21
 
9
22
  This patch release includes the following fix:
data/README.md CHANGED
@@ -8,8 +8,7 @@ It has the ability to report performance metrics on an array of libraries, datab
8
8
 
9
9
  It requires a [TraceView](http://www.appneta.com/products/traceview/) account to view metrics. Get yours, [it's free](http://www.appneta.com/products/traceview-free-account/).
10
10
 
11
- [![Oboe API Documentation](https://www.omniref.com/ruby/gems/oboe.png)](https://www.omniref.com/ruby/gems/oboe)
12
- [![Gem Version](https://badge.fury.io/rb/oboe.png)](http://badge.fury.io/rb/oboe)
11
+ [![Gem Version](https://badge.fury.io/rb/traceview.png)](http://badge.fury.io/rb/traceview)
13
12
  [![Build Status](https://travis-ci.org/appneta/oboe-ruby.png?branch=master)](https://travis-ci.org/appneta/oboe-ruby)
14
13
  [![Code Climate](https://codeclimate.com/github/appneta/oboe-ruby.png)](https://codeclimate.com/github/appneta/oboe-ruby)
15
14
 
@@ -174,7 +173,7 @@ This tracing state of a request can also be queried by using `TraceView.tracing?
174
173
 
175
174
  If you need to instrument code outside the context of a request (such as a cron job, background job or an arbitrary ruby script), use `TraceView::API.start_trace` instead which will initiate new traces based on configuration and probability (based on the sample rate).
176
175
 
177
- Find more details in the [RubyDoc page](http://rdoc.info/gems/oboe/TraceView/API/Tracing) or in [this example](https://gist.github.com/pglombardo/8550713) on how to use the Tracing API in an independent Ruby script.
176
+ Find more details in the [RubyDoc page](http://rdoc.info/gems/traceview/TraceView/API/Tracing) or in [this example](https://gist.github.com/pglombardo/8550713) on how to use the Tracing API in an independent Ruby script.
178
177
 
179
178
  ## Tracing Methods
180
179
 
@@ -187,12 +186,12 @@ The pattern for Method Profiling is as follows:
187
186
  # It identifies this custom trace in your dashboard.
188
187
  #
189
188
  class Engine
190
- include TraceViewMethodProfiling
191
-
192
189
  def processor()
193
190
  # body of method
194
191
  end
195
-
192
+
193
+ include TraceViewMethodProfiling
194
+
196
195
  # call syntax: profile_method <method>, <profile_name>
197
196
  profile_method :processor, 'processor'
198
197
  end
@@ -2,7 +2,9 @@ require 'traceview/thread_local'
2
2
 
3
3
  module Oboe
4
4
  extend TraceViewBase
5
- include Oboe_metal
5
+ if TraceView.loaded
6
+ include Oboe_metal
7
+ end
6
8
 
7
9
  #
8
10
  # Support for Oboe::API calls
@@ -223,3 +223,7 @@ end
223
223
  module TraceView
224
224
  extend TraceViewBase
225
225
  end
226
+
227
+ # Setup an alias so we don't bug users
228
+ # about single letter capitalization
229
+ Traceview = TraceView
@@ -250,7 +250,12 @@ module TraceView
250
250
  end
251
251
  end
252
252
 
253
- if defined?(::Cassandra) && TraceView::Config[:cassandra][:enabled]
253
+ # There are two main Cassandra clients for Ruby. This one from Twitter
254
+ # and the other from datastax. This one defined ::Cassandra as a class
255
+ # and datastax defines it as a module. We use this to detect
256
+ # and differentiate between the client in use.
257
+
258
+ if defined?(::Cassandra) && ::Cassandra.is_a?(Class) && TraceView::Config[:cassandra][:enabled]
254
259
  TraceView.logger.info '[traceview/loading] Instrumenting cassandra' if TraceView::Config[:verbose]
255
260
 
256
261
  class ::Cassandra
@@ -22,7 +22,11 @@ module TraceViewMethodProfiling
22
22
  end
23
23
 
24
24
  module ClassMethods
25
- def profile_method(method_name, profile_name, store_args = false, store_return = false, *_)
25
+ def profile_method_noop(*args)
26
+ nil
27
+ end
28
+
29
+ def profile_method_real(method_name, profile_name, store_args = false, store_return = false, *_)
26
30
  begin
27
31
  # this only gets file and line where profiling is turned on, presumably
28
32
  # right after the function definition. ruby 1.9 and 2.0 has nice introspection (Method.source_location)
@@ -80,5 +84,14 @@ module TraceViewMethodProfiling
80
84
  TraceView.logger.warn "[traceview/warn] Fatal error profiling method (#{method_name}): #{e.inspect}" if TraceView::Config[:verbose]
81
85
  end
82
86
  end
87
+
88
+ # This allows this module to be included and called even if the gem is in
89
+ # no-op mode (no base libraries).
90
+ if TraceView.loaded
91
+ alias :profile_method :profile_method_real
92
+ else
93
+ alias :profile_method :profile_method_noop
94
+ end
95
+
83
96
  end
84
97
  end
@@ -8,7 +8,7 @@ module TraceView
8
8
  module Version
9
9
  MAJOR = 3
10
10
  MINOR = 0
11
- PATCH = 1
11
+ PATCH = 2
12
12
  BUILD = nil
13
13
 
14
14
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
data/lib/traceview.rb CHANGED
@@ -40,9 +40,9 @@ begin
40
40
 
41
41
  require 'traceview/config'
42
42
  require 'traceview/loading'
43
+ require 'traceview/method_profiling'
43
44
 
44
45
  if TraceView.loaded
45
- require 'traceview/method_profiling'
46
46
  require 'traceview/instrumentation'
47
47
 
48
48
  # Frameworks
@@ -0,0 +1,88 @@
1
+ require "minitest_helper"
2
+
3
+ if defined?(::Rails)
4
+
5
+ describe "Rails" do
6
+ before do
7
+ clear_all_traces
8
+ end
9
+
10
+ it "should trace a request to a rails stack" do
11
+
12
+ uri = URI.parse('http://127.0.0.1:8140/hello/world')
13
+ r = Net::HTTP.get_response(uri)
14
+
15
+ traces = get_all_traces
16
+
17
+ traces.count.must_equal 8
18
+ valid_edges?(traces).must_equal true
19
+ validate_outer_layers(traces, 'rack')
20
+
21
+ traces[0]['Layer'].must_equal "rack"
22
+ traces[0]['Label'].must_equal "entry"
23
+ traces[0]['URL'].must_equal "/hello/world"
24
+
25
+ traces[1]['Layer'].must_equal "rack"
26
+ traces[1]['Label'].must_equal "info"
27
+
28
+ traces[2]['Layer'].must_equal "rails"
29
+ traces[2]['Label'].must_equal "entry"
30
+
31
+ traces[3]['Label'].must_equal "info"
32
+ traces[3]['Controller'].must_equal "HelloController"
33
+ traces[3]['Action'].must_equal "world"
34
+
35
+ traces[4]['Layer'].must_equal "actionview"
36
+ traces[4]['Label'].must_equal "entry"
37
+
38
+ traces[5]['Layer'].must_equal "actionview"
39
+ traces[5]['Label'].must_equal "exit"
40
+
41
+ traces[6]['Layer'].must_equal "rails"
42
+ traces[6]['Label'].must_equal "exit"
43
+
44
+ traces[7]['Layer'].must_equal "rack"
45
+ traces[7]['Label'].must_equal "exit"
46
+
47
+ # Validate the existence of the response header
48
+ r.header.key?('X-Trace').must_equal true
49
+ r.header['X-Trace'].must_equal traces[7]['X-Trace']
50
+ end
51
+
52
+ it "should trace a request to a rails metal stack" do
53
+
54
+ uri = URI.parse('http://127.0.0.1:8140/hello/metal')
55
+ r = Net::HTTP.get_response(uri)
56
+
57
+ traces = get_all_traces
58
+
59
+ traces.count.must_equal 5
60
+ valid_edges?(traces).must_equal true
61
+ validate_outer_layers(traces, 'rack')
62
+
63
+ traces[0]['Layer'].must_equal "rack"
64
+ traces[0]['Label'].must_equal "entry"
65
+ traces[0]['URL'].must_equal "/hello/metal"
66
+
67
+ traces[1]['Layer'].must_equal "rack"
68
+ traces[1]['Label'].must_equal "info"
69
+
70
+ traces[2]['Label'].must_equal "profile_entry"
71
+ traces[2]['Language'].must_equal "ruby"
72
+ traces[2]['ProfileName'].must_equal "world"
73
+ traces[2]['FunctionName'].must_equal "world"
74
+ traces[2]['Class'].must_equal "FerroController"
75
+
76
+ traces[3]['Label'].must_equal "profile_exit"
77
+ traces[3]['Language'].must_equal "ruby"
78
+ traces[3]['ProfileName'].must_equal "world"
79
+
80
+ traces[4]['Layer'].must_equal "rack"
81
+ traces[4]['Label'].must_equal "exit"
82
+
83
+ # Validate the existence of the response header
84
+ r.header.key?('X-Trace').must_equal true
85
+ r.header['X-Trace'].must_equal traces[4]['X-Trace']
86
+ end
87
+ end
88
+ end
@@ -19,6 +19,8 @@ class RackTestApp < Minitest::Test
19
19
  end
20
20
 
21
21
  def test_get_the_lobster
22
+ skip("FIXME: broken on travis only") if ENV['TRAVIS'] == "true"
23
+
22
24
  clear_all_traces
23
25
 
24
26
  get "/lobster"
@@ -47,7 +47,9 @@ require "./test/servers/rackapp_8101"
47
47
  # Truncates the trace output file to zero
48
48
  #
49
49
  def clear_all_traces
50
- TraceView::Reporter.clear_all_traces
50
+ if TraceView.loaded
51
+ TraceView::Reporter.clear_all_traces
52
+ end
51
53
  end
52
54
 
53
55
  ##
@@ -56,7 +58,11 @@ end
56
58
  # Retrieves all traces written to the trace file
57
59
  #
58
60
  def get_all_traces
59
- TraceView::Reporter.get_all_traces
61
+ if TraceView.loaded
62
+ TraceView::Reporter.get_all_traces
63
+ else
64
+ []
65
+ end
60
66
  end
61
67
 
62
68
  ##
@@ -0,0 +1,171 @@
1
+ # Don't change this file!
2
+ # Configure your app in config/environment.rb and config/environments/*.rb
3
+
4
+ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
5
+
6
+ require 'actionpack'
7
+ require 'actionpack'
8
+
9
+ module Rails
10
+ class << self
11
+ def boot!
12
+ unless booted?
13
+ preinitialize
14
+ pick_boot.run
15
+ end
16
+ end
17
+
18
+ def booted?
19
+ defined? Rails::Initializer
20
+ end
21
+
22
+ def pick_boot
23
+ (vendor_rails? ? VendorBoot : GemBoot).new
24
+ end
25
+
26
+ def vendor_rails?
27
+ File.exist?("#{RAILS_ROOT}/vendor/rails")
28
+ end
29
+
30
+ def preinitialize
31
+ load(preinitializer_path) if File.exist?(preinitializer_path)
32
+ end
33
+
34
+ def preinitializer_path
35
+ "#{RAILS_ROOT}/config/preinitializer.rb"
36
+ end
37
+ end
38
+
39
+ class Boot
40
+ def run
41
+ load_initializer
42
+ Rails::Initializer.run(:set_load_path)
43
+ end
44
+ end
45
+
46
+ class VendorBoot < Boot
47
+ def load_initializer
48
+ require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
49
+ Rails::Initializer.run(:install_gem_spec_stubs)
50
+ Rails::GemDependency.add_frozen_gem_path
51
+ end
52
+ end
53
+
54
+ class GemBoot < Boot
55
+ def load_initializer
56
+ self.class.load_rubygems
57
+ load_rails_gem
58
+ require 'initializer'
59
+ end
60
+
61
+ def load_rails_gem
62
+ if version = self.class.gem_version
63
+ gem 'rails', version
64
+ else
65
+ gem 'rails'
66
+ end
67
+ rescue Gem::LoadError => load_error
68
+ if load_error.message =~ /Could not find RubyGem rails/
69
+ STDERR.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
70
+ exit 1
71
+ else
72
+ raise
73
+ end
74
+ end
75
+
76
+ class << self
77
+ def rubygems_version
78
+ Gem::RubyGemsVersion rescue nil
79
+ end
80
+
81
+ def gem_version
82
+ if defined? RAILS_GEM_VERSION
83
+ RAILS_GEM_VERSION
84
+ elsif ENV.include?('RAILS_GEM_VERSION')
85
+ ENV['RAILS_GEM_VERSION']
86
+ else
87
+ parse_gem_version(read_environment_rb)
88
+ end
89
+ end
90
+
91
+ def load_rubygems
92
+ min_version = '1.3.2'
93
+ require 'rubygems'
94
+ unless rubygems_version >= min_version
95
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
96
+ exit 1
97
+ end
98
+
99
+ rescue LoadError
100
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
101
+ exit 1
102
+ end
103
+
104
+ def parse_gem_version(text)
105
+ $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
106
+ end
107
+
108
+ private
109
+ def read_environment_rb
110
+ File.read("#{RAILS_ROOT}/config/environment.rb")
111
+ end
112
+ end
113
+ end
114
+ end
115
+
116
+ class Rails::Boot
117
+ def run
118
+ load_initializer
119
+
120
+ Rails::Initializer.class_eval do
121
+ def load_gems
122
+ @bundler_loaded ||= Bundler.require :default, Rails.env
123
+ Oboe::Config[:verbose] = true
124
+ end
125
+ end
126
+
127
+ Rails::Initializer.run(:set_load_path)
128
+ end
129
+ end
130
+
131
+ TraceView.logger.info "[traceview/info] Starting background utility rails app on localhost:8140."
132
+
133
+ ActionController::Routing::Routes.draw do |map|
134
+ map.connect '/hello/metal', :controller => 'ferro', :action => 'world'
135
+ map.connect ':controller/:action/:id'
136
+ map.connect ':controller/:action/:id.:format'
137
+ end
138
+
139
+ Rails::Initializer.run do |config|
140
+ config.log_level = :debug
141
+ end
142
+
143
+ #################################################
144
+ # Controllers
145
+ #################################################
146
+
147
+ class HelloController < ActionController::Base
148
+ def world
149
+ render :text => "Hello world!"
150
+ end
151
+ end
152
+
153
+ class FerroController < ActionController::Metal
154
+ include AbstractController::Rendering
155
+
156
+ def world
157
+ render :text => "Hello world!"
158
+ end
159
+
160
+ include TraceViewMethodProfiling
161
+ profile_method :world, 'world'
162
+ end
163
+
164
+ #Thread.new do
165
+ #Rack::Handler::Puma.run(Rails23Stack.to_app, {:Host => '127.0.0.1', :Port => 8140})
166
+ # All that for this:
167
+ Rails.boot!
168
+
169
+ #end
170
+
171
+ sleep(2)
@@ -23,6 +23,8 @@ unless defined?(JRUBY_VERSION)
23
23
  end
24
24
 
25
25
  def test_localset_sample_source
26
+ skip("FIXME: broken on travis only") if ENV['TRAVIS'] == "true"
27
+
26
28
  # We make an initial call here which will force the traceview gem to retrieve
27
29
  # the sample_rate and sample_source from liboboe (via sample? method)
28
30
  get "/lobster"
@@ -0,0 +1,12 @@
1
+ require 'minitest_helper'
2
+
3
+ class TVAliasTest < Minitest::Test
4
+
5
+ def test_responds_various_capitalization
6
+ defined?(::TraceView).must_equal "constant"
7
+ defined?(::Traceview).must_equal "constant"
8
+
9
+ TraceView.methods.count.must_equal Traceview.methods.count
10
+ end
11
+ end
12
+
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.0.1
4
+ version: 3.0.2
5
5
  platform: java
6
6
  authors:
7
7
  - Peter Giacomo Lombardo
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-06-04 00:00:00.000000000 Z
12
+ date: 2015-06-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -113,7 +113,6 @@ files:
113
113
  - lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb
114
114
  - lib/traceview/frameworks/sinatra.rb
115
115
  - lib/traceview/frameworks/sinatra/templates.rb
116
- - lib/traceview/inst/cassandra.rb
117
116
  - lib/traceview/inst/dalli.rb
118
117
  - lib/traceview/inst/em-http-request.rb
119
118
  - lib/traceview/inst/excon.rb
@@ -129,6 +128,7 @@ files:
129
128
  - lib/traceview/inst/resque.rb
130
129
  - lib/traceview/inst/rest-client.rb
131
130
  - lib/traceview/inst/sequel.rb
131
+ - lib/traceview/inst/twitter-cassandra.rb
132
132
  - lib/traceview/inst/typhoeus.rb
133
133
  - lib/traceview/instrumentation.rb
134
134
  - lib/traceview/loading.rb
@@ -146,6 +146,7 @@ files:
146
146
  - test/frameworks/apps/sinatra_simple.rb
147
147
  - test/frameworks/grape_test.rb
148
148
  - test/frameworks/padrino_test.rb
149
+ - test/frameworks/rails2x_test.rb
149
150
  - test/frameworks/sinatra_test.rb
150
151
  - test/instrumentation/cassandra_test.rb
151
152
  - test/instrumentation/dalli_test.rb
@@ -175,10 +176,12 @@ files:
175
176
  - test/minitest_helper.rb
176
177
  - test/profiling/method_test.rb
177
178
  - test/servers/rackapp_8101.rb
179
+ - test/servers/rails2x_8140.rb
178
180
  - test/support/backcompat_test.rb
179
181
  - test/support/config_test.rb
180
182
  - test/support/dnt_test.rb
181
183
  - test/support/liboboe_settings_test.rb
184
+ - test/support/tvalias_test.rb
182
185
  - test/support/xtrace_test.rb
183
186
  - traceview.gemspec
184
187
  homepage: http://www.appneta.com/products/traceview/
@@ -207,6 +210,7 @@ specification_version: 4
207
210
  summary: AppNeta TraceView performance instrumentation gem for Ruby
208
211
  test_files:
209
212
  - test/minitest_helper.rb
213
+ - test/servers/rails2x_8140.rb
210
214
  - test/servers/rackapp_8101.rb
211
215
  - test/instrumentation/excon_test.rb
212
216
  - test/instrumentation/sequel_pg_test.rb
@@ -237,12 +241,14 @@ test_files:
237
241
  - test/frameworks/sinatra_test.rb
238
242
  - test/frameworks/grape_test.rb
239
243
  - test/frameworks/padrino_test.rb
244
+ - test/frameworks/rails2x_test.rb
240
245
  - test/frameworks/apps/grape_simple.rb
241
246
  - test/frameworks/apps/sinatra_simple.rb
242
247
  - test/frameworks/apps/padrino_simple.rb
243
248
  - test/frameworks/apps/grape_nested.rb
244
249
  - test/support/config_test.rb
245
250
  - test/support/dnt_test.rb
251
+ - test/support/tvalias_test.rb
246
252
  - test/support/liboboe_settings_test.rb
247
253
  - test/support/backcompat_test.rb
248
254
  - test/support/xtrace_test.rb