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.

Files changed (123) hide show
  1. data/CHANGELOG +8 -0
  2. data/README.rdoc +2 -0
  3. data/install.rb +2 -2
  4. data/lib/new_relic/agent.rb +34 -1
  5. data/lib/new_relic/agent/agent.rb +34 -25
  6. data/lib/new_relic/agent/browser_monitoring.rb +111 -0
  7. data/lib/new_relic/agent/error_collector.rb +4 -4
  8. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +3 -3
  9. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +5 -7
  10. data/lib/new_relic/agent/instrumentation/data_mapper.rb +8 -8
  11. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +1 -1
  12. data/lib/new_relic/agent/instrumentation/memcache.rb +1 -1
  13. data/lib/new_relic/agent/instrumentation/merb/controller.rb +1 -1
  14. data/lib/new_relic/agent/instrumentation/merb/errors.rb +1 -1
  15. data/lib/new_relic/agent/instrumentation/metric_frame.rb +1 -0
  16. data/lib/new_relic/agent/instrumentation/queue_time.rb +26 -26
  17. data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +1 -1
  18. data/lib/new_relic/agent/instrumentation/rails/errors.rb +1 -1
  19. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +2 -2
  20. data/lib/new_relic/agent/instrumentation/sinatra.rb +1 -1
  21. data/lib/new_relic/agent/method_tracer.rb +15 -15
  22. data/lib/new_relic/agent/shim_agent.rb +2 -0
  23. data/lib/new_relic/agent/stats_engine/metric_stats.rb +3 -3
  24. data/lib/new_relic/agent/stats_engine/samplers.rb +2 -2
  25. data/lib/new_relic/agent/stats_engine/transactions.rb +2 -1
  26. data/lib/new_relic/agent/transaction_sample_builder.rb +101 -0
  27. data/lib/new_relic/agent/transaction_sampler.rb +299 -251
  28. data/lib/new_relic/control.rb +2 -2
  29. data/lib/new_relic/control/class_methods.rb +0 -5
  30. data/lib/new_relic/control/configuration.rb +4 -3
  31. data/lib/new_relic/control/frameworks/rails.rb +9 -12
  32. data/lib/new_relic/control/instance_methods.rb +2 -2
  33. data/lib/new_relic/control/instrumentation.rb +1 -1
  34. data/lib/new_relic/control/server_methods.rb +2 -2
  35. data/lib/new_relic/delayed_job_injection.rb +1 -1
  36. data/lib/new_relic/local_environment.rb +7 -7
  37. data/lib/new_relic/rack/browser_monitoring.rb +61 -0
  38. data/lib/new_relic/stats.rb +6 -6
  39. data/lib/new_relic/version.rb +4 -4
  40. data/newrelic.yml +19 -0
  41. data/newrelic_rpm.gemspec +9 -4
  42. data/test/active_record_fixtures.rb +5 -5
  43. data/test/config/test_control.rb +3 -3
  44. data/test/new_relic/agent/agent/connect_test.rb +27 -6
  45. data/test/new_relic/agent/agent/start_test.rb +13 -13
  46. data/test/new_relic/agent/agent/start_worker_thread_test.rb +8 -8
  47. data/test/new_relic/agent/agent_test.rb +85 -0
  48. data/test/new_relic/agent/agent_test_controller.rb +9 -9
  49. data/test/new_relic/agent/agent_test_controller_test.rb +37 -37
  50. data/test/new_relic/agent/browser_monitoring_test.rb +124 -0
  51. data/test/new_relic/agent/busy_calculator_test.rb +7 -7
  52. data/test/new_relic/agent/error_collector/notice_error_test.rb +9 -9
  53. data/test/new_relic/agent/error_collector_test.rb +54 -54
  54. data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +69 -69
  55. data/test/new_relic/agent/instrumentation/controller_instrumentation_test.rb +36 -0
  56. data/test/new_relic/agent/instrumentation/metric_frame_test.rb +3 -3
  57. data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +11 -11
  58. data/test/new_relic/agent/instrumentation/queue_time_test.rb +38 -35
  59. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +18 -18
  60. data/test/new_relic/agent/memcache_instrumentation_test.rb +12 -12
  61. data/test/new_relic/agent/method_tracer/class_methods/add_method_tracer_test.rb +1 -1
  62. data/test/new_relic/agent/method_tracer/instance_methods/trace_execution_scoped_test.rb +16 -15
  63. data/test/new_relic/agent/method_tracer_test.rb +60 -60
  64. data/test/new_relic/agent/mock_scope_listener.rb +8 -8
  65. data/test/new_relic/agent/rpm_agent_test.rb +26 -26
  66. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +17 -17
  67. data/test/new_relic/agent/stats_engine/samplers_test.rb +4 -4
  68. data/test/new_relic/agent/stats_engine/stats_engine_test.rb +51 -51
  69. data/test/new_relic/agent/transaction_sample_builder_test.rb +36 -36
  70. data/test/new_relic/agent/transaction_sampler_test.rb +727 -178
  71. data/test/new_relic/agent/worker_loop_test.rb +4 -4
  72. data/test/new_relic/collection_helper_test.rb +15 -15
  73. data/test/new_relic/command/deployments_test.rb +5 -5
  74. data/test/new_relic/control_test.rb +25 -25
  75. data/test/new_relic/local_environment_test.rb +11 -11
  76. data/test/new_relic/metric_spec_test.rb +21 -21
  77. data/test/new_relic/rack/episodes_test.rb +35 -35
  78. data/test/new_relic/stats_test.rb +61 -43
  79. data/test/new_relic/transaction_sample_subtest_test.rb +15 -15
  80. data/test/new_relic/transaction_sample_test.rb +25 -25
  81. data/test/new_relic/version_number_test.rb +11 -11
  82. data/test/test_contexts.rb +7 -7
  83. data/test/test_helper.rb +6 -6
  84. data/ui/helpers/developer_mode_helper.rb +67 -67
  85. data/ui/helpers/google_pie_chart.rb +4 -4
  86. data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb +4 -4
  87. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/action_mailer.rb +3 -3
  88. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_merchant.rb +7 -7
  89. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_record.rb +1 -1
  90. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/apdex.rb +9 -9
  91. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/background_transaction.rb +1 -1
  92. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/client.rb +8 -8
  93. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller.rb +9 -9
  94. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_cpu.rb +4 -4
  95. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_ext.rb +2 -2
  96. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database.rb +8 -8
  97. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database_pool.rb +3 -3
  98. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net.rb +6 -6
  99. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net_parser.rb +3 -3
  100. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/external.rb +2 -2
  101. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/frontend.rb +6 -6
  102. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/gc.rb +2 -2
  103. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/hibernate_session.rb +1 -1
  104. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java.rb +4 -4
  105. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java_parser.rb +3 -3
  106. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp.rb +4 -4
  107. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp_tag.rb +1 -1
  108. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/mem_cache.rb +1 -1
  109. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/metric_parser.rb +21 -21
  110. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/orm.rb +2 -2
  111. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/other_transaction.rb +6 -6
  112. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet.rb +2 -2
  113. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_context_listener.rb +1 -1
  114. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_filter.rb +1 -1
  115. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr.rb +3 -3
  116. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr_request_handler.rb +1 -1
  117. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring.rb +8 -8
  118. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_action.rb +3 -3
  119. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_result.rb +3 -3
  120. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/view.rb +5 -5
  121. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_transaction.rb +20 -20
  122. metadata +15 -9
  123. 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