newrelic_rpm 3.7.0.174.beta → 3.7.0.177

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data.tar.gz.sig +0 -0
  2. data/CHANGELOG +27 -4
  3. data/bin/nrdebug +10 -4
  4. data/lib/new_relic/agent.rb +33 -11
  5. data/lib/new_relic/agent/agent.rb +83 -120
  6. data/lib/new_relic/agent/agent_logger.rb +28 -16
  7. data/lib/new_relic/agent/audit_logger.rb +3 -4
  8. data/lib/new_relic/agent/autostart.rb +20 -8
  9. data/lib/new_relic/agent/commands/agent_command_router.rb +26 -17
  10. data/lib/new_relic/agent/commands/thread_profiler_session.rb +2 -2
  11. data/lib/new_relic/agent/configuration/default_source.rb +146 -59
  12. data/lib/new_relic/agent/configuration/manager.rb +3 -3
  13. data/lib/new_relic/agent/cross_app_monitor.rb +15 -40
  14. data/lib/new_relic/agent/cross_app_tracing.rb +20 -12
  15. data/lib/new_relic/agent/database.rb +24 -0
  16. data/lib/new_relic/agent/error_collector.rb +6 -2
  17. data/lib/new_relic/agent/instrumentation/merb/controller.rb +3 -1
  18. data/lib/new_relic/agent/javascript_instrumentor.rb +187 -0
  19. data/lib/new_relic/agent/new_relic_service.rb +30 -22
  20. data/lib/new_relic/agent/obfuscator.rb +48 -0
  21. data/lib/new_relic/agent/request_sampler.rb +5 -13
  22. data/lib/new_relic/agent/shim_agent.rb +1 -0
  23. data/lib/new_relic/agent/sql_sampler.rb +15 -5
  24. data/lib/new_relic/agent/stats_engine/metric_stats.rb +9 -4
  25. data/lib/new_relic/agent/transaction.rb +0 -1
  26. data/lib/new_relic/agent/transaction_sampler.rb +28 -16
  27. data/lib/new_relic/agent/transaction_state.rb +9 -0
  28. data/lib/new_relic/agent/transaction_timings.rb +5 -1
  29. data/lib/new_relic/agent/worker_loop.rb +0 -10
  30. data/lib/new_relic/cli/deployments.rb +1 -1
  31. data/lib/new_relic/control/instance_methods.rb +1 -1
  32. data/lib/new_relic/helper.rb +3 -1
  33. data/lib/new_relic/rack/browser_monitoring.rb +1 -2
  34. data/lib/new_relic/transaction_sample.rb +11 -13
  35. data/lib/newrelic_rpm.rb +1 -0
  36. data/test/agent_helper.rb +20 -5
  37. data/test/environments/lib/environments/runner.rb +1 -0
  38. data/test/helpers/file_searching.rb +28 -0
  39. data/test/multiverse/lib/multiverse/suite.rb +36 -19
  40. data/test/multiverse/suites/agent_only/collector_exception_handling_test.rb +49 -0
  41. data/test/multiverse/suites/agent_only/http_response_code_test.rb +2 -2
  42. data/test/multiverse/suites/agent_only/rum_instrumentation_test.rb +4 -2
  43. data/test/multiverse/suites/agent_only/service_timeout_test.rb +1 -1
  44. data/test/multiverse/suites/agent_only/set_transaction_name_test.rb +7 -4
  45. data/test/multiverse/suites/agent_only/thread_profiling_test.rb +2 -1
  46. data/test/multiverse/suites/rails/error_tracing_test.rb +34 -4
  47. data/test/multiverse/suites/rails/ignore_test.rb +1 -1
  48. data/test/multiverse/suites/rails/request_statistics_test.rb +1 -3
  49. data/test/multiverse/suites/sequel/sequel_instrumentation_test.rb +10 -7
  50. data/test/multiverse/suites/sinatra/ignoring_test.rb +1 -1
  51. data/test/new_relic/agent/agent/start_worker_thread_test.rb +1 -1
  52. data/test/new_relic/agent/agent_logger_test.rb +108 -114
  53. data/test/new_relic/agent/agent_test.rb +139 -21
  54. data/test/new_relic/agent/audit_logger_test.rb +22 -20
  55. data/test/new_relic/agent/autostart_test.rb +3 -2
  56. data/test/new_relic/agent/commands/agent_command_router_test.rb +51 -32
  57. data/test/new_relic/agent/configuration/default_source_test.rb +8 -2
  58. data/test/new_relic/agent/configuration/manager_test.rb +5 -1
  59. data/test/new_relic/agent/configuration/orphan_configuration_test.rb +57 -0
  60. data/test/new_relic/agent/cross_app_monitor_test.rb +10 -26
  61. data/test/new_relic/agent/database_test.rb +32 -0
  62. data/test/new_relic/agent/error_collector_test.rb +33 -16
  63. data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +88 -71
  64. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +2 -2
  65. data/test/new_relic/agent/javascript_instrumentor_test.rb +341 -0
  66. data/test/new_relic/agent/memcache_instrumentation_test.rb +91 -89
  67. data/test/new_relic/agent/method_tracer_test.rb +1 -1
  68. data/test/new_relic/agent/obfuscator_test.rb +77 -0
  69. data/test/new_relic/agent/pipe_channel_manager_test.rb +5 -5
  70. data/test/new_relic/agent/pipe_service_test.rb +1 -1
  71. data/test/new_relic/agent/request_sampler_test.rb +21 -11
  72. data/test/new_relic/agent/sql_sampler_test.rb +52 -8
  73. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +6 -6
  74. data/test/new_relic/agent/stats_engine_test.rb +18 -2
  75. data/test/new_relic/agent/transaction_sampler_test.rb +98 -53
  76. data/test/new_relic/agent/transaction_state_test.rb +44 -0
  77. data/test/new_relic/agent/transaction_test.rb +1 -1
  78. data/test/new_relic/agent/transaction_timings_test.rb +15 -5
  79. data/test/new_relic/agent/worker_loop_test.rb +0 -9
  80. data/test/new_relic/agent_test.rb +9 -21
  81. data/test/new_relic/data_container_tests.rb +72 -0
  82. data/test/new_relic/fake_collector.rb +69 -20
  83. data/test/new_relic/http_client_test_cases.rb +17 -2
  84. data/test/new_relic/license_test.rb +6 -15
  85. data/test/new_relic/multiverse_helpers.rb +2 -3
  86. data/test/new_relic/rack/browser_monitoring_test.rb +15 -37
  87. data/test/new_relic/transaction_sample_test.rb +92 -62
  88. data/test/performance/suites/rum_autoinsertion.rb +0 -3
  89. data/test/rum/x_ua_meta_tag_spaces_around_equals.result.html +10 -0
  90. data/test/rum/x_ua_meta_tag_spaces_around_equals.source.html +10 -0
  91. data/test/test_helper.rb +9 -5
  92. metadata +29 -11
  93. metadata.gz.sig +0 -0
  94. data/lib/new_relic/agent/beacon_configuration.rb +0 -37
  95. data/lib/new_relic/agent/browser_monitoring.rb +0 -257
  96. data/test/new_relic/agent/beacon_configuration_test.rb +0 -44
  97. data/test/new_relic/agent/browser_monitoring_test.rb +0 -474
