traceview 3.0.3-java → 3.0.4-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 +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile +1 -1
- data/gemfiles/frameworks.gemfile +1 -1
- data/gemfiles/libraries.gemfile +1 -1
- data/gemfiles/rails23.gemfile +1 -1
- data/gemfiles/rails30.gemfile +1 -1
- data/gemfiles/rails31.gemfile +1 -1
- data/gemfiles/rails32.gemfile +1 -1
- data/gemfiles/rails40.gemfile +1 -1
- data/gemfiles/rails41.gemfile +1 -1
- data/gemfiles/rails42.gemfile +1 -1
- data/lib/rails/generators/traceview/install_generator.rb +2 -0
- data/lib/traceview/api/logging.rb +13 -12
- data/lib/traceview/api.rb +1 -1
- data/lib/traceview/config.rb +4 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +1 -1
- data/lib/traceview/inst/sequel.rb +1 -1
- data/lib/traceview/util.rb +18 -0
- data/lib/traceview/version.rb +1 -1
- data/test/support/sql_sanitize_test.rb +55 -0
- metadata +4 -6
- data/test/frameworks/rails2x_test.rb +0 -91
- data/test/servers/rails2x_8140.rb +0 -171
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d7b1e15c3cb6b5b4ef34bd1b5861f4a771e4d8f
|
4
|
+
data.tar.gz: 65fdda8e86ddf934c454eb518274f20c0541eb45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 355c101e8ae6f25c1d23bdd405f1ab983daa57a091eaa3193e37677047dce5fbd15e1e442bffd23e4966fba211318b8cd0daa05359bdba84dcd161945007db13
|
7
|
+
data.tar.gz: d36d61c09d859c317362772510d8a6a0e2fb9d22164f58d7cdd5615c5423367a669c3a37209b1e312bb7e8b02a4aef6d74798e0207bb34e069612ac1a364a136
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,31 @@ 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.4
|
8
|
+
|
9
|
+
This patch release includes the following fixes:
|
10
|
+
|
11
|
+
* Rails generator broken after gem rename: #128
|
12
|
+
* Allow custom params for logging exceptions: #130 (thanks @sliuu !)
|
13
|
+
* SQL Sanitize missing integers for ActiveRecord adapters: #131
|
14
|
+
|
15
|
+
Pushed to Rubygems:
|
16
|
+
|
17
|
+
https://rubygems.org/gems/traceview/versions/3.0.4
|
18
|
+
https://rubygems.org/gems/traceview/versions/3.0.4-java
|
19
|
+
|
20
|
+
# traceview 3.0.3
|
21
|
+
|
22
|
+
This patch release includes the following fixes:
|
23
|
+
|
24
|
+
* Fix missing Controller/Action reporting for Rails 4 and add Rails test coverage: #123
|
25
|
+
* Fix Moped update default parameter: #127 (thanks to @maxjacobson, @lifegiver, @abmcdubb and @mradmacher!)
|
26
|
+
|
27
|
+
Pushed to Rubygems:
|
28
|
+
|
29
|
+
https://rubygems.org/gems/traceview/versions/3.0.3
|
30
|
+
https://rubygems.org/gems/traceview/versions/3.0.3-java
|
31
|
+
|
7
32
|
# traceview 3.0.2
|
8
33
|
|
9
34
|
This patch release includes the following fixes:
|
data/Gemfile
CHANGED
data/gemfiles/frameworks.gemfile
CHANGED
data/gemfiles/libraries.gemfile
CHANGED
data/gemfiles/rails23.gemfile
CHANGED
data/gemfiles/rails30.gemfile
CHANGED
data/gemfiles/rails31.gemfile
CHANGED
data/gemfiles/rails32.gemfile
CHANGED
data/gemfiles/rails40.gemfile
CHANGED
data/gemfiles/rails41.gemfile
CHANGED
data/gemfiles/rails42.gemfile
CHANGED
@@ -36,23 +36,24 @@ module TraceView
|
|
36
36
|
#
|
37
37
|
# * +layer+ - The layer the reported event belongs to
|
38
38
|
# * +exn+ - The exception to report
|
39
|
+
# * +kvs+ - Custom params if you want to log extra information
|
39
40
|
#
|
40
41
|
# ==== Example
|
41
42
|
#
|
42
43
|
# begin
|
43
44
|
# my_iffy_method
|
44
45
|
# rescue Exception => e
|
45
|
-
# TraceView::API.log_exception('rails', e)
|
46
|
+
# TraceView::API.log_exception('rails', e, { user: user_id })
|
46
47
|
# raise
|
47
48
|
# end
|
48
49
|
#
|
49
50
|
# Returns nothing.
|
50
|
-
def log_exception(layer, exn)
|
51
|
+
def log_exception(layer, exn, kvs = {})
|
51
52
|
return if !TraceView.loaded || exn.instance_variable_get(:@oboe_logged)
|
52
53
|
|
53
|
-
kvs
|
54
|
-
|
55
|
-
|
54
|
+
kvs.merge!(:ErrorClass => exn.class.name,
|
55
|
+
:ErrorMsg => exn.message,
|
56
|
+
:Backtrace => exn.backtrace.join("\r\n"))
|
56
57
|
|
57
58
|
exn.instance_variable_set(:@oboe_logged, true)
|
58
59
|
log(layer, 'error', kvs)
|
@@ -70,7 +71,7 @@ module TraceView
|
|
70
71
|
#
|
71
72
|
# ==== Example
|
72
73
|
#
|
73
|
-
#
|
74
|
+
# TraceView::API.log_start(:layer_name, nil, { :id => @user.id })
|
74
75
|
#
|
75
76
|
def log_start(layer, xtrace = nil, opts = {})
|
76
77
|
return if !TraceView.loaded || TraceView.never? ||
|
@@ -120,7 +121,7 @@ module TraceView
|
|
120
121
|
#
|
121
122
|
# ==== Example
|
122
123
|
#
|
123
|
-
#
|
124
|
+
# TraceView::API.log_end(:layer_name, { :id => @user.id })
|
124
125
|
#
|
125
126
|
# Returns an xtrace metadata string
|
126
127
|
def log_end(layer, opts = {})
|
@@ -145,7 +146,7 @@ module TraceView
|
|
145
146
|
#
|
146
147
|
# ==== Example
|
147
148
|
#
|
148
|
-
#
|
149
|
+
# TraceView::API.log_entry(:layer_name, { :id => @user.id })
|
149
150
|
#
|
150
151
|
# Returns an xtrace metadata string
|
151
152
|
def log_entry(layer, kvs = {}, op = nil)
|
@@ -167,7 +168,7 @@ module TraceView
|
|
167
168
|
#
|
168
169
|
# ==== Example
|
169
170
|
#
|
170
|
-
#
|
171
|
+
# TraceView::API.log_info(:layer_name, { :id => @user.id })
|
171
172
|
#
|
172
173
|
# Returns an xtrace metadata string
|
173
174
|
def log_info(layer, kvs = {})
|
@@ -189,7 +190,7 @@ module TraceView
|
|
189
190
|
#
|
190
191
|
# ==== Example
|
191
192
|
#
|
192
|
-
#
|
193
|
+
# TraceView::API.log_exit(:layer_name, { :id => @user.id })
|
193
194
|
#
|
194
195
|
# Returns an xtrace metadata string
|
195
196
|
def log_exit(layer, kvs = {}, op = nil)
|
@@ -212,11 +213,11 @@ module TraceView
|
|
212
213
|
# ==== Example
|
213
214
|
#
|
214
215
|
# entry = TraceView::Context.createEvent
|
215
|
-
#
|
216
|
+
# TraceView::API.log_event(:layer_name, 'entry', entry_event, { :id => @user.id })
|
216
217
|
#
|
217
218
|
# exit_event = TraceView::Context.createEvent
|
218
219
|
# exit_event.addEdge(entry.getMetadata)
|
219
|
-
#
|
220
|
+
# TraceView::API.log_event(:layer_name, 'exit', exit_event, { :id => @user.id })
|
220
221
|
#
|
221
222
|
def log_event(layer, label, event, opts = {})
|
222
223
|
if TraceView.loaded
|
data/lib/traceview/api.rb
CHANGED
@@ -5,7 +5,7 @@ module TraceView
|
|
5
5
|
##
|
6
6
|
# This module implements the TraceView tracing API.
|
7
7
|
# See: https://github.com/appneta/oboe-ruby#the-tracing-api
|
8
|
-
# and/or: http://rdoc.info/gems/
|
8
|
+
# and/or: http://rdoc.info/gems/traceview/TraceView/API/Tracing
|
9
9
|
module API
|
10
10
|
def self.extend_with_tracing
|
11
11
|
extend TraceView::API::Logging
|
data/lib/traceview/config.rb
CHANGED
@@ -108,6 +108,10 @@ module TraceView
|
|
108
108
|
# avoid collecting and reporting query literals to TraceView.
|
109
109
|
@@config[:sanitize_sql] = false
|
110
110
|
|
111
|
+
# The regular expression used to sanitize SQL.
|
112
|
+
@@config[:sanitize_sql_regexp] = '(\'[\s\S][^\']*\'|\d*\.\d+|\d+|NULL)'
|
113
|
+
@@config[:sanitize_sql_opts] = Regexp::IGNORECASE
|
114
|
+
|
111
115
|
# Do Not Trace
|
112
116
|
# These two values allow you to configure specific URL patterns to
|
113
117
|
# never be traced. By default, this is set to common static file
|
@@ -12,7 +12,7 @@ module TraceView
|
|
12
12
|
begin
|
13
13
|
if TraceView::Config[:sanitize_sql]
|
14
14
|
# Sanitize SQL and don't report binds
|
15
|
-
opts[:Query] =
|
15
|
+
opts[:Query] = TraceView::Util.sanitize_sql(sql)
|
16
16
|
else
|
17
17
|
# Report raw SQL and any binds if they exist
|
18
18
|
opts[:Query] = sql.to_s
|
data/lib/traceview/util.rb
CHANGED
@@ -153,12 +153,30 @@ module TraceView
|
|
153
153
|
return result.sort.join('&')
|
154
154
|
end
|
155
155
|
|
156
|
+
##
|
157
|
+
# sanitize_sql
|
158
|
+
#
|
159
|
+
# Used to remove query literals from SQL. Used by all
|
160
|
+
# DB adapter instrumentation.
|
161
|
+
#
|
162
|
+
# The regular expression passed to String.gsub is configurable
|
163
|
+
# via TraceView::Config[:sanitize_sql_regexp] and
|
164
|
+
# TraceView::Config[:sanitize_sql_opts].
|
165
|
+
#
|
166
|
+
def sanitize_sql(sql)
|
167
|
+
return sql unless TraceView::Config[:sanitize_sql]
|
168
|
+
|
169
|
+
regexp = Regexp.new(TraceView::Config[:sanitize_sql_regexp], TraceView::Config[:sanitize_sql_opts])
|
170
|
+
sql.gsub(regexp, '?')
|
171
|
+
end
|
172
|
+
|
156
173
|
##
|
157
174
|
# build_init_report
|
158
175
|
#
|
159
176
|
# Internal: Build a hash of KVs that reports on the status of the
|
160
177
|
# running environment. This is used on stack boot in __Init reporting
|
161
178
|
# and for TraceView.support_report.
|
179
|
+
#
|
162
180
|
def build_init_report
|
163
181
|
platform_info = { '__Init' => 1 }
|
164
182
|
|
data/lib/traceview/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
require 'minitest_helper'
|
5
|
+
|
6
|
+
class SQLSanitizeTest < Minitest::Test
|
7
|
+
def test_sanitize_sql1
|
8
|
+
TraceView::Config[:sanitize_sql] = true
|
9
|
+
|
10
|
+
sql = "INSERT INTO `queries` (`asdf_id`, `asdf_prices`, `created_at`, `updated_at`, `blue_pill`, `yearly_tax`, `rate`, `steam_id`, `red_pill`, `dimitri`, `origin`) VALUES (19231, 3, 'cat', 'dog', 111.0, 126.0, 116.0, 79.0, 72.0, 73.0, ?, 1, 3, 229.284, ?, ?, 100, ?, 0, 3, 1, ?, NULL, NULL, ?, 4, ?)"
|
11
|
+
result = TraceView::Util.sanitize_sql(sql)
|
12
|
+
result.must_equal "INSERT INTO `queries` (`asdf_id`, `asdf_prices`, `created_at`, `updated_at`, `blue_pill`, `yearly_tax`, `rate`, `steam_id`, `red_pill`, `dimitri`, `origin`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
13
|
+
|
14
|
+
TraceView::Config[:sanitize_sql] = false
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_sanitize_sql2
|
18
|
+
TraceView::Config[:sanitize_sql] = true
|
19
|
+
|
20
|
+
sql = "SELECT \"game_types\".* FROM \"game_types\" WHERE \"game_types\".\"game_id\" IN (1162)"
|
21
|
+
result = TraceView::Util.sanitize_sql(sql)
|
22
|
+
result.must_equal "SELECT \"game_types\".* FROM \"game_types\" WHERE \"game_types\".\"game_id\" IN (?)"
|
23
|
+
|
24
|
+
TraceView::Config[:sanitize_sql] = false
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_sanitize_sql3
|
28
|
+
TraceView::Config[:sanitize_sql] = true
|
29
|
+
|
30
|
+
sql = "SELECT \"comments\".* FROM \"comments\" WHERE \"comments\".\"commentable_id\" = 2798 AND \"comments\".\"commentable_type\" = 'Video' AND \"comments\".\"parent_id\" IS NULL ORDER BY comments.created_at DESC"
|
31
|
+
result = TraceView::Util.sanitize_sql(sql)
|
32
|
+
result.must_equal "SELECT \"comments\".* FROM \"comments\" WHERE \"comments\".\"commentable_id\" = ? AND \"comments\".\"commentable_type\" = ? AND \"comments\".\"parent_id\" IS ? ORDER BY comments.created_at DESC"
|
33
|
+
|
34
|
+
TraceView::Config[:sanitize_sql] = false
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_sanitize_sql4
|
38
|
+
TraceView::Config[:sanitize_sql] = true
|
39
|
+
|
40
|
+
sql = "SELECT `assets`.* FROM `assets` WHERE `assets`.`type` IN ('Picture') AND (updated_at >= '2015-07-08 19:22:00') AND (updated_at <= '2015-07-08 19:23:00') LIMIT 31 OFFSET 0"
|
41
|
+
result = TraceView::Util.sanitize_sql(sql)
|
42
|
+
result.must_equal "SELECT `assets`.* FROM `assets` WHERE `assets`.`type` IN (?) AND (updated_at >= ?) AND (updated_at <= ?) LIMIT ? OFFSET ?"
|
43
|
+
|
44
|
+
TraceView::Config[:sanitize_sql] = false
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_dont_sanitize
|
48
|
+
TraceView::Config[:sanitize_sql] = false
|
49
|
+
|
50
|
+
sql = "SELECT `assets`.* FROM `assets` WHERE `assets`.`type` IN ('Picture') AND (updated_at >= '2015-07-08 19:22:00') AND (updated_at <= '2015-07-08 19:23:00') LIMIT 31 OFFSET 0"
|
51
|
+
result = TraceView::Util.sanitize_sql(sql)
|
52
|
+
result.must_equal "SELECT `assets`.* FROM `assets` WHERE `assets`.`type` IN ('Picture') AND (updated_at >= '2015-07-08 19:22:00') AND (updated_at <= '2015-07-08 19:23:00') LIMIT 31 OFFSET 0"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
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.
|
4
|
+
version: 3.0.4
|
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-
|
12
|
+
date: 2015-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -152,7 +152,6 @@ files:
|
|
152
152
|
- test/frameworks/apps/sinatra_simple.rb
|
153
153
|
- test/frameworks/grape_test.rb
|
154
154
|
- test/frameworks/padrino_test.rb
|
155
|
-
- test/frameworks/rails2x_test.rb
|
156
155
|
- test/frameworks/rails3x_test.rb
|
157
156
|
- test/frameworks/rails4x_test.rb
|
158
157
|
- test/frameworks/sinatra_test.rb
|
@@ -184,13 +183,13 @@ files:
|
|
184
183
|
- test/minitest_helper.rb
|
185
184
|
- test/profiling/method_test.rb
|
186
185
|
- test/servers/rackapp_8101.rb
|
187
|
-
- test/servers/rails2x_8140.rb
|
188
186
|
- test/servers/rails3x_8140.rb
|
189
187
|
- test/servers/rails4x_8140.rb
|
190
188
|
- test/support/backcompat_test.rb
|
191
189
|
- test/support/config_test.rb
|
192
190
|
- test/support/dnt_test.rb
|
193
191
|
- test/support/liboboe_settings_test.rb
|
192
|
+
- test/support/sql_sanitize_test.rb
|
194
193
|
- test/support/tvalias_test.rb
|
195
194
|
- test/support/xtrace_test.rb
|
196
195
|
- traceview.gemspec
|
@@ -222,7 +221,6 @@ test_files:
|
|
222
221
|
- test/minitest_helper.rb
|
223
222
|
- test/servers/rails4x_8140.rb
|
224
223
|
- test/servers/rails3x_8140.rb
|
225
|
-
- test/servers/rails2x_8140.rb
|
226
224
|
- test/servers/rackapp_8101.rb
|
227
225
|
- test/instrumentation/excon_test.rb
|
228
226
|
- test/instrumentation/sequel_pg_test.rb
|
@@ -254,7 +252,6 @@ test_files:
|
|
254
252
|
- test/frameworks/grape_test.rb
|
255
253
|
- test/frameworks/rails3x_test.rb
|
256
254
|
- test/frameworks/padrino_test.rb
|
257
|
-
- test/frameworks/rails2x_test.rb
|
258
255
|
- test/frameworks/rails4x_test.rb
|
259
256
|
- test/frameworks/apps/grape_simple.rb
|
260
257
|
- test/frameworks/apps/sinatra_simple.rb
|
@@ -262,6 +259,7 @@ test_files:
|
|
262
259
|
- test/frameworks/apps/grape_nested.rb
|
263
260
|
- test/support/config_test.rb
|
264
261
|
- test/support/dnt_test.rb
|
262
|
+
- test/support/sql_sanitize_test.rb
|
265
263
|
- test/support/tvalias_test.rb
|
266
264
|
- test/support/liboboe_settings_test.rb
|
267
265
|
- test/support/backcompat_test.rb
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
-
# All rights reserved.
|
3
|
-
|
4
|
-
require "minitest_helper"
|
5
|
-
|
6
|
-
if defined?(::Rails)
|
7
|
-
|
8
|
-
describe "Rails" do
|
9
|
-
before do
|
10
|
-
clear_all_traces
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should trace a request to a rails stack" do
|
14
|
-
|
15
|
-
uri = URI.parse('http://127.0.0.1:8140/hello/world')
|
16
|
-
r = Net::HTTP.get_response(uri)
|
17
|
-
|
18
|
-
traces = get_all_traces
|
19
|
-
|
20
|
-
traces.count.must_equal 8
|
21
|
-
valid_edges?(traces).must_equal true
|
22
|
-
validate_outer_layers(traces, 'rack')
|
23
|
-
|
24
|
-
traces[0]['Layer'].must_equal "rack"
|
25
|
-
traces[0]['Label'].must_equal "entry"
|
26
|
-
traces[0]['URL'].must_equal "/hello/world"
|
27
|
-
|
28
|
-
traces[1]['Layer'].must_equal "rack"
|
29
|
-
traces[1]['Label'].must_equal "info"
|
30
|
-
|
31
|
-
traces[2]['Layer'].must_equal "rails"
|
32
|
-
traces[2]['Label'].must_equal "entry"
|
33
|
-
|
34
|
-
traces[3]['Label'].must_equal "info"
|
35
|
-
traces[3]['Controller'].must_equal "HelloController"
|
36
|
-
traces[3]['Action'].must_equal "world"
|
37
|
-
|
38
|
-
traces[4]['Layer'].must_equal "actionview"
|
39
|
-
traces[4]['Label'].must_equal "entry"
|
40
|
-
|
41
|
-
traces[5]['Layer'].must_equal "actionview"
|
42
|
-
traces[5]['Label'].must_equal "exit"
|
43
|
-
|
44
|
-
traces[6]['Layer'].must_equal "rails"
|
45
|
-
traces[6]['Label'].must_equal "exit"
|
46
|
-
|
47
|
-
traces[7]['Layer'].must_equal "rack"
|
48
|
-
traces[7]['Label'].must_equal "exit"
|
49
|
-
|
50
|
-
# Validate the existence of the response header
|
51
|
-
r.header.key?('X-Trace').must_equal true
|
52
|
-
r.header['X-Trace'].must_equal traces[7]['X-Trace']
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should trace a request to a rails metal stack" do
|
56
|
-
|
57
|
-
uri = URI.parse('http://127.0.0.1:8140/hello/metal')
|
58
|
-
r = Net::HTTP.get_response(uri)
|
59
|
-
|
60
|
-
traces = get_all_traces
|
61
|
-
|
62
|
-
traces.count.must_equal 5
|
63
|
-
valid_edges?(traces).must_equal true
|
64
|
-
validate_outer_layers(traces, 'rack')
|
65
|
-
|
66
|
-
traces[0]['Layer'].must_equal "rack"
|
67
|
-
traces[0]['Label'].must_equal "entry"
|
68
|
-
traces[0]['URL'].must_equal "/hello/metal"
|
69
|
-
|
70
|
-
traces[1]['Layer'].must_equal "rack"
|
71
|
-
traces[1]['Label'].must_equal "info"
|
72
|
-
|
73
|
-
traces[2]['Label'].must_equal "profile_entry"
|
74
|
-
traces[2]['Language'].must_equal "ruby"
|
75
|
-
traces[2]['ProfileName'].must_equal "world"
|
76
|
-
traces[2]['FunctionName'].must_equal "world"
|
77
|
-
traces[2]['Class'].must_equal "FerroController"
|
78
|
-
|
79
|
-
traces[3]['Label'].must_equal "profile_exit"
|
80
|
-
traces[3]['Language'].must_equal "ruby"
|
81
|
-
traces[3]['ProfileName'].must_equal "world"
|
82
|
-
|
83
|
-
traces[4]['Layer'].must_equal "rack"
|
84
|
-
traces[4]['Label'].must_equal "exit"
|
85
|
-
|
86
|
-
# Validate the existence of the response header
|
87
|
-
r.header.key?('X-Trace').must_equal true
|
88
|
-
r.header['X-Trace'].must_equal traces[4]['X-Trace']
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,171 +0,0 @@
|
|
1
|
-
# Copyright (c) 2015 AppNeta, Inc.
|
2
|
-
# All rights reserved.
|
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)
|