ghazel-newrelic_rpm 3.4.0.2 → 3.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (231) hide show
  1. data/.gitignore +21 -0
  2. data/.project +23 -0
  3. data/.travis.yml +9 -0
  4. data/CHANGELOG +180 -1
  5. data/GUIDELINES_FOR_CONTRIBUTING.md +73 -0
  6. data/Gemfile +16 -0
  7. data/InstallationNotes.md +15 -0
  8. data/LICENSE +1 -1
  9. data/{README.rdoc → README.md} +71 -55
  10. data/Rakefile +54 -0
  11. data/config.dot +290 -0
  12. data/config/database.yml +5 -0
  13. data/init.rb +38 -0
  14. data/lib/new_relic/agent.rb +9 -4
  15. data/lib/new_relic/agent/agent.rb +189 -230
  16. data/lib/new_relic/agent/beacon_configuration.rb +34 -48
  17. data/lib/new_relic/agent/browser_monitoring.rb +108 -61
  18. data/lib/new_relic/agent/busy_calculator.rb +12 -4
  19. data/lib/new_relic/agent/configuration.rb +49 -0
  20. data/lib/new_relic/agent/configuration/defaults.rb +89 -0
  21. data/lib/new_relic/agent/configuration/environment_source.rb +56 -0
  22. data/lib/new_relic/agent/configuration/manager.rb +116 -0
  23. data/lib/new_relic/agent/configuration/server_source.rb +27 -0
  24. data/lib/new_relic/agent/configuration/yaml_source.rb +61 -0
  25. data/lib/new_relic/agent/database.rb +37 -22
  26. data/lib/new_relic/agent/error_collector.rb +47 -43
  27. data/lib/new_relic/agent/instrumentation/active_record.rb +1 -5
  28. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +27 -6
  29. data/lib/new_relic/agent/instrumentation/data_mapper.rb +2 -10
  30. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +1 -1
  31. data/lib/new_relic/agent/instrumentation/memcache.rb +2 -2
  32. data/lib/new_relic/agent/instrumentation/metric_frame.rb +4 -14
  33. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +4 -18
  34. data/lib/new_relic/agent/instrumentation/rack.rb +1 -1
  35. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +3 -3
  36. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +2 -2
  37. data/lib/new_relic/agent/instrumentation/rails3/errors.rb +5 -1
  38. data/lib/new_relic/agent/instrumentation/resque.rb +1 -1
  39. data/lib/new_relic/agent/instrumentation/sinatra.rb +14 -10
  40. data/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb +4 -3
  41. data/lib/new_relic/agent/method_tracer.rb +5 -1
  42. data/lib/new_relic/agent/new_relic_service.rb +231 -61
  43. data/lib/new_relic/agent/pipe_channel_manager.rb +37 -23
  44. data/lib/new_relic/agent/pipe_service.rb +5 -1
  45. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +2 -5
  46. data/lib/new_relic/agent/samplers/memory_sampler.rb +2 -2
  47. data/lib/new_relic/agent/sql_sampler.rb +44 -68
  48. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +40 -24
  49. data/lib/new_relic/agent/stats_engine/metric_stats.rb +89 -14
  50. data/lib/new_relic/agent/stats_engine/samplers.rb +7 -3
  51. data/lib/new_relic/agent/stats_engine/transactions.rb +19 -11
  52. data/lib/new_relic/agent/thread.rb +27 -0
  53. data/lib/new_relic/agent/thread_profiler.rb +295 -0
  54. data/lib/new_relic/agent/transaction_info.rb +24 -4
  55. data/lib/new_relic/agent/transaction_sample_builder.rb +11 -11
  56. data/lib/new_relic/agent/transaction_sampler.rb +51 -61
  57. data/lib/new_relic/agent/worker_loop.rb +29 -15
  58. data/lib/new_relic/collection_helper.rb +1 -1
  59. data/lib/new_relic/commands/deployments.rb +19 -10
  60. data/lib/new_relic/control.rb +0 -1
  61. data/lib/new_relic/control/class_methods.rb +2 -3
  62. data/lib/new_relic/control/frameworks/rails.rb +24 -18
  63. data/lib/new_relic/control/frameworks/rails3.rb +18 -1
  64. data/lib/new_relic/control/frameworks/ruby.rb +2 -2
  65. data/lib/new_relic/control/instance_methods.rb +36 -53
  66. data/lib/new_relic/control/logging_methods.rb +5 -23
  67. data/lib/new_relic/control/server_methods.rb +11 -13
  68. data/lib/new_relic/delayed_job_injection.rb +1 -1
  69. data/lib/new_relic/helper.rb +13 -0
  70. data/lib/new_relic/language_support.rb +19 -22
  71. data/lib/new_relic/local_environment.rb +2 -3
  72. data/lib/new_relic/metric_data.rb +10 -2
  73. data/lib/new_relic/metric_spec.rb +6 -2
  74. data/lib/new_relic/noticed_error.rb +24 -9
  75. data/lib/new_relic/rack.rb +4 -0
  76. data/lib/new_relic/rack/browser_monitoring.rb +28 -10
  77. data/lib/new_relic/rack/developer_mode.rb +3 -0
  78. data/lib/new_relic/rack/error_collector.rb +56 -0
  79. data/lib/new_relic/transaction_sample.rb +23 -13
  80. data/lib/new_relic/transaction_sample/segment.rb +13 -15
  81. data/lib/new_relic/version.rb +3 -3
  82. data/lib/tasks/tests.rake +8 -8
  83. data/newrelic.yml +15 -32
  84. data/newrelic_rpm.gemspec +158 -38
  85. data/newrelic_rpm.gemspec.erb +55 -0
  86. data/test/config/newrelic.yml +3 -2
  87. data/test/intentional_fail.rb +10 -0
  88. data/test/multiverse/.gitignore +10 -0
  89. data/test/multiverse/README.md +90 -0
  90. data/test/multiverse/Rakefile +17 -0
  91. data/test/multiverse/lib/multiverse/color.rb +13 -0
  92. data/test/multiverse/lib/multiverse/envfile.rb +66 -0
  93. data/test/multiverse/lib/multiverse/environment.rb +16 -0
  94. data/test/multiverse/lib/multiverse/output_collector.rb +29 -0
  95. data/test/multiverse/lib/multiverse/runner.rb +44 -0
  96. data/test/multiverse/lib/multiverse/suite.rb +162 -0
  97. data/test/multiverse/script/run_one +3 -0
  98. data/test/multiverse/script/runner +9 -0
  99. data/test/multiverse/suites/active_record/Envfile +13 -0
  100. data/test/multiverse/suites/active_record/ar_method_aliasing.rb +94 -0
  101. data/test/multiverse/suites/active_record/config/newrelic.yml +22 -0
  102. data/test/multiverse/suites/active_record/encoding_test.rb +26 -0
  103. data/test/multiverse/suites/agent_only/Envfile +3 -0
  104. data/test/multiverse/suites/agent_only/config/newrelic.yml +22 -0
  105. data/test/multiverse/suites/agent_only/http_response_code_test.rb +53 -0
  106. data/test/multiverse/suites/agent_only/marshaling_test.rb +109 -0
  107. data/test/multiverse/suites/agent_only/method_visibility_test.rb +98 -0
  108. data/test/multiverse/suites/agent_only/pipe_manager_test.rb +33 -0
  109. data/test/multiverse/suites/agent_only/service_timeout_test.rb +29 -0
  110. data/test/multiverse/suites/agent_only/test_trace_method_with_punctuation.rb +30 -0
  111. data/test/multiverse/suites/agent_only/test_trace_transaction_with_punctuation.rb +32 -0
  112. data/test/multiverse/suites/agent_only/thread_profiling_test.rb +80 -0
  113. data/test/multiverse/suites/datamapper/Envfile +8 -0
  114. data/test/multiverse/suites/datamapper/config/newrelic.yml +22 -0
  115. data/test/multiverse/suites/datamapper/encoding_test.rb +36 -0
  116. data/test/multiverse/suites/monitor_mode_false/Envfile +2 -0
  117. data/test/multiverse/suites/monitor_mode_false/config/newrelic.yml +25 -0
  118. data/test/multiverse/suites/monitor_mode_false/no_dns_resolv.rb +29 -0
  119. data/test/multiverse/suites/no_load/Envfile +2 -0
  120. data/test/multiverse/suites/no_load/config/newrelic.yml +23 -0
  121. data/test/multiverse/suites/no_load/start_up_test.rb +14 -0
  122. data/test/multiverse/suites/rails_3_error_tracing/Envfile +15 -0
  123. data/test/multiverse/suites/rails_3_error_tracing/config/newrelic.yml +165 -0
  124. data/test/multiverse/suites/rails_3_error_tracing/error_tracing_test.rb +236 -0
  125. data/test/multiverse/suites/rails_3_gc/Envfile +8 -0
  126. data/test/multiverse/suites/rails_3_gc/config/newrelic.yml +167 -0
  127. data/test/multiverse/suites/rails_3_gc/instrumentation_test.rb +92 -0
  128. data/test/multiverse/suites/rails_3_queue_time/Envfile +15 -0
  129. data/test/multiverse/suites/rails_3_queue_time/config/newrelic.yml +165 -0
  130. data/test/multiverse/suites/rails_3_queue_time/queue_time_test.rb +75 -0
  131. data/test/multiverse/suites/rails_3_views/.gitignore +3 -0
  132. data/test/multiverse/suites/rails_3_views/Envfile +16 -0
  133. data/test/multiverse/suites/rails_3_views/app/views/foos/_foo.html.haml +1 -0
  134. data/test/multiverse/suites/rails_3_views/app/views/test/_a_partial.html.erb +1 -0
  135. data/test/multiverse/suites/rails_3_views/app/views/test/_mid_partial.html.erb +1 -0
  136. data/test/multiverse/suites/rails_3_views/app/views/test/_top_partial.html.erb +3 -0
  137. data/test/multiverse/suites/rails_3_views/app/views/test/deep_partial.html.erb +3 -0
  138. data/test/multiverse/suites/rails_3_views/app/views/test/haml_view.html.haml +6 -0
  139. data/test/multiverse/suites/rails_3_views/app/views/test/index.html.erb +4 -0
  140. data/test/multiverse/suites/rails_3_views/config/newrelic.yml +164 -0
  141. data/test/multiverse/suites/rails_3_views/view_instrumentation_test.rb +245 -0
  142. data/test/multiverse/suites/resque/Envfile +21 -0
  143. data/test/multiverse/suites/resque/config/newrelic.yml +22 -0
  144. data/test/multiverse/suites/resque/dump.rdb +0 -0
  145. data/test/multiverse/suites/resque/instrumentation_test.rb +73 -0
  146. data/test/multiverse/suites/rum_auto_instrumentation/Envfile +4 -0
  147. data/test/multiverse/suites/rum_auto_instrumentation/config/newrelic.yml +24 -0
  148. data/test/multiverse/suites/rum_auto_instrumentation/problem_response.html +422 -0
  149. data/test/multiverse/suites/rum_auto_instrumentation/responses/worst_case_small.html +5000 -0
  150. data/test/multiverse/suites/rum_auto_instrumentation/sanity_test.rb +115 -0
  151. data/test/multiverse/suites/sinatra/Envfile +13 -0
  152. data/test/multiverse/suites/sinatra/config/newrelic.yml +24 -0
  153. data/test/multiverse/suites/sinatra/sinatra_metric_explosion_test.rb +76 -0
  154. data/test/multiverse/suites/sinatra/sinatra_routes_test.rb +46 -0
  155. data/test/multiverse/test/multiverse_test.rb +55 -0
  156. data/test/multiverse/test/suite_examples/one/a/Envfile +3 -0
  157. data/test/multiverse/test/suite_examples/one/a/a_test.rb +11 -0
  158. data/test/multiverse/test/suite_examples/one/a/config/newrelic.yml +24 -0
  159. data/test/multiverse/test/suite_examples/one/b/Envfile +3 -0
  160. data/test/multiverse/test/suite_examples/one/b/b_test.rb +11 -0
  161. data/test/multiverse/test/suite_examples/one/b/config/newrelic.yml +24 -0
  162. data/test/multiverse/test/suite_examples/three/a/Envfile +2 -0
  163. data/test/multiverse/test/suite_examples/three/a/fail_test.rb +6 -0
  164. data/test/multiverse/test/suite_examples/three/b/Envfile +2 -0
  165. data/test/multiverse/test/suite_examples/three/b/win_test.rb +6 -0
  166. data/test/multiverse/test/suite_examples/two/a/Envfile +1 -0
  167. data/test/multiverse/test/suite_examples/two/a/fail_test.rb +6 -0
  168. data/test/new_relic/agent/agent/connect_test.rb +134 -164
  169. data/test/new_relic/agent/agent/start_test.rb +111 -81
  170. data/test/new_relic/agent/agent/start_worker_thread_test.rb +6 -33
  171. data/test/new_relic/agent/agent_test.rb +88 -9
  172. data/test/new_relic/agent/agent_test_controller.rb +1 -1
  173. data/test/new_relic/agent/agent_test_controller_test.rb +42 -10
  174. data/test/new_relic/agent/beacon_configuration_test.rb +63 -67
  175. data/test/new_relic/agent/browser_monitoring_test.rb +150 -79
  176. data/test/new_relic/agent/configuration/environment_source_test.rb +74 -0
  177. data/test/new_relic/agent/configuration/manager_test.rb +149 -0
  178. data/test/new_relic/agent/configuration/server_source_test.rb +45 -0
  179. data/test/new_relic/agent/configuration/yaml_source_test.rb +56 -0
  180. data/test/new_relic/agent/error_collector/notice_error_test.rb +63 -50
  181. data/test/new_relic/agent/error_collector_test.rb +22 -12
  182. data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +21 -11
  183. data/test/new_relic/agent/instrumentation/metric_frame_test.rb +6 -0
  184. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +2 -2
  185. data/test/new_relic/agent/method_tracer/class_methods/add_method_tracer_test.rb +5 -5
  186. data/test/new_relic/agent/method_tracer_test.rb +6 -6
  187. data/test/new_relic/agent/mock_scope_listener.rb +3 -0
  188. data/test/new_relic/agent/new_relic_service_test.rb +208 -23
  189. data/test/new_relic/agent/pipe_channel_manager_test.rb +34 -17
  190. data/test/new_relic/agent/rpm_agent_test.rb +27 -23
  191. data/test/new_relic/agent/sql_sampler_test.rb +81 -56
  192. data/test/new_relic/agent/stats_engine/metric_stats/harvest_test.rb +3 -20
  193. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +12 -1
  194. data/test/new_relic/agent/stats_engine_test.rb +17 -8
  195. data/test/new_relic/agent/thread_profiler_test.rb +536 -0
  196. data/test/new_relic/agent/thread_test.rb +76 -0
  197. data/test/new_relic/agent/threaded_test.rb +65 -0
  198. data/test/new_relic/agent/transaction_info_test.rb +45 -4
  199. data/test/new_relic/agent/transaction_sample_builder_test.rb +8 -6
  200. data/test/new_relic/agent/transaction_sampler_test.rb +193 -204
  201. data/test/new_relic/agent/worker_loop_test.rb +20 -0
  202. data/test/new_relic/agent_test.rb +69 -41
  203. data/test/new_relic/collection_helper_test.rb +7 -8
  204. data/test/new_relic/command/deployments_test.rb +18 -2
  205. data/test/new_relic/control/frameworks/rails_test.rb +26 -0
  206. data/test/new_relic/control/logging_methods_test.rb +78 -52
  207. data/test/new_relic/control_test.rb +91 -129
  208. data/test/new_relic/fake_collector.rb +103 -31
  209. data/test/new_relic/fake_service.rb +8 -2
  210. data/test/new_relic/load_test.rb +13 -0
  211. data/test/new_relic/local_environment_test.rb +7 -10
  212. data/test/new_relic/metric_data_test.rb +45 -16
  213. data/test/new_relic/noticed_error_test.rb +14 -0
  214. data/test/new_relic/rack/browser_monitoring_test.rb +15 -9
  215. data/test/new_relic/rack/developer_mode_test.rb +13 -7
  216. data/test/new_relic/rack/error_collector_test.rb +74 -0
  217. data/test/new_relic/transaction_sample/segment_test.rb +23 -4
  218. data/test/new_relic/transaction_sample_test.rb +47 -2
  219. data/test/script/build_test_gem.sh +9 -3
  220. data/test/script/ci.sh +48 -21
  221. data/test/script/ci_multiverse_runner.sh +11 -11
  222. data/test/test_helper.rb +37 -18
  223. data/ui/helpers/developer_mode_helper.rb +21 -11
  224. data/ui/views/layouts/newrelic_default.rhtml +1 -0
  225. data/ui/views/newrelic/show_sample.rhtml +1 -1
  226. data/ui/views/newrelic/threads.rhtml +2 -10
  227. data/vendor/gems/metric_parser-0.1.0.pre1/.specification +116 -0
  228. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_init.rb +7 -0
  229. metadata +132 -58
  230. data/lib/new_relic/control/configuration.rb +0 -206
  231. data/test/new_relic/control/configuration_test.rb +0 -77