@@ -8,9 +8,9 @@ module NewRelic
8
8
  module Agent
9
9
  class AgentLogger
10
10
 
11
- def initialize(config, root = "", override_logger=nil)
12
- create_log(config, root, override_logger)
13
- set_log_level!(config)
11
+ def initialize(root = "", override_logger=nil)
12
+ create_log(root, override_logger)
13
+ set_log_level!
14
14
  set_log_format!
15
15
 
16
16
  gather_startup_logs
@@ -36,6 +36,13 @@ module NewRelic
36
36
  format_and_send(:debug, msgs)
37
37
  end
38
38
 
39
+ def log_once(level, key, *msgs)
40
+ return if already_logged.include?(key)
41
+
42
+ already_logged[key] = true
43
+ self.send(level, *msgs)
44
+ end
45
+
39
46
  def is_startup_logger?
40
47
  false
41
48
  end
@@ -66,27 +73,27 @@ module NewRelic
66
73
  end
67
74
  end
68
75
 
69
- def create_log(config, root, override_logger)
76
+ def create_log(root, override_logger)
70
77
  if !override_logger.nil?
71
78
  @log = override_logger
72
- elsif config[:agent_enabled] == false
79
+ elsif ::NewRelic::Agent.config[:agent_enabled] == false
73
80
  create_null_logger
