newrelic_rpm 2.14.1 → 3.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of newrelic_rpm might be problematic. Click here for more details.
- data/CHANGELOG +8 -0
- data/README.rdoc +2 -0
- data/install.rb +2 -2
- data/lib/new_relic/agent.rb +34 -1
- data/lib/new_relic/agent/agent.rb +34 -25
- data/lib/new_relic/agent/browser_monitoring.rb +111 -0
- data/lib/new_relic/agent/error_collector.rb +4 -4
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +3 -3
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +5 -7
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +8 -8
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/memcache.rb +1 -1
- data/lib/new_relic/agent/instrumentation/merb/controller.rb +1 -1
- data/lib/new_relic/agent/instrumentation/merb/errors.rb +1 -1
- data/lib/new_relic/agent/instrumentation/metric_frame.rb +1 -0
- data/lib/new_relic/agent/instrumentation/queue_time.rb +26 -26
- data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails/errors.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +2 -2
- data/lib/new_relic/agent/instrumentation/sinatra.rb +1 -1
- data/lib/new_relic/agent/method_tracer.rb +15 -15
- data/lib/new_relic/agent/shim_agent.rb +2 -0
- data/lib/new_relic/agent/stats_engine/metric_stats.rb +3 -3
- data/lib/new_relic/agent/stats_engine/samplers.rb +2 -2
- data/lib/new_relic/agent/stats_engine/transactions.rb +2 -1
- data/lib/new_relic/agent/transaction_sample_builder.rb +101 -0
- data/lib/new_relic/agent/transaction_sampler.rb +299 -251
- data/lib/new_relic/control.rb +2 -2
- data/lib/new_relic/control/class_methods.rb +0 -5
- data/lib/new_relic/control/configuration.rb +4 -3
- data/lib/new_relic/control/frameworks/rails.rb +9 -12
- data/lib/new_relic/control/instance_methods.rb +2 -2
- data/lib/new_relic/control/instrumentation.rb +1 -1
- data/lib/new_relic/control/server_methods.rb +2 -2
- data/lib/new_relic/delayed_job_injection.rb +1 -1
- data/lib/new_relic/local_environment.rb +7 -7
- data/lib/new_relic/rack/browser_monitoring.rb +61 -0
- data/lib/new_relic/stats.rb +6 -6
- data/lib/new_relic/version.rb +4 -4
- data/newrelic.yml +19 -0
- data/newrelic_rpm.gemspec +9 -4
- data/test/active_record_fixtures.rb +5 -5
- data/test/config/test_control.rb +3 -3
- data/test/new_relic/agent/agent/connect_test.rb +27 -6
- data/test/new_relic/agent/agent/start_test.rb +13 -13
- data/test/new_relic/agent/agent/start_worker_thread_test.rb +8 -8
- data/test/new_relic/agent/agent_test.rb +85 -0
- data/test/new_relic/agent/agent_test_controller.rb +9 -9
- data/test/new_relic/agent/agent_test_controller_test.rb +37 -37
- data/test/new_relic/agent/browser_monitoring_test.rb +124 -0
- data/test/new_relic/agent/busy_calculator_test.rb +7 -7
- data/test/new_relic/agent/error_collector/notice_error_test.rb +9 -9
- data/test/new_relic/agent/error_collector_test.rb +54 -54
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +69 -69
- data/test/new_relic/agent/instrumentation/controller_instrumentation_test.rb +36 -0
- data/test/new_relic/agent/instrumentation/metric_frame_test.rb +3 -3
- data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +11 -11
- data/test/new_relic/agent/instrumentation/queue_time_test.rb +38 -35
- data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +18 -18
- data/test/new_relic/agent/memcache_instrumentation_test.rb +12 -12
- data/test/new_relic/agent/method_tracer/class_methods/add_method_tracer_test.rb +1 -1
- data/test/new_relic/agent/method_tracer/instance_methods/trace_execution_scoped_test.rb +16 -15
- data/test/new_relic/agent/method_tracer_test.rb +60 -60
- data/test/new_relic/agent/mock_scope_listener.rb +8 -8
- data/test/new_relic/agent/rpm_agent_test.rb +26 -26
- data/test/new_relic/agent/stats_engine/metric_stats_test.rb +17 -17
- data/test/new_relic/agent/stats_engine/samplers_test.rb +4 -4
- data/test/new_relic/agent/stats_engine/stats_engine_test.rb +51 -51
- data/test/new_relic/agent/transaction_sample_builder_test.rb +36 -36
- data/test/new_relic/agent/transaction_sampler_test.rb +727 -178
- data/test/new_relic/agent/worker_loop_test.rb +4 -4
- data/test/new_relic/collection_helper_test.rb +15 -15
- data/test/new_relic/command/deployments_test.rb +5 -5
- data/test/new_relic/control_test.rb +25 -25
- data/test/new_relic/local_environment_test.rb +11 -11
- data/test/new_relic/metric_spec_test.rb +21 -21
- data/test/new_relic/rack/episodes_test.rb +35 -35
- data/test/new_relic/stats_test.rb +61 -43
- data/test/new_relic/transaction_sample_subtest_test.rb +15 -15
- data/test/new_relic/transaction_sample_test.rb +25 -25
- data/test/new_relic/version_number_test.rb +11 -11
- data/test/test_contexts.rb +7 -7
- data/test/test_helper.rb +6 -6
- data/ui/helpers/developer_mode_helper.rb +67 -67
- data/ui/helpers/google_pie_chart.rb +4 -4
- data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb +4 -4
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/action_mailer.rb +3 -3
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_merchant.rb +7 -7
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_record.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/apdex.rb +9 -9
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/background_transaction.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/client.rb +8 -8
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller.rb +9 -9
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_cpu.rb +4 -4
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_ext.rb +2 -2
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database.rb +8 -8
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database_pool.rb +3 -3
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net.rb +6 -6
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net_parser.rb +3 -3
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/external.rb +2 -2
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/frontend.rb +6 -6
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/gc.rb +2 -2
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/hibernate_session.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java.rb +4 -4
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java_parser.rb +3 -3
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp.rb +4 -4
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp_tag.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/mem_cache.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/metric_parser.rb +21 -21
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/orm.rb +2 -2
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/other_transaction.rb +6 -6
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet.rb +2 -2
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_context_listener.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_filter.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr.rb +3 -3
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr_request_handler.rb +1 -1
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring.rb +8 -8
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_action.rb +3 -3
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_result.rb +3 -3
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/view.rb +5 -5
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_transaction.rb +20 -20
- metadata +15 -9
- data/lib/new_relic/agent/instrumentation/sequel.rb +0 -109
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','test_helper'))
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','test_helper'))
|
2
2
|
class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::Unit::TestCase
|
3
3
|
require 'active_record_fixtures'
|
4
4
|
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
@@ -12,7 +12,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
12
12
|
puts e
|
13
13
|
puts e.backtrace.join("\n")
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def teardown
|
17
17
|
super
|
18
18
|
ActiveRecordFixtures.teardown
|
@@ -24,16 +24,16 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
24
24
|
# the active record instrumentation is not loading for whichever #
|
25
25
|
# version of rails you're testing at the moment. #
|
26
26
|
#####################################################################
|
27
|
-
|
27
|
+
|
28
28
|
def test_agent_setup
|
29
29
|
assert NewRelic::Agent.instance.class == NewRelic::Agent::Agent
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
def test_finder
|
33
33
|
ActiveRecordFixtures::Order.create :id => 0, :name => 'jeff'
|
34
|
-
|
34
|
+
|
35
35
|
find_metric = "ActiveRecord/ActiveRecordFixtures::Order/find"
|
36
|
-
|
36
|
+
|
37
37
|
assert_calls_metrics(find_metric) do
|
38
38
|
ActiveRecordFixtures::Order.find(:all)
|
39
39
|
check_metric_count(find_metric, 1)
|
@@ -48,7 +48,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
48
48
|
end
|
49
49
|
check_metric_count(find_metric, 3)
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
# multiple duplicate find calls should only cause metric trigger on the first
|
53
53
|
# call. the others are ignored.
|
54
54
|
def test_query_cache
|
@@ -61,13 +61,13 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
61
61
|
assert_calls_metrics(find_metric) do
|
62
62
|
ActiveRecordFixtures::Order.find(:all)
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
check_metric_count(find_metric, 1)
|
66
66
|
|
67
67
|
assert_calls_metrics(find_metric) do
|
68
68
|
10.times { ActiveRecordFixtures::Order.find m.id }
|
69
69
|
end
|
70
|
-
check_metric_count(find_metric, 2)
|
70
|
+
check_metric_count(find_metric, 2)
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
@@ -80,8 +80,8 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
80
80
|
ActiveRecord/find
|
81
81
|
ActiveRecord/ActiveRecordFixtures::Order/find
|
82
82
|
Database/SQL/insert]
|
83
|
-
|
84
|
-
if NewRelic::Control.instance.rails_version < '2.1.0'
|
83
|
+
|
84
|
+
if NewRelic::Control.instance.rails_version < '2.1.0'
|
85
85
|
expected += %W[ActiveRecord/save ActiveRecord/ActiveRecordFixtures::Order/save]
|
86
86
|
end
|
87
87
|
|
@@ -92,7 +92,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
92
92
|
m.save!
|
93
93
|
end
|
94
94
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
95
|
-
|
95
|
+
|
96
96
|
compare_metrics expected, metrics
|
97
97
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/find", 1)
|
98
98
|
# zero because jruby uses a different mysql adapter
|
@@ -111,10 +111,10 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
111
111
|
ActiveRecord/create
|
112
112
|
ActiveRecord/ActiveRecordFixtures::Order/create]
|
113
113
|
|
114
|
-
if NewRelic::Control.instance.rails_version < '2.1.0'
|
114
|
+
if NewRelic::Control.instance.rails_version < '2.1.0'
|
115
115
|
expected += %W[ActiveRecord/save ActiveRecord/ActiveRecordFixtures::Order/save]
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
assert_calls_metrics(*expected) do
|
119
119
|
m = ActiveRecordFixtures::Order.create :id => 0, :name => 'jeff'
|
120
120
|
m = ActiveRecordFixtures::Order.find(m.id)
|
@@ -122,18 +122,18 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
122
122
|
m.save!
|
123
123
|
end
|
124
124
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
125
|
-
|
125
|
+
|
126
126
|
compare_metrics expected, metrics
|
127
127
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/find", 1)
|
128
128
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/create", 1)
|
129
129
|
end
|
130
130
|
|
131
|
-
|
131
|
+
|
132
132
|
def test_metric_names_standard
|
133
133
|
# fails due to a bug in rails 3 - log does not provide the correct
|
134
134
|
# transaction type - it returns 'SQL' instead of 'Foo Create', for example.
|
135
135
|
return if rails3? || defined?(JRuby) || isSqlite?
|
136
|
-
|
136
|
+
|
137
137
|
expected = %W[
|
138
138
|
ActiveRecord/all
|
139
139
|
ActiveRecord/find
|
@@ -142,24 +142,24 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
142
142
|
Database/SQL/other
|
143
143
|
ActiveRecord/ActiveRecordFixtures::Order/create]
|
144
144
|
|
145
|
-
if NewRelic::Control.instance.rails_version < '2.1.0'
|
145
|
+
if NewRelic::Control.instance.rails_version < '2.1.0'
|
146
146
|
expected += %W[ActiveRecord/save ActiveRecord/ActiveRecordFixtures::Order/save]
|
147
147
|
end
|
148
|
-
|
148
|
+
|
149
149
|
assert_calls_metrics(*expected) do
|
150
150
|
m = ActiveRecordFixtures::Order.create :id => 0, :name => 'jeff'
|
151
151
|
m = ActiveRecordFixtures::Order.find(m.id)
|
152
152
|
m.id = 999
|
153
153
|
m.save!
|
154
154
|
end
|
155
|
-
|
155
|
+
|
156
156
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
157
|
-
|
157
|
+
|
158
158
|
compare_metrics expected, metrics
|
159
159
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/find", 1)
|
160
|
-
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/create", 1)
|
160
|
+
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/create", 1)
|
161
161
|
end
|
162
|
-
|
162
|
+
|
163
163
|
def test_join_metrics_jruby
|
164
164
|
return unless defined?(JRuby)
|
165
165
|
return if rails3?
|
@@ -174,7 +174,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
174
174
|
ActiveRecord/ActiveRecordFixtures::Order/find
|
175
175
|
ActiveRecord/ActiveRecordFixtures::Shipment/find
|
176
176
|
]
|
177
|
-
|
177
|
+
|
178
178
|
assert_calls_metrics(*expected_metrics) do
|
179
179
|
m = ActiveRecordFixtures::Order.create :name => 'jeff'
|
180
180
|
m = ActiveRecordFixtures::Order.find(m.id)
|
@@ -182,16 +182,16 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
182
182
|
m.shipments.to_a
|
183
183
|
m.destroy
|
184
184
|
end
|
185
|
-
|
185
|
+
|
186
186
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
187
|
-
|
187
|
+
|
188
188
|
compare_metrics expected_metrics, metrics
|
189
|
-
|
189
|
+
|
190
190
|
check_metric_time('ActiveRecord/all', NewRelic::Agent.get_stats("ActiveRecord/all").total_exclusive_time, 0)
|
191
191
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/find", 1)
|
192
192
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Shipment/find", 1)
|
193
193
|
check_metric_count("Database/SQL/insert", 3)
|
194
|
-
check_metric_count("Database/SQL/delete", 1)
|
194
|
+
check_metric_count("Database/SQL/delete", 1)
|
195
195
|
end
|
196
196
|
|
197
197
|
def test_join_metrics_sqlite
|
@@ -212,7 +212,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
212
212
|
ActiveRecord/ActiveRecordFixtures::Shipment/create
|
213
213
|
ActiveRecord/ActiveRecordFixtures::Order/create
|
214
214
|
]
|
215
|
-
|
215
|
+
|
216
216
|
assert_calls_metrics(*expected_metrics) do
|
217
217
|
m = ActiveRecordFixtures::Order.create :name => 'jeff'
|
218
218
|
m = ActiveRecordFixtures::Order.find(m.id)
|
@@ -220,7 +220,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
220
220
|
m.shipments.to_a
|
221
221
|
m.destroy
|
222
222
|
end
|
223
|
-
|
223
|
+
|
224
224
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
225
225
|
compare_metrics expected_metrics, metrics
|
226
226
|
if !(defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION =~ /Enterprise Edition/)
|
@@ -229,8 +229,8 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
229
229
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/find", 1)
|
230
230
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Shipment/find", 1)
|
231
231
|
check_metric_count("Database/SQL/insert", 3)
|
232
|
-
check_metric_count("Database/SQL/delete", 1)
|
233
|
-
end
|
232
|
+
check_metric_count("Database/SQL/delete", 1)
|
233
|
+
end
|
234
234
|
|
235
235
|
def test_join_metrics_standard
|
236
236
|
return if (defined?(Rails) && Rails.respond_to?(:version) && Rails.version.to_i == 3)
|
@@ -245,21 +245,21 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
245
245
|
ActiveRecord/find
|
246
246
|
ActiveRecord/ActiveRecordFixtures::Order/find
|
247
247
|
ActiveRecord/ActiveRecordFixtures::Shipment/find
|
248
|
-
Database/SQL/other
|
248
|
+
Database/SQL/other
|
249
249
|
Database/SQL/show
|
250
250
|
ActiveRecord/create
|
251
251
|
ActiveRecord/ActiveRecordFixtures::Shipment/create
|
252
252
|
ActiveRecord/ActiveRecordFixtures::Order/create
|
253
|
-
]
|
254
|
-
|
253
|
+
]
|
254
|
+
|
255
255
|
assert_calls_metrics(*expected_metrics) do
|
256
256
|
m = ActiveRecordFixtures::Order.create :name => 'jeff'
|
257
257
|
m = ActiveRecordFixtures::Order.find(m.id)
|
258
258
|
s = m.shipments.create
|
259
259
|
m.shipments.to_a
|
260
260
|
m.destroy
|
261
|
-
end
|
262
|
-
|
261
|
+
end
|
262
|
+
|
263
263
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
264
264
|
|
265
265
|
compare_metrics expected_metrics, metrics
|
@@ -269,14 +269,14 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
269
269
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Order/find", 1)
|
270
270
|
check_metric_count("ActiveRecord/ActiveRecordFixtures::Shipment/find", 1)
|
271
271
|
check_metric_count("Database/SQL/insert", 1)
|
272
|
-
check_metric_count("Database/SQL/delete", 1)
|
272
|
+
check_metric_count("Database/SQL/delete", 1)
|
273
273
|
end
|
274
274
|
|
275
275
|
def test_direct_sql
|
276
276
|
assert_nil NewRelic::Agent::Instrumentation::MetricFrame.current
|
277
|
-
assert_nil NewRelic::Agent.instance.stats_engine.scope_name
|
277
|
+
assert_nil NewRelic::Agent.instance.stats_engine.scope_name
|
278
278
|
assert_equal 0, NewRelic::Agent.instance.stats_engine.metrics.size, NewRelic::Agent.instance.stats_engine.metrics.inspect
|
279
|
-
|
279
|
+
|
280
280
|
expected_metrics = %W[
|
281
281
|
ActiveRecord/all
|
282
282
|
Database/SQL/select
|
@@ -285,10 +285,10 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
285
285
|
assert_calls_unscoped_metrics(*expected_metrics) do
|
286
286
|
ActiveRecordFixtures::Order.connection.select_rows "select * from #{ActiveRecordFixtures::Order.table_name}"
|
287
287
|
end
|
288
|
-
|
288
|
+
|
289
289
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
290
290
|
compare_metrics(expected_metrics, metrics)
|
291
|
-
|
291
|
+
|
292
292
|
check_unscoped_metric_count('Database/SQL/select', 1)
|
293
293
|
|
294
294
|
end
|
@@ -301,22 +301,22 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
301
301
|
assert_calls_unscoped_metrics(*expected_metrics) do
|
302
302
|
ActiveRecordFixtures::Order.connection.execute "begin"
|
303
303
|
end
|
304
|
-
|
304
|
+
|
305
305
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
306
|
-
|
306
|
+
|
307
307
|
compare_metrics expected_metrics, metrics
|
308
308
|
check_unscoped_metric_count('Database/SQL/other', 1)
|
309
309
|
end
|
310
310
|
|
311
311
|
def test_show_sql
|
312
312
|
return if isSqlite?
|
313
|
-
|
313
|
+
|
314
314
|
expected_metrics = %W[ActiveRecord/all Database/SQL/show]
|
315
|
-
|
315
|
+
|
316
316
|
assert_calls_metrics(*expected_metrics) do
|
317
317
|
ActiveRecordFixtures::Order.connection.execute "show tables"
|
318
318
|
end
|
319
|
-
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
319
|
+
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
320
320
|
compare_metrics expected_metrics, metrics
|
321
321
|
check_unscoped_metric_count('Database/SQL/show', 1)
|
322
322
|
end
|
@@ -337,7 +337,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
337
337
|
ActiveRecordFixtures::Order.add_delay
|
338
338
|
ActiveRecordFixtures::Order.find(:all)
|
339
339
|
end
|
340
|
-
|
340
|
+
|
341
341
|
# that's a mouthful. perhaps we should ponder our API.
|
342
342
|
segment = NewRelic::Agent.instance.transaction_sampler.last_sample.root_segment.called_segments.first.called_segments.first.called_segments.first
|
343
343
|
regex = /^SELECT (["`]?#{ActiveRecordFixtures::Order.table_name}["`]?.)?\* FROM ["`]?#{ActiveRecordFixtures::Order.table_name}["`]?$/
|
@@ -350,10 +350,10 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
350
350
|
end
|
351
351
|
sample = NewRelic::Agent.instance.transaction_sampler.last_sample
|
352
352
|
assert_not_nil sample
|
353
|
-
|
353
|
+
|
354
354
|
includes_gc = false
|
355
355
|
sample.each_segment {|s| includes_gc ||= s.metric_name =~ /GC/ }
|
356
|
-
|
356
|
+
|
357
357
|
assert_equal (includes_gc ? 4 : 3), sample.count_segments, sample.to_s
|
358
358
|
|
359
359
|
sql_segment = sample.root_segment.called_segments.first.called_segments.first.called_segments.first
|
@@ -366,7 +366,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
366
366
|
explanations = sql_segment.params[:explanation]
|
367
367
|
if isMysql? || isPostgres?
|
368
368
|
assert_not_nil explanations, "No explains in segment: #{sql_segment}"
|
369
|
-
assert_equal 1, explanations.size,"No explains in segment: #{sql_segment}"
|
369
|
+
assert_equal 1, explanations.size,"No explains in segment: #{sql_segment}"
|
370
370
|
assert_equal 1, explanations.first.size
|
371
371
|
end
|
372
372
|
end
|
@@ -378,18 +378,18 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
378
378
|
ActiveRecordFixtures::Order.add_delay
|
379
379
|
ActiveRecordFixtures::Order.find(:all)
|
380
380
|
end
|
381
|
-
|
381
|
+
|
382
382
|
sample = NewRelic::Agent.instance.transaction_sampler.last_sample
|
383
|
-
|
383
|
+
|
384
384
|
sample = sample.prepare_to_send(:record_sql => :obfuscated, :explain_sql => 0.0)
|
385
385
|
segment = sample.root_segment.called_segments.first.called_segments.first.called_segments.first
|
386
386
|
explanations = segment.params[:explanation]
|
387
387
|
assert_not_nil explanations, "No explains in segment: #{segment}"
|
388
|
-
assert_equal 1, explanations.size,"No explains in segment: #{segment}"
|
388
|
+
assert_equal 1, explanations.size,"No explains in segment: #{segment}"
|
389
389
|
assert_equal 1, explanations.first.size
|
390
390
|
|
391
391
|
assert_equal "1;SIMPLE;#{ActiveRecordFixtures::Order.table_name};ALL;;;;;1;", explanations.first.first.join(';')
|
392
|
-
|
392
|
+
|
393
393
|
s = NewRelic::Agent.get_stats("ActiveRecord/ActiveRecordFixtures::Order/find")
|
394
394
|
assert_equal 1, s.call_count
|
395
395
|
end
|
@@ -403,22 +403,22 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
403
403
|
ActiveRecordFixtures::Order.add_delay
|
404
404
|
ActiveRecordFixtures::Order.find(:all)
|
405
405
|
end
|
406
|
-
|
406
|
+
|
407
407
|
sample = NewRelic::Agent.instance.transaction_sampler.last_sample
|
408
|
-
|
408
|
+
|
409
409
|
sample = sample.prepare_to_send(:record_sql => :obfuscated, :explain_sql => 0.0)
|
410
410
|
segment = sample.root_segment.called_segments.first.called_segments.first.called_segments.first
|
411
411
|
explanations = segment.params[:explanation]
|
412
412
|
|
413
413
|
assert_not_nil explanations, "No explains in segment: #{segment}"
|
414
|
-
assert_equal 1, explanations.size,"No explains in segment: #{segment}"
|
414
|
+
assert_equal 1, explanations.size,"No explains in segment: #{segment}"
|
415
415
|
assert_equal 1, explanations.first.size
|
416
416
|
|
417
417
|
assert_equal Array, explanations.class
|
418
418
|
assert_equal Array, explanations[0].class
|
419
419
|
assert_equal Array, explanations[0][0].class
|
420
|
-
assert_match /Seq Scan on test_data/, explanations[0][0].join(";")
|
421
|
-
|
420
|
+
assert_match /Seq Scan on test_data/, explanations[0][0].join(";")
|
421
|
+
|
422
422
|
s = NewRelic::Agent.get_stats("ActiveRecord/ActiveRecordFixtures::Order/find")
|
423
423
|
assert_equal 1, s.call_count
|
424
424
|
end
|
@@ -430,12 +430,12 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
430
430
|
ActiveRecordFixtures::Order.add_delay
|
431
431
|
ActiveRecordFixtures::Order.find(:all)
|
432
432
|
end
|
433
|
-
|
433
|
+
|
434
434
|
sample = NewRelic::Agent.instance.transaction_sampler.last_sample
|
435
|
-
|
435
|
+
|
436
436
|
sample = sample.prepare_to_send(:record_sql => :obfuscated, :explain_sql => 0.0)
|
437
437
|
segment = sample.root_segment.called_segments.first.called_segments.first.called_segments.first
|
438
|
-
|
438
|
+
|
439
439
|
s = NewRelic::Agent.get_stats("ActiveRecord/ActiveRecordFixtures::Order/find")
|
440
440
|
assert_equal 1, s.call_count
|
441
441
|
end
|
@@ -447,9 +447,9 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
447
447
|
end
|
448
448
|
def test_named_scope
|
449
449
|
ActiveRecordFixtures::Order.create :name => 'Jeff'
|
450
|
-
|
450
|
+
|
451
451
|
find_metric = "ActiveRecord/ActiveRecordFixtures::Order/find"
|
452
|
-
|
452
|
+
|
453
453
|
check_metric_count(find_metric, 0)
|
454
454
|
assert_calls_metrics(find_metric) do
|
455
455
|
x = ActiveRecordFixtures::Order.jeffs.find(:all)
|
@@ -479,16 +479,16 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
479
479
|
metrics = NewRelic::Agent.instance.stats_engine.metrics
|
480
480
|
compare_metrics expected_metrics, metrics
|
481
481
|
check_metric_count('Database/SQL/select', 1)
|
482
|
-
check_metric_count('ActiveRecord/all', 1)
|
482
|
+
check_metric_count('ActiveRecord/all', 1)
|
483
483
|
end
|
484
484
|
|
485
485
|
def test_rescue_handling
|
486
486
|
# Not sure why we get a transaction error with sqlite
|
487
487
|
return if isSqlite?
|
488
|
-
|
488
|
+
|
489
489
|
begin
|
490
490
|
ActiveRecordFixtures::Order.transaction do
|
491
|
-
raise ActiveRecord::ActiveRecordError.new('preserve-me!')
|
491
|
+
raise ActiveRecord::ActiveRecordError.new('preserve-me!')
|
492
492
|
end
|
493
493
|
rescue ActiveRecord::ActiveRecordError => e
|
494
494
|
assert_equal 'preserve-me!', e.message
|
@@ -505,7 +505,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
505
505
|
ActiveRecordFixtures::Order.configurations[RAILS_ENV]['adapter'] =~ /postgres/i
|
506
506
|
end
|
507
507
|
def isMysql?
|
508
|
-
ActiveRecordFixtures::Order.connection.class.name =~ /mysql/i
|
508
|
+
ActiveRecordFixtures::Order.connection.class.name =~ /mysql/i
|
509
509
|
end
|
510
510
|
|
511
511
|
def isSqlite?
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper'))
|
2
|
+
class NewRelic::Agent::Instrumentation::ControllerInstrumentationTest < Test::Unit::TestCase
|
3
|
+
require 'new_relic/agent/instrumentation/controller_instrumentation'
|
4
|
+
class TestObject
|
5
|
+
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_detect_upstream_wait_basic
|
9
|
+
start_time = Time.now
|
10
|
+
object = TestObject.new
|
11
|
+
# should return the start time above by default
|
12
|
+
object.expects(:newrelic_request_headers).returns({:request => 'headers'}).twice
|
13
|
+
object.expects(:parse_frontend_headers).with({:request => 'headers'}).returns(start_time)
|
14
|
+
assert_equal(start_time, object.send(:_detect_upstream_wait, start_time))
|
15
|
+
assert_equal(0.0, Thread.current[:newrelic_queue_time])
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_detect_upstream_wait_with_upstream
|
19
|
+
start_time = Time.now
|
20
|
+
runs_at = start_time + 1
|
21
|
+
object = TestObject.new
|
22
|
+
object.expects(:newrelic_request_headers).returns(true).twice
|
23
|
+
object.expects(:parse_frontend_headers).returns(start_time)
|
24
|
+
assert_equal(start_time, object.send(:_detect_upstream_wait, runs_at))
|
25
|
+
assert_equal(1.0, Thread.current[:newrelic_queue_time])
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_detect_upstream_wait_swallows_errors
|
29
|
+
start_time = Time.now
|
30
|
+
object = TestObject.new
|
31
|
+
# should return the start time above when an error is raised
|
32
|
+
object.expects(:newrelic_request_headers).returns({:request => 'headers'}).twice
|
33
|
+
object.expects(:parse_frontend_headers).with({:request => 'headers'}).raises("an error")
|
34
|
+
assert_equal(start_time, object.send(:_detect_upstream_wait, start_time))
|
35
|
+
end
|
36
|
+
end
|