@@ -0,0 +1,45 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','test_helper'))
2
+ require 'new_relic/agent/configuration/server_source'
3
+
4
+ module NewRelic::Agent::Configuration
5
+ class ServerSourceTest < Test::Unit::TestCase
6
+ def setup
7
+ config = {
8
+ 'agent_config' => {
9
+ 'slow_sql.enabled' => true,
10
+ 'transaction_tracer.transaction_threshold' => 'apdex_f',
11
+ 'transaction_tracer.record_sql' => 'raw',
12
+ 'error_collector.enabled' => true
13
+ },
14
+ 'apdex_t' => 1.0,
15
+ 'collect_errors' => false,
16
+ 'collect_traces' => true
17
+ }
18
+ @source = ServerSource.new(config)
19
+ end
20
+
21
+ def test_should_set_apdex_t
22
+ assert_equal 1.0, @source[:apdex_t]
23
+ end
24
+
25
+ def test_should_set_agent_config_values
26
+ assert_equal 'raw', @source[:'transaction_tracer.record_sql']
27
+ end
28
+
29
+ def test_should_not_dot_the_agent_config_sub_hash
30
+ assert_nil @source[:'agent_config.slow_sql.enabled']
31
+ end
32
+
33
+ def test_should_enable_tracer_as_configured
34
+ assert @source[:'slow_sql.enabled']
35
+ end
36
+
37
+ def test_should_disable_tracer_as_configured
38
+ assert !@source[:'error_collector.enabled']
39
+ end
40
+
41
+ def test_should_ignore_apdex_f_setting_for_transaction_threshold
42
+ assert_equal nil, @source[:'transaction_tracer.transaction_threshold']
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,56 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','test_helper'))
2
+ require 'new_relic/agent/configuration/yaml_source'
3
+
4
+ module NewRelic::Agent::Configuration
5
+ class YamlSourceTest < Test::Unit::TestCase
6
+ def setup
7
+ test_yml_path = File.expand_path(File.join(File.dirname(__FILE__),
8
+ '..','..','..',
9
+ 'config','newrelic.yml'))
10
+ @source = YamlSource.new(test_yml_path, 'test')
11
+ end
12
+
13
+ def test_should_load_given_yaml_file
14
+ assert_equal '127.0.0.1', @source[:api_host]
15
+ end
16
+
17
+ def test_should_apply_erb_transformations
18
+ assert_equal 'heyheyhey', @source[:erb_value]
19
+ assert_equal '', @source[:message]
20
+ assert_equal '', @source[:license_key]
21
+ end
22
+
23
+ def test_config_booleans
24
+ assert_equal true, @source[:tval]
25
+ assert_equal false, @source[:fval]
26
+ assert_nil @source[:not_in_yaml_val]
27
+ assert_equal true, @source[:yval]
28
+ assert_equal 'sure', @source[:sval]
29
+ end
30
+
31
+ def test_appnames
32
+ assert_equal %w[a b c], @source[:app_name]
33
+ end
34
+
35
+ def test_should_load_the_config_for_the_correct_env
36
+ assert_not_equal 'the.wrong.host', @source[:host]
37
+ end
38
+
39
+ def test_should_convert_to_dot_notation
40
+ assert_equal 'raw', @source[:'transaction_tracer.record_sql']
41
+ end
42
+
43
+ def test_should_ignore_apdex_f_setting_for_transaction_threshold
44
+ assert_equal nil, @source[:'transaction_tracer.transaction_threshold']
45
+ end
46
+
47
+ def test_should_correctly_handle_floats
48
+ assert_equal 1.1, @source[:apdex_t]
49
+ end
50
+
51
+ def test_should_log_if_no_file_is_found
52
+ NewRelic::Control.instance.log.expects(:error)
53
+ source = YamlSource.new('no_such_file.yml', 'test')
54
+ end
55
+ end
56
+ end
@@ -57,47 +57,51 @@ class NewRelic::Agent::ErrorCollector::NoticeErrorTest < Test::Unit::TestCase
57
57
  end