74
81
  else
75
- if wants_stdout(config)
82
+ if wants_stdout?
76
83
  @log = ::Logger.new(STDOUT)
77
84
  else
78
- create_log_to_file(config, root)
85
+ create_log_to_file(root)
79
86
  end
80
87
  end
81
88
  end
82
89
 
83
- def create_log_to_file(config, root)
84
- path = find_or_create_file_path(config[:log_file_path], root)
90
+ def create_log_to_file(root)
91
+ path = find_or_create_file_path(::NewRelic::Agent.config[:log_file_path], root)
85
92
  if path.nil?
86
93
  @log = ::Logger.new(STDOUT)
87
- warn("Error creating log directory #{config[:log_file_path]}, using standard out for logging.")
94
+ warn("Error creating log directory #{::NewRelic::Agent.config[:log_file_path]}, using standard out for logging.")
88
95
  else
89
- file_path = "#{path}/#{config[:log_file_name]}"
96
+ file_path = "#{path}/#{::NewRelic::Agent.config[:log_file_name]}"
90
97
  begin
91
98
  @log = ::Logger.new(file_path)
92
99
  rescue => e
@@ -97,11 +104,16 @@ module NewRelic
97
104
  end
98
105
 
99
106
  def create_null_logger
100
- @log = NewRelic::Agent::NullLogger.new
107
+ @log = ::NewRelic::Agent::NullLogger.new
108
+ end
109
+
110
+ def already_logged
111
+ @already_logged ||= {}
112
+ @already_logged
101
113
  end
102
114
 
103
- def wants_stdout(config)
104
- config[:log_file_path].upcase == "STDOUT"
115
+ def wants_stdout?
116
+ ::NewRelic::Agent.config[:log_file_path].upcase == "STDOUT"
105
117
  end
106
118
 
107
119
  def find_or_create_file_path(path_setting, root)
@@ -114,8 +126,8 @@ module NewRelic
114
126
  nil
115
127
  end
116
128
 
117
- def set_log_level!(config)
118
- @log.level = AgentLogger.log_level_for(config.fetch(:log_level))
129
+ def set_log_level!
130
+ @log.level = AgentLogger.log_level_for(::NewRelic::Agent.config[:log_level])
119
131
  end
120
132
 
