newrelic_rpm 6.12.0.367 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/CHANGELOG.md +269 -8
  4. data/CONTRIBUTING.md +54 -11
  5. data/README.md +40 -16
  6. data/ROADMAP.md +24 -0
  7. data/lib/new_relic/agent.rb +3 -10
  8. data/lib/new_relic/agent/agent.rb +6 -4
  9. data/lib/new_relic/agent/audit_logger.rb +10 -0
  10. data/lib/new_relic/agent/autostart.rb +1 -2
  11. data/lib/new_relic/agent/configuration/default_source.rb +294 -102
  12. data/lib/new_relic/agent/configuration/manager.rb +2 -2
  13. data/lib/new_relic/agent/database_adapter.rb +33 -0
  14. data/lib/new_relic/agent/datastores/redis.rb +0 -4
  15. data/lib/new_relic/agent/distributed_tracing.rb +0 -66
  16. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +2 -2
  17. data/lib/new_relic/agent/http_clients/uri_util.rb +8 -8
  18. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +4 -5
  19. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +21 -68
  20. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +0 -16
  21. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +23 -57
  22. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +0 -15
  23. data/lib/new_relic/agent/instrumentation/bunny.rb +10 -196
  24. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +45 -0
  25. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +152 -0
  26. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +35 -0
  27. data/lib/new_relic/agent/instrumentation/curb.rb +9 -259
  28. data/lib/new_relic/agent/instrumentation/curb/chain.rb +93 -0
  29. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +222 -0
  30. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +63 -0
  31. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +38 -0
  32. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +53 -0
  33. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +34 -0
  34. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +8 -84
  35. data/lib/new_relic/agent/instrumentation/excon.rb +2 -1
  36. data/lib/new_relic/agent/instrumentation/grape.rb +13 -113
  37. data/lib/new_relic/agent/instrumentation/grape/chain.rb +25 -0
  38. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +100 -0
  39. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +17 -0
  40. data/lib/new_relic/agent/instrumentation/httpclient.rb +8 -30
  41. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +25 -0
  42. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +38 -0
  43. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +17 -0
  44. data/lib/new_relic/agent/instrumentation/httprb.rb +29 -0
  45. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +22 -0
  46. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +30 -0
  47. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +15 -0
  48. data/lib/new_relic/agent/instrumentation/memcache.rb +54 -69
  49. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +16 -0
  50. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +38 -121
  51. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +56 -0
  52. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +88 -0
  53. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +88 -0
  54. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +4 -10
  55. data/lib/new_relic/agent/instrumentation/mongo.rb +7 -0
  56. data/lib/new_relic/agent/instrumentation/net_http.rb +39 -0
  57. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +25 -0
  58. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +40 -0
  59. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +21 -0
  60. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +1 -1
  61. data/lib/new_relic/agent/instrumentation/padrino.rb +18 -75
  62. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +34 -0
  63. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +27 -0
  64. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +20 -0
  65. data/lib/new_relic/agent/instrumentation/rack.rb +29 -160
  66. data/lib/new_relic/agent/instrumentation/rack/chain.rb +57 -0
  67. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +32 -0
  68. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +73 -0
  69. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +36 -0
  70. data/lib/new_relic/agent/instrumentation/rake.rb +13 -187
  71. data/lib/new_relic/agent/instrumentation/rake/chain.rb +25 -0
  72. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +144 -0
  73. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +14 -0
  74. data/lib/new_relic/agent/instrumentation/redis.rb +10 -188
  75. data/lib/new_relic/agent/instrumentation/redis/chain.rb +34 -0
  76. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +65 -0
  77. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +24 -0
  78. data/lib/new_relic/agent/instrumentation/resque.rb +8 -28
  79. data/lib/new_relic/agent/instrumentation/resque/chain.rb +22 -0
  80. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +33 -0
  81. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +16 -0
  82. data/lib/new_relic/agent/instrumentation/sidekiq.rb +1 -1
  83. data/lib/new_relic/agent/instrumentation/sinatra.rb +20 -198
  84. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +55 -0
  85. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +29 -34
  86. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +118 -0
  87. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +33 -0
  88. data/lib/new_relic/agent/instrumentation/typhoeus.rb +10 -89
  89. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +22 -0
  90. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +82 -0
  91. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +14 -0
  92. data/lib/new_relic/agent/method_tracer.rb +6 -16
  93. data/lib/new_relic/agent/new_relic_service.rb +19 -5
  94. data/lib/new_relic/agent/samplers/memory_sampler.rb +1 -1
  95. data/lib/new_relic/agent/span_event_primitive.rb +10 -8
  96. data/lib/new_relic/agent/sql_sampler.rb +1 -1
  97. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -1
  98. data/lib/new_relic/agent/transaction.rb +1 -4
  99. data/lib/new_relic/agent/transaction/abstract_segment.rb +1 -1
  100. data/lib/new_relic/agent/transaction/distributed_tracer.rb +12 -6
  101. data/lib/new_relic/agent/transaction/external_request_segment.rb +2 -2
  102. data/lib/new_relic/agent/transaction/message_broker_segment.rb +1 -0
  103. data/lib/new_relic/agent/transaction/segment.rb +9 -5
  104. data/lib/new_relic/agent/vm/mri_vm.rb +6 -4
  105. data/lib/new_relic/cli/commands/deployments.rb +0 -1
  106. data/lib/new_relic/constants.rb +4 -0
  107. data/lib/new_relic/control/frameworks/rails.rb +11 -9
  108. data/lib/new_relic/control/instance_methods.rb +1 -0
  109. data/lib/new_relic/dependency_detection.rb +119 -9
  110. data/lib/new_relic/environment_report.rb +1 -7
  111. data/lib/new_relic/noticed_error.rb +1 -5
  112. data/lib/new_relic/supportability_helper.rb +3 -2
  113. data/lib/new_relic/version.rb +2 -2
  114. data/lib/tasks/multiverse.rb +9 -0
  115. data/newrelic_rpm.gemspec +2 -3
  116. data/test/agent_helper.rb +7 -0
  117. metadata +55 -12
  118. data/.travis.yml +0 -240
  119. data/CODE_OF_CONDUCT.md +0 -46
  120. data/cert/cacert.pem +0 -1177
  121. data/lib/new_relic/agent/instrumentation/http.rb +0 -49
  122. data/lib/new_relic/agent/instrumentation/net.rb +0 -87
  123. data/lib/new_relic/metrics.rb +0 -13