58
58
 
59
59
  def test_request_params_from_opts_positive
60
- fake_control = mock('control')
61
- self.expects(:control).returns(fake_control)
62
- fake_control.expects(:capture_params).returns(true)
63
- val = {:request_params => 'foo'}
64
- assert_equal('foo', request_params_from_opts(val))
65
- assert_equal({}, val, "should delete request_params key from hash")
60
+ with_config(:capture_params => true) do
61
+ val = {:request_params => 'foo'}
62
+ assert_equal('foo', request_params_from_opts(val))
63
+ assert_equal({}, val, "should delete request_params key from hash")
64
+ end
66
65
  end
67
66
 
68
67
  def test_request_params_from_opts_negative
69
- fake_control = mock('control')
70
- self.expects(:control).returns(fake_control)
71
- fake_control.expects(:capture_params).returns(false)
72
- val = {:request_params => 'foo'}
73
- assert_equal(nil, request_params_from_opts(val))
74
- assert_equal({}, val, "should delete request_params key from hash")
68
+ with_config(:capture_params => false) do
69
+ val = {:request_params => 'foo'}
70
+ assert_equal(nil, request_params_from_opts(val))
71
+ assert_equal({}, val, "should delete request_params key from hash")
72
+ end
75
73
  end
76
74
 
