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
@@ -19,6 +19,23 @@ class NewRelic::Agent::WorkerLoopTest < Test::Unit::TestCase
|
|
19
19
|
assert @x
|
20
20
|
end
|
21
21
|
|
22
|
+
def test_with_duration
|
23
|
+
worker_loop = NewRelic::Agent::WorkerLoop.new(:duration => 0.1)
|
24
|
+
count = 0
|
25
|
+
worker_loop.run(0.04) do
|
26
|
+
count += 1
|
27
|
+
end
|
28
|
+
|
29
|
+
assert_equal 2, count
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_loop_limit
|
33
|
+
worker_loop = NewRelic::Agent::WorkerLoop.new(:limit => 2)
|
34
|
+
iterations = 0
|
35
|
+
worker_loop.run(0) { iterations += 1 }
|
36
|
+
assert_equal 2, iterations
|
37
|
+
end
|
38
|
+
|
22
39
|
def test_density
|
23
40
|
# This shows how the tasks stay aligned with the period and don't drift.
|
24
41
|
count = 0
|
@@ -33,6 +50,7 @@ class NewRelic::Agent::WorkerLoopTest < Test::Unit::TestCase
|
|
33
50
|
elapsed = Time.now - start
|
34
51
|
assert_in_delta 0.09, elapsed, 0.03
|
35
52
|
end
|
53
|
+
|
36
54
|
def test_task_error__standard
|
37
55
|
@logger.expects(:debug)
|
38
56
|
@logger.expects(:error)
|
@@ -45,6 +63,7 @@ class NewRelic::Agent::WorkerLoopTest < Test::Unit::TestCase
|
|
45
63
|
end
|
46
64
|
assert done
|
47
65
|
end
|
66
|
+
|
48
67
|
class BadBoy < StandardError; end
|
49
68
|
|
50
69
|
def test_task_error__exception
|
@@ -55,6 +74,7 @@ class NewRelic::Agent::WorkerLoopTest < Test::Unit::TestCase
|
|
55
74
|
raise BadBoy, "oops"
|
56
75
|
end
|
57
76
|
end
|
77
|
+
|
58
78
|
def test_task_error__server
|
59
79
|
@logger.expects(:error).never
|
60
80
|
@logger.expects(:debug).once
|
@@ -3,7 +3,7 @@ require 'ostruct'
|
|
3
3
|
|
4
4
|
module NewRelic
|
5
5
|
class MainAgentTest < Test::Unit::TestCase
|
6
|
-
|
6
|
+
|
7
7
|
# mostly this module just passes through to the active agent
|
8
8
|
# through the agent method or the control instance through
|
9
9
|
# NewRelic::Control.instance . But it's nice to make sure.
|
@@ -12,13 +12,42 @@ module NewRelic
|
|
12
12
|
super
|
13
13
|
Thread.current[:newrelic_untraced] = nil
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def test_shutdown
|
17
17
|
mock_agent = mocked_agent
|
18
18
|
mock_agent.expects(:shutdown).with({})
|
19
19
|
NewRelic::Agent.shutdown
|
20
20
|
end
|
21
21
|
|
22
|
+
def test_shutdown_removes_manual_startup_config
|
23
|
+
NewRelic::Agent.manual_start(:some_absurd_setting => true)
|
24
|
+
assert NewRelic::Agent.config[:some_absurd_setting]
|
25
|
+
NewRelic::Agent.shutdown
|
26
|
+
assert !NewRelic::Agent.config[:some_absurd_setting]
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_shutdown_removes_server_config
|
30
|
+
NewRelic::Agent.manual_start
|
31
|
+
NewRelic::Agent.instance.finish_setup('agent_config' =>
|
32
|
+
{ :some_absurd_setting => true })
|
33
|
+
assert NewRelic::Agent.config[:some_absurd_setting]
|
34
|
+
NewRelic::Agent.shutdown
|
35
|
+
assert !NewRelic::Agent.config[:some_absurd_setting]
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_finish_setup_applied_server_side_config
|
39
|
+
with_config({ :'transction_tracer.enabled' => true,
|
40
|
+
'error_collector.enabled' => true,
|
41
|
+
:log_level => 'info' }, 2) do
|
42
|
+
NewRelic::Agent.instance.finish_setup('log_level' => 'debug',
|
43
|
+
'agent_config' => { 'transaction_tracer.enabled' => false },
|
44
|
+
'collect_errors' => false)
|
45
|
+
assert !NewRelic::Agent.config[:'transaction_tracer.enabled']
|
46
|
+
assert !NewRelic::Agent.config[:'error_collector.enabled']
|
47
|
+
assert_equal 'debug', NewRelic::Agent.config[:log_level]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
22
51
|
def test_after_fork
|
23
52
|
mock_agent = mocked_agent
|
24
53
|
mock_agent.expects(:after_fork).with({})
|
@@ -32,43 +61,42 @@ module NewRelic
|
|
32
61
|
|
33
62
|
assert agent.forked?
|
34
63
|
end
|
35
|
-
|
36
64
|
|
37
65
|
if NewRelic::LanguageSupport.can_fork? &&
|
38
66
|
!NewRelic::LanguageSupport.using_version?('1.9.1')
|
39
67
|
def test_timeslice_harvest_with_after_fork_report_to_channel
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
68
|
+
with_config(:agent_enabled => true, :monitor_mode => true) do
|
69
|
+
NewRelic::Agent.shutdown # make sure the agent is not already started
|
70
|
+
NewRelic::Agent::Agent.instance.service = NewRelic::FakeService.new
|
71
|
+
NewRelic::Agent.manual_start(:license_key => ('1234567890' * 4),
|
72
|
+
:start_channel_listener => true)
|
73
|
+
|
74
|
+
metric = 'Custom/test/method'
|
75
|
+
NewRelic::Agent.instance.stats_engine.get_stats_no_scope(metric) \
|
76
|
+
.record_data_point(1.0)
|
77
|
+
|
78
|
+
# ensure that cached metric ids don't interfere with metric merging
|
79
|
+
NewRelic::Agent.agent.instance_variable_set(:@metric_ids,
|
80
|
+
{ NewRelic::MetricSpec.new('Instance/Busy') => 1 })
|
81
|
+
|
82
|
+
NewRelic::Agent::PipeChannelManager.listener.close_all_pipes
|
83
|
+
NewRelic::Agent.register_report_channel(:agent_test) # before fork
|
84
|
+
pid = Process.fork do
|
85
|
+
NewRelic::Agent.after_fork(:report_to_channel => :agent_test)
|
86
|
+
NewRelic::Agent.agent.stats_engine.get_stats_no_scope(metric) \
|
87
|
+
.record_data_point(2.0)
|
88
|
+
end
|
89
|
+
Process.wait(pid)
|
90
|
+
NewRelic::Agent::PipeChannelManager.listener.stop
|
91
|
+
|
92
|
+
engine = NewRelic::Agent.agent.stats_engine
|
93
|
+
assert_equal(3.0, engine.lookup_stats(metric).total_call_time)
|
94
|
+
assert_equal(2, engine.lookup_stats(metric).call_count)
|
95
|
+
engine.reset_stats
|
62
96
|
end
|
63
|
-
Process.wait(pid)
|
64
|
-
NewRelic::Agent::PipeChannelManager.listener.stop
|
65
|
-
|
66
|
-
engine = NewRelic::Agent.agent.stats_engine
|
67
|
-
assert_equal(3.0, engine.lookup_stats(metric).total_call_time)
|
68
|
-
assert_equal(2, engine.lookup_stats(metric).call_count)
|
69
97
|
end
|
70
98
|
end
|
71
|
-
|
99
|
+
|
72
100
|
def test_reset_stats
|
73
101
|
mock_agent = mocked_agent
|
74
102
|
mock_agent.expects(:reset_stats)
|
@@ -80,7 +108,7 @@ module NewRelic
|
|
80
108
|
mock_control.expects(:init_plugin).with({:agent_enabled => true, :sync_startup => true})
|
81
109
|
NewRelic::Agent.manual_start
|
82
110
|
end
|
83
|
-
|
111
|
+
|
84
112
|
def test_manual_start_with_opts
|
85
113
|
mock_control = mocked_control
|
86
114
|
mock_control.expects(:init_plugin).with({:agent_enabled => true, :sync_startup => false})
|
@@ -121,7 +149,7 @@ module NewRelic
|
|
121
149
|
mock_stats_engine.expects(:get_stats).with('Custom/test/metric', false)
|
122
150
|
NewRelic::Agent.get_stats('Custom/test/metric')
|
123
151
|
end
|
124
|
-
|
152
|
+
|
125
153
|
# note that this is the same as get_stats above, they're just aliases
|
126
154
|
def test_get_stats_no_scope
|
127
155
|
agent = mocked_agent
|
@@ -166,7 +194,7 @@ module NewRelic
|
|
166
194
|
Thread.current[:record_tt] = false
|
167
195
|
assert_equal(false, NewRelic::Agent.is_transaction_traced?, 'should be false since the thread local is false')
|
168
196
|
end
|
169
|
-
|
197
|
+
|
170
198
|
def test_is_sql_recorded_true
|
171
199
|
Thread.current[:record_sql] = true
|
172
200
|
assert_equal(true, NewRelic::Agent.is_sql_recorded?, 'should be true since the thread local is set')
|
@@ -181,7 +209,7 @@ module NewRelic
|
|
181
209
|
Thread.current[:record_sql] = false
|
182
210
|
assert_equal(false, NewRelic::Agent.is_sql_recorded?, 'should be false since the thread local is false')
|
183
211
|
end
|
184
|
-
|
212
|
+
|
185
213
|
def test_is_execution_traced_true
|
186
214
|
Thread.current[:newrelic_untraced] = [true, true]
|
187
215
|
assert_equal(true, NewRelic::Agent.is_execution_traced?, 'should be true since the thread local is set')
|
@@ -201,18 +229,18 @@ module NewRelic
|
|
201
229
|
Thread.current[:newrelic_untraced] = [true, false]
|
202
230
|
assert_equal(false, NewRelic::Agent.is_execution_traced?, 'should be false since the thread local stack has the last element false')
|
203
231
|
end
|
204
|
-
|
232
|
+
|
205
233
|
def test_instance
|
206
234
|
assert_equal(NewRelic::Agent.agent, NewRelic::Agent.instance, "should return the same agent for both identical methods")
|
207
235
|
end
|
208
|
-
|
236
|
+
|
209
237
|
def test_register_report_channel
|
210
238
|
NewRelic::Agent.register_report_channel(:channel_id)
|
211
239
|
assert NewRelic::Agent::PipeChannelManager.channels[:channel_id] \
|
212
240
|
.kind_of?(NewRelic::Agent::PipeChannelManager::Pipe)
|
213
241
|
NewRelic::Agent::PipeChannelManager.listener.close_all_pipes
|
214
242
|
end
|
215
|
-
|
243
|
+
|
216
244
|
private
|
217
245
|
|
218
246
|
def mocked_agent
|
@@ -220,7 +248,7 @@ module NewRelic
|
|
220
248
|
NewRelic::Agent.stubs(:agent).returns(agent)
|
221
249
|
agent
|
222
250
|
end
|
223
|
-
|
251
|
+
|
224
252
|
def mocked_control
|
225
253
|
server = NewRelic::Control::Server.new('localhost', 3000)
|
226
254
|
control = OpenStruct.new(:license_key => 'abcdef',
|
@@ -229,7 +257,7 @@ module NewRelic
|
|
229
257
|
def [](key)
|
230
258
|
nil
|
231
259
|
end
|
232
|
-
|
260
|
+
|
233
261
|
def fetch(k,d)
|
234
262
|
nil
|
235
263
|
end
|
@@ -24,7 +24,7 @@ class NewRelic::CollectionHelperTest < Test::Unit::TestCase
|
|
24
24
|
assert_equal '1000', new_array[0]
|
25
25
|
end
|
26
26
|
def test_boolean
|
27
|
-
np = normalize_params(
|
27
|
+
np = normalize_params('monitor_mode' => false)
|
28
28
|
assert_equal false, np['monitor_mode']
|
29
29
|
end
|
30
30
|
def test_string__singleton
|
@@ -118,14 +118,13 @@ class NewRelic::CollectionHelperTest < Test::Unit::TestCase
|
|
118
118
|
end
|
119
119
|
|
120
120
|
def test_disabled_strip_backtrace
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
121
|
+
with_config(:disable_backtrace_cleanup => true) do
|
122
|
+
clean_trace = strip_nr_from_backtrace(mock_backtrace)
|
123
|
+
assert_equal(1, clean_trace.grep(/new_relic/).size,
|
124
|
+
"should not remove instances of new relic from backtrace but got: #{clean_trace.join("\n")}")
|
125
|
+
assert_equal(1, clean_trace.grep(/_trace/).size,
|
126
126
|
"should not remove trace method tags from method names but got: #{clean_trace.join("\n")}")
|
127
|
-
|
128
|
-
NewRelic::Control.instance['disable_backtrace_cleanup'] = false
|
127
|
+
end
|
129
128
|
end
|
130
129
|
|
131
130
|
private
|
@@ -10,6 +10,8 @@ class NewRelic::Command::DeploymentsTest < Test::Unit::TestCase
|
|
10
10
|
def info(message); @messages = @messages ? @messages + message : message; end
|
11
11
|
def just_exit(status=0); @exit_status ||= status; end
|
12
12
|
end
|
13
|
+
@config = { :license_key => 'a' * 40 }
|
14
|
+
NewRelic::Agent.config.apply_config(@config)
|
13
15
|
end
|
14
16
|
def teardown
|
15
17
|
super
|
@@ -17,6 +19,7 @@ class NewRelic::Command::DeploymentsTest < Test::Unit::TestCase
|
|
17
19
|
puts @deployment.errors
|
18
20
|
puts @deployment.messages
|
19
21
|
puts @deployment.exit_status
|
22
|
+
NewRelic::Agent.config.remove_config(@config)
|
20
23
|
end
|
21
24
|
def test_help
|
22
25
|
begin
|
@@ -33,7 +36,10 @@ class NewRelic::Command::DeploymentsTest < Test::Unit::TestCase
|
|
33
36
|
end
|
34
37
|
def test_interactive
|
35
38
|
mock_the_connection
|
36
|
-
@deployment = NewRelic::Command::Deployments.new
|
39
|
+
@deployment = NewRelic::Command::Deployments.new(:appname => 'APP',
|
40
|
+
:revision => 3838,
|
41
|
+
:user => 'Bill',
|
42
|
+
:description => "Some lengthy description")
|
37
43
|
assert_nil @deployment.exit_status
|
38
44
|
assert_nil @deployment.errors
|
39
45
|
assert_equal '3838', @deployment.revision
|
@@ -56,7 +62,18 @@ class NewRelic::Command::DeploymentsTest < Test::Unit::TestCase
|
|
56
62
|
|
57
63
|
@deployment = nil
|
58
64
|
end
|
65
|
+
|
66
|
+
def test_error_if_no_license_key
|
67
|
+
with_config(:license_key => '') do
|
68
|
+
assert_raise NewRelic::Command::CommandFailure do
|
69
|
+
deployment = NewRelic::Command::Deployments.new(%w[-a APP -r 3838 --user=Bill] << "Some lengthy description")
|
70
|
+
deployment.run
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
59
75
|
private
|
76
|
+
|
60
77
|
def mock_the_connection
|
61
78
|
mock_connection = mock()
|
62
79
|
@mock_response = mock()
|
@@ -64,5 +81,4 @@ class NewRelic::Command::DeploymentsTest < Test::Unit::TestCase
|
|
64
81
|
mock_connection.expects(:request).returns(@mock_response)
|
65
82
|
NewRelic::Control.instance.stubs(:http_connection).returns(mock_connection)
|
66
83
|
end
|
67
|
-
|
68
84
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'/../../../test_helper'))
|
2
|
+
|
3
|
+
class NewRelic::Control::Frameworks::RailsTest < Test::Unit::TestCase
|
4
|
+
def test_install_browser_monitoring
|
5
|
+
require(File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
+
'/../../../../lib/new_relic/rack/browser_monitoring')))
|
7
|
+
middleware = stub('middleware config')
|
8
|
+
config = stub('rails config', :middleware => middleware)
|
9
|
+
middleware.expects(:use).with(NewRelic::Rack::BrowserMonitoring)
|
10
|
+
NewRelic::Control.instance.instance_eval { @browser_monitoring_installed = false }
|
11
|
+
with_config(:'browser_monitoring.auto_instrument' => true) do
|
12
|
+
NewRelic::Control.instance.install_browser_monitoring(config)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_install_browser_monitoring_should_not_install_when_not_configured
|
17
|
+
middleware = stub('middleware config')
|
18
|
+
config = stub('rails config', :middleware => middleware)
|
19
|
+
middleware.expects(:use).never
|
20
|
+
NewRelic::Control.instance.instance_eval { @browser_monitoring_installed = false }
|
21
|
+
|
22
|
+
with_config(:'browser_monitoring.auto_instrument' => false) do
|
23
|
+
NewRelic::Control.instance.install_browser_monitoring(config)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -5,15 +5,15 @@ require 'fileutils'
|
|
5
5
|
class BaseLoggingMethods
|
6
6
|
# stub class to enable testing of the module
|
7
7
|
include NewRelic::Control::LoggingMethods
|
8
|
-
include NewRelic::Control::Configuration
|
9
8
|
def root; "."; end
|
10
9
|
end
|
11
10
|
|
12
11
|
class NewRelic::Control::LoggingMethodsTest < Test::Unit::TestCase
|
13
12
|
def setup
|
14
13
|
@base = BaseLoggingMethods.new
|
15
|
-
|
16
|
-
|
14
|
+
NewRelic::Control.instance.instance_variable_set '@log_path', nil
|
15
|
+
NewRelic::Control.instance.instance_variable_set '@log_file', nil
|
16
|
+
@root = ::Rails::VERSION::MAJOR == 3 ? Rails.root : RAILS_ROOT
|
17
17
|
super
|
18
18
|
end
|
19
19
|
|
@@ -60,30 +60,34 @@ class NewRelic::Control::LoggingMethodsTest < Test::Unit::TestCase
|
|
60
60
|
|
61
61
|
def test_should_log_agent_disabled
|
62
62
|
@base.instance_eval { @settings = true }
|
63
|
-
|
64
|
-
|
63
|
+
with_config(:agent_enabled => false) do
|
64
|
+
assert !@base.should_log?
|
65
|
+
end
|
65
66
|
end
|
66
67
|
|
67
68
|
def test_should_log_agent_enabled
|
68
69
|
@base.instance_eval { @settings = true }
|
69
|
-
|
70
|
-
|
70
|
+
with_config(:agent_enabled => true) do
|
71
|
+
assert @base.should_log?
|
72
|
+
end
|
71
73
|
end
|
72
74
|
|
73
75
|
def test_set_log_level_base
|
74
76
|
fake_logger = mock('logger')
|
75
77
|
# bad configuration
|
76
|
-
|
77
|
-
|
78
|
-
|
78
|
+
with_config(:log_level => 'whee') do
|
79
|
+
fake_logger.expects(:level=).with(Logger::INFO)
|
80
|
+
assert_equal fake_logger, @base.set_log_level!(fake_logger)
|
81
|
+
end
|
79
82
|
end
|
80
83
|
|
81
84
|
def test_set_log_level_with_each_level
|
82
85
|
fake_logger = mock('logger')
|
83
86
|
%w[debug info warn error fatal].each do |level|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
+
with_config(:log_level => level) do
|
88
|
+
fake_logger.expects(:level=).with(Logger.const_get(level.upcase))
|
89
|
+
assert_equal fake_logger, @base.set_log_level!(fake_logger)
|
90
|
+
end
|
87
91
|
end
|
88
92
|
end
|
89
93
|
|
@@ -96,14 +100,14 @@ class NewRelic::Control::LoggingMethodsTest < Test::Unit::TestCase
|
|
96
100
|
|
97
101
|
def test_setup_log_existing_file
|
98
102
|
fake_logger = mock('logger')
|
99
|
-
Logger.expects(:new).
|
100
|
-
@base.expects(:log_path).returns('logpath').at_least_once
|
101
|
-
@base.expects(:log_file_name).returns('logfilename')
|
103
|
+
Logger.expects(:new).returns(fake_logger)
|
102
104
|
@base.expects(:set_log_format!).with(fake_logger)
|
103
105
|
@base.expects(:set_log_level!).with(fake_logger)
|
104
|
-
|
105
|
-
|
106
|
-
|
106
|
+
with_config(:log_file_path => 'logpath', :log_file_name => 'logfilename') do
|
107
|
+
assert_equal fake_logger, @base.setup_log
|
108
|
+
assert_equal fake_logger, @base.instance_eval { @log }
|
109
|
+
assert_match(/logpath\/logfilename$/, @base.instance_eval { @log_file })
|
110
|
+
end
|
107
111
|
end
|
108
112
|
|
109
113
|
def test_to_stdout
|
@@ -117,69 +121,91 @@ class NewRelic::Control::LoggingMethodsTest < Test::Unit::TestCase
|
|
117
121
|
end
|
118
122
|
|
119
123
|
def test_log_path_path_exists
|
120
|
-
|
121
|
-
|
122
|
-
|
124
|
+
with_config(:log_file_path => 'log') do
|
125
|
+
assert File.directory?('log')
|
126
|
+
assert_equal File.expand_path('log'), @base.log_path
|
127
|
+
end
|
123
128
|
end
|
124
129
|
|
125
130
|
def test_log_path_path_created
|
126
131
|
path = File.expand_path('tmp/log_path_test')
|
132
|
+
FileUtils.mkdir_p(File.dirname(path))
|
127
133
|
@base.instance_eval { @log_path = nil }
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
134
|
+
with_config(:log_file_path => 'tmp/log_path_test') do
|
135
|
+
assert !File.directory?(path) || FileUtils.rmdir(path)
|
136
|
+
@base.expects(:log!).never
|
137
|
+
assert_equal path, @base.log_path
|
138
|
+
assert File.directory?(path)
|
139
|
+
end
|
133
140
|
end
|
134
141
|
|
135
142
|
def test_log_path_path_unable_to_create
|
136
143
|
path = File.expand_path('tmp/log_path_test')
|
137
144
|
@base.instance_eval { @log_path = nil }
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
def test_log_file_name
|
148
|
-
@base.expects(:fetch).with('log_file_name', 'newrelic_agent.log').returns('log_file_name')
|
149
|
-
assert_equal 'log_file_name', @base.log_file_name
|
145
|
+
with_config(:log_file_path => 'tmp/log_path_test') do
|
146
|
+
assert !File.directory?(path) || FileUtils.rmdir(path)
|
147
|
+
@base.expects(:log!).with("Error creating log directory tmp/log_path_test, using standard out for logging.", :warn)
|
148
|
+
# once for the relative directory, once for the directory relative to Rails.root
|
149
|
+
Dir.expects(:mkdir).with(path).raises('cannot make directory bro!').twice
|
150
|
+
assert_nil @base.log_path
|
151
|
+
assert !File.directory?(path)
|
152
|
+
assert_equal STDOUT, @base.log.instance_eval { @logdev }.dev
|
153
|
+
end
|
150
154
|
end
|
151
155
|
|
152
156
|
def test_log_to_stdout_when_log_file_path_set_to_STDOUT
|
153
|
-
@base.stubs(:fetch).returns('whatever')
|
154
|
-
@base.expects(:fetch).with('log_file_path', 'log').returns('STDOUT')
|
155
157
|
Dir.expects(:mkdir).never
|
156
|
-
|
157
|
-
|
158
|
+
with_config(:log_file_path => 'STDOUT') do
|
159
|
+
@base.setup_log
|
160
|
+
assert_equal STDOUT, @base.log.instance_eval { @logdev }.dev
|
161
|
+
end
|
158
162
|
end
|
159
163
|
|
160
164
|
def test_logs_to_stdout_include_newrelic_prefix
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
165
|
+
with_config(:log_file_path => 'STDOUT') do
|
166
|
+
STDOUT.expects(:write).with(regexp_matches(/\*\* \[NewRelic\].*whee/))
|
167
|
+
@base.setup_log
|
168
|
+
@base.log.info('whee')
|
169
|
+
end
|
166
170
|
end
|
167
171
|
|
168
172
|
def test_set_stdout_destination_from_NEW_RELIC_LOG_env_var
|
169
|
-
@base.stubs(:fetch).returns('whatever')
|
170
173
|
ENV['NEW_RELIC_LOG'] = 'stdout'
|
174
|
+
reset_environment_config
|
171
175
|
Dir.expects(:mkdir).never
|
172
176
|
@base.setup_log
|
173
177
|
assert_equal STDOUT, @base.log.instance_eval { @logdev }.dev
|
174
178
|
ENV['NEW_RELIC_LOG'] = nil
|
179
|
+
reset_environment_config
|
175
180
|
end
|
176
181
|
|
177
182
|
def test_set_file_destination_from_NEW_RELIC_LOG_env_var
|
178
|
-
@base.stubs(:fetch).returns('whatever')
|
179
183
|
ENV['NEW_RELIC_LOG'] = 'log/file.log'
|
184
|
+
reset_environment_config
|
180
185
|
@base.setup_log
|
181
186
|
assert_equal 'log', File.basename(@base.log_path)
|
182
|
-
assert_equal 'file.log',
|
183
|
-
ENV['NEW_RELIC_LOG'] = nil
|
187
|
+
assert_equal 'file.log', NewRelic::Agent.config['log_file_name']
|
188
|
+
ENV['NEW_RELIC_LOG'] = nil
|
189
|
+
reset_environment_config
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_log_path_uses_default_if_not_set
|
193
|
+
NewRelic::Control.instance.setup_log
|
194
|
+
assert_match(/log\/newrelic_agent.log$/,
|
195
|
+
NewRelic::Control.instance.log_file)
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_log_file_path_uses_given_value
|
199
|
+
Dir.stubs(:mkdir).returns(true)
|
200
|
+
with_config(:log_file_path => 'lerg') do
|
201
|
+
NewRelic::Control.instance.setup_log
|
202
|
+
assert_match(/\/lerg\/newrelic_agent.log$/,
|
203
|
+
NewRelic::Control.instance.log_file)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def reset_environment_config
|
208
|
+
NewRelic::Agent.config.config_stack[0] =
|
209
|
+
NewRelic::Agent::Configuration::EnvironmentSource.new
|
184
210
|
end
|
185
211
|
end
|