121
133
  LOG_LEVELS = {
@@ -8,9 +8,8 @@ require 'fileutils'
8
8
  module NewRelic
9
9
  module Agent
10
10
  class AuditLogger
11
- def initialize(config)
12
- @config = config
13
- @enabled = @config[:'audit_log.enabled']
11
+ def initialize
12
+ @enabled = NewRelic::Agent.config[:'audit_log.enabled']
14
13
  @encoder = NewRelic::Agent::NewRelicService::Encoders::Identity
15
14
  end
16
15
 
@@ -51,7 +50,7 @@ module NewRelic
51
50
  end
52
51
 
53
52
  def ensure_log_path
54
- path = File.expand_path(@config[:'audit_log.path'])
53
+ path = File.expand_path(NewRelic::Agent.config[:'audit_log.path'])
55
54
  log_dir = File.dirname(path)
56
55
 
57
56
  begin
@@ -19,16 +19,28 @@ module NewRelic
19
19
  extend self
20
20
 
21
21
 
22
- # The constants, execuatables (i.e. $0) and rake tasks used can be
22
+ # The constants, executables (i.e. $0) and rake tasks used can be
23
23
  # configured with the config keys 'autostart.blacklisted_constants',
24
24
  # 'autostart.blacklisted_executables' and
25
25
  # 'autostart.blacklisted_rake_tasks'
26
26
  def agent_should_start?
27
- !blacklisted?('autostart.blacklisted_constants') { |name| constant_is_defined?(name) } &&
28
- !blacklisted?('autostart.blacklisted_executables') { |bin| File.basename($0) == bin } &&
27
+ !blacklisted_constants? &&
28
+ !blacklisted_executables? &&
29
29
  !in_blacklisted_rake_task?
30
30
  end
31
31
 
32
+ def blacklisted_constants?
33
+ blacklisted?(NewRelic::Agent.config[:'autostart.blacklisted_constants']) do |name|
34
+ constant_is_defined?(name)
35
+ end
36
+ end
37
+
38
+ def blacklisted_executables?
39
+ blacklisted?(NewRelic::Agent.config[:'autostart.blacklisted_executables']) do |bin|
40
+ File.basename($0) == bin
41
+ end
42
+ end
43
+
32
44
  # Lookup whether namespaced constants (e.g. ::Foo::Bar::Baz) are in the
33
45
  # environment.
34
46
  def constant_is_defined?(const_name)
@@ -52,18 +64,18 @@ module NewRelic
52
64
  end
53
65
  end
54
66
 
55
- def blacklisted?(key, &block)
56
- ::NewRelic::Agent.config[key].split(/\s*,\s*/).any?(&block)
67
+ def blacklisted?(value, &block)
68
+ value.split(/\s*,\s*/).any?(&block)
57
69
  end
58
70
 
59
71
  def in_blacklisted_rake_task?
60
72
  tasks = begin
61
- ::Rake.application.top_level_tasks
62
- rescue => e
73
+ ::Rake.application.top_level_tasks
74
+ rescue => e
63
75
  ::NewRelic::Agent.logger.debug("Not in Rake environment so skipping blacklisted_rake_tasks check: #{e}")
64
76
  []
65
77
  end
66
- !(tasks & ::NewRelic::Agent.config['autostart.blacklisted_rake_tasks'].split(/\s*,\s*/)).empty?
78
+ !(tasks & ::NewRelic::Agent.config[:'autostart.blacklisted_rake_tasks'].split(/\s*,\s*/)).empty?
67
79
  end
68
80
  end
69
81
  end
@@ -32,6 +32,10 @@ module NewRelic
32
32
  @handlers['start_profiler'] = Proc.new { |cmd| thread_profiler_session.handle_start_command(cmd) }
33
33
  @handlers['stop_profiler'] = Proc.new { |cmd| thread_profiler_session.handle_stop_command(cmd) }
34
34
  @handlers['active_xray_sessions'] = Proc.new { |cmd| xray_session_collection.handle_active_xray_sessions(cmd) }
35
+
36
+ if event_listener
37
+ event_listener.subscribe(:before_shutdown, &method(:on_before_shutdown))
38
+ end
35
39
  end
36
40
 
37
41
  def new_relic_service
@@ -55,22 +59,33 @@ module NewRelic
55
59
  commands.any? {|command| command.name == 'active_xray_sessions'}
56
60
  end
57
61
 
58
- NO_PROFILES_TO_SEND = {}.freeze
62
+ def on_before_shutdown(*args)
63
+ if self.thread_profiler_session.running?
64
+ self.thread_profiler_session.stop(true)
65
+ end
66
+ end
59
67
 
60
- def harvest_data_to_send(disconnecting)
68
+ def harvest!
61
69
  profiles = []
62
70
  profiles += harvest_from_xray_session_collection
63
- profiles += harvest_from_thread_profiler_session(disconnecting)
64
-
65
- format_harvest_data(profiles)
71
+ profiles += harvest_from_thread_profiler_session
72
+ log_profiles(profiles)
73
+ profiles
66
74
  end
67
75
 
76
+ # We don't currently support merging thread profiles that failed to send
77
+ # back into the AgentCommandRouter, so we just no-op this method.
78
+ # Same with reset! - we don't support asynchronous cancellation of a
79
+ # running thread profile or X-Ray session currently.
80
+ def merge!(*args); end
81
+ def reset!; end
82
+
68
83
  def harvest_from_xray_session_collection
69
84
  self.xray_session_collection.harvest_thread_profiles
70
85
  end
71
86
 
72
- def harvest_from_thread_profiler_session(disconnecting)
73
- if self.thread_profiler_session.ready_to_harvest?(disconnecting)
87
+ def harvest_from_thread_profiler_session
88
+ if self.thread_profiler_session.ready_to_harvest?
74
89
  self.thread_profiler_session.stop(true)
75
90
  [self.thread_profiler_session.harvest]
76
91
  else
@@ -78,21 +93,15 @@ module NewRelic
78
93
  end
79
94
  end
80
95
 
81
- def format_harvest_data(profiles)
96
+ def log_profiles(profiles)
82
97
  if profiles.empty?
83
- NewRelic::Agent.logger.debug "No thread profiles with data found to send."
84
- NO_PROFILES_TO_SEND
98
+ ::NewRelic::Agent.logger.debug "No thread profiles with data found to send."
85
99
  else
86
- log_profiles(profiles)
87
- {:profile_data => profiles}
100
+ profile_descriptions = profiles.map { |p| p.to_log_description }
101
+ ::NewRelic::Agent.logger.debug "Sending thread profiles [#{profile_descriptions.join(", ")}]"
88
102
  end
89
103
  end
90
104
 
91
- def log_profiles(profiles)
92
- profile_descriptions = profiles.map { |p| p.to_log_description }
93
- ::NewRelic::Agent.logger.debug "Sending thread profiles [#{profile_descriptions.join(", ")}]"
94
- end
95
-
96
105
  def get_agent_commands
97
106
  commands = new_relic_service.get_agent_commands
98
107
  NewRelic::Agent.logger.debug "Received get_agent_commands = #{commands.inspect}"
@@ -64,8 +64,8 @@ module NewRelic
64
64
  @backtrace_service.subscribed?(NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS)
65
65
  end
66
66
 
67
- def ready_to_harvest?(disconnecting=false)
68
- (running? && disconnecting) || past_time? || stopped?
67
+ def ready_to_harvest?
68
+ past_time? || stopped?
69
69
  end
70
70
 
71
71
  def past_time?
@@ -68,13 +68,15 @@ module NewRelic
68
68
 
69
69
  def self.agent_enabled
70
70
  Proc.new {
71
- self[:enabled] && (self[:developer_mode] || self[:monitor_mode] || self[:monitor_daemons]) && ::NewRelic::Agent::Autostart.agent_should_start?
71
+ NewRelic::Agent.config[:enabled] &&
72
+ (NewRelic::Agent.config[:developer_mode] || NewRelic::Agent.config[:monitor_mode] || NewRelic::Agent.config[:monitor_daemons]) &&
73
+ NewRelic::Agent::Autostart.agent_should_start?
72
74
  }
73
75
  end
74
76
 
75
77
  def self.audit_log_path
76
78
  Proc.new {
77
- File.join(self[:log_file_path], 'newrelic_audit.log')
79
+ File.join(NewRelic::Agent.config[:log_file_path], 'newrelic_audit.log')
78
80
  }
79
81
  end
80
82
 
@@ -95,62 +97,58 @@ module NewRelic
95
97
  end
96
98
 
97
99
  def self.browser_monitoring_auto_instrument
98
- Proc.new { self[:'rum.enabled'] }
100
+ Proc.new { NewRelic::Agent.config[:'rum.enabled'] }
99
101
  end
100
102
 
101
103
  # This check supports the js_errors_beta key we've asked clients to
102
104
  # set. Once JS errors are GA, browser_monitoring.loader can stop
103
105
  # being dynamic.
104
106
  def self.browser_monitoring_loader
105
- Proc.new { self[:js_errors_beta] ? "full" : "rum"}
107
+ Proc.new { NewRelic::Agent.config[:js_errors_beta] ? "full" : "rum"}
106
108
  end
107
109
 
108
110
  def self.slow_sql_record_sql
109
- Proc.new { self[:'transaction_tracer.record_sql'] }
111
+ Proc.new { NewRelic::Agent.config[:'transaction_tracer.record_sql'] }
110
112
  end
111
113
 
112
114
  def self.slow_sql_explain_enabled
113
- Proc.new { self[:'transaction_tracer.explain_enabled'] }
115
+ Proc.new { NewRelic::Agent.config[:'transaction_tracer.explain_enabled'] }
114
116
  end
115
117
 
116
118
  def self.slow_sql_explain_threshold
117
- Proc.new { self[:'transaction_tracer.explain_threshold'] }
118
- end
119
-
120
- def self.slow_sql_stack_trace_threshold
121
- Proc.new { self[:'transaction_tracer.stack_trace_threshold'] }
119
+ Proc.new { NewRelic::Agent.config[:'transaction_tracer.explain_threshold'] }
122
120
  end
123
121
 
124
122
  def self.slow_sql_enabled
125
- Proc.new { self[:'transaction_tracer.enabled'] }
123
+ Proc.new { NewRelic::Agent.config[:'transaction_tracer.enabled'] }
126
124
  end
127
125
 
128
126
  def self.transaction_tracer_transaction_threshold
129
- Proc.new { self[:apdex_t] * 4 }
127
+ Proc.new { NewRelic::Agent.config[:apdex_t] * 4 }
130
128
  end
131
129
 
132
130
  def self.disable_activerecord_instrumentation
133
- Proc.new { self[:skip_ar_instrumentation] }
131
+ Proc.new { NewRelic::Agent.config[:skip_ar_instrumentation] }
134
132
  end
135
133
 
136
134
  def self.api_port
137
- Proc.new { self[:port] }
135
+ Proc.new { NewRelic::Agent.config[:port] }
138
136
  end
139
137
 
140
138
  def self.port
141
- Proc.new { self[:ssl] ? 443 : 80 }
139
+ Proc.new { NewRelic::Agent.config[:ssl] ? 443 : 80 }
142
140
  end
143
141
 
144
142
  def self.strip_exception_messages_enabled
145
- Proc.new { self[:high_security] }
143
+ Proc.new { NewRelic::Agent.config[:high_security] }
146
144
  end
147
145
 
148
146
  def self.developer_mode
149
- Proc.new { self[:developer] }
147
+ Proc.new { NewRelic::Agent.config[:developer] }
150
148
  end
151
149
 
152
150
  def self.monitor_mode
153
- Proc.new { self[:enabled] }
151
+ Proc.new { NewRelic::Agent.config[:enabled] }
154
152
  end
155
153
  end
156
154
 
@@ -185,9 +183,13 @@ module NewRelic
185
183
  'routes',
186
184
  'secret',
187
185
  'spec',
186
+ 'spec:features',
187
+ 'spec:requests',
188
188
  'spec:controllers',
189
189
  'spec:helpers',
190
190
  'spec:models',
191
+ 'spec:views',
192
+ 'spec:routing',
191
193
  'spec:rcov',
192
194
  'stats',
193
195
  'test',
@@ -208,18 +210,6 @@ module NewRelic
208
210
  :type => String,
209
211
  :description => "New Relic license key."
210
212
  },