77
75
  def test_normalized_request_and_custom_params_base
78
76
  self.expects(:normalize_params).with(nil).returns(nil)
79
77
  self.expects(:normalize_params).with({}).returns({})
80
- fake_control = mock('control')
81
- self.expects(:control).returns(fake_control)
82
- fake_control.expects(:capture_params).returns(true)
83
- assert_equal({:request_params => nil, :custom_params => {}}, normalized_request_and_custom_params({}))
78
+ with_config(:capture_params => true) do
79
+ assert_equal({:request_params => nil, :custom_params => {}},
80
+ normalized_request_and_custom_params({}))
81
+ end
84
82
  end
85
83
 
86
84
  def test_extract_source_base
87
- @capture_source = true
88
- self.expects(:sense_method).with(nil, 'source_extract')
89
- assert_equal(nil, extract_source(nil))
85
+ with_config(:'error_collector.capture_source' => true) do
86
+ error_collector = NewRelic::Agent::ErrorCollector.new
87
+ error_collector.expects(:sense_method).with(nil, 'source_extract')
88
+ assert_equal(nil, error_collector.extract_source(nil))
89
+ end
90
90
  end
91
91
 
92
92
  def test_extract_source_disabled
93
- @capture_source = false
94
- assert_equal(nil, extract_source(mock('exception')))
93
+ with_config(:'error_collector.capture_source' => false) do
94
+ error_collector = NewRelic::Agent::ErrorCollector.new
95
+ assert_equal(nil, error_collector.extract_source(mock('exception')))
96
+ end
95
97
  end
