wd_newrelic_rpm 3.3.4.1 → 3.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -0
- data/.project +23 -0
- data/.travis.yml +9 -0
- data/CHANGELOG +317 -39
- data/GUIDELINES_FOR_CONTRIBUTING.md +76 -0
- data/Gemfile +16 -0
- data/LICENSE +1 -1
- data/{README.rdoc → README.md} +71 -55
- data/Rakefile +62 -0
- data/bin/mongrel_rpm +1 -1
- data/config.dot +290 -0
- data/config/database.yml +5 -0
- data/init.rb +31 -0
- data/lib/new_relic/agent.rb +31 -60
- data/lib/new_relic/agent/agent.rb +277 -502
- data/lib/new_relic/agent/agent_logger.rb +165 -0
- data/lib/new_relic/agent/audit_logger.rb +72 -0
- data/lib/new_relic/agent/beacon_configuration.rb +36 -50
- data/lib/new_relic/agent/browser_monitoring.rb +114 -61
- data/lib/new_relic/agent/busy_calculator.rb +14 -6
- data/lib/new_relic/agent/configuration.rb +74 -0
- data/lib/new_relic/agent/configuration/defaults.rb +126 -0
- data/lib/new_relic/agent/configuration/environment_source.rb +49 -0
- data/lib/new_relic/agent/configuration/manager.rb +136 -0
- data/lib/new_relic/agent/configuration/mask_defaults.rb +10 -0
- data/lib/new_relic/agent/configuration/server_source.rb +27 -0
- data/lib/new_relic/agent/configuration/yaml_source.rb +63 -0
- data/lib/new_relic/agent/cross_process_monitoring.rb +43 -0
- data/lib/new_relic/agent/database.rb +39 -26
- data/lib/new_relic/agent/error_collector.rb +48 -49
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_record.rb +4 -7
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +1 -1
- data/lib/new_relic/agent/instrumentation/authlogic.rb +1 -1
- data/lib/new_relic/agent/instrumentation/browser_monitoring_timings.rb +41 -0
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +35 -12
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +4 -12
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +2 -2
- data/lib/new_relic/agent/instrumentation/memcache.rb +6 -6
- data/lib/new_relic/agent/instrumentation/merb/controller.rb +1 -1
- data/lib/new_relic/agent/instrumentation/merb/errors.rb +1 -1
- data/lib/new_relic/agent/instrumentation/metric_frame.rb +4 -14
- data/lib/new_relic/agent/instrumentation/metric_frame/pop.rb +1 -1
- data/lib/new_relic/agent/instrumentation/net.rb +1 -1
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +6 -20
- data/lib/new_relic/agent/instrumentation/queue_time.rb +2 -2
- data/lib/new_relic/agent/instrumentation/rack.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +7 -7
- data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails/errors.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +5 -5
- data/lib/new_relic/agent/instrumentation/rails3/errors.rb +6 -2
- data/lib/new_relic/agent/instrumentation/resque.rb +81 -0
- data/lib/new_relic/agent/instrumentation/sinatra.rb +21 -10
- data/lib/new_relic/agent/instrumentation/sunspot.rb +1 -1
- data/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb +5 -4
- data/lib/new_relic/agent/method_tracer.rb +11 -9
- data/lib/new_relic/agent/new_relic_service.rb +379 -0
- data/lib/new_relic/agent/pipe_channel_manager.rb +175 -0
- data/lib/new_relic/agent/pipe_service.rb +58 -0
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +86 -0
- data/lib/new_relic/agent/samplers/memory_sampler.rb +6 -8
- data/lib/new_relic/agent/sql_sampler.rb +31 -74
- data/lib/new_relic/agent/stats_engine.rb +0 -5
- 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 +9 -7
- data/lib/new_relic/agent/stats_engine/transactions.rb +20 -12
- data/lib/new_relic/agent/thread.rb +32 -0
- data/lib/new_relic/agent/thread_profiler.rb +306 -0
- data/lib/new_relic/agent/transaction_info.rb +24 -4
- data/lib/new_relic/agent/transaction_sample_builder.rb +12 -13
- data/lib/new_relic/agent/transaction_sampler.rb +49 -65
- data/lib/new_relic/agent/worker_loop.rb +31 -25
- data/lib/new_relic/collection_helper.rb +1 -1
- data/lib/new_relic/commands/deployments.rb +19 -10
- data/lib/new_relic/control.rb +1 -3
- data/lib/new_relic/control/class_methods.rb +10 -5
- data/lib/new_relic/control/frameworks/merb.rb +0 -6
- data/lib/new_relic/control/frameworks/rails.rb +30 -45
- data/lib/new_relic/control/frameworks/rails3.rb +23 -18
- data/lib/new_relic/control/frameworks/rails4.rb +23 -0
- data/lib/new_relic/control/frameworks/ruby.rb +2 -23
- data/lib/new_relic/control/instance_methods.rb +35 -73
- data/lib/new_relic/control/instrumentation.rb +7 -12
- data/lib/new_relic/control/server_methods.rb +17 -19
- data/lib/new_relic/delayed_job_injection.rb +2 -2
- data/lib/new_relic/helper.rb +34 -0
- data/lib/new_relic/language_support.rb +56 -37
- data/lib/new_relic/local_environment.rb +32 -67
- data/lib/new_relic/metric_data.rb +10 -2
- data/lib/new_relic/metric_spec.rb +7 -3
- data/lib/new_relic/noticed_error.rb +32 -9
- data/lib/new_relic/rack.rb +4 -0
- data/lib/new_relic/rack/browser_monitoring.rb +34 -25
- data/lib/new_relic/rack/developer_mode.rb +3 -0
- data/lib/new_relic/rack/error_collector.rb +56 -0
- data/lib/new_relic/stats.rb +9 -7
- data/lib/new_relic/transaction_sample.rb +19 -18
- data/lib/new_relic/transaction_sample/segment.rb +13 -15
- data/lib/new_relic/version.rb +19 -3
- data/lib/newrelic_rpm.rb +1 -1
- data/lib/tasks/tests.rake +6 -8
- data/newrelic.yml +15 -32
- data/newrelic_rpm.gemspec +224 -43
- data/newrelic_rpm.gemspec.erb +54 -0
- data/test/config/newrelic.yml +4 -3
- data/test/config/test_control.rb +18 -18
- data/test/fixtures/gemspec_no_build.rb +442 -0
- data/test/fixtures/gemspec_with_build.rb +442 -0
- data/test/fixtures/gemspec_with_build_and_stage.rb +442 -0
- data/test/intentional_fail.rb +10 -0
- data/test/multiverse/.gitignore +10 -0
- data/test/multiverse/README.md +85 -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 +4 -0
- data/test/multiverse/suites/agent_only/audit_log_test.rb +99 -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/config_file_loading/Envfile +7 -0
- data/test/multiverse/suites/config_file_loading/config_file_loading_test.rb +106 -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/logging/Envfile +4 -0
- data/test/multiverse/suites/logging/config/newrelic.yml +22 -0
- data/test/multiverse/suites/logging/logging_test.rb +143 -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 +22 -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/responses/worst_case_small.html +5000 -0
- data/test/multiverse/suites/rum_auto_instrumentation/sanity_test.rb +102 -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 +77 -0
- data/test/multiverse/suites/sinatra/sinatra_routes_test.rb +46 -0
- data/test/multiverse/suites/sinatra/sinatra_test.rb +55 -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 +151 -227
- data/test/new_relic/agent/agent/start_test.rb +68 -118
- data/test/new_relic/agent/agent/start_worker_thread_test.rb +12 -74
- data/test/new_relic/agent/agent_logger_test.rb +153 -0
- data/test/new_relic/agent/agent_test.rb +116 -30
- 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/audit_logger_test.rb +105 -0
- data/test/new_relic/agent/beacon_configuration_test.rb +63 -67
- data/test/new_relic/agent/browser_monitoring_test.rb +151 -79
- data/test/new_relic/agent/busy_calculator_test.rb +7 -0
- data/test/new_relic/agent/configuration/environment_source_test.rb +79 -0
- data/test/new_relic/agent/configuration/manager_test.rb +204 -0
- data/test/new_relic/agent/configuration/server_source_test.rb +45 -0
- data/test/new_relic/agent/configuration/yaml_source_test.rb +75 -0
- data/test/new_relic/agent/cross_process_monitoring_test.rb +77 -0
- data/test/new_relic/agent/database_test.rb +12 -11
- data/test/new_relic/agent/error_collector/notice_error_test.rb +64 -53
- data/test/new_relic/agent/error_collector_test.rb +33 -19
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +60 -30
- data/test/new_relic/agent/instrumentation/browser_monitoring_timings_test.rb +39 -0
- data/test/new_relic/agent/instrumentation/metric_frame/pop_test.rb +1 -1
- data/test/new_relic/agent/instrumentation/metric_frame_test.rb +6 -0
- data/test/new_relic/agent/instrumentation/queue_time_test.rb +14 -0
- data/test/new_relic/agent/instrumentation/sinatra_test.rb +25 -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 +4 -10
- data/test/new_relic/agent/method_tracer/instance_methods/trace_execution_scoped_test.rb +3 -15
- data/test/new_relic/agent/method_tracer_test.rb +7 -6
- data/test/new_relic/agent/mock_scope_listener.rb +3 -0
- data/test/new_relic/agent/new_relic_service_test.rb +376 -0
- data/test/new_relic/agent/pipe_channel_manager_test.rb +131 -0
- data/test/new_relic/agent/pipe_service_test.rb +113 -0
- data/test/new_relic/agent/rpm_agent_test.rb +27 -50
- 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 +537 -0
- data/test/new_relic/agent/thread_test.rb +89 -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 -7
- data/test/new_relic/agent/transaction_sampler_test.rb +193 -204
- data/test/new_relic/agent/worker_loop_test.rb +26 -11
- data/test/new_relic/agent_test.rb +113 -33
- 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/class_methods_test.rb +0 -18
- data/test/new_relic/control/frameworks/rails_test.rb +26 -0
- data/test/new_relic/control_test.rb +96 -137
- data/test/new_relic/delayed_job_injection_test.rb +6 -1
- data/test/new_relic/dispatcher_test.rb +54 -0
- data/test/new_relic/fake_collector.rb +283 -0
- data/test/new_relic/fake_service.rb +53 -0
- data/test/new_relic/fakes_sending_data.rb +30 -0
- data/test/new_relic/framework_test.rb +53 -0
- data/test/new_relic/load_test.rb +13 -0
- data/test/new_relic/local_environment_test.rb +11 -11
- data/test/new_relic/metric_data_test.rb +45 -16
- data/test/new_relic/noticed_error_test.rb +24 -0
- data/test/new_relic/rack/browser_monitoring_test.rb +20 -10
- 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/stats_test.rb +10 -0
- data/test/new_relic/transaction_sample/segment_test.rb +23 -4
- data/test/new_relic/transaction_sample_test.rb +47 -2
- data/test/new_relic/version_number_test.rb +32 -0
- data/test/script/build_test_gem.sh +9 -3
- data/test/script/ci.sh +108 -35
- data/test/script/ci_agent-tests_runner.sh +82 -0
- data/test/script/ci_multiverse_runner.sh +63 -0
- data/test/test_contexts.rb +1 -0
- data/test/test_helper.rb +68 -18
- data/ui/helpers/developer_mode_helper.rb +21 -11
- data/ui/views/layouts/newrelic_default.rhtml +1 -0
- data/ui/views/newrelic/file/images/arrow-close.png +0 -0
- data/ui/views/newrelic/file/images/arrow-open.png +0 -0
- data/ui/views/newrelic/file/images/blue_bar.gif +0 -0
- data/ui/views/newrelic/file/images/file_icon.png +0 -0
- data/ui/views/newrelic/file/images/gray_bar.gif +0 -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 +191 -65
- data/lib/new_relic/agent/samplers/delayed_job_lock_sampler.rb +0 -40
- data/lib/new_relic/control/configuration.rb +0 -206
- data/lib/new_relic/control/logging_methods.rb +0 -143
- data/lib/new_relic/data_serialization.rb +0 -151
- data/test/new_relic/control/configuration_test.rb +0 -84
- data/test/new_relic/control/logging_methods_test.rb +0 -185
- data/test/new_relic/data_serialization_test.rb +0 -208
@@ -1,26 +1,44 @@
|
|
1
1
|
ENV['SKIP_RAILS'] = 'true'
|
2
2
|
require File.expand_path(File.join(File.dirname(__FILE__),'..','..','test_helper'))
|
3
3
|
require "new_relic/agent/browser_monitoring"
|
4
|
+
require "new_relic/rack/browser_monitoring"
|
5
|
+
require 'ostruct'
|
4
6
|
|
5
7
|
class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
|
6
8
|
include NewRelic::Agent::BrowserMonitoring
|
7
9
|
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
8
|
-
|
10
|
+
|
9
11
|
def setup
|
10
12
|
NewRelic::Agent.manual_start
|
11
|
-
@
|
13
|
+
@config = {
|
14
|
+
:beacon => 'beacon',
|
15
|
+
:disable_mobile_headers => false,
|
16
|
+
:browser_key => 'browserKey',
|
17
|
+
:application_id => '5, 6', # collector can return app multiple ids
|
18
|
+
:'rum.enabled' => true,
|
19
|
+
:episodes_file => 'this_is_my_file',
|
20
|
+
:'rum.jsonp' => true,
|
21
|
+
:license_key => 'a' * 40
|
22
|
+
}
|
23
|
+
NewRelic::Agent.config.apply_config(@config)
|
12
24
|
@episodes_file = "this_is_my_file"
|
13
25
|
NewRelic::Agent.instance.instance_eval do
|
14
|
-
@beacon_configuration = NewRelic::Agent::BeaconConfiguration.new
|
26
|
+
@beacon_configuration = NewRelic::Agent::BeaconConfiguration.new
|
15
27
|
end
|
28
|
+
|
29
|
+
def teardown
|
16
30
|
Thread.current[:last_metric_frame] = nil
|
17
31
|
NewRelic::Agent::TransactionInfo.clear
|
32
|
+
NewRelic::Agent.config.remove_config(@config)
|
18
33
|
end
|
19
34
|
|
20
|
-
def teardown
|
21
35
|
mocha_teardown
|
22
36
|
end
|
23
37
|
|
38
|
+
def test_auto_instrumentation_config_defaults_to_enabled
|
39
|
+
assert NewRelic::Agent.config[:'browser_monitoring.auto_instrument']
|
40
|
+
end
|
41
|
+
|
24
42
|
def test_browser_monitoring_start_time_is_reset_each_request_when_auto_instrument_is_disabled
|
25
43
|
controller = Object.new
|
26
44
|
def controller.perform_action_without_newrelic_trace(method, options={});
|
@@ -29,20 +47,21 @@ class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
|
|
29
47
|
def controller.newrelic_metric_path; "foo"; end
|
30
48
|
controller.extend ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
31
49
|
controller.extend ::NewRelic::Agent::BrowserMonitoring
|
32
|
-
NewRelic::Control.instance['browser_monitoring'] = { 'auto_instrument' => false }
|
33
50
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
51
|
+
with_config(:'browser_monitoring.auto_instrument' => false) do
|
52
|
+
controller.perform_action_with_newrelic_trace(:index)
|
53
|
+
first_request_start_time = controller.send(:browser_monitoring_start_time)
|
54
|
+
controller.perform_action_with_newrelic_trace(:index)
|
55
|
+
second_request_start_time = controller.send(:browser_monitoring_start_time)
|
38
56
|
|
39
|
-
|
40
|
-
|
41
|
-
|
57
|
+
# assert that these aren't the same time object
|
58
|
+
# the start time should be reinitialized each request to the controller
|
59
|
+
assert !(first_request_start_time.equal? second_request_start_time)
|
60
|
+
end
|
42
61
|
end
|
43
62
|
|
44
63
|
def test_browser_timing_header_with_no_beacon_configuration
|
45
|
-
NewRelic::Agent.instance.
|
64
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns( nil)
|
46
65
|
header = browser_timing_header
|
47
66
|
assert_equal "", header
|
48
67
|
end
|
@@ -53,15 +72,17 @@ class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
|
|
53
72
|
end
|
54
73
|
|
55
74
|
def test_browser_timing_header_with_rum_enabled_not_specified
|
56
|
-
NewRelic::Agent.instance.
|
75
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns( NewRelic::Agent::BeaconConfiguration.new)
|
57
76
|
header = browser_timing_header
|
58
77
|
assert_equal "<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
|
59
78
|
end
|
60
79
|
|
61
80
|
def test_browser_timing_header_with_rum_enabled_false
|
62
|
-
|
63
|
-
|
64
|
-
|
81
|
+
with_config(:'rum.enabled' => false) do
|
82
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns( NewRelic::Agent::BeaconConfiguration.new)
|
83
|
+
header = browser_timing_header
|
84
|
+
assert_equal "", header
|
85
|
+
end
|
65
86
|
end
|
66
87
|
|
67
88
|
def test_browser_timing_header_disable_all_tracing
|
@@ -81,28 +102,34 @@ class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
|
|
81
102
|
end
|
82
103
|
|
83
104
|
def test_browser_timing_footer
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
snippet = '<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
|
105
|
+
with_config(:license_key => 'a' * 13) do
|
106
|
+
browser_timing_header
|
107
|
+
footer = browser_timing_footer
|
108
|
+
snippet = '<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
|
89
109
|
NREUMQ.push(["load",new Date().getTime()]);
|
90
110
|
var e=document.createElement("script");'
|
91
|
-
|
111
|
+
assert(footer.include?(snippet),
|
112
|
+
"Expected footer to include snippet: #{snippet}, but instead was #{footer}")
|
113
|
+
end
|
92
114
|
end
|
93
115
|
|
94
116
|
def test_browser_timing_footer_with_no_browser_key_rum_enabled
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
117
|
+
with_config(:browser_key => '') do
|
118
|
+
browser_timing_header
|
119
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns(NewRelic::Agent::BeaconConfiguration.new)
|
120
|
+
footer = browser_timing_footer
|
121
|
+
assert_equal "", footer
|
122
|
+
end
|
99
123
|
end
|
100
124
|
|
101
125
|
def test_browser_timing_footer_with_no_browser_key_rum_disabled
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
126
|
+
with_config(:'rum.enabled' => false) do
|
127
|
+
browser_timing_header
|
128
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration) \
|
129
|
+
.returns(NewRelic::Agent::BeaconConfiguration.new)
|
130
|
+
footer = browser_timing_footer
|
131
|
+
assert_equal "", footer
|
132
|
+
end
|
106
133
|
end
|
107
134
|
|
108
135
|
def test_browser_timing_footer_with_rum_enabled_not_specified
|
@@ -110,26 +137,27 @@ var e=document.createElement("script");'
|
|
110
137
|
|
111
138
|
license_bytes = [];
|
112
139
|
("a" * 13).each_byte {|byte| license_bytes << byte}
|
113
|
-
config = NewRelic::Agent::BeaconConfiguration.new
|
140
|
+
config = NewRelic::Agent::BeaconConfiguration.new
|
114
141
|
config.expects(:license_bytes).returns(license_bytes).at_least_once
|
115
|
-
NewRelic::Agent.instance.
|
142
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns(config).at_least_once
|
116
143
|
footer = browser_timing_footer
|
117
144
|
beginning_snippet = '<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
|
118
145
|
NREUMQ.push(["load",new Date().getTime()]);
|
119
146
|
var e=document.createElement("script");'
|
120
|
-
ending_snippet = "])
|
121
|
-
assert(footer.include?(beginning_snippet),
|
122
|
-
|
147
|
+
ending_snippet = "]);</script>"
|
148
|
+
assert(footer.include?(beginning_snippet),
|
149
|
+
"expected footer to include beginning snippet: #{beginning_snippet}, but was #{footer}")
|
150
|
+
assert(footer.include?(ending_snippet),
|
151
|
+
"expected footer to include ending snippet: #{ending_snippet}, but was #{footer}")
|
123
152
|
end
|
124
153
|
|
125
154
|
def test_browser_timing_footer_with_no_beacon_configuration
|
126
155
|
browser_timing_header
|
127
|
-
NewRelic::Agent.instance.
|
156
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns( nil)
|
128
157
|
footer = browser_timing_footer
|
129
158
|
assert_equal "", footer
|
130
159
|
end
|
131
160
|
|
132
|
-
|
133
161
|
def test_browser_timing_footer_disable_all_tracing
|
134
162
|
browser_timing_header
|
135
163
|
footer = nil
|
@@ -148,30 +176,31 @@ var e=document.createElement("script");'
|
|
148
176
|
assert_equal "", footer
|
149
177
|
end
|
150
178
|
|
151
|
-
def
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
179
|
+
def test_browser_timing_footer_browser_key_missing
|
180
|
+
with_config(:browser_key => '') do
|
181
|
+
fake_config = mock('beacon configuration')
|
182
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns(fake_config)
|
183
|
+
fake_config.expects(:nil?).returns(false)
|
184
|
+
fake_config.expects(:enabled?).returns(true)
|
185
|
+
self.expects(:generate_footer_js).never
|
186
|
+
assert_equal('', browser_timing_footer, "should not return a footer when there is no key")
|
187
|
+
end
|
159
188
|
end
|
160
189
|
|
161
190
|
def test_generate_footer_js_null_case
|
162
191
|
self.expects(:browser_monitoring_start_time).returns(nil)
|
163
192
|
assert_equal('', generate_footer_js(NewRelic::Agent.instance.beacon_configuration), "should not send javascript when there is no start time")
|
164
193
|
end
|
165
|
-
|
194
|
+
|
166
195
|
def test_generate_footer_js_with_start_time
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
196
|
+
with_config(:browser_key => 'a' * 40) do
|
197
|
+
self.expects(:browser_monitoring_start_time).returns(Time.at(100))
|
198
|
+
fake_bc = mock('beacon configuration')
|
199
|
+
NewRelic::Agent.instance.stubs(:beacon_configuration).returns(fake_bc)
|
200
|
+
self.expects(:footer_js_string).with(NewRelic::Agent.instance.beacon_configuration).returns('footer js')
|
201
|
+
assert_equal('footer js', generate_footer_js(NewRelic::Agent.instance.beacon_configuration),
|
202
|
+
'should generate and return the footer JS when there is a start time')
|
203
|
+
end
|
175
204
|
end
|
176
205
|
|
177
206
|
def test_browser_monitoring_transaction_name_basic
|
@@ -193,27 +222,23 @@ var e=document.createElement("script");'
|
|
193
222
|
def test_browser_monitoring_transaction_name_nil
|
194
223
|
assert_equal('(unknown)', browser_monitoring_transaction_name, "should fill in a default when it is nil")
|
195
224
|
end
|
196
|
-
|
225
|
+
|
197
226
|
def test_browser_monitoring_transaction_name_when_tt_disabled
|
198
|
-
|
199
|
-
|
227
|
+
with_config(:'transaction_tracer.enabled' => false) do
|
228
|
+
perform_action_with_newrelic_trace(:name => 'disabled_transactions') do
|
229
|
+
self.class.inspect
|
230
|
+
end
|
200
231
|
|
201
|
-
|
202
|
-
|
232
|
+
assert_match(/disabled_transactions/, browser_monitoring_transaction_name,
|
233
|
+
"should name transaction when transaction tracing disabled")
|
203
234
|
end
|
204
|
-
|
205
|
-
|
206
|
-
"should name transaction when transaction tracing disabled")
|
207
|
-
ensure
|
208
|
-
@sampler.enable
|
209
|
-
end
|
210
|
-
|
211
|
-
|
235
|
+
end
|
236
|
+
|
212
237
|
def test_browser_monitoring_start_time
|
213
238
|
mock = mock('transaction info')
|
214
|
-
|
239
|
+
|
215
240
|
NewRelic::Agent::TransactionInfo.set(mock)
|
216
|
-
|
241
|
+
|
217
242
|
mock.stubs(:start_time).returns(Time.at(100))
|
218
243
|
mock.stubs(:guid).returns('ABC')
|
219
244
|
assert_equal(Time.at(100), browser_monitoring_start_time, "should take the value from the thread local")
|
@@ -228,7 +253,7 @@ var e=document.createElement("script");'
|
|
228
253
|
def test_browser_monitoring_app_time_nonzero
|
229
254
|
start = Time.now
|
230
255
|
self.expects(:browser_monitoring_start_time).returns(start - 1)
|
231
|
-
Time.
|
256
|
+
Time.stubs(:now).returns(start)
|
232
257
|
assert_equal(1000, browser_monitoring_app_time, 'should return a rounded time')
|
233
258
|
end
|
234
259
|
|
@@ -255,10 +280,6 @@ var e=document.createElement("script");'
|
|
255
280
|
end
|
256
281
|
|
257
282
|
def test_footer_js_string_basic
|
258
|
-
beacon = ''
|
259
|
-
license_key = ''
|
260
|
-
application_id = 1
|
261
|
-
|
262
283
|
# mocking this because JRuby thinks that Time.now - Time.now
|
263
284
|
# always takes at least 1ms
|
264
285
|
self.expects(:browser_monitoring_app_time).returns(0)
|
@@ -269,21 +290,21 @@ var e=document.createElement("script");'
|
|
269
290
|
|
270
291
|
sample = mock('transaction info')
|
271
292
|
NewRelic::Agent::TransactionInfo.set(sample)
|
272
|
-
|
293
|
+
|
273
294
|
sample.stubs(:start_time).returns(Time.at(100))
|
274
295
|
sample.stubs(:guid).returns('ABC')
|
275
296
|
sample.stubs(:transaction_name).returns('most recent transaction')
|
276
297
|
sample.stubs(:include_guid?).returns(true)
|
277
298
|
sample.stubs(:duration).returns(12.0)
|
278
299
|
sample.stubs(:token).returns('0123456789ABCDEF')
|
279
|
-
|
300
|
+
|
280
301
|
self.expects(:obfuscate).with(NewRelic::Agent.instance.beacon_configuration, 'most recent transaction').returns('most recent transaction')
|
281
302
|
self.expects(:obfuscate).with(NewRelic::Agent.instance.beacon_configuration, 'user').returns('user')
|
282
303
|
self.expects(:obfuscate).with(NewRelic::Agent.instance.beacon_configuration, 'account').returns('account')
|
283
304
|
self.expects(:obfuscate).with(NewRelic::Agent.instance.beacon_configuration, 'product').returns('product')
|
284
305
|
|
285
|
-
value = footer_js_string(NewRelic::Agent.instance.beacon_configuration
|
286
|
-
assert_equal(
|
306
|
+
value = footer_js_string(NewRelic::Agent.instance.beacon_configuration)
|
307
|
+
assert_equal(%'<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {\nNREUMQ.push(["load",new Date().getTime()]);\nvar e=document.createElement("script");\ne.type="text/javascript";\ne.src=(("http:"===document.location.protocol)?"http:":"https:") + "//" +\n "this_is_my_file";\ndocument.body.appendChild(e);\nif(NREUMQ.a)NREUMQ.a();\n};\nNREUMQ.a=window.onload;window.onload=NREUMQ.f;\n};\nNREUMQ.push(["nrfj","beacon","browserKey","5, 6","most recent transaction",0,0,new Date().getTime(),"ABC","0123456789ABCDEF","user","account","product"]);</script>', value, "should return the javascript given some default values")
|
287
308
|
end
|
288
309
|
|
289
310
|
def test_html_safe_if_needed_unsafed
|
@@ -320,4 +341,55 @@ var e=document.createElement("script");'
|
|
320
341
|
output = obfuscate(NewRelic::Agent.instance.beacon_configuration, text)
|
321
342
|
assert_equal('YCJrZXV2fih5Y25vaCFtZSR2a2ZkZSp/aXV1YyNsZHZ3cSl6YmluZCJsYiV1amllZit4aHl2YiRtZ3d4cCp7ZWhiZyNrYyZ0ZWhmZyx5ZHp3ZSVuZnh5cyt8ZGRhZiRqYCd7ZGtnYC11Z3twZCZvaXl6cix9aGdgYSVpYSh6Z2pgYSF2Znxx', output, "should output obfuscated text")
|
322
343
|
end
|
344
|
+
|
345
|
+
def test_no_mobile_response_header_if_no_mobile_request_header_given
|
346
|
+
request = Rack::Request.new({})
|
347
|
+
response = Rack::Response.new
|
348
|
+
|
349
|
+
NewRelic::Agent::BrowserMonitoring.insert_mobile_response_header(request, response)
|
350
|
+
assert_nil response['X-NewRelic-Beacon-Url']
|
351
|
+
end
|
352
|
+
|
353
|
+
def test_no_mobile_response_header_if_mobile_request_header_is_false
|
354
|
+
request = Rack::Request.new('HTTP_X_NEWRELIC_MOBILE_TRACE' => 'false')
|
355
|
+
response = Rack::Response.new
|
356
|
+
|
357
|
+
NewRelic::Agent::BrowserMonitoring.insert_mobile_response_header(request, response)
|
358
|
+
assert_nil response['X-NewRelic-Beacon-Url']
|
359
|
+
end
|
360
|
+
|
361
|
+
def test_place_beacon_url_header_when_given_mobile_request_header
|
362
|
+
response = mobile_transaction
|
363
|
+
assert_equal('http://beacon/mobile/1/browserKey',
|
364
|
+
response['X-NewRelic-Beacon-Url'])
|
365
|
+
end
|
366
|
+
|
367
|
+
def test_place_beacon_url_header_when_given_mobile_request_header_with_https
|
368
|
+
request = Rack::Request.new('X_NEWRELIC_MOBILE_TRACE' => 'true',
|
369
|
+
'rack.url_scheme' => 'https')
|
370
|
+
response = mobile_transaction(request)
|
371
|
+
assert_equal('https://beacon/mobile/1/browserKey',
|
372
|
+
response['X-NewRelic-Beacon-Url'])
|
373
|
+
end
|
374
|
+
|
375
|
+
def test_place_beacon_payload_head_when_given_mobile_request_header
|
376
|
+
Time.stubs(:now).returns(6)
|
377
|
+
response = mobile_transaction
|
378
|
+
txn_name = obfuscate(NewRelic::Agent.instance.beacon_configuration,
|
379
|
+
browser_monitoring_transaction_name)
|
380
|
+
expected_payload = %|["5, 6","#{txn_name}",#{browser_monitoring_queue_time},#{browser_monitoring_app_time}]|
|
381
|
+
|
382
|
+
assert_equal expected_payload, response['X-NewRelic-App-Server-Metrics'].strip
|
383
|
+
end
|
384
|
+
|
385
|
+
def mobile_transaction(request=nil)
|
386
|
+
request ||= Rack::Request.new('X-NewRelic-Mobile-Trace' => 'true')
|
387
|
+
response = Rack::Response.new
|
388
|
+
txn_data = OpenStruct.new(:transaction_name => 'a transaction name',
|
389
|
+
:start_time => 5,
|
390
|
+
:force_persist_sample? => false)
|
391
|
+
NewRelic::Agent::TransactionInfo.set(txn_data)
|
392
|
+
NewRelic::Agent::BrowserMonitoring.insert_mobile_response_header(request, response)
|
393
|
+
response
|
394
|
+
end
|
323
395
|
end
|
@@ -78,4 +78,11 @@ class NewRelic::Agent::BusyCalculatorTest < Test::Unit::TestCase
|
|
78
78
|
NewRelic::Agent::BusyCalculator.harvest_busy
|
79
79
|
assert_equal 3, @instance_busy.call_count
|
80
80
|
end
|
81
|
+
def test_can_turn_off_recording
|
82
|
+
with_config(:report_instance_busy => false) do
|
83
|
+
assert_equal 0, @instance_busy.call_count, "Problem with test--instance busy not starting off at zero."
|
84
|
+
NewRelic::Agent::BusyCalculator.harvest_busy
|
85
|
+
assert_equal 0, @instance_busy.call_count
|
86
|
+
end
|
87
|
+
end
|
81
88
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','test_helper'))
|
2
|
+
require 'new_relic/agent/configuration/environment_source'
|
3
|
+
|
4
|
+
module NewRelic::Agent::Configuration
|
5
|
+
class EnvironmentSourceTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@original_env = {}
|
9
|
+
@original_env.replace(ENV)
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
ENV.replace(@original_env)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_environment_strings_are_applied
|
17
|
+
assert_applied_string 'NRCONFIG', 'config_path'
|
18
|
+
assert_applied_string 'NEW_RELIC_LICENSE_KEY', 'license_key'
|
19
|
+
assert_applied_string 'NEWRELIC_LICENSE_KEY', 'license_key'
|
20
|
+
assert_applied_string 'NEW_RELIC_APP_NAME', 'app_name'
|
21
|
+
assert_applied_string 'NEWRELIC_APP_NAME', 'app_name'
|
22
|
+
assert_applied_string 'NEW_RELIC_HOST', 'host'
|
23
|
+
assert_applied_string 'NEW_RELIC_PORT', 'port'
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_environment_symbols_are_applied
|
27
|
+
assert_applied_symbol 'NEW_RELIC_DISPATCHER', 'dispatcher'
|
28
|
+
assert_applied_symbol 'NEWRELIC_DISPATCHER', 'dispatcher'
|
29
|
+
assert_applied_symbol 'NEW_RELIC_FRAMEWORK', 'framework'
|
30
|
+
assert_applied_symbol 'NEWRELIC_FRAMEWORK', 'framework'
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_environment_booleans_truths_are_applied
|
34
|
+
ENV['NEWRELIC_ENABLE'] = 'true'
|
35
|
+
assert EnvironmentSource.new[:agent_enabled]
|
36
|
+
ENV['NEWRELIC_ENABLE'] = 'on'
|
37
|
+
assert EnvironmentSource.new[:agent_enabled]
|
38
|
+
ENV['NEWRELIC_ENABLE'] = 'yes'
|
39
|
+
assert EnvironmentSource.new[:agent_enabled]
|
40
|
+
ENV.delete('NEWRELIC_ENABLE')
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_environment_booleans_falsehoods_are_applied
|
44
|
+
ENV['NEWRELIC_ENABLE'] = 'false'
|
45
|
+
assert !EnvironmentSource.new[:agent_enabled]
|
46
|
+
ENV['NEWRELIC_ENABLE'] = 'off'
|
47
|
+
assert !EnvironmentSource.new[:agent_enabled]
|
48
|
+
ENV['NEWRELIC_ENABLE'] = 'no'
|
49
|
+
assert !EnvironmentSource.new[:agent_enabled]
|
50
|
+
ENV.delete('NEWRELIC_ENABLE')
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_set_log_config_from_environment
|
54
|
+
ENV['NEW_RELIC_LOG'] = 'off/in/space.log'
|
55
|
+
source = EnvironmentSource.new
|
56
|
+
assert_equal 'off/in', source[:log_file_path]
|
57
|
+
assert_equal 'space.log', source[:log_file_name]
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_set_log_config_STDOUT_from_environment
|
61
|
+
ENV['NEW_RELIC_LOG'] = 'STDOUT'
|
62
|
+
source = EnvironmentSource.new
|
63
|
+
assert_equal 'STDOUT', source[:log_file_name]
|
64
|
+
assert_equal 'STDOUT', source[:log_file_path]
|
65
|
+
end
|
66
|
+
|
67
|
+
def assert_applied_string(env_var, config_var)
|
68
|
+
ENV[env_var] = 'test value'
|
69
|
+
assert_equal 'test value', EnvironmentSource.new[config_var.to_sym]
|
70
|
+
ENV.delete(env_var)
|
71
|
+
end
|
72
|
+
|
73
|
+
def assert_applied_symbol(env_var, config_var)
|
74
|
+
ENV[env_var] = 'test value'
|
75
|
+
assert_equal :'test value', EnvironmentSource.new[config_var.to_sym]
|
76
|
+
ENV.delete(env_var)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|