211
- :log => {
212
- :default => '',
213
- :public => false,
214
- :type => String,
215
- :description => "Override to set log file name and path to STDOUT."
216
- },
217
- :omit_fake_collector => {
218
- :default => false,
219
- :public => false,
220
- :type => Boolean,
221
- :description => "Override to omit fake collector in multiverse tests."
222
- },
223
213
  :config_path => {
224
214
  :default => DefaultSource.config_path,
225
215
  :public => true,
@@ -305,12 +295,6 @@ module NewRelic
305
295
  :type => Boolean,
306
296
  :description => 'Enables or disables the agent for background processes. No longer necessary as the agent now automatically instruments background processes.'
307
297
  },
308
- :multi_homed => {
309
- :default => false,
310
- :public => false,
311
- :type => Boolean,
312
- :description => 'Enable or disable instrumentation for multiple applications on the same host bound to different interfaces serving the same port.'
313
- },
314
298
  :high_security => {
315
299
  :default => false,
316
300
  :public => true,
@@ -355,10 +339,39 @@ module NewRelic
355
339
  },
356
340
  :ssl => {
357
341
  :default => true,
342
+ :allow_nil => true,
358
343
  :public => true,
359
344
  :type => Boolean,
360
345
  :description => "Enable or disable SSL for transmissions to the New Relic data collection service."
361
346
  },