96
98
 
97
99
  def test_extract_source_with_source
98
- self.expects(:sense_method).with('happy', 'source_extract').returns('THE SOURCE')
99
- @capture_source = true
100
- assert_equal('THE SOURCE', extract_source('happy'))
100
+ with_config(:'error_collector.capture_source' => true) do
101
+ error_collector = NewRelic::Agent::ErrorCollector.new
102
+ error_collector.expects(:sense_method).with('happy', 'source_extract').returns('THE SOURCE')
103
+ assert_equal('THE SOURCE', error_collector.extract_source('happy'))
104
+ end
101
105
  end
102
106
 
103
107
  def test_extract_stack_trace
@@ -160,53 +164,56 @@ class NewRelic::Agent::ErrorCollector::NoticeErrorTest < Test::Unit::TestCase
160
164
 
161
165
  def test_should_exit_notice_error_disabled
162
166
  error = mocked_error
163
- @enabled = false
164
- assert should_exit_notice_error?(error)
167
+ with_error_collector_config(:'error_collector.enabled' => false) do |error_collector|
168
+ assert error_collector.should_exit_notice_error?(error)
169
+ end
165
170
  end
166
171
 
167
172
  def test_should_exit_notice_error_nil
168
173
  error = nil
169
- @enabled = true
170
- self.expects(:error_is_ignored?).with(error).returns(false)
171
- # we increment it for the case that someone calls
172
- # NewRelic::Agent.notice_error(foo) # foo is nil
173
- # (which is probably not a good idea but is the existing api)
174
- self.expects(:increment_error_count!)
175
- assert should_exit_notice_error?(error)
174
+ with_error_collector_config(:'error_collector.enabled' => true) do |error_collector|
175
+ error_collector.expects(:error_is_ignored?).with(error).returns(false)
176
+ # we increment it for the case that someone calls
177
+ # NewRelic::Agent.notice_error(foo) # foo is nil
178
+ # (which is probably not a good idea but is the existing api)
179
+ error_collector.expects(:increment_error_count!)
180
+ assert error_collector.should_exit_notice_error?(error)
181
+ end
176
182
  end
