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.
- data/.gitignore +21 -0
- data/.project +23 -0
- data/.travis.yml +9 -0
- data/CHANGELOG +180 -1
- data/GUIDELINES_FOR_CONTRIBUTING.md +73 -0
- data/Gemfile +16 -0
- data/InstallationNotes.md +15 -0
- data/LICENSE +1 -1
- data/{README.rdoc → README.md} +71 -55
- data/Rakefile +54 -0
- data/config.dot +290 -0
- data/config/database.yml +5 -0
- data/init.rb +38 -0
- data/lib/new_relic/agent.rb +9 -4
- data/lib/new_relic/agent/agent.rb +189 -230
- data/lib/new_relic/agent/beacon_configuration.rb +34 -48
- data/lib/new_relic/agent/browser_monitoring.rb +108 -61
- data/lib/new_relic/agent/busy_calculator.rb +12 -4
- data/lib/new_relic/agent/configuration.rb +49 -0
- data/lib/new_relic/agent/configuration/defaults.rb +89 -0
- data/lib/new_relic/agent/configuration/environment_source.rb +56 -0
- data/lib/new_relic/agent/configuration/manager.rb +116 -0
- data/lib/new_relic/agent/configuration/server_source.rb +27 -0
- data/lib/new_relic/agent/configuration/yaml_source.rb +61 -0
- data/lib/new_relic/agent/database.rb +37 -22
- data/lib/new_relic/agent/error_collector.rb +47 -43
- data/lib/new_relic/agent/instrumentation/active_record.rb +1 -5
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +27 -6
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +2 -10
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/memcache.rb +2 -2
- data/lib/new_relic/agent/instrumentation/metric_frame.rb +4 -14
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +4 -18
- data/lib/new_relic/agent/instrumentation/rack.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +3 -3
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +2 -2
- data/lib/new_relic/agent/instrumentation/rails3/errors.rb +5 -1
- data/lib/new_relic/agent/instrumentation/resque.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sinatra.rb +14 -10
- data/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb +4 -3
- data/lib/new_relic/agent/method_tracer.rb +5 -1
- data/lib/new_relic/agent/new_relic_service.rb +231 -61
- data/lib/new_relic/agent/pipe_channel_manager.rb +37 -23
- data/lib/new_relic/agent/pipe_service.rb +5 -1
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +2 -5
- data/lib/new_relic/agent/samplers/memory_sampler.rb +2 -2
- data/lib/new_relic/agent/sql_sampler.rb +44 -68
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +40 -24
- data/lib/new_relic/agent/stats_engine/metric_stats.rb +89 -14
- data/lib/new_relic/agent/stats_engine/samplers.rb +7 -3
- data/lib/new_relic/agent/stats_engine/transactions.rb +19 -11
- data/lib/new_relic/agent/thread.rb +27 -0
- data/lib/new_relic/agent/thread_profiler.rb +295 -0
- data/lib/new_relic/agent/transaction_info.rb +24 -4
- data/lib/new_relic/agent/transaction_sample_builder.rb +11 -11
- data/lib/new_relic/agent/transaction_sampler.rb +51 -61
- data/lib/new_relic/agent/worker_loop.rb +29 -15
- data/lib/new_relic/collection_helper.rb +1 -1
- data/lib/new_relic/commands/deployments.rb +19 -10
- data/lib/new_relic/control.rb +0 -1
- data/lib/new_relic/control/class_methods.rb +2 -3
- data/lib/new_relic/control/frameworks/rails.rb +24 -18
- data/lib/new_relic/control/frameworks/rails3.rb +18 -1
- data/lib/new_relic/control/frameworks/ruby.rb +2 -2
- data/lib/new_relic/control/instance_methods.rb +36 -53
- data/lib/new_relic/control/logging_methods.rb +5 -23
- data/lib/new_relic/control/server_methods.rb +11 -13
- data/lib/new_relic/delayed_job_injection.rb +1 -1
- data/lib/new_relic/helper.rb +13 -0
- data/lib/new_relic/language_support.rb +19 -22
- data/lib/new_relic/local_environment.rb +2 -3
- data/lib/new_relic/metric_data.rb +10 -2
- data/lib/new_relic/metric_spec.rb +6 -2
- data/lib/new_relic/noticed_error.rb +24 -9
- data/lib/new_relic/rack.rb +4 -0
- data/lib/new_relic/rack/browser_monitoring.rb +28 -10
- data/lib/new_relic/rack/developer_mode.rb +3 -0
- data/lib/new_relic/rack/error_collector.rb +56 -0
- data/lib/new_relic/transaction_sample.rb +23 -13
- data/lib/new_relic/transaction_sample/segment.rb +13 -15
- data/lib/new_relic/version.rb +3 -3
- data/lib/tasks/tests.rake +8 -8
- data/newrelic.yml +15 -32
- data/newrelic_rpm.gemspec +158 -38
- data/newrelic_rpm.gemspec.erb +55 -0
- data/test/config/newrelic.yml +3 -2
- data/test/intentional_fail.rb +10 -0
- data/test/multiverse/.gitignore +10 -0
- data/test/multiverse/README.md +90 -0
- data/test/multiverse/Rakefile +17 -0
- data/test/multiverse/lib/multiverse/color.rb +13 -0
- data/test/multiverse/lib/multiverse/envfile.rb +66 -0
- data/test/multiverse/lib/multiverse/environment.rb +16 -0
- data/test/multiverse/lib/multiverse/output_collector.rb +29 -0
- data/test/multiverse/lib/multiverse/runner.rb +44 -0
- data/test/multiverse/lib/multiverse/suite.rb +162 -0
- data/test/multiverse/script/run_one +3 -0
- data/test/multiverse/script/runner +9 -0
- data/test/multiverse/suites/active_record/Envfile +13 -0
- data/test/multiverse/suites/active_record/ar_method_aliasing.rb +94 -0
- data/test/multiverse/suites/active_record/config/newrelic.yml +22 -0
- data/test/multiverse/suites/active_record/encoding_test.rb +26 -0
- data/test/multiverse/suites/agent_only/Envfile +3 -0
- data/test/multiverse/suites/agent_only/config/newrelic.yml +22 -0
- data/test/multiverse/suites/agent_only/http_response_code_test.rb +53 -0
- data/test/multiverse/suites/agent_only/marshaling_test.rb +109 -0
- data/test/multiverse/suites/agent_only/method_visibility_test.rb +98 -0
- data/test/multiverse/suites/agent_only/pipe_manager_test.rb +33 -0
- data/test/multiverse/suites/agent_only/service_timeout_test.rb +29 -0
- data/test/multiverse/suites/agent_only/test_trace_method_with_punctuation.rb +30 -0
- data/test/multiverse/suites/agent_only/test_trace_transaction_with_punctuation.rb +32 -0
- data/test/multiverse/suites/agent_only/thread_profiling_test.rb +80 -0
- data/test/multiverse/suites/datamapper/Envfile +8 -0
- data/test/multiverse/suites/datamapper/config/newrelic.yml +22 -0
- data/test/multiverse/suites/datamapper/encoding_test.rb +36 -0
- data/test/multiverse/suites/monitor_mode_false/Envfile +2 -0
- data/test/multiverse/suites/monitor_mode_false/config/newrelic.yml +25 -0
- data/test/multiverse/suites/monitor_mode_false/no_dns_resolv.rb +29 -0
- data/test/multiverse/suites/no_load/Envfile +2 -0
- data/test/multiverse/suites/no_load/config/newrelic.yml +23 -0
- data/test/multiverse/suites/no_load/start_up_test.rb +14 -0
- data/test/multiverse/suites/rails_3_error_tracing/Envfile +15 -0
- data/test/multiverse/suites/rails_3_error_tracing/config/newrelic.yml +165 -0
- data/test/multiverse/suites/rails_3_error_tracing/error_tracing_test.rb +236 -0
- data/test/multiverse/suites/rails_3_gc/Envfile +8 -0
- data/test/multiverse/suites/rails_3_gc/config/newrelic.yml +167 -0
- data/test/multiverse/suites/rails_3_gc/instrumentation_test.rb +92 -0
- data/test/multiverse/suites/rails_3_queue_time/Envfile +15 -0
- data/test/multiverse/suites/rails_3_queue_time/config/newrelic.yml +165 -0
- data/test/multiverse/suites/rails_3_queue_time/queue_time_test.rb +75 -0
- data/test/multiverse/suites/rails_3_views/.gitignore +3 -0
- data/test/multiverse/suites/rails_3_views/Envfile +16 -0
- data/test/multiverse/suites/rails_3_views/app/views/foos/_foo.html.haml +1 -0
- data/test/multiverse/suites/rails_3_views/app/views/test/_a_partial.html.erb +1 -0
- data/test/multiverse/suites/rails_3_views/app/views/test/_mid_partial.html.erb +1 -0
- data/test/multiverse/suites/rails_3_views/app/views/test/_top_partial.html.erb +3 -0
- data/test/multiverse/suites/rails_3_views/app/views/test/deep_partial.html.erb +3 -0
- data/test/multiverse/suites/rails_3_views/app/views/test/haml_view.html.haml +6 -0
- data/test/multiverse/suites/rails_3_views/app/views/test/index.html.erb +4 -0
- data/test/multiverse/suites/rails_3_views/config/newrelic.yml +164 -0
- data/test/multiverse/suites/rails_3_views/view_instrumentation_test.rb +245 -0
- data/test/multiverse/suites/resque/Envfile +21 -0
- data/test/multiverse/suites/resque/config/newrelic.yml +22 -0
- data/test/multiverse/suites/resque/dump.rdb +0 -0
- data/test/multiverse/suites/resque/instrumentation_test.rb +73 -0
- data/test/multiverse/suites/rum_auto_instrumentation/Envfile +4 -0
- data/test/multiverse/suites/rum_auto_instrumentation/config/newrelic.yml +24 -0
- data/test/multiverse/suites/rum_auto_instrumentation/problem_response.html +422 -0
- data/test/multiverse/suites/rum_auto_instrumentation/responses/worst_case_small.html +5000 -0
- data/test/multiverse/suites/rum_auto_instrumentation/sanity_test.rb +115 -0
- data/test/multiverse/suites/sinatra/Envfile +13 -0
- data/test/multiverse/suites/sinatra/config/newrelic.yml +24 -0
- data/test/multiverse/suites/sinatra/sinatra_metric_explosion_test.rb +76 -0
- data/test/multiverse/suites/sinatra/sinatra_routes_test.rb +46 -0
- data/test/multiverse/test/multiverse_test.rb +55 -0
- data/test/multiverse/test/suite_examples/one/a/Envfile +3 -0
- data/test/multiverse/test/suite_examples/one/a/a_test.rb +11 -0
- data/test/multiverse/test/suite_examples/one/a/config/newrelic.yml +24 -0
- data/test/multiverse/test/suite_examples/one/b/Envfile +3 -0
- data/test/multiverse/test/suite_examples/one/b/b_test.rb +11 -0
- data/test/multiverse/test/suite_examples/one/b/config/newrelic.yml +24 -0
- data/test/multiverse/test/suite_examples/three/a/Envfile +2 -0
- data/test/multiverse/test/suite_examples/three/a/fail_test.rb +6 -0
- data/test/multiverse/test/suite_examples/three/b/Envfile +2 -0
- data/test/multiverse/test/suite_examples/three/b/win_test.rb +6 -0
- data/test/multiverse/test/suite_examples/two/a/Envfile +1 -0
- data/test/multiverse/test/suite_examples/two/a/fail_test.rb +6 -0
- data/test/new_relic/agent/agent/connect_test.rb +134 -164
- data/test/new_relic/agent/agent/start_test.rb +111 -81
- data/test/new_relic/agent/agent/start_worker_thread_test.rb +6 -33
- data/test/new_relic/agent/agent_test.rb +88 -9
- data/test/new_relic/agent/agent_test_controller.rb +1 -1
- data/test/new_relic/agent/agent_test_controller_test.rb +42 -10
- data/test/new_relic/agent/beacon_configuration_test.rb +63 -67
- data/test/new_relic/agent/browser_monitoring_test.rb +150 -79
- data/test/new_relic/agent/configuration/environment_source_test.rb +74 -0
- data/test/new_relic/agent/configuration/manager_test.rb +149 -0
- data/test/new_relic/agent/configuration/server_source_test.rb +45 -0
- data/test/new_relic/agent/configuration/yaml_source_test.rb +56 -0
- data/test/new_relic/agent/error_collector/notice_error_test.rb +63 -50
- data/test/new_relic/agent/error_collector_test.rb +22 -12
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +21 -11
- data/test/new_relic/agent/instrumentation/metric_frame_test.rb +6 -0
- data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +2 -2
- data/test/new_relic/agent/method_tracer/class_methods/add_method_tracer_test.rb +5 -5
- data/test/new_relic/agent/method_tracer_test.rb +6 -6
- data/test/new_relic/agent/mock_scope_listener.rb +3 -0
- data/test/new_relic/agent/new_relic_service_test.rb +208 -23
- data/test/new_relic/agent/pipe_channel_manager_test.rb +34 -17
- data/test/new_relic/agent/rpm_agent_test.rb +27 -23
- data/test/new_relic/agent/sql_sampler_test.rb +81 -56
- data/test/new_relic/agent/stats_engine/metric_stats/harvest_test.rb +3 -20
- data/test/new_relic/agent/stats_engine/metric_stats_test.rb +12 -1
- data/test/new_relic/agent/stats_engine_test.rb +17 -8
- data/test/new_relic/agent/thread_profiler_test.rb +536 -0
- data/test/new_relic/agent/thread_test.rb +76 -0
- data/test/new_relic/agent/threaded_test.rb +65 -0
- data/test/new_relic/agent/transaction_info_test.rb +45 -4
- data/test/new_relic/agent/transaction_sample_builder_test.rb +8 -6
- data/test/new_relic/agent/transaction_sampler_test.rb +193 -204
- data/test/new_relic/agent/worker_loop_test.rb +20 -0
- data/test/new_relic/agent_test.rb +69 -41
- data/test/new_relic/collection_helper_test.rb +7 -8
- data/test/new_relic/command/deployments_test.rb +18 -2
- data/test/new_relic/control/frameworks/rails_test.rb +26 -0
- data/test/new_relic/control/logging_methods_test.rb +78 -52
- data/test/new_relic/control_test.rb +91 -129
- data/test/new_relic/fake_collector.rb +103 -31
- data/test/new_relic/fake_service.rb +8 -2
- data/test/new_relic/load_test.rb +13 -0
- data/test/new_relic/local_environment_test.rb +7 -10
- data/test/new_relic/metric_data_test.rb +45 -16
- data/test/new_relic/noticed_error_test.rb +14 -0
- data/test/new_relic/rack/browser_monitoring_test.rb +15 -9
- data/test/new_relic/rack/developer_mode_test.rb +13 -7
- data/test/new_relic/rack/error_collector_test.rb +74 -0
- data/test/new_relic/transaction_sample/segment_test.rb +23 -4
- data/test/new_relic/transaction_sample_test.rb +47 -2
- data/test/script/build_test_gem.sh +9 -3
- data/test/script/ci.sh +48 -21
- data/test/script/ci_multiverse_runner.sh +11 -11
- data/test/test_helper.rb +37 -18
- data/ui/helpers/developer_mode_helper.rb +21 -11
- data/ui/views/layouts/newrelic_default.rhtml +1 -0
- data/ui/views/newrelic/show_sample.rhtml +1 -1
- data/ui/views/newrelic/threads.rhtml +2 -10
- data/vendor/gems/metric_parser-0.1.0.pre1/.specification +116 -0
- data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_init.rb +7 -0
- metadata +132 -58
- data/lib/new_relic/control/configuration.rb +0 -206
- 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
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
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
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
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
|
-
|
94
|
-
|
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
|
-
|
99
|
-
|
100
|
-
|
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
|
-
|
164
|
-
|
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
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
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
|
-
|
181
|
-
|
182
|
-
|
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
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
160
|
-
|
161
|
-
|
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
|
-
|
165
|
-
|
175
|
+
old_errors = []
|
176
|
+
errors = @error_collector.harvest_errors([])
|
166
177
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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(
|
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(
|
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(
|
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)
|
@@ -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
|
|