347
+ :proxy_host => {
348
+ :default => nil,
349
+ :allow_nil => true,
350
+ :public => false,
351
+ :type => String,
352
+ :description => 'Host for proxy server.'
353
+ },
354
+ :proxy_port => {
355
+ :default => nil,
356
+ :allow_nil => true,
357
+ :public => false,
358
+ :type => Fixnum,
359
+ :description => 'Port for proxy server.'
360
+ },
361
+ :proxy_user => {
362
+ :default => nil,
363
+ :allow_nil => true,
364
+ :public => false,
365
+ :type => String,
366
+ :description => 'User for proxy server.'
367
+ },
368
+ :proxy_pass => {
369
+ :default => nil,
370
+ :allow_nil => true,
371
+ :public => false,
372
+ :type => String,
373
+ :description => 'Password for proxy server.'
374
+ },
362
375
  :sync_startup => {
363
376
  :default => false,
364
377
  :public => true,
@@ -395,12 +408,6 @@ module NewRelic
395
408
  :type => Boolean,
396
409
  :description => 'Enable or disable transmission of application environment information to the New Relic data collection service.'
397
410
  },
398
- :start_channel_listener => {
399
- :default => false,
400
- :public => false,
401
- :type => Boolean,
402
- :description => 'Enable or disable spawning of a background thread that listens for connections from child processes. Primarily used for Resque instrumentation.'
403
- },
404
411
  :'resque.use_harvest_lock' => {
405
412
  :default => false,
406
413
  :public => true,
@@ -419,6 +426,12 @@ module NewRelic
419
426
  :type => Boolean,
420
427
  :description => '(Deprecated) Enable or disable retrying failed connections to the New Relic data collection service.'
421
428
  },