177
183
 
178
184
  def test_should_exit_notice_error_positive
179
185
  error = mocked_error
180
- @enabled = true
181
- self.expects(:error_is_ignored?).with(error).returns(true)
182
- assert should_exit_notice_error?(error)
186
+ with_error_collector_config(:'error_collector.enabled' => true) do |error_collector|
187
+ error_collector.expects(:error_is_ignored?).with(error).returns(true)
188
+ assert error_collector.should_exit_notice_error?(error)
189
+ end
183
190
  end
184
191
 
185
192
  def test_should_exit_notice_error_negative
186
193
  error = mocked_error
187
- @enabled = true
188
- self.expects(:error_is_ignored?).with(error).returns(false)
189
- self.expects(:increment_error_count!)
190
- assert !should_exit_notice_error?(error)
194
+ with_error_collector_config(:'error_collector.enabled' => true) do |error_collector|
195
+ error_collector.expects(:error_is_ignored?).with(error).returns(false)
196
+ error_collector.expects(:increment_error_count!)
197
+ assert !error_collector.should_exit_notice_error?(error)
198
+ end
191
199
  end
192
200
 
193
201
  def test_filtered_error_positive
194
- @ignore = {'an_error' => true}
195
- error = mocked_error
196
- error_class = mock('error class')
197
- error.expects(:class).returns(error_class)
198
- error_class.expects(:name).returns('an_error')
199
- assert filtered_error?(error)
202
+ with_error_collector_config(:'error_collector.ignore_errors' => 'an_error') do |error_collector|
203
+ error = mocked_error
204
+ error_class = mock('error class')
205
+ error.expects(:class).returns(error_class)
206
+ error_class.expects(:name).returns('an_error')
207
+ assert error_collector.filtered_error?(error)
208
+ end
200
209
  end
201
210
 
202
211
  def test_filtered_error_negative
203
- @ignore = {}
204
212
  error = mocked_error
205
213
  error_class = mock('error class')
206
214
  error.expects(:class).returns(error_class)
207
215
  error_class.expects(:name).returns('an_error')
208
- self.expects(:filtered_by_error_filter?).with(error).returns(false)
209
- assert !filtered_error?(error)
216
+ assert !NewRelic::Agent::ErrorCollector.new.filtered_error?(error)
210
217
  end
211
218
 
212
219
  def test_filtered_by_error_filter_empty
@@ -251,7 +258,13 @@ class NewRelic::Agent::ErrorCollector::NoticeErrorTest < Test::Unit::TestCase
251
258
 
252
259
  def mocked_control