data/ROADMAP.md ADDED
@@ -0,0 +1,24 @@
1
+ # Ruby Agent Roadmap
2
+
3
+ ## Product Vision
4
+ The goal of the Ruby agent is to provide complete visibility into the health of your service. The agent provides metrics about the runtime health of your service and the process it runs in, and traces that show how specific requests are performing. It also provides information about the environment in which it is running, so you can identify issues with specific hosts, regions, deployments, and other facets.
5
+
6
+ New Relic is moving toward OpenTelemetry. OpenTelemetry is a unified standard for service instrumentation. You will soon see an updated version of the agent that uses the OpenTelemetry SDK and auto-instrumentation as its foundation. OpenTelemetry will include a broad set of high-quality community-contributed instrumentation and a powerful vendor-neutral API for adding your own instrumentation.
7
+
8
+
9
+ ## Roadmap
10
+ ### Description
11
+ This roadmap project is broken down into the following sections:
12
+
13
+ - **Now**:
14
+ - This section contains features that are currently in progress.
15
+ - **Next**:
16
+ - This section contains work planned within the next three months. These features may still be deprioritized and moved to Future.
17
+ - **Future**:
18
+ - This section is for ideas for future work that is aligned with the product vision and possible opportunities for community contribution. It contains a list of features that anyone can implement. No guarantees can be provided on if or when these features will be completed.
19
+
20
+
21
+ **The roadmap project is found [here](https://github.com/orgs/newrelic/projects/12)**
22
+
23
+ #### Disclaimers
24
+ > This roadmap is subject to change at any time. Future items should not be considered commitments.
@@ -26,7 +26,6 @@ module NewRelic
26
26
 
27
27
  require 'new_relic/version'
28
28
  require 'new_relic/local_environment'
29
- require 'new_relic/metrics'
30
29
  require 'new_relic/metric_spec'
31
30
  require 'new_relic/metric_data'
32
31
  require 'new_relic/noticed_error'
@@ -47,6 +46,7 @@ module NewRelic
47
46
  require 'new_relic/agent/error_collector'
48
47
  require 'new_relic/agent/sampler'
49
48
  require 'new_relic/agent/database'
49
+ require 'new_relic/agent/database_adapter'
50
50
  require 'new_relic/agent/datastores'
51
51
  require 'new_relic/agent/pipe_channel_manager'
52
52
  require 'new_relic/agent/configuration'
@@ -283,12 +283,6 @@ module NewRelic
283
283
  def notice_error(exception, options={})
284
284
  record_api_supportability_metric(:notice_error)
285
285
 
286
- if options.has_key?(:trace_only)
287
- NewRelic::Agent.logger.log_once(:warn, :trace_only_deprecated,
288
- 'Passing the :trace_only option to NewRelic::Agent.notice_error is deprecated. Please use :expected instead.')
289
- options[:expected] = options.delete(:trace_only)
290
- end
291
-
292
286
  Transaction.notice_error(exception, options)
293
287
  nil # don't return a noticed error datastructure. it can only hurt.
294
288
  end
@@ -587,9 +581,8 @@ module NewRelic
587
581
  segment = ::NewRelic::Agent::Tracer.current_segment
588
582
  if segment
589
583
  # Make sure not to override existing segment-level custom attributes
590
- segment_custom_keys = segment.attributes.custom_attributes.keys
591
- segment_custom_keys.each { |k| params.delete k.to_sym }
592
- segment.add_custom_attributes(params)
584
+ segment_custom_keys = segment.attributes.custom_attributes.keys.map(&:to_sym)
585
+ segment.add_custom_attributes(params.reject { |k, _v| segment_custom_keys.include?(k.to_sym) })
593
586
  end
594
587
  else
595
588
  ::NewRelic::Agent.logger.warn("Bad argument passed to #add_custom_attributes. Expected Hash but got #{params.class}")
@@ -395,10 +395,8 @@ module NewRelic
395
395
  end
396
396
 
397
397
  def should_install_exit_handler?
398
- (
399
- Agent.config[:send_data_on_exit] &&
400
- !sinatra_classic_app?
401
- )
398
+ return false unless Agent.config[:send_data_on_exit]
399
+ !sinatra_classic_app? || Agent.config[:force_install_exit_handler]
402
400
  end
403
401
 
404
402
  def install_exit_handler
@@ -953,6 +951,10 @@ module NewRelic
953
951
  rescue NewRelic::Agent::UnrecoverableAgentException => e
954
952
  handle_unrecoverable_agent_error(e)
955
953
  rescue StandardError, Timeout::Error, NewRelic::Agent::ServerConnectionException => e
954
+ # Allow a killed (aborting) thread to continue exiting during shutdown.
955
+ # See: https://github.com/newrelic/newrelic-ruby-agent/issues/340
956
+ raise if Thread.current.status == 'aborting'
957
+
956
958
  log_error(e)
957
959
  if opts[:keep_retrying]
958
960
  note_connect_failure
@@ -26,6 +26,16 @@ module NewRelic
26
26
  !@log.nil?
27
27
  end
28
28
 
29
+ def log_request_headers(uri, headers)
30
+ return unless enabled? && allowed_endpoint?(uri)
31
+ @log.info("REQUEST HEADERS: #{headers}")
32
+ rescue StandardError, SystemStackError, SystemCallError => e
33
+ ::NewRelic::Agent.logger.warn("Failed writing request headers to audit log", e)
34
+ rescue Exception => e
35
+ ::NewRelic::Agent.logger.warn("Failed writing request headers to audit log with exception. Re-raising in case of interrupt.", e)
36
+ raise
37
+ end
38
+
29
39
  def log_request(uri, data, marshaller)
30
40
  return unless enabled? && allowed_endpoint?(uri)
31
41
 
@@ -32,8 +32,7 @@ module NewRelic
32
32
  COMMA = ",".freeze
33
33
 
34
34
  def denylisted_constants?
35
- # For backwards compatibility until :'autostart_blacklisted_constants' config option is removed
36
- constants = NewRelic::Agent.config[:'autostart.denylisted_constants'] << COMMA << NewRelic::Agent.config[:'autostart.blacklisted_constants']
35
+ constants = NewRelic::Agent.config[:'autostart.denylisted_constants']
37
36
 
38
37
  denylisted?(constants) do |name|
39
38
  constant_is_defined?(name)
@@ -15,6 +15,35 @@ module NewRelic
15
15
  end
16
16
  end
17
17
 
18
+ # Combines potentially two properties into one.
19
+ # Given the example:
20
+ # :disable_net_http and :prepend_net_instrumentation
21
+ # if :disable_net_http is true, then returned value is "disabled"
22
+ # if :prepend_net_instrumentation is false, then returned value is "chain"
23
+ # otherwise, "auto" is returned.
24
+ #
25
+ # Intent is:
26
+ # - if user sets disable_xxx property, then don't instrument
27
+ # - if user set prepend to `false` then we use method_alias chaining
28
+ # - auto, when returned means, try to use prepend unless conflicting gems discovered
29
+ #
30
+ def self.instrumentation_value_of(disable_key, prepend_key=nil)
31
+ Proc.new do
32
+ if NewRelic::Agent.config[disable_key]
33
+ "disabled"
34
+ elsif prepend_key && !NewRelic::Agent.config[prepend_key]
35
+ "chain"
36
+ else
37
+ "auto"
38
+ end
39
+ end
40
+ end
41
+
42
+ def self.deprecated_description new_setting, description
43
+ link_ref = new_setting.to_s.gsub(".", "-")
44
+ %{<a href="##{link_ref}"><code>#{new_setting}</code>}
45
+ end
46
+
18
47
  class Boolean
19
48
  def self.===(o)
20
49
  TrueClass === o or FalseClass === o
@@ -48,23 +77,30 @@ module NewRelic
48
77
  Proc.new {
49
78
  paths = [
50
79
  File.join("config","newrelic.yml"),
51
- File.join("newrelic.yml")
80
+ File.join("newrelic.yml"),
81
+ File.join("config","newrelic.yml.erb"),
82
+ File.join("newrelic.yml.erb")
52
83
  ]
53
84
 
54
85
  if NewRelic::Control.instance.root
55
86
  paths << File.join(NewRelic::Control.instance.root, "config", "newrelic.yml")
56
87
  paths << File.join(NewRelic::Control.instance.root, "newrelic.yml")
88
+ paths << File.join(NewRelic::Control.instance.root, "config", "newrelic.yml.erb")
89
+ paths << File.join(NewRelic::Control.instance.root, "newrelic.yml.erb")
57
90
  end
58
91
 
59
92
  if ENV["HOME"]
60
93
  paths << File.join(ENV["HOME"], ".newrelic", "newrelic.yml")
61
94
  paths << File.join(ENV["HOME"], "newrelic.yml")
95
+ paths << File.join(ENV["HOME"], ".newrelic", "newrelic.yml.erb")
96
+ paths << File.join(ENV["HOME"], "newrelic.yml.erb")
62
97
  end
63
98
 
64
99
  # If we're packaged for warbler, we can tell from GEM_HOME
65
100
  if ENV["GEM_HOME"] && ENV["GEM_HOME"].end_with?(".jar!")
66
101
  app_name = File.basename(ENV["GEM_HOME"], ".jar!")
67
102
  paths << File.join(ENV["GEM_HOME"], app_name, "config", "newrelic.yml")
103
+ paths << File.join(ENV["GEM_HOME"], app_name, "config", "newrelic.yml.erb")
68
104
  end
69
105
 
70
106
  paths
@@ -94,7 +130,8 @@ module NewRelic
94
130
  when 4..6
95
131
  :rails_notifications
96
132
  else
97
- ::NewRelic::Agent.logger.error "Detected unsupported Rails version #{Rails::VERSION::STRING}"
133
+ ::NewRelic::Agent.logger.warn "Detected untested Rails version #{Rails::VERSION::STRING}"
134
+ :rails_notifications
98
135
  end
99
136
  when defined?(::Sinatra) && defined?(::Sinatra::Base) then :sinatra
100
137
  when defined?(::NewRelic::IA) then :external
@@ -439,17 +476,6 @@ module NewRelic
439
476
  :allowed_from_server => false,
440
477
  :description => 'Autodetected application framework used to enable framework-specific functionality.'
441
478
  },
442
- :'autostart.blacklisted_constants' => {
443
- :default => 'Rails::Console',
444
- :public => true,
445
- :type => String,
446
- :allowed_from_server => false,
447
- :description => 'Deprecated. ' \
448
- 'For agent versions 6.8.0 or higher, ' \
449
- 'use <a href="#autostart-denylisted_constants"><code>' \
450
- 'autostart.denylisted_constants' \
451
- '</code></a> instead.'
452
- },
453
479
  :'autostart.denylisted_constants' => {
454
480
  :default => 'Rails::Console',
455
481
  :public => true,
@@ -457,55 +483,36 @@ module NewRelic
457
483
  :allowed_from_server => false,
458
484
  :description => 'Specify a list of constants that should prevent the agent from starting automatically. Separate individual constants with a comma <code>,</code>. For example, <code>Rails::Console,UninstrumentedBackgroundJob</code>.'
459
485
  },
460
- :'autostart.blacklisted_executables' => {
461
- :default => 'irb,rspec',
462
- :public => true,
463
- :type => String,
464
- :allowed_from_server => false,
465
- :description => 'Deprecated. ' \
466
- 'For agent versions 6.8.0 or higher, ' \
467
- 'use <a href="#autostart-denylisted_executables"><code>' \
468
- 'autostart.denylisted_executables' \
469
- '</code></a> instead.'
470
- },
471
486
  :'autostart.denylisted_executables' => {
472
- :default => value_of(:'autostart.blacklisted_executables'),
487
+ :default => 'irb,rspec',
473
488
  :public => true,
474
489
  :type => String,
475
490
  :allowed_from_server => false,
476
491
  :description => 'Defines a comma-delimited list of executables that the agent should not instrument. For example, <code>rake,my_ruby_script.rb</code>.'
477
492
  },
478
- :'autostart.blacklisted_rake_tasks' => {
479
- :default => AUTOSTART_DENYLISTED_RAKE_TASKS,
480
- :public => true,
481
- :type => String,
482
- :allowed_from_server => false,
483
- :description => 'Deprecated. ' \
484
- 'For agent versions 6.8.0 or higher, ' \
485
- 'use <a href="#autostart-denylisted_rake_tasks"><code>' \
486
- 'autostart.denylisted_rake_tasks' \
487
- '</code></a> instead.'
488
- },
489
493
  :'autostart.denylisted_rake_tasks' => {
490
- :default => value_of(:'autostart.blacklisted_rake_tasks'),
494
+ :default => AUTOSTART_DENYLISTED_RAKE_TASKS,
491
495
  :public => true,
492
496
  :type => String,
493
497
  :allowed_from_server => false,
494
498
  :description => 'Defines a comma-delimited list of Rake tasks that the agent should not instrument. For example, <code>assets:precompile,db:migrate</code>.'
495
499
  },
500
+
496
501
  :disable_rake => {
497
502
  :default => false,
498
503
  :public => true,
499
504
  :type => Boolean,
500
505
  :allowed_from_server => false,
501
- :description => 'If <code>true</code>, disables Rake instrumentation.'
506
+ :deprecated => true,
507
+ :description => deprecated_description(:'instrumentation.rake', 'If <code>true</code>, disables Rake instrumentation.')
502
508
  },
503
509
  :disable_rake_instrumentation => {
504
510
  :default => false,
505
511
  :public => false,
506
512
  :type => Boolean,
507
513
  :allowed_from_server => false,
508
- :description => 'Enable or disable Rake instrumentation. Preferred key is `disable_rake`'
514
+ :deprecated => true,
515
+ :description => deprecated_description(:'instrumentation.rake', 'Enable or disable Rake instrumentation. Preferred key is `disable_rake`')
509
516
  },
510
517
  :'rake.tasks' => {
511
518
  :default => [],
@@ -537,19 +544,6 @@ module NewRelic
537
544
  :allowed_from_server => false,
538
545
  :description => 'If true, the agent strips messages from all exceptions except those in the <a href="#strip_exception_messages-allowlist">allowlist</a>. Enabled automatically in <a href="https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security">high security mode</a>.'
539
546
  },
540
- :'strip_exception_messages.whitelist' => {
541
- :default => '',
542
- :public => true,
543
- :type => String,
544
- :deprecated => true,
545
- :allowed_from_server => false,
546
- :transform => DefaultSource.method(:convert_to_constant_list),
547
- :description => 'Deprecated. ' \
548
- 'For agent versions 6.8.0 or higher, ' \
549
- 'use <a href="#strip_exception_messages.allowed_classes"><code>' \
550
- 'strip_exception_messages.allowed_classes' \
551
- '</code></a> instead.'
552
- },
553
547
  :'strip_exception_messages.allowed_classes' => {
554
548
  :default => '',
555
549
  :public => true,
@@ -696,6 +690,18 @@ module NewRelic
696
690
  :allowed_from_server => false,
697
691
  :description => 'Enable or disable retrying failed connections to the New Relic data collection service.'
698
692
  },
693
+ :force_install_exit_handler => {
694
+ :default => false,
695
+ :public => true,
696
+ :type => Boolean,
697
+ :allowed_from_server => false,
698
+ :description => 'Forces the exit handler that sends all cached data to collector ' \
699
+ 'before shuttng down to be installed regardless of detecting scenarios where it generally should not be. ' \
700
+ 'Known use-case for this option is where Sinatra is running as an embedded service within another framework ' \
701
+ 'and the agent is detecting the Sinatra app and skipping the at_exit handler as a result. Sinatra classically ' \
702
+ 'runs the entire application in an at_exit block and would otherwise misbehave if the Agent\'s at_exit handler ' \
703
+ 'is also installed in those circumstances. Note: `send_data_on_exit` should also be set to `true` in tandem with this setting.'
704
+ },
699
705
  :force_reconnect => {
700
706
  :default => false,
701
707
  :public => false,
@@ -757,8 +763,9 @@ module NewRelic
757
763
  :default => false,
758
764
  :public => true,
759
765
  :type => Boolean,
766
+ :deprecated => true,
760
767
  :allowed_from_server => false,
761
- :description => 'If <code>true</code>, disables <a href="https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/resque-instrumentation">Resque instrumentation</a>.'
768
+ :description => deprecated_description(:'instrumentation.resque', 'If <code>true</code>, disables <a href="https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/resque-instrumentation">Resque instrumentation</a>.')
762
769
  },
763
770
  :disable_sidekiq => {
764
771
  :default => false,
@@ -770,16 +777,18 @@ module NewRelic
770
777
  :disable_dj => {
771
778
  :default => false,
772
779
  :public => true,
780
+ :deprecated => true,
773
781
  :type => Boolean,
774
782
  :allowed_from_server => false,
775
- :description => 'If <code>true</code>, disables <a href="https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/delayedjob">Delayed::Job instrumentation</a>.'
783
+ :description => deprecated_description(:'instrumentation.delayed_job', 'If <code>true</code>, disables <a href="https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/delayedjob">Delayed::Job instrumentation</a>.'
784
+ )
776
785
  },
777
786
  :disable_sinatra => {
778
787
  :default => false,
779
788
  :public => true,
780
789
  :type => Boolean,
781
790
  :allowed_from_server => false,
782
- :description => 'If <code>true</code> , disables <a href="https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/sinatra-support">Sinatra instrumentation</a>.'
791
+ :description => deprecated_description(:'instrumentation.sinatra', 'If <code>true</code> , disables <a href="https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/sinatra-support">Sinatra instrumentation</a>.' )
783
792
  },
784
793
  :disable_sinatra_auto_middleware => {
785
794
  :default => false,
@@ -823,6 +832,172 @@ module NewRelic
823
832
  :allowed_from_server => false,
824
833
  :description => 'If <code>true</code>, uses Module.prepend rather than alias_method for ActiveRecord instrumentation.'
825
834
  },
835
+ :prepend_net_instrumentation => {
836
+ :default => true,
837
+ :public => false,
838
+ :type => Boolean,
839
+ :allowed_from_server => false,
840
+ :deprecated => true,
841
+ :description => deprecated_description(:'instrumentation.net_http',
842
+ 'If <code>true</code>, uses Module.prepend rather than alias_method for Net::HTTP instrumentation.'
843
+ )
844
+ },
845
+ :'instrumentation.net_http' => {
846
+ :default => instrumentation_value_of(:disable_net_http, :prepend_net_instrumentation),
847
+ :public => true,
848
+ :type => String,
849
+ :dynamic_name => true,
850
+ :allowed_from_server => false,
851
+ :description => "Controls auto-instrumentation of Net::HTTP at start up. May be one of [auto|prepend|chain|disabled]."
852
+ },
853
+ :'instrumentation.typhoeus' => {
854
+ :default => instrumentation_value_of(:disable_typhoeus),
855
+ :public => true,
856
+ :type => String,
857
+ :dynamic_name => true,
858
+ :allowed_from_server => false,
859
+ :description => "Controls auto-instrumentation of Typhoeus at start up. May be one of [auto|prepend|chain|disabled]."
860
+ },
861
+ :'instrumentation.bunny' => {
862
+ :default => instrumentation_value_of(:disable_bunny),
863
+ :public => true,
864
+ :type => String,
865
+ :dynamic_name => true,
866
+ :allowed_from_server => false,
867
+ :description => 'Controls auto-instrumentation of bunny at start up. May be one of [auto|prepend|chain|disabled].'
868
+ },
869
+ :'instrumentation.httprb' => {
870
+ :default => instrumentation_value_of(:disable_httprb),
871
+ :public => true,
872
+ :type => String,
873
+ :dynamic_name => true,
874
+ :allowed_from_server => false,
875
+ :description => 'Controls auto-instrumentation of http.rb gem at start up. May be one of [auto|prepend|chain|disabled].'
876
+ },
877
+ :'instrumentation.resque' => {
878
+ :default => instrumentation_value_of(:disable_resque),
879
+ :public => true,
880
+ :type => String,
881
+ :dynamic_name => true,
882
+ :allowed_from_server => false,
883
+ :description => "Controls auto-instrumentation of resque at start up. May be one of [auto|prepend|chain|disabled]."
884
+ },
885
+ :'instrumentation.redis' => {
886
+ :default => instrumentation_value_of(:disable_redis),
887
+ :public => true,
888
+ :type => String,
889
+ :dynamic_name => true,
890
+ :allowed_from_server => false,
891
+ :description => "Controls auto-instrumentation of Redis at start up. May be one of [auto|prepend|chain|disabled]."
892
+ },
893
+ :'instrumentation.rake' => {
894
+ :default => instrumentation_value_of(:disable_rake),
895
+ :public => :true,
896
+ :type => String,
897
+ :dynamic_name => true,
898
+ :allowed_from_server => false,
899
+ :description => "Controls auto-instrumentation of rake at start up. May be one of [auto|prepend|chain|disabled]."
900
+ },
901
+ :'instrumentation.mongo' => {
902
+ :default => instrumentation_value_of(:disable_mongo),
903
+ :public => :true,
904
+ :type => String,
905
+ :dynamic_name => true,
906
+ :allowed_from_server => false,
907
+ :description => "Controls auto-instrumentation of Mongo at start up. May be one of [enabled|disabled]."
908
+ },
909
+ :'instrumentation.delayed_job' => {
910
+ :default => instrumentation_value_of(:disable_dj),
911
+ :public => true,
912
+ :type => String,
913
+ :dynamic_name => true,
914
+ :allowed_from_server => false,
915
+ :description => 'Controls auto-instrumentation of Delayed Job at start up. May be one of [auto|prepend|chain|disabled].'
916
+ },
917
+ :'instrumentation.httpclient' => {
918
+ :default => instrumentation_value_of(:disable_httpclient),
919
+ :public => true,
920
+ :type => String,
921
+ :dynamic_name => true,
922
+ :allowed_from_server => false,
923
+ :description => "Controls auto-instrumentation of HTTPClient at start up. May be one of [auto|prepend|chain|disabled]."
924
+ },
925
+ :'instrumentation.curb' => {
926
+ :default => instrumentation_value_of(:disable_curb),
927
+ :public => true,
928
+ :type => String,
929
+ :dynamic_name => true,
930
+ :allowed_from_server => false,
931
+ :description => 'Controls auto-instrumentation of Curb at start up. May be one of [auto|prepend|chain|disabled].'
932
+ },
933
+ :'instrumentation.sinatra' => {
934
+ :default => instrumentation_value_of(:disable_sinatra),
935
+ :public => :true,
936
+ :type => String,
937
+ :dynamic_name => true,
938
+ :allowed_from_server => false,
939
+ :description => "Controls auto-instrumentation of Sinatra at start up. May be one of [auto|prepend|chain|disabled]."
940
+ },
941
+ :'instrumentation.rack' => {
942
+ :default => instrumentation_value_of(:disable_rack),
943
+ :public => true,
944
+ :type => String,
945
+ :dynamic_name => true,
946
+ :allowed_from_server => false,
947
+ :description => "Controls auto-instrumentation of Rack. When enabled, the agent hooks into the " \
948
+ "<code>to_app</code> method in Rack::Builder to find gems to instrument during " \
949
+ "application startup. May be one of [auto|prepend|chain|disabled]."
950
+ },
951
+ :'instrumentation.rack_urlmap' => {
952
+ :default => instrumentation_value_of(:disable_rack_urlmap),
953
+ :public => true,
954
+ :type => String,
955
+ :dynamic_name => true,
956
+ :allowed_from_server => false,
957
+ :description => 'Controls auto-instrumentation of Rack::URLMap at start up. May be one of [auto|prepend|chain|disabled].'
958
+ },
959
+ :'instrumentation.puma_rack' => {
960
+ :default => instrumentation_value_of(:disable_puma_rack), # TODO: change to value_of(:'instrumentation.rack') when we remove :disable_puma_rack in 8.0)
961
+ :public => true,
962
+ :type => String,
963
+ :dynamic_name => true,
964
+ :allowed_from_server => false,
965
+ :description => "Controls auto-instrumentation of Puma::Rack. When enabled, the agent hooks into the " \
966
+ "<code>to_app</code> method in Puma::Rack::Builder to find gems to instrument during " \
967
+ "application startup. May be one of [auto|prepend|chain|disabled]."
968
+ },
969
+ :'instrumentation.puma_rack_urlmap' => {
970
+ :default => instrumentation_value_of(:disable_puma_rack_urlmap), # TODO: change to value_of(:'instrumentation.rack_urlmap') when we remove :disable_puma_rack_urlmap in 8.0)
971
+ :public => true,
972
+ :type => String,
973
+ :dynamic_name => true,
974
+ :allowed_from_server => false,
975
+ :description => 'Controls auto-instrumentation of Puma::Rack::URLMap at start up. May be one of [auto|prepend|chain|disabled].'
976
+ },
977
+ :'instrumentation.memcached' => {
978
+ :default => instrumentation_value_of(:disable_memcached),
979
+ :public => true,
980
+ :type => String,
981
+ :dynamic_name => true,
982
+ :allowed_from_server => false,
983
+ :description => 'Controls auto-instrumentation of memcached gem for Memcache at start up. May be one of [auto|prepend|chain|disabled].'
984
+ },
985
+ :'instrumentation.memcache_client' => {
986
+ :default => instrumentation_value_of(:disable_memcache_client),
987
+ :public => true,
988
+ :type => String,
989
+ :dynamic_name => true,
990
+ :allowed_from_server => false,
991
+ :description => 'Controls auto-instrumentation of memcache-client gem for Memcache at start up. May be one of [auto|prepend|chain|disabled].'
992
+ },
993
+ :'instrumentation.memcache' => {
994
+ :default => instrumentation_value_of(:disable_dalli),
995
+ :public => true,
996
+ :type => String,
997
+ :dynamic_name => true,
998
+ :allowed_from_server => false,
999
+ :description => 'Controls auto-instrumentation of dalli gem for Memcache at start up. May be one of [auto|prepend|chain|disabled].'
1000
+ },
826
1001
  :disable_data_mapper => {
827
1002
  :default => false,
828
1003
  :public => true,
@@ -858,36 +1033,41 @@ module NewRelic
858
1033
  :default => value_of(:disable_memcache_instrumentation),
859
1034
  :public => true,
860
1035
  :type => Boolean,
1036
+ :deprecated => true,
861
1037
  :allowed_from_server => false,
862
- :description => 'If <code>true</code>, disables instrumentation for the memcached gem.'
1038
+ :description => deprecated_description(:'instrumentation.memcached', 'If <code>true</code>, disables instrumentation for the memcached gem.')
863
1039
  },
864
1040
  :disable_memcache_client => {
865
1041
  :default => value_of(:disable_memcache_instrumentation),
866
1042
  :public => true,
867
1043
  :type => Boolean,
1044
+ :deprecated => true,
868
1045
  :allowed_from_server => false,
869
- :description => 'If <code>true</code>, disables instrumentation for the memcache-client gem.'
1046
+ :description => deprecated_description(:'instrumentation.memcache-client', 'If <code>true</code>, disables instrumentation for the memcache-client gem.')
870
1047
  },
871
1048
  :disable_dalli => {
872
1049
  :default => value_of(:disable_memcache_instrumentation),
873
1050
  :public => true,
874
1051
  :type => Boolean,
1052
+ :deprecated => true,
875
1053
  :allowed_from_server => false,
876
- :description => 'If <code>true</code>, disables instrumentation for the dalli gem.'
1054
+ :description => deprecated_description(:'instrumentation.memcache', 'If <code>true</code>, disables instrumentation for the dalli gem.')
877
1055
  },
878
1056
  :disable_dalli_cas_client => {
879
1057
  :default => value_of(:disable_memcache_instrumentation),
880
1058
  :public => true,
881
1059
  :type => Boolean,
1060
+ :deprecated => true,
882
1061
  :allowed_from_server => false,
883
- :description => "If <code>true</code>, disables instrumentation for the dalli gem\'s additional CAS client support."
1062
+ :description => deprecated_description(:'instrumentation.memcache', "If <code>true</code>, disables instrumentation for the dalli gem\'s additional CAS client support.")
884
1063
  },
885
1064
  :disable_memcache_instrumentation => {
886
1065
  :default => false,
887
1066
  :public => true,
888
1067
  :type => Boolean,
1068
+ :deprecated => true,
889
1069
  :allowed_from_server => false,
890
- :description => 'If <code>true</code>, disables memcache instrumentation.'
1070
+ :description => deprecated_description(:'instrumentation.memcache', 'If <code>true</code>, disables memcache instrumentation.')
891
1071
  },
892
1072
  :disable_gc_profiler => {
893
1073
  :default => false,
@@ -1022,21 +1202,24 @@ module NewRelic
1022
1202
  :type => Boolean,
1023
1203
  :allowed_from_server => false,
1024
1204
  :dynamic_name => true,
1025
- :description => 'If <code>true</code>, the agent won\'t install <a href="https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/mongo-instrumentation">instrumentation for the Mongo gem</a>.'
1205
+ :deprecated => true,
1206
+ :description => deprecated_description(:'instrumentation.mongo', 'If <code>true</code>, the agent won\'t install <a href="https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/mongo-instrumentation">instrumentation for the Mongo gem</a>.')
1026
1207
  },
1027
1208
  :disable_redis => {
1028
1209
  :default => false,
1029
1210
  :public => true,
1030
1211
  :type => Boolean,
1212
+ :deprecated => true,
1031
1213
  :allowed_from_server => false,
1032
- :description => 'If <code>true</code>, the agent won\'t install <a href="https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/redis-instrumentation">instrumentation for Redis</a>.'
1214
+ :description => deprecated_description(:'instrumentation.redis', 'If <code>true</code>, the agent won\'t install <a href="https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/redis-instrumentation">instrumentation for Redis</a>.')
1033
1215
  },
1034
1216
  :disable_redis_instrumentation => {
1035
1217
  :default => false,
1036
1218
  :public => false,
1037
1219
  :type => Boolean,
1220
+ :deprecated => true,
1038
1221
  :allowed_from_server => false,
1039
- :description => 'Disables installation of Redis instrumentation. Standard key to use is disable_redis.'
1222
+ :description => deprecated_description(:'instrumentation.redis', 'Disables installation of Redis instrumentation. Standard key to use is disable_redis.')
1040
1223
  },
1041
1224
  :'message_tracer.segment_parameters.enabled' => {
1042
1225
  :default => true,
@@ -1372,32 +1555,6 @@ module NewRelic
1372
1555
  :allowed_from_server => false,
1373
1556
  :description => 'If <code>true</code>, the agent won\'t measure the depth of Delayed Job queues.'
1374
1557
  },
1375
- :disable_active_record_4 => {
1376
- :default => false,
1377
- :public => true,
1378
- :type => Boolean,
1379
- :dynamic_name => true,
1380
- :allowed_from_server => false,
1381
- :deprecated => true,
1382
- :description => 'Deprecated. ' \
1383
- 'For agent versions 6.3 or higher, ' \
1384
- 'use <a href="#disable_active_record_notifications"><code>' \
1385
- 'disable_active_record_notifications' \
1386
- '</code></a> instead.'
1387
- },
1388
- :disable_active_record_5 => {
1389
- :default => false,
1390
- :public => true,
1391
- :type => Boolean,
1392
- :dynamic_name => true,
1393
- :allowed_from_server => false,
1394
- :deprecated => true,
1395
- :description => 'Deprecated. ' \
1396
- 'For agent versions 6.3 or higher, ' \
1397
- 'use <a href="#disable_active_record_notifications"><code>' \
1398
- 'disable_active_record_notifications' \
1399
- '</code></a> instead.'
1400
- },
1401
1558
  :disable_active_record_notifications => {
1402
1559
  :default => false,
1403
1560
  :public => true,
@@ -1410,33 +1567,45 @@ module NewRelic
1410
1567
  :default => false,
1411
1568
  :public => true,
1412
1569
  :type => Boolean,
1570
+ :deprecated => true,
1413
1571
  :dynamic_name => true,
1414
1572
  :allowed_from_server => false,
1415
- :description => 'If <code>true</code>, disables instrumentation for the bunny gem.'
1573
+ :description => deprecated_description(:'instrumentation.bunny', 'If <code>true</code>, disables instrumentation for the bunny gem.')
1416
1574
  },
1417
1575
  :disable_curb => {
1418
1576
  :default => false,
1419
1577
  :public => true,
1420
1578
  :type => Boolean,
1579
+ :deprecated => true,
1421
1580
  :dynamic_name => true,
1422
1581
  :allowed_from_server => false,
1423
- :description => 'If <code>true</code>, disables instrumentation for the curb gem.'
1582
+ :description => deprecated_description(:'instrumentation.curb', 'If <code>true</code>, disables instrumentation for the curb gem.' )
1424
1583
  },
1425
1584
  :disable_excon => {
1426
1585
  :default => false,
1427
1586
  :public => true,
1428
1587
  :type => Boolean,
1429
1588
  :dynamic_name => true,
1589
+ :deprecated => true,
1590
+ :allowed_from_server => false,
1591
+ :description => deprecated_description(:'instrumentation.excon', 'If <code>true</code>, disables instrumentation for the excon gem.')
1592
+ },
1593
+ :'instrumentation.excon' => {
1594
+ :default => instrumentation_value_of(:disable_excon),
1595
+ :public => :true,
1596
+ :type => String,
1597
+ :dynamic_name => true,
1430
1598
  :allowed_from_server => false,
1431
- :description => 'If <code>true</code>, disables instrumentation for the excon gem.'
1599
+ :description => "Controls auto-instrumentation of Excon at start up. May be one of [enabled|disabled]."
1432
1600
  },
1433
1601
  :disable_httpclient => {
1434
1602
  :default => false,
1435
1603
  :public => true,
1436
1604
  :type => Boolean,
1437
1605
  :dynamic_name => true,
1606
+ :deprecated => true,
1438
1607
  :allowed_from_server => false,
1439
- :description => 'If <code>true</code>, disables instrumentation for the httpclient gem.'
1608
+ :description => deprecated_description(:'instrumentation.httpclient', 'If <code>true</code>, disables instrumentation for the httpclient gem.')
1440
1609
  },
1441
1610
  :disable_net_http => {
1442
1611
  :default => false,
@@ -1444,7 +1613,10 @@ module NewRelic
1444
1613
  :type => Boolean,
1445
1614
  :dynamic_name => true,
1446
1615
  :allowed_from_server => false,
1447
- :description => 'If <code>true</code>, disables instrumentation for Net::HTTP.'
1616
+ :deprecated => true,
1617
+ :description => deprecated_description(:'instrumentation.net_http',
1618
+ 'If <code>true</code>, disables instrumentation for Net::HTTP.'
1619
+ )
1448
1620
  },
1449
1621
  :disable_rack => {
1450
1622
  :default => false,
@@ -1452,7 +1624,8 @@ module NewRelic
1452
1624
  :type => Boolean,
1453
1625
  :dynamic_name => true,
1454
1626
  :allowed_from_server => false,
1455
- :description => 'If <code>true</code>, prevents the agent from hooking into the <code>to_app</code> method in Rack::Builder to find gems to instrument during application startup.'
1627
+ :deprecated => true,
1628
+ :description => deprecated_description(:'instrumentation.rack', 'If <code>true</code>, prevents the agent from hooking into the <code>to_app</code> method in Rack::Builder to find gems to instrument during application startup.')
1456
1629
  },
1457
1630
  :disable_rack_urlmap => {
1458
1631
  :default => false,
@@ -1460,7 +1633,8 @@ module NewRelic
1460
1633
  :type => Boolean,
1461
1634
  :dynamic_name => true,
1462
1635
  :allowed_from_server => false,
1463
- :description => 'If <code>true</code>, prevents the agent from hooking into Rack::URLMap to install middleware tracing.'
1636
+ :deprecated => true,
1637
+ :description => deprecated_description(:'instrumentation.rack_urlmap', 'If <code>true</code>, prevents the agent from hooking into Rack::URLMap to install middleware tracing.')
1464
1638
  },
1465
1639
  :disable_puma_rack => {
1466
1640
  :default => value_of(:disable_rack),
@@ -1468,7 +1642,8 @@ module NewRelic
1468
1642
  :type => Boolean,
1469
1643
  :dynamic_name => true,
1470
1644
  :allowed_from_server => false,
1471
- :description => 'If <code>true</code>, prevents the agent from hooking into the <code>to_app</code> method in Puma::Rack::Builder to find gems to instrument during application startup.'
1645
+ :deprecated => true,
1646
+ :description => deprecated_description(:'instrumentation.puma_rack', 'If <code>true</code>, prevents the agent from hooking into the <code>to_app</code> method in Puma::Rack::Builder to find gems to instrument during application startup.')
1472
1647
  },
1473
1648
  :disable_puma_rack_urlmap => {
1474
1649
  :default => value_of(:disable_rack_urlmap),
@@ -1476,23 +1651,26 @@ module NewRelic
1476
1651
  :type => Boolean,
1477
1652
  :dynamic_name => true,
1478
1653
  :allowed_from_server => false,
1479
- :description => 'If <code>true</code>, prevents the agent from hooking into Puma::Rack::URLMap to install middleware tracing.'
1654
+ :deprecated => true,
1655
+ :description => deprecated_description(:'instrumentation.puma_rack_urlmap', 'If <code>true</code>, prevents the agent from hooking into Puma::Rack::URLMap to install middleware tracing.')
1480
1656
  },
1481
1657
  :disable_typhoeus => {
1482
1658
  :default => false,
1483
1659
  :public => true,
1484
1660
  :type => Boolean,
1485
1661
  :dynamic_name => true,
1662
+ :deprecated => true,
1486
1663
  :allowed_from_server => false,
1487
- :description => 'If <code>true</code>, the agent won\'t install instrumentation for the typhoeus gem.'
1664
+ :description => deprecated_description(:'instrumentation.typhoeus', 'If <code>true</code>, the agent won\'t install instrumentation for the typhoeus gem.' )
1488
1665
  },
1489
1666
  :disable_httprb => {
1490
1667
  :default => false,
1491
1668
  :public => true,
1492
1669
  :type => Boolean,
1493
1670
  :dynamic_name => true,
1671
+ :deprecated => true,
1494
1672
  :allowed_from_server => false,
1495
- :description => 'If <code>true</code>, the agent won\'t install instrumentation for the http.rb gem.'
1673
+ :description => deprecated_description(:'instrumentation.httprb', 'If <code>true</code>, the agent won\'t install instrumentation for the http.rb gem.' )
1496
1674
  },
1497
1675
  :disable_middleware_instrumentation => {
1498
1676
  :default => false,
@@ -1601,14 +1779,28 @@ module NewRelic
1601
1779
  :public => false,
1602
1780
  :type => Boolean,
1603
1781
  :allowed_from_server => false,
1604
- :description => 'If <code>true</code>, the agent won\'t install Grape instrumentation.'
1782
+ :deprecated => true,
1783
+ :description => deprecated_description(:'instrumentation.grape',
1784
+ 'If <code>true</code>, the agent won\'t install Grape instrumentation.'
1785
+ )
1605
1786
  },
1606
1787
  :disable_grape => {
1607
1788
  :default => false,
1608
1789
  :public => true,
1609
1790
  :type => Boolean,
1610
1791
  :allowed_from_server => false,
1611
- :description => 'If <code>true</code>, the agent won\'t install Grape instrumentation.'
1792
+ :deprecated => true,
1793
+ :description => deprecated_description(:'instrumentation.grape',
1794
+ 'If <code>true</code>, the agent won\'t install Grape instrumentation.'
1795
+ )
1796
+ },
1797
+ :'instrumentation.grape' => {
1798
+ :default => instrumentation_value_of(:disable_grape_instrumentation),
1799
+ :public => :true,
1800
+ :type => String,
1801
+ :dynamic_name => true,
1802
+ :allowed_from_server => false,
1803
+ :description => "Controls auto-instrumentation of Grape at start up. May be one of [auto|prepend|chain|disabled]."
1612
1804
  },
1613
1805
  :'attributes.enabled' => {
1614
1806
  :default => true,