429
+ :force_reconnect => {
430
+ :default => false,
431
+ :public => false,
432
+ :type => Boolean,
433
+ :description => 'Force a new connection to the server before running the worker loop. Creates a separate agent run and is recorded as a separate instance by the New Relic data collection service.'
434
+ },
422
435
  :report_instance_busy => {
423
436
  :default => true,
424
437
  :public => false,
@@ -467,6 +480,12 @@ module NewRelic
467
480
  :type => Boolean,
468
481
  :description => 'Enable or disable resque instrumentation.'
469
482
  },
483
+ :disable_sidekiq => {
484
+ :default => false,
485
+ :public => true,
486
+ :type => Boolean,
487
+ :description => 'Enable or disable sidekiq instrumentation.'
488
+ },
470
489
  :disable_dj => {
471
490
  :default => false,
472
491
  :public => true,
@@ -593,18 +612,30 @@ module NewRelic
593
612
  :type => Fixnum,
594
613
  :description => 'Maximum number of transaction trace segments to record in a single transaction trace.'
595
614
  },
615
+ :disable_sequel_instrumentation => {
616
+ :default => false,
617
+ :public => true,
618
+ :type => Boolean,
619
+ :description => 'Enable or disable sequel instrumentation.'
620
+ },
621
+ :override_sql_obfuscation_adapter => {
622
+ :default => '',
623
+ :public => true,
624
+ :type => String,
625
+ :description => "Override for the sql obfuscation adapter."
626
+ },
627
+ :disable_database_instrumentation => {
628
+ :default => false,
629
+ :public => true,
630
+ :type => Boolean,
631
+ :description => 'Enable or disable sequel instrumentation.'
632
+ },
596
633
  :'slow_sql.enabled' => {
597
634
  :default => DefaultSource.slow_sql_enabled,
598
635
  :public => true,
599
636
  :type => Boolean,
600
637
  :description => 'Enable or disable collection of slow sql queries.'
601
638
  },
602
- :'slow_sql.stack_trace_threshold' => {
603
- :default => DefaultSource.slow_sql_stack_trace_threshold,
604
- :public => true,
605
- :type => Float,
606
- :description => 'Stack traces will be generated and included in slow sql queries with durations that exceed this threshold.'
607
- },
608
639
  :'slow_sql.explain_threshold' => {
609
640
  :default => DefaultSource.slow_sql_explain_threshold,
610
641
  :public => true,
@@ -647,11 +678,35 @@ module NewRelic
647
678
  :type => Boolean,
648
679
  :description => 'Enable or disable real user monitoring.'
649
680
  },