253
260
  fake_control = mock('control')
254
- self.stubs(:control).returns(fake_control)
261
+ NewRelic::Control.stubs(:instance).returns(fake_control)
255
262
  fake_control
256
263
  end
264
+
265
+ def with_error_collector_config(config)
266
+ with_config(config) do
267
+ yield NewRelic::Agent::ErrorCollector.new
268
+ end
269
+ end
257
270
  end
@@ -143,6 +143,18 @@ class NewRelic::Agent::ErrorCollectorTest < Test::Unit::TestCase
143
143
  assert_equal 0, errors.length
144
144
  end
145
145
 
146
+ def test_exclude_later_config_changes
147
+ @error_collector.notice_error(IOError.new("message"))
148
+
149
+ NewRelic::Agent.config.apply_config(:'error_collector.ignore_errors' => "IOError")
150
+ @error_collector.notice_error(IOError.new("message"))
151
+
152
+ errors = @error_collector.harvest_errors([])
153
+
154
+ assert_equal 1, errors.length
155
+
156
+ end
157
+
146
158
  def test_exclude_block
147
159
  NewRelic::Agent.logger.expects(:error).never
148
160
  @error_collector.ignore_error_filter &wrapped_filter_proc
@@ -156,20 +168,18 @@ class NewRelic::Agent::ErrorCollectorTest < Test::Unit::TestCase
156
168
  end
157
169
 
158
170
  def test_obfuscates_error_messages_when_high_security_is_set
159
- NewRelic::Control.instance['high_security'] = true
160
-
161
- @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo = 'bar'"))
162
- @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo in (1,2,3,4,5)"))
171
+ with_config(:high_security => true) do
172
+ @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo = 'bar'"))
173
+ @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo in (1,2,3,4,5)"))
163
174
 
164
- old_errors = []
165
- errors = @error_collector.harvest_errors([])
175
+ old_errors = []
176
+ errors = @error_collector.harvest_errors([])
166
177
 
167
- assert_equal('YO SQL BAD: serect * flom test where foo = ?',
168
- errors[0].message)
169
- assert_equal('YO SQL BAD: serect * flom test where foo in (?,?,?,?,?)',
170
- errors[1].message)
171
-
172
- NewRelic::Control.instance['high_security'] = nil
178
+ assert_equal('YO SQL BAD: serect * flom test where foo = ?',
179
+ errors[0].message)
180
+ assert_equal('YO SQL BAD: serect * flom test where foo in (?,?,?,?,?)',
181
+ errors[1].message)
182
+ end
173
183
  end
174
184
 
175
185
  private
@@ -4,6 +4,16 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
4
4
  require 'active_record_fixtures'
5
5
  include NewRelic::Agent::Instrumentation::ControllerInstrumentation
6
6
 
7
+ # the db adapter library the tests are running under (e.g. sqlite3)
8
+ def adapter
9
+ if ActiveRecord::Base.respond_to?(:connection_config)
10
+ ActiveRecord::Base.connection_config[:adapter]
11
+ else
12
+ # old versions of rails are usually tested against mysql
13
+ 'mysql'
14
+ end
15
+ end
16
+
7
17
  def setup
8
18
  super
9
19
  NewRelic::Agent.manual_start
@@ -87,7 +97,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
87
97
  ActiveRecord/find
88
98
  ActiveRecord/ActiveRecordFixtures::Order/find
89
99
  Database/SQL/insert
90
- RemoteService/sql/mysql/localhost
100
+ RemoteService/sql/#{adapter}/localhost
91
101
  ]
92
102
 
93
103
  if NewRelic::Control.instance.rails_version < '2.1.0'
@@ -149,7 +159,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
149
159
  ActiveRecord/ActiveRecordFixtures::Order/find
150
160
  ActiveRecord/ActiveRecordFixtures::Order/create
151
161
  Database/SQL/other
152
- RemoteService/sql/mysql/localhost]
162
+ RemoteService/sql/#{adapter}/localhost]
153
163
 
154
164
  if NewRelic::Control.instance.rails_version < '2.1.0'
155
165
  expected += ['ActiveRecord/save',
@@ -190,7 +200,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
190
200
  ActiveRecord/find
191
201
  ActiveRecord/ActiveRecordFixtures::Order/find
192
202
  ActiveRecord/ActiveRecordFixtures::Shipment/find
193
- RemoteService/sql/mysql/localhost
203
+ RemoteService/sql/#{adapter}/localhost
194
204
  ]
195
205
 
196
206
  assert_calls_metrics(*expected_metrics) do
@@ -256,7 +266,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
256
266
 
