newrelic_rpm 3.6.0.74.beta → 3.6.0.78
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.
- data.tar.gz.sig +1 -2
- data/CHANGELOG +18 -0
- data/Gemfile +3 -3
- data/Rakefile +8 -0
- data/lib/new_relic/agent/agent.rb +4 -9
- data/lib/new_relic/agent/agent_logger.rb +1 -2
- data/lib/new_relic/agent/audit_logger.rb +7 -3
- data/lib/new_relic/agent/busy_calculator.rb +3 -3
- data/lib/new_relic/agent/configuration/server_source.rb +23 -10
- data/lib/new_relic/agent/cross_app_monitor.rb +1 -0
- data/lib/new_relic/agent/database.rb +2 -0
- data/lib/new_relic/agent/error_collector.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_record.rb +14 -13
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +72 -0
- data/lib/new_relic/agent/instrumentation/rails4/action_controller.rb +0 -76
- data/lib/new_relic/agent/instrumentation/rails4/action_view.rb +138 -0
- data/lib/new_relic/agent/instrumentation/rails4/active_record.rb +108 -0
- data/lib/new_relic/agent/null_logger.rb +15 -0
- data/lib/new_relic/agent/stats.rb +1 -0
- data/lib/new_relic/agent/stats_engine/transactions.rb +4 -4
- data/lib/new_relic/control/frameworks/rails.rb +0 -37
- data/lib/new_relic/control/frameworks/rails3.rb +0 -17
- data/lib/new_relic/control/instance_methods.rb +1 -2
- data/lib/new_relic/environment_report.rb +159 -0
- data/lib/new_relic/helper.rb +4 -0
- data/lib/new_relic/local_environment.rb +0 -161
- data/lib/newrelic_rpm.rb +1 -1
- data/test/multiverse/lib/multiverse/suite.rb +7 -0
- data/test/multiverse/suites/active_record/Envfile +0 -1
- data/test/multiverse/suites/agent_only/key_transactions_test.rb +22 -12
- data/test/multiverse/suites/rails/Envfile +8 -1
- data/test/multiverse/suites/rails/app.rb +7 -2
- data/test/multiverse/suites/rails/error_tracing_test.rb +28 -16
- data/test/multiverse/suites/rails/view_instrumentation_test.rb +8 -2
- data/test/new_relic/agent/agent/connect_test.rb +5 -8
- data/test/new_relic/agent/agent/start_test.rb +3 -1
- data/test/new_relic/agent/agent_logger_test.rb +8 -8
- data/test/new_relic/agent/agent_test.rb +0 -6
- data/test/new_relic/agent/agent_test_controller_test.rb +18 -14
- data/test/new_relic/agent/audit_logger_test.rb +12 -0
- data/test/new_relic/agent/configuration/server_source_test.rb +48 -0
- data/test/new_relic/agent/cross_app_monitor_test.rb +8 -0
- data/test/new_relic/agent/instrumentation/action_view_subscriber_test.rb +254 -0
- data/test/new_relic/agent/instrumentation/active_record_helper_test.rb +52 -0
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +32 -51
- data/test/new_relic/agent/instrumentation/active_record_subscriber_test.rb +132 -0
- data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +20 -0
- data/test/new_relic/agent_test.rb +0 -8
- data/test/new_relic/control_test.rb +1 -2
- data/test/new_relic/dispatcher_test.rb +1 -5
- data/test/new_relic/environment_report_test.rb +89 -0
- data/test/new_relic/license_test.rb +1 -3
- data/test/new_relic/load_test.rb +5 -1
- data/test/new_relic/local_environment_test.rb +0 -27
- data/test/new_relic/rack/browser_monitoring_test.rb +1 -0
- data/test/script/ci.sh +19 -18
- data/test/test_helper.rb +15 -3
- metadata +42 -3
- metadata.gz.sig +0 -0
data/lib/new_relic/helper.rb
CHANGED
@@ -43,32 +43,6 @@ module NewRelic
|
|
43
43
|
@config = Hash.new
|
44
44
|
end
|
45
45
|
|
46
|
-
# Add the given key/value pair to the app environment
|
47
|
-
# settings. Must pass either a value or a block. Block
|
48
|
-
# is called to get the value and any raised errors are
|
49
|
-
# silently ignored.
|
50
|
-
def append_environment_value(name, value = nil)
|
51
|
-
value = yield if block_given?
|
52
|
-
@config[name] = value if value
|
53
|
-
rescue => e
|
54
|
-
Agent.logger.error e
|
55
|
-
end
|
56
|
-
|
57
|
-
# yields to the block and appends the returned value to the list
|
58
|
-
# of gems - this catches errors that might be raised in the block
|
59
|
-
def append_gem_list
|
60
|
-
@gems += yield
|
61
|
-
rescue => e
|
62
|
-
Agent.logger.error e
|
63
|
-
end
|
64
|
-
|
65
|
-
# yields to the block and appends the returned value to the list
|
66
|
-
# of plugins - this catches errors that might be raised in the block
|
67
|
-
def append_plugin_list
|
68
|
-
@plugins += yield
|
69
|
-
rescue => e
|
70
|
-
Agent.logger.error e
|
71
|
-
end
|
72
46
|
|
73
47
|
# An instance id pulled from either @dispatcher_instance_id or by
|
74
48
|
# splitting out the first part of the running file
|
@@ -81,141 +55,6 @@ module NewRelic
|
|
81
55
|
@dispatcher_instance_id
|
82
56
|
end
|
83
57
|
|
84
|
-
# Interrogates some common ruby constants for useful information
|
85
|
-
# about what kind of ruby environment the agent is running in
|
86
|
-
def gather_ruby_info
|
87
|
-
append_environment_value('Ruby version'){ RUBY_VERSION }
|
88
|
-
append_environment_value('Ruby description'){ RUBY_DESCRIPTION } if defined? ::RUBY_DESCRIPTION
|
89
|
-
append_environment_value('Ruby platform') { RUBY_PLATFORM }
|
90
|
-
append_environment_value('Ruby patchlevel') { RUBY_PATCHLEVEL }
|
91
|
-
# room here for other ruby implementations, when.
|
92
|
-
if defined? ::JRUBY_VERSION
|
93
|
-
gather_jruby_info
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
# like gather_ruby_info but for the special case of JRuby
|
98
|
-
def gather_jruby_info
|
99
|
-
append_environment_value('JRuby version') { JRUBY_VERSION }
|
100
|
-
append_environment_value('Java VM version') { ENV_JAVA['java.vm.version']}
|
101
|
-
end
|
102
|
-
|
103
|
-
# See what the number of cpus is, works only on some linux variants
|
104
|
-
def gather_cpu_info(proc_file='/proc/cpuinfo')
|
105
|
-
return unless File.readable? proc_file
|
106
|
-
@processors = append_environment_value('Processors') do
|
107
|
-
cpuinfo = ''
|
108
|
-
File.open(proc_file) do |f|
|
109
|
-
loop do
|
110
|
-
begin
|
111
|
-
cpuinfo << f.read_nonblock(4096).strip
|
112
|
-
rescue EOFError
|
113
|
-
break
|
114
|
-
rescue Errno::EWOULDBLOCK, Errno::EAGAIN
|
115
|
-
cpuinfo = ''
|
116
|
-
break # don't select file handle, just give up
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
processors = cpuinfo.split("\n").select {|line| line =~ /^processor\s*:/ }.size
|
121
|
-
|
122
|
-
if processors == 0
|
123
|
-
processors = 1 # assume there is at least one processor
|
124
|
-
::NewRelic::Agent.logger.warn("Cannot determine the number of processors in #{proc_file}")
|
125
|
-
end
|
126
|
-
processors
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
# Grabs the architecture string from either `uname -p` or the env
|
131
|
-
# variable PROCESSOR_ARCHITECTURE
|
132
|
-
def gather_architecture_info
|
133
|
-
append_environment_value('Arch') { `uname -p` } ||
|
134
|
-
append_environment_value('Arch') { ENV['PROCESSOR_ARCHITECTURE'] }
|
135
|
-
end
|
136
|
-
|
137
|
-
# gathers OS info from either `uname -v`, `uname -s`, or the OS
|
138
|
-
# env variable
|
139
|
-
def gather_os_info
|
140
|
-
append_environment_value('OS version') { `uname -v` }
|
141
|
-
append_environment_value('OS') { `uname -s` } ||
|
142
|
-
append_environment_value('OS') { ENV['OS'] }
|
143
|
-
end
|
144
|
-
|
145
|
-
# Gathers the architecture and cpu info
|
146
|
-
def gather_system_info
|
147
|
-
gather_architecture_info
|
148
|
-
gather_cpu_info
|
149
|
-
end
|
150
|
-
|
151
|
-
# Looks for a capistrano file indicating the current revision
|
152
|
-
def gather_revision_info
|
153
|
-
rev_file = File.join(NewRelic::Control.instance.root, "REVISION")
|
154
|
-
if File.readable?(rev_file) && File.size(rev_file) < 64
|
155
|
-
append_environment_value('Revision') do
|
156
|
-
File.open(rev_file) { | file | file.readline.strip }
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
# The name of the AR database adapter for the current environment and
|
162
|
-
# the current schema version
|
163
|
-
def gather_ar_adapter_info
|
164
|
-
append_environment_value 'Database adapter' do
|
165
|
-
if defined?(ActiveRecord) && defined?(ActiveRecord::Base) &&
|
166
|
-
ActiveRecord::Base.respond_to?(:configurations)
|
167
|
-
config = ActiveRecord::Base.configurations[NewRelic::Control.instance.env]
|
168
|
-
if config
|
169
|
-
config['adapter']
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
# Datamapper version
|
176
|
-
def gather_dm_adapter_info
|
177
|
-
append_environment_value 'DataMapper version' do
|
178
|
-
require 'dm-core/version'
|
179
|
-
DataMapper::VERSION
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
# sensing for which adapter is defined, then appends the relevant
|
184
|
-
# config information
|
185
|
-
def gather_db_info
|
186
|
-
# room here for more database adapters, when.
|
187
|
-
if defined? ::ActiveRecord
|
188
|
-
gather_ar_adapter_info
|
189
|
-
end
|
190
|
-
if defined? ::DataMapper
|
191
|
-
gather_dm_adapter_info
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
# Collect base statistics about the environment and record them for
|
196
|
-
# comparison and change detection.
|
197
|
-
def gather_environment_info
|
198
|
-
append_environment_value 'Framework', Agent.config[:framework].to_s
|
199
|
-
append_environment_value 'Dispatcher', Agent.config[:dispatcher].to_s if Agent.config[:dispatcher]
|
200
|
-
append_environment_value 'Dispatcher instance id', @dispatcher_instance_id if @dispatcher_instance_id
|
201
|
-
append_environment_value('Environment') { NewRelic::Control.instance.env }
|
202
|
-
|
203
|
-
# miscellaneous other helpful debugging information
|
204
|
-
gather_ruby_info
|
205
|
-
gather_system_info
|
206
|
-
gather_revision_info
|
207
|
-
gather_db_info
|
208
|
-
end
|
209
|
-
|
210
|
-
# Take a snapshot of the environment information for this application
|
211
|
-
# Returns an associative array
|
212
|
-
def snapshot
|
213
|
-
i = @config.to_a
|
214
|
-
i << [ 'Plugin List', @plugins.to_a] if not @plugins.empty?
|
215
|
-
i << [ 'Gems', @gems.to_a] if not @gems.empty?
|
216
|
-
i
|
217
|
-
end
|
218
|
-
|
219
58
|
# it's a working jruby if it has the runtime method, and object
|
220
59
|
# space is enabled
|
221
60
|
def working_jruby?
|
data/lib/newrelic_rpm.rb
CHANGED
@@ -37,7 +37,7 @@ elsif defined? Rails
|
|
37
37
|
class Railtie < Rails::Railtie
|
38
38
|
|
39
39
|
initializer "newrelic_rpm.start_plugin" do |app|
|
40
|
-
|
40
|
+
NewRelic::Control.instance.init_plugin(:config => app.config)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -3,6 +3,13 @@
|
|
3
3
|
# This file is distributed under New Relic's license terms.
|
4
4
|
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
|
5
5
|
|
6
|
+
# this is to make sure that the Multiverse environment loads with the
|
7
|
+
# the gem version of Minitest (necessary for Rails 4) and not the one
|
8
|
+
# in standard library.
|
9
|
+
if defined?(gem)
|
10
|
+
gem 'minitest'
|
11
|
+
end
|
12
|
+
|
6
13
|
require File.expand_path(File.join(File.dirname(__FILE__), 'environment'))
|
7
14
|
module Multiverse
|
8
15
|
class Suite
|
@@ -6,13 +6,13 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
6
6
|
class TestWidget
|
7
7
|
include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
8
8
|
|
9
|
-
def key_txn
|
10
|
-
|
9
|
+
def key_txn(t0)
|
10
|
+
Time.stubs(:now).returns(t0 + 5)
|
11
11
|
end
|
12
12
|
add_transaction_tracer :key_txn
|
13
13
|
|
14
|
-
def other_txn
|
15
|
-
|
14
|
+
def other_txn(t0)
|
15
|
+
Time.stubs(:now).returns(t0 + 5)
|
16
16
|
end
|
17
17
|
add_transaction_tracer :other_txn
|
18
18
|
end
|
@@ -20,11 +20,11 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
20
20
|
def setup
|
21
21
|
$collector ||= NewRelic::FakeCollector.new
|
22
22
|
$collector.reset
|
23
|
-
key_apdex_config = { 'Controller/KeyTransactionsTest::TestWidget/key_txn' =>
|
23
|
+
key_apdex_config = { 'Controller/KeyTransactionsTest::TestWidget/key_txn' => 1 }
|
24
24
|
$collector.mock['connect'] = [200, {'return_value' => {
|
25
25
|
"agent_run_id" => 666,
|
26
26
|
'web_transactions_apdex' => key_apdex_config,
|
27
|
-
'apdex_t' =>
|
27
|
+
'apdex_t' => 10
|
28
28
|
}}]
|
29
29
|
$collector.run
|
30
30
|
|
@@ -34,6 +34,7 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
34
34
|
|
35
35
|
def teardown
|
36
36
|
NewRelic::Agent.shutdown
|
37
|
+
$collector.reset
|
37
38
|
end
|
38
39
|
|
39
40
|
SATISFYING = 0
|
@@ -41,24 +42,27 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
41
42
|
FAILING = 2
|
42
43
|
|
43
44
|
def test_applied_correct_apdex_t_to_key_txn
|
44
|
-
TestWidget.new.key_txn
|
45
|
+
TestWidget.new.key_txn(stub_time_now)
|
45
46
|
NewRelic::Agent.instance.send(:harvest_and_send_timeslice_data)
|
46
47
|
|
47
48
|
stats = $collector.reported_stats_for_metric('Apdex')[0]
|
48
|
-
assert_equal
|
49
|
+
assert_equal(1.0, stats[FAILING],
|
50
|
+
"Expected stats (#{stats}) to be apdex failing")
|
49
51
|
end
|
50
52
|
|
51
53
|
def test_applied_correct_apdex_t_to_regular_txn
|
52
|
-
TestWidget.new.other_txn
|
54
|
+
TestWidget.new.other_txn(stub_time_now)
|
53
55
|
NewRelic::Agent.instance.send(:harvest_and_send_timeslice_data)
|
54
56
|
|
55
57
|
stats = $collector.reported_stats_for_metric('Apdex')[0]
|
56
|
-
assert_equal
|
58
|
+
assert_equal(1.0, stats[SATISFYING],
|
59
|
+
"Expected stats (#{stats}) to be apdex satisfying")
|
57
60
|
end
|
58
61
|
|
59
62
|
def test_applied_correct_tt_theshold
|
60
|
-
|
61
|
-
TestWidget.new.
|
63
|
+
now = stub_time_now
|
64
|
+
TestWidget.new.key_txn(now)
|
65
|
+
TestWidget.new.other_txn(now)
|
62
66
|
|
63
67
|
NewRelic::Agent.instance.send(:harvest_and_send_slowest_sample)
|
64
68
|
|
@@ -67,4 +71,10 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
67
71
|
assert_equal('Controller/KeyTransactionsTest::TestWidget/key_txn',
|
68
72
|
traces[0].metric_name)
|
69
73
|
end
|
74
|
+
|
75
|
+
def stub_time_now
|
76
|
+
now = Time.now
|
77
|
+
Time.stubs(:now).returns(now)
|
78
|
+
return now
|
79
|
+
end
|
70
80
|
end
|
@@ -1,7 +1,14 @@
|
|
1
|
-
suite_condition("Rails 3
|
1
|
+
suite_condition("Rails 3+ do not support 1.8.6") do
|
2
2
|
RUBY_VERSION != '1.8.6'
|
3
3
|
end
|
4
4
|
|
5
|
+
if RUBY_VERSION >= '1.9.3'
|
6
|
+
gemfile <<-RB
|
7
|
+
gem 'rails', '~>4.0.0.beta1'
|
8
|
+
gem 'haml'
|
9
|
+
RB
|
10
|
+
end
|
11
|
+
|
5
12
|
gemfile <<-RB
|
6
13
|
gem 'rails', '~>3.2.0'
|
7
14
|
gem 'haml'
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
|
4
4
|
|
5
5
|
require 'action_controller/railtie'
|
6
|
+
require 'active_model'
|
6
7
|
|
7
8
|
# We define our single Rails application here, one time, upon the first inclusion
|
8
9
|
# Tests should feel free to define their own Controllers locally, but if they
|
@@ -19,11 +20,11 @@ if !defined?(MyApp)
|
|
19
20
|
MyApp.initialize!
|
20
21
|
|
21
22
|
MyApp.routes.draw do
|
22
|
-
get('/bad_route' => '
|
23
|
+
get('/bad_route' => 'test#controller_error',
|
23
24
|
:constraints => lambda do |_|
|
24
25
|
raise ActionController::RoutingError.new('this is an uncaught routing error')
|
25
26
|
end)
|
26
|
-
|
27
|
+
get '/:controller(/:action(/:id))'
|
27
28
|
end
|
28
29
|
|
29
30
|
class ApplicationController < ActionController::Base; end
|
@@ -35,6 +36,10 @@ if !defined?(MyApp)
|
|
35
36
|
self
|
36
37
|
end
|
37
38
|
|
39
|
+
def to_partial_path
|
40
|
+
'foos/foo'
|
41
|
+
end
|
42
|
+
|
38
43
|
def valid?() true end
|
39
44
|
def new_record?() true end
|
40
45
|
def destroyed?() true end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
|
4
4
|
|
5
5
|
# https://newrelic.atlassian.net/browse/RUBY-747
|
6
|
-
|
7
6
|
require 'rails/test_help'
|
8
7
|
require 'fake_collector'
|
9
8
|
|
@@ -45,6 +44,8 @@ class IgnoredError < StandardError; end
|
|
45
44
|
class ServerIgnoredError < StandardError; end
|
46
45
|
|
47
46
|
class ErrorsWithoutSSCTest < ActionDispatch::IntegrationTest
|
47
|
+
extend Multiverse::Color
|
48
|
+
|
48
49
|
def setup
|
49
50
|
$collector ||= NewRelic::FakeCollector.new
|
50
51
|
$collector.reset
|
@@ -79,12 +80,15 @@ class ErrorsWithoutSSCTest < ActionDispatch::IntegrationTest
|
|
79
80
|
'no ignore error filter should be set')
|
80
81
|
end
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
83
|
+
if Rails::VERSION::MAJOR != 4
|
84
|
+
def test_error_collector_should_be_enabled
|
85
|
+
assert NewRelic::Agent.config[:agent_enabled]
|
86
|
+
assert NewRelic::Agent.config[:'error_collector.enabled']
|
87
|
+
assert @error_collector.enabled?
|
88
|
+
assert Rails.application.config.middleware.include?(NewRelic::Rack::ErrorCollector)
|
89
|
+
end
|
90
|
+
else
|
91
|
+
puts yellow("SKIPPED test_error_collector_should_be_enabled : not working in Rails 4")
|
88
92
|
end
|
89
93
|
|
90
94
|
def test_should_capture_error_raised_in_view
|
@@ -126,17 +130,25 @@ class ErrorsWithoutSSCTest < ActionDispatch::IntegrationTest
|
|
126
130
|
assert_error_reported_once('this is a noticed error')
|
127
131
|
end
|
128
132
|
|
129
|
-
|
130
|
-
|
131
|
-
|
133
|
+
if Rails::VERSION::MAJOR.to_i != 4
|
134
|
+
def test_should_capture_routing_error
|
135
|
+
get '/bad_route'
|
136
|
+
assert_error_reported_once('this is an uncaught routing error')
|
137
|
+
end
|
138
|
+
else
|
139
|
+
puts yellow("SKIPPED test_should_capture_routing_error : not working in Rails 4")
|
132
140
|
end
|
133
141
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
142
|
+
if Rails::VERSION::MAJOR.to_i != 4
|
143
|
+
def test_should_capture_request_uri_and_params
|
144
|
+
get '/bad_route?eat=static'
|
145
|
+
assert_equal('/bad_route',
|
146
|
+
@error_collector.errors[0].params[:request_uri])
|
147
|
+
assert_equal({'eat' => 'static'},
|
148
|
+
@error_collector.errors[0].params[:request_params])
|
149
|
+
end
|
150
|
+
else
|
151
|
+
puts yellow("SKIPPED test_should_capture_request_uri_and_params : not working in Rails 4")
|
140
152
|
end
|
141
153
|
|
142
154
|
def test_should_not_notice_errors_from_ignored_action
|
@@ -78,7 +78,13 @@ end
|
|
78
78
|
class ViewControllerTest < ActionController::TestCase
|
79
79
|
tests ViewsController
|
80
80
|
def setup
|
81
|
+
super
|
81
82
|
@controller = ViewsController.new
|
83
|
+
# ActiveSupport testing keeps blowing away my subscriber on
|
84
|
+
# teardown for some reason. Have to keep putting it back.
|
85
|
+
if Rails::VERSION::MAJOR.to_i == 4
|
86
|
+
NewRelic::Agent::Instrumentation::ActionViewSubscriber.subscribe
|
87
|
+
end
|
82
88
|
end
|
83
89
|
end
|
84
90
|
|
@@ -126,7 +132,7 @@ end
|
|
126
132
|
|
127
133
|
class TextRenderTest < ViewControllerTest
|
128
134
|
# it doesn't seem worth it to get consistent behavior here.
|
129
|
-
if Rails::VERSION::MINOR.to_i == 0
|
135
|
+
if Rails::VERSION::MAJOR.to_i == 3 && Rails::VERSION::MINOR.to_i == 0
|
130
136
|
test "should not instrument rendering of text" do
|
131
137
|
get :text_render
|
132
138
|
sample = NewRelic::Agent.agent.transaction_sampler.samples.last
|
@@ -162,7 +168,7 @@ end
|
|
162
168
|
|
163
169
|
class MissingTemplateTest < ViewControllerTest
|
164
170
|
# Rails 3.0 has different behavior for rendering an empty array. We're okay with this.
|
165
|
-
if Rails::VERSION::MINOR.to_i == 0
|
171
|
+
if Rails::VERSION::MAJOR.to_i == 3 && Rails::VERSION::MINOR.to_i == 0
|
166
172
|
test "should create an proper metric when the template is unknown" do
|
167
173
|
get :no_template
|
168
174
|
sample = NewRelic::Agent.agent.transaction_sampler.samples.last
|