650
- :'rum.load_episodes_file' => {
651
- :default => true,
681
+ :browser_key => {
682
+ :default => '',
652
683
  :public => false,
653
- :type => Boolean,
654
- :description => 'Enable or disable real user monitoring.'
684
+ :type => String,
685
+ :description => 'Real user monitoring license key for the browser timing header.'
686
+ },
687
+ :beacon => {
688
+ :default => '',
689
+ :public => false,
690
+ :type => String,
691
+ :description => 'Beacon for real user monitoring.'
692
+ },
693
+ :error_beacon => {
694
+ :default => '',
695
+ :public => false,
696
+ :type => String,
697
+ :description => 'Error beacon for real user monitoring.'
698
+ },
699
+ :application_id => {
700
+ :default => '',
701
+ :public => false,
702
+ :type => String,
703
+ :description => 'Application ID for real user monitoring.'
704
+ },
705
+ :js_agent_file => {
706
+ :default => '',
707
+ :public => false,
708
+ :type => String,
709
+ :description => 'Javascript agent file for real user monitoring.'
655
710
  },
656
711
  :'browser_monitoring.auto_instrument' => {
657
712
  :default => DefaultSource.browser_monitoring_auto_instrument,
@@ -665,12 +720,25 @@ module NewRelic
665
720
  :type => String,
666
721
  :description => 'Type of JavaScript agent loader to use for browser monitoring instrumentation'
667
722
  },
723
+ :'browser_monitoring.loader_version' => {
724
+ :default => '',
725
+ :public => private,
726
+ :type => String,
727
+ :description => 'Version of JavaScript agent loader (returned from the New Relic data collection services)'
728
+ },
668
729
  :'browser_monitoring.debug' => {
669
730
  :default => false,
670
731
  :public => false,
671
732
  :type => Boolean,
672
733
  :description => 'Enable or disable debugging version of JavaScript agent loader for browser monitoring instrumentation.'
673
734
  },
735
+ :'browser_monitoring.ssl_for_http' => {
736
+ :default => nil,
737
+ :allow_nil => true,
738
+ :public => false,
739
+ :type => Boolean,
740
+ :description => 'Enable or disable HTTPS instrumentation by JavaScript agent on HTTP pages.'
741
+ },
674
742
  :js_agent_loader => {
675
743
  :default => '',
676
744
  :public => false,
@@ -695,6 +763,25 @@ module NewRelic
695
763
  :type => Boolean,
696
764
  :description => 'Enable or disable cross-application tracing.'
697
765
  },
766
+ :cross_application_tracing => {
767
+ :default => nil,
768
+ :allow_nil => true,
769
+ :public => false,
770
+ :type => Boolean,
771
+ :description => 'Enable or disable cross-application tracing.'
772
+ },
773
+ :encoding_key => {
774
+ :default => '',
775
+ :public => false,
776
+ :type => String,
777
+ :description => 'Encoding key for cross-application tracing.'
778
+ },
779
+ :cross_process_id => {
780
+ :default => '',
781
+ :public => false,
782
+ :type => String,
783
+ :description => 'Cross process ID for cross-application tracing.'
784
+ },
698
785
  :'thread_profiler.enabled' => {
699
786
  :default => DefaultSource.thread_profiler_enabled,
700
787
  :public => true,
@@ -743,18 +830,18 @@ module NewRelic
743
830
  :type => Boolean,
744
831
  :description => 'Enable or disable the analytics event sampling.'
745
832
  },
746
- :'analytics_events.transactions.enabled' => {
747
- :default => true,
748
- :public => true,
749
- :type => Boolean,
750
- :description => 'Enable or disable the analytics event sampling for transactions.'
751
- },
752
833
  :'analytics_events.max_samples_stored' => {
753
834
  :default => 1200,
754
835
  :public => false,
755
836
  :type => Fixnum,
756
837
  :description => 'Maximum number of request events recorded by the analytics event sampling in a single harvest.'
757
838
  },
839
+ :'capture_attributes.traces' => {
840
+ :default => true,
841
+ :public => false,
842
+ :type => Boolean,
843
+ :description => 'Include custom parameters in transaction traces and traced errors'
844
+ },
758
845
  :'capture_attributes.transaction_events' => {
759
846
  :default => true,
760
847
  :public => true,