257
267
  expected_metrics = %W[
258
268
  ActiveRecord/all
259
- RemoteService/sql/mysql/localhost
269
+ RemoteService/sql/#{adapter}/localhost
260
270
  ActiveRecord/destroy
261
271
  ActiveRecord/ActiveRecordFixtures::Order/destroy
262
272
  Database/SQL/insert
@@ -299,7 +309,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
299
309
  expected_metrics = %W[
300
310
  ActiveRecord/all
301
311
  Database/SQL/select
302
- RemoteService/sql/mysql/localhost
312
+ RemoteService/sql/#{adapter}/localhost
303
313
  ]
304
314
 
305
315
  assert_calls_unscoped_metrics(*expected_metrics) do
@@ -317,7 +327,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
317
327
  expected_metrics = %W[
318
328
  ActiveRecord/all
319
329
  Database/SQL/other
320
- RemoteService/sql/mysql/localhost
330
+ RemoteService/sql/#{adapter}/localhost
321
331
  ]
322
332
  assert_calls_unscoped_metrics(*expected_metrics) do
323
333
  ActiveRecordFixtures::Order.connection.execute "begin"
@@ -333,7 +343,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
333
343
  return if isSqlite?
334
344
  return if isPostgres?
335
345
 
336
- expected_metrics = %W[ActiveRecord/all Database/SQL/show RemoteService/sql/mysql/localhost]
346
+ expected_metrics = %W[ActiveRecord/all Database/SQL/show RemoteService/sql/#{adapter}/localhost]
337
347
 
338
348
  assert_calls_metrics(*expected_metrics) do
339
349
  ActiveRecordFixtures::Order.connection.execute "show tables"
@@ -499,7 +509,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
499
509
  true
500
510
  end
501
511
 
502
- expected_metrics = %W[ActiveRecord/all Database/SQL/select RemoteService/sql/mysql/localhost]
512
+ expected_metrics = %W[ActiveRecord/all Database/SQL/select RemoteService/sql/#{adapter}/localhost]
503
513
 
504
514
  assert_calls_metrics(*expected_metrics) do
505
515
  begin
@@ -513,7 +523,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
513
523
  compare_metrics expected_metrics, metrics
514
524
  check_metric_count('Database/SQL/select', 1)
515
525
  check_metric_count('ActiveRecord/all', 1)
516
- check_metric_count('RemoteService/sql/mysql/localhost', 1)
526
+ check_metric_count("RemoteService/sql/#{adapter}/localhost", 1)
517
527
  end
518
528
 
519
529
  def test_rescue_handling
@@ -535,7 +545,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
535
545
  # puts NewRelic::Agent::Database.config.inspect
536
546
 
537
547
  ActiveRecordFixtures::Shipment.connection.execute('SHOW TABLES');
538
- assert(NewRelic::Agent.get_stats('RemoteService/sql/mysql/localhost').call_count != 0)
548
+ assert(NewRelic::Agent.get_stats("RemoteService/sql/#{adapter}/localhost").call_count != 0)
539
549
 
540
550
  config = ActiveRecordFixtures::Shipment.connection.instance_eval { @config }
541
551
  config[:host] = '127.0.0.1'
@@ -545,7 +555,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
545
555
  # puts NewRelic::Agent::Database.config.inspect
546
556
 
547
557
  ActiveRecordFixtures::Shipment.connection.execute('SHOW TABLES');
548
- assert(NewRelic::Agent.get_stats('RemoteService/sql/mysql/127.0.0.1').call_count != 0)
558
+ assert(NewRelic::Agent.get_stats("RemoteService/sql/#{adapter}/127.0.0.1").call_count != 0)
549
559
 
550
560
  config[:host] = 'localhost'
551
561
  ActiveRecordFixtures::Shipment.establish_connection(config)
@@ -47,4 +47,10 @@ class NewRelic::Agent::Instrumentation::MetricFrameTest < Test::Unit::TestCase
47
47
  assert_equal "/", f.uri
48
48
  assert_nil f.referer
49
49
  end
50
+
51
+ def test_queue_time
52
+ f.apdex_start = 1000
53
+ f.start = 1500
54
+ assert_equal 500, f.queue_time
55
+ end
50
56
  end
@@ -77,8 +77,8 @@ class NewRelic::Agent::Instrumentation::TaskInstrumentationTest < Test::Unit::Te
77
77
  assert_equal 0, @agent.transaction_sampler.scope_depth, "existing unfinished sample"
78
78
  sample = @agent.transaction_sampler.last_sample
79
79
  assert_not_nil sample
80
- assert_not_nil sample.params[:cpu_time], "cpu time nil: \n#{sample}"
81
- assert sample.params[:cpu_time] >= 0, "cpu time: #{sample.params[:cpu_time]},\n#{sample}"
80
+ assert_not_nil sample.params[:custom_params][:cpu_time], "cpu time nil: \n#{sample}"
81
+ assert sample.params[:custom_params][:cpu_time] >= 0, "cpu time: #{sample.params[:cpu_time]},\n#{sample}"
82
82
  assert_equal '10', sample.params[:request_params][:level]
83
83
  end
84
84