newrelic_rpm 9.1.0 → 9.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. checksums.yaml +4 -4
  2. data/.build_ignore +27 -0
  3. data/CHANGELOG.md +841 -7
  4. data/CONTRIBUTING.md +2 -9
  5. data/README.md +25 -22
  6. data/Rakefile +2 -2
  7. data/bin/newrelic +3 -9
  8. data/bin/newrelic_rpm +15 -0
  9. data/init.rb +2 -2
  10. data/lib/boot/strap.rb +102 -0
  11. data/lib/new_relic/agent/agent.rb +11 -2
  12. data/lib/new_relic/agent/agent_helpers/connect.rb +13 -8
  13. data/lib/new_relic/agent/agent_helpers/harvest.rb +3 -0
  14. data/lib/new_relic/agent/agent_helpers/shutdown.rb +4 -1
  15. data/lib/new_relic/agent/agent_helpers/special_startup.rb +1 -1
  16. data/lib/new_relic/agent/agent_helpers/start_worker_thread.rb +4 -3
  17. data/lib/new_relic/agent/agent_helpers/startup.rb +11 -3
  18. data/lib/new_relic/agent/agent_logger.rb +3 -1
  19. data/lib/new_relic/agent/attribute_filter.rb +3 -3
  20. data/lib/new_relic/agent/attribute_pre_filtering.rb +109 -0
  21. data/lib/new_relic/agent/aws.rb +68 -0
  22. data/lib/new_relic/agent/configuration/default_source.rb +918 -166
  23. data/lib/new_relic/agent/configuration/environment_source.rb +15 -3
  24. data/lib/new_relic/agent/configuration/high_security_source.rb +1 -0
  25. data/lib/new_relic/agent/configuration/manager.rb +72 -11
  26. data/lib/new_relic/agent/configuration/security_policy_source.rb +11 -0
  27. data/lib/new_relic/agent/configuration/yaml_source.rb +22 -2
  28. data/lib/new_relic/agent/connect/request_builder.rb +1 -1
  29. data/lib/new_relic/agent/custom_event_aggregator.rb +27 -1
  30. data/lib/new_relic/agent/database/obfuscation_helpers.rb +11 -11
  31. data/lib/new_relic/agent/database/obfuscator.rb +1 -0
  32. data/lib/new_relic/agent/database.rb +41 -1
  33. data/lib/new_relic/agent/database_adapter.rb +1 -1
  34. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +1 -1
  35. data/lib/new_relic/agent/datastores/redis.rb +1 -1
  36. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +1 -1
  37. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +4 -8
  38. data/lib/new_relic/agent/distributed_tracing.rb +5 -3
  39. data/lib/new_relic/agent/error_collector.rb +40 -11
  40. data/lib/new_relic/agent/event_loop.rb +1 -1
  41. data/lib/new_relic/agent/external.rb +2 -0
  42. data/lib/new_relic/agent/harvester.rb +1 -1
  43. data/lib/new_relic/agent/health_check.rb +136 -0
  44. data/lib/new_relic/agent/http_clients/abstract.rb +4 -0
  45. data/lib/new_relic/agent/http_clients/async_http_wrappers.rb +80 -0
  46. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +1 -3
  47. data/lib/new_relic/agent/http_clients/ethon_wrappers.rb +109 -0
  48. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +0 -3
  49. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +1 -3
  50. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +0 -3
  51. data/lib/new_relic/agent/http_clients/httpx_wrappers.rb +91 -0
  52. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +1 -4
  53. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +0 -3
  54. data/lib/new_relic/agent/http_clients/uri_util.rb +1 -1
  55. data/lib/new_relic/agent/instrumentation/action_controller_other_subscriber.rb +1 -1
  56. data/lib/new_relic/agent/instrumentation/action_dispatch.rb +1 -1
  57. data/lib/new_relic/agent/instrumentation/action_dispatch_subscriber.rb +1 -1
  58. data/lib/new_relic/agent/instrumentation/action_mailbox.rb +1 -1
  59. data/lib/new_relic/agent/instrumentation/action_mailer.rb +1 -1
  60. data/lib/new_relic/agent/instrumentation/active_job.rb +1 -1
  61. data/lib/new_relic/agent/instrumentation/active_job_subscriber.rb +6 -2
  62. data/lib/new_relic/agent/instrumentation/active_merchant.rb +3 -16
  63. data/lib/new_relic/agent/instrumentation/active_record.rb +8 -13
  64. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +8 -5
  65. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +13 -10
  66. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +2 -2
  67. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +9 -16
  68. data/lib/new_relic/agent/instrumentation/active_support_broadcast_logger/chain.rb +69 -0
  69. data/lib/new_relic/agent/instrumentation/active_support_broadcast_logger/instrumentation.rb +17 -0
  70. data/lib/new_relic/agent/instrumentation/active_support_broadcast_logger/prepend.rb +37 -0
  71. data/lib/new_relic/agent/instrumentation/active_support_broadcast_logger.rb +21 -0
  72. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +4 -0
  73. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +3 -3
  74. data/lib/new_relic/agent/instrumentation/async_http/chain.rb +23 -0
  75. data/lib/new_relic/agent/instrumentation/async_http/instrumentation.rb +37 -0
  76. data/lib/new_relic/agent/instrumentation/async_http/prepend.rb +15 -0
  77. data/lib/new_relic/agent/instrumentation/async_http.rb +27 -0
  78. data/lib/new_relic/agent/instrumentation/aws_sdk_firehose/chain.rb +21 -0
  79. data/lib/new_relic/agent/instrumentation/aws_sdk_firehose/instrumentation.rb +66 -0
  80. data/lib/new_relic/agent/instrumentation/aws_sdk_firehose/prepend.rb +15 -0
  81. data/lib/new_relic/agent/instrumentation/aws_sdk_firehose.rb +22 -0
  82. data/lib/new_relic/agent/instrumentation/aws_sdk_kinesis/chain.rb +21 -0
  83. data/lib/new_relic/agent/instrumentation/aws_sdk_kinesis/instrumentation.rb +91 -0
  84. data/lib/new_relic/agent/instrumentation/aws_sdk_kinesis/prepend.rb +15 -0
  85. data/lib/new_relic/agent/instrumentation/aws_sdk_kinesis.rb +22 -0
  86. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/chain.rb +33 -0
  87. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/instrumentation.rb +93 -0
  88. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/prepend.rb +23 -0
  89. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda.rb +23 -0
  90. data/lib/new_relic/agent/instrumentation/aws_sqs/chain.rb +37 -0
  91. data/lib/new_relic/agent/instrumentation/aws_sqs/instrumentation.rb +67 -0
  92. data/lib/new_relic/agent/instrumentation/aws_sqs/prepend.rb +21 -0
  93. data/lib/new_relic/agent/instrumentation/aws_sqs.rb +23 -0
  94. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +1 -1
  95. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +23 -0
  96. data/lib/new_relic/agent/instrumentation/bunny.rb +4 -5
  97. data/lib/new_relic/agent/instrumentation/concurrent_ruby/chain.rb +1 -1
  98. data/lib/new_relic/agent/instrumentation/concurrent_ruby/instrumentation.rb +3 -4
  99. data/lib/new_relic/agent/instrumentation/concurrent_ruby/prepend.rb +1 -1
  100. data/lib/new_relic/agent/instrumentation/concurrent_ruby.rb +2 -3
  101. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +5 -2
  102. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +4 -0
  103. data/lib/new_relic/agent/instrumentation/curb.rb +4 -5
  104. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +1 -0
  105. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +3 -0
  106. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +0 -23
  107. data/lib/new_relic/agent/instrumentation/dynamodb/chain.rb +27 -0
  108. data/lib/new_relic/agent/instrumentation/dynamodb/instrumentation.rb +64 -0
  109. data/lib/new_relic/agent/instrumentation/dynamodb/prepend.rb +19 -0
  110. data/lib/new_relic/agent/instrumentation/dynamodb.rb +23 -0
  111. data/lib/new_relic/agent/instrumentation/elasticsearch/chain.rb +2 -3
  112. data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +65 -10
  113. data/lib/new_relic/agent/instrumentation/elasticsearch.rb +2 -4
  114. data/lib/new_relic/agent/instrumentation/ethon/chain.rb +39 -0
  115. data/lib/new_relic/agent/instrumentation/ethon/instrumentation.rb +105 -0
  116. data/lib/new_relic/agent/instrumentation/ethon/prepend.rb +35 -0
  117. data/lib/new_relic/agent/instrumentation/ethon.rb +35 -0
  118. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +3 -0
  119. data/lib/new_relic/agent/instrumentation/excon.rb +1 -17
  120. data/lib/new_relic/agent/instrumentation/fiber/chain.rb +11 -4
  121. data/lib/new_relic/agent/instrumentation/fiber/instrumentation.rb +2 -6
  122. data/lib/new_relic/agent/instrumentation/fiber/prepend.rb +10 -3
  123. data/lib/new_relic/agent/instrumentation/fiber.rb +1 -3
  124. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +4 -3
  125. data/lib/new_relic/agent/instrumentation/grape.rb +1 -1
  126. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +1 -1
  127. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +5 -2
  128. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +1 -1
  129. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +1 -1
  130. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +5 -1
  131. data/lib/new_relic/agent/instrumentation/grpc_client.rb +2 -2
  132. data/lib/new_relic/agent/instrumentation/grpc_server.rb +2 -2
  133. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +4 -0
  134. data/lib/new_relic/agent/instrumentation/httpclient.rb +1 -5
  135. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +4 -0
  136. data/lib/new_relic/agent/instrumentation/httprb.rb +0 -1
  137. data/lib/new_relic/agent/instrumentation/httpx/chain.rb +20 -0
  138. data/lib/new_relic/agent/instrumentation/httpx/instrumentation.rb +51 -0
  139. data/lib/new_relic/agent/instrumentation/httpx/prepend.rb +15 -0
  140. data/lib/new_relic/agent/instrumentation/httpx.rb +23 -0
  141. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +3 -0
  142. data/lib/new_relic/agent/instrumentation/logger.rb +1 -3
  143. data/lib/new_relic/agent/instrumentation/logstasher/chain.rb +21 -0
  144. data/lib/new_relic/agent/instrumentation/logstasher/instrumentation.rb +24 -0
  145. data/lib/new_relic/agent/instrumentation/logstasher/prepend.rb +13 -0
  146. data/lib/new_relic/agent/instrumentation/logstasher.rb +25 -0
  147. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +4 -2
  148. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +2 -2
  149. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +13 -4
  150. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +4 -2
  151. data/lib/new_relic/agent/instrumentation/memcache.rb +4 -5
  152. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +3 -5
  153. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +13 -3
  154. data/lib/new_relic/agent/instrumentation/net_http.rb +2 -1
  155. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +4 -2
  156. data/lib/new_relic/agent/instrumentation/opensearch/chain.rb +21 -0
  157. data/lib/new_relic/agent/instrumentation/opensearch/instrumentation.rb +66 -0
  158. data/lib/new_relic/agent/instrumentation/opensearch/prepend.rb +13 -0
  159. data/lib/new_relic/agent/instrumentation/opensearch.rb +23 -0
  160. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +4 -0
  161. data/lib/new_relic/agent/instrumentation/padrino.rb +3 -3
  162. data/lib/new_relic/agent/instrumentation/queue_time.rb +1 -1
  163. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +9 -0
  164. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +4 -0
  165. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +1 -1
  166. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +10 -5
  167. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +4 -0
  168. data/lib/new_relic/agent/instrumentation/rake.rb +1 -2
  169. data/lib/new_relic/agent/instrumentation/rdkafka/chain.rb +72 -0
  170. data/lib/new_relic/agent/instrumentation/rdkafka/instrumentation.rb +70 -0
  171. data/lib/new_relic/agent/instrumentation/rdkafka/prepend.rb +67 -0
  172. data/lib/new_relic/agent/instrumentation/rdkafka.rb +25 -0
  173. data/lib/new_relic/agent/instrumentation/redis/cluster_middleware.rb +26 -0
  174. data/lib/new_relic/agent/instrumentation/redis/constants.rb +2 -2
  175. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +18 -11
  176. data/lib/new_relic/agent/instrumentation/redis/middleware.rb +3 -0
  177. data/lib/new_relic/agent/instrumentation/redis.rb +11 -5
  178. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +4 -0
  179. data/lib/new_relic/agent/instrumentation/resque.rb +8 -6
  180. data/lib/new_relic/agent/instrumentation/roda/chain.rb +43 -0
  181. data/lib/new_relic/agent/instrumentation/roda/ignorer.rb +45 -0
  182. data/lib/new_relic/agent/instrumentation/roda/instrumentation.rb +68 -0
  183. data/lib/new_relic/agent/instrumentation/roda/prepend.rb +24 -0
  184. data/lib/new_relic/agent/instrumentation/roda/roda_transaction_namer.rb +29 -0
  185. data/lib/new_relic/agent/instrumentation/roda.rb +36 -0
  186. data/lib/new_relic/agent/instrumentation/ruby_kafka/chain.rb +55 -0
  187. data/lib/new_relic/agent/instrumentation/ruby_kafka/instrumentation.rb +67 -0
  188. data/lib/new_relic/agent/instrumentation/ruby_kafka/prepend.rb +60 -0
  189. data/lib/new_relic/agent/instrumentation/ruby_kafka.rb +25 -0
  190. data/lib/new_relic/agent/instrumentation/ruby_openai/chain.rb +36 -0
  191. data/lib/new_relic/agent/instrumentation/ruby_openai/instrumentation.rb +196 -0
  192. data/lib/new_relic/agent/instrumentation/ruby_openai/prepend.rb +20 -0
  193. data/lib/new_relic/agent/instrumentation/ruby_openai.rb +35 -0
  194. data/lib/new_relic/agent/instrumentation/sequel.rb +1 -1
  195. data/lib/new_relic/agent/instrumentation/sidekiq/client.rb +4 -0
  196. data/lib/new_relic/agent/instrumentation/sidekiq/extensions/delay_extensions.rb +24 -0
  197. data/lib/new_relic/agent/instrumentation/sidekiq/extensions/delayed_class.rb +2 -2
  198. data/lib/new_relic/agent/instrumentation/sidekiq/server.rb +26 -3
  199. data/lib/new_relic/agent/instrumentation/sidekiq.rb +13 -16
  200. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +1 -1
  201. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +4 -0
  202. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +1 -3
  203. data/lib/new_relic/agent/instrumentation/sinatra.rb +3 -19
  204. data/lib/new_relic/agent/instrumentation/stripe.rb +28 -0
  205. data/lib/new_relic/agent/instrumentation/stripe_subscriber.rb +98 -0
  206. data/lib/new_relic/agent/instrumentation/thread/chain.rb +1 -1
  207. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +1 -5
  208. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +1 -1
  209. data/lib/new_relic/agent/instrumentation/thread.rb +0 -2
  210. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +4 -0
  211. data/lib/new_relic/agent/instrumentation/tilt.rb +0 -4
  212. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +7 -3
  213. data/lib/new_relic/agent/instrumentation/typhoeus.rb +0 -1
  214. data/lib/new_relic/agent/instrumentation/view_component/chain.rb +21 -0
  215. data/lib/new_relic/agent/instrumentation/view_component/instrumentation.rb +45 -0
  216. data/lib/{tasks/instrumentation_generator/templates/instrumentation.tt → new_relic/agent/instrumentation/view_component/prepend.rb} +4 -4
  217. data/lib/new_relic/agent/instrumentation/view_component.rb +24 -0
  218. data/lib/new_relic/agent/javascript_instrumentor.rb +2 -4
  219. data/lib/new_relic/agent/llm/chat_completion_message.rb +25 -0
  220. data/lib/new_relic/agent/llm/chat_completion_summary.rb +66 -0
  221. data/lib/new_relic/agent/llm/embedding.rb +60 -0
  222. data/lib/new_relic/agent/llm/llm_event.rb +95 -0
  223. data/lib/new_relic/agent/llm/response_headers.rb +80 -0
  224. data/lib/new_relic/agent/llm.rb +49 -0
  225. data/lib/new_relic/agent/local_log_decorator.rb +20 -3
  226. data/lib/new_relic/agent/log_event_aggregator.rb +149 -26
  227. data/lib/new_relic/agent/log_event_attributes.rb +115 -0
  228. data/lib/new_relic/agent/logging.rb +5 -5
  229. data/lib/new_relic/agent/messaging.rb +18 -7
  230. data/lib/new_relic/agent/method_tracer.rb +4 -1
  231. data/lib/new_relic/agent/method_tracer_helpers.rb +26 -5
  232. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -1
  233. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +12 -1
  234. data/lib/new_relic/agent/new_relic_service/encoders.rb +2 -2
  235. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +2 -2
  236. data/lib/new_relic/agent/new_relic_service.rb +61 -28
  237. data/lib/new_relic/agent/obfuscator.rb +0 -2
  238. data/lib/new_relic/agent/opentelemetry/context/propagation/trace_propagator.rb +66 -0
  239. data/lib/new_relic/agent/opentelemetry/context/propagation.rb +15 -0
  240. data/lib/{tasks/instrumentation_generator/templates/Envfile.tt → new_relic/agent/opentelemetry/context.rb} +9 -5
  241. data/lib/new_relic/agent/opentelemetry/trace/span.rb +31 -0
  242. data/lib/new_relic/agent/opentelemetry/trace/tracer.rb +129 -0
  243. data/lib/new_relic/agent/opentelemetry/trace/tracer_provider.rb +18 -0
  244. data/lib/new_relic/agent/opentelemetry/trace.rb +15 -0
  245. data/lib/new_relic/agent/opentelemetry/transaction_patch.rb +69 -0
  246. data/lib/new_relic/agent/opentelemetry_bridge.rb +32 -0
  247. data/lib/new_relic/agent/parameter_filtering.rb +1 -1
  248. data/lib/new_relic/agent/pipe_channel_manager.rb +2 -2
  249. data/lib/new_relic/agent/pipe_service.rb +1 -1
  250. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +1 -2
  251. data/lib/new_relic/agent/rules_engine.rb +1 -1
  252. data/lib/new_relic/agent/sampler.rb +1 -0
  253. data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -1
  254. data/lib/new_relic/agent/samplers/memory_sampler.rb +1 -1
  255. data/lib/new_relic/agent/serverless_handler.rb +406 -0
  256. data/lib/new_relic/agent/serverless_handler_event_sources.json +155 -0
  257. data/lib/new_relic/agent/serverless_handler_event_sources.rb +49 -0
  258. data/lib/new_relic/agent/span_event_primitive.rb +32 -15
  259. data/lib/new_relic/agent/sql_sampler.rb +0 -1
  260. data/lib/new_relic/agent/system_info.rb +40 -0
  261. data/lib/new_relic/agent/threading/agent_thread.rb +1 -2
  262. data/lib/new_relic/agent/threading/backtrace_node.rb +10 -1
  263. data/lib/new_relic/agent/tracer.rb +16 -16
  264. data/lib/new_relic/agent/transaction/abstract_segment.rb +103 -41
  265. data/lib/new_relic/agent/transaction/datastore_segment.rb +1 -1
  266. data/lib/new_relic/agent/transaction/distributed_tracer.rb +3 -3
  267. data/lib/new_relic/agent/transaction/distributed_tracing.rb +7 -8
  268. data/lib/new_relic/agent/transaction/external_request_segment.rb +5 -12
  269. data/lib/new_relic/agent/transaction/message_broker_segment.rb +5 -3
  270. data/lib/new_relic/agent/transaction/request_attributes.rb +54 -11
  271. data/lib/new_relic/agent/transaction/trace_context.rb +34 -5
  272. data/lib/new_relic/agent/transaction/tracing.rb +20 -4
  273. data/lib/new_relic/agent/transaction.rb +38 -13
  274. data/lib/new_relic/agent/transaction_error_primitive.rb +39 -19
  275. data/lib/new_relic/agent/transaction_event_primitive.rb +19 -0
  276. data/lib/new_relic/agent/transaction_time_aggregator.rb +1 -1
  277. data/lib/new_relic/agent/utilization/ecs.rb +22 -0
  278. data/lib/new_relic/agent/utilization/ecs_v4.rb +22 -0
  279. data/lib/new_relic/agent/utilization/gcp.rb +1 -3
  280. data/lib/new_relic/agent/utilization/vendor.rb +5 -7
  281. data/lib/new_relic/agent/utilization_data.rb +40 -5
  282. data/lib/new_relic/agent/vm/{mri_vm.rb → c_ruby_vm.rb} +10 -18
  283. data/lib/new_relic/agent/vm.rb +2 -2
  284. data/lib/new_relic/agent/worker_loop.rb +1 -1
  285. data/lib/new_relic/agent.rb +286 -17
  286. data/lib/new_relic/base64.rb +25 -0
  287. data/lib/new_relic/cli/command.rb +6 -3
  288. data/lib/new_relic/constants.rb +8 -0
  289. data/lib/new_relic/control/class_methods.rb +1 -7
  290. data/lib/new_relic/control/frameworks/grape.rb +14 -0
  291. data/lib/new_relic/control/frameworks/padrino.rb +14 -0
  292. data/lib/new_relic/control/frameworks/rails.rb +17 -5
  293. data/lib/new_relic/control/frameworks/rails4.rb +1 -3
  294. data/lib/new_relic/control/frameworks/roda.rb +20 -0
  295. data/lib/new_relic/control/instance_methods.rb +13 -0
  296. data/lib/new_relic/control/instrumentation.rb +2 -16
  297. data/lib/new_relic/control/private_instance_methods.rb +4 -0
  298. data/lib/new_relic/control/security_interface.rb +57 -0
  299. data/lib/new_relic/control.rb +1 -1
  300. data/lib/new_relic/dependency_detection.rb +25 -13
  301. data/lib/new_relic/environment_report.rb +2 -2
  302. data/lib/new_relic/helper.rb +22 -0
  303. data/lib/new_relic/language_support.rb +12 -1
  304. data/lib/new_relic/latest_changes.rb +1 -1
  305. data/lib/new_relic/local_environment.rb +31 -18
  306. data/lib/new_relic/noticed_error.rb +5 -2
  307. data/lib/new_relic/rack/agent_hooks.rb +1 -1
  308. data/lib/new_relic/rack/agent_middleware.rb +0 -16
  309. data/lib/new_relic/rack/browser_monitoring.rb +29 -13
  310. data/lib/new_relic/supportability_helper.rb +5 -1
  311. data/lib/new_relic/thread_local_storage.rb +31 -0
  312. data/lib/new_relic/traced_thread.rb +2 -3
  313. data/lib/new_relic/version.rb +1 -1
  314. data/lib/sequel/extensions/new_relic_instrumentation.rb +4 -3
  315. data/lib/tasks/bump_version.rake +21 -0
  316. data/lib/tasks/config.rake +11 -5
  317. data/lib/tasks/coverage_report.rake +1 -1
  318. data/lib/tasks/gha.rake +31 -0
  319. data/lib/tasks/helpers/config.html.erb +94 -0
  320. data/lib/tasks/helpers/format.rb +11 -7
  321. data/lib/tasks/helpers/newrelicyml.rb +211 -0
  322. data/lib/tasks/helpers/version_bump.rb +62 -0
  323. data/lib/tasks/newrelic.rb +1 -0
  324. data/lib/tasks/newrelicyml.rake +13 -0
  325. data/lib/tasks/tests.rake +71 -0
  326. data/newrelic.yml +657 -251
  327. data/newrelic_rpm.gemspec +17 -10
  328. data/test/agent_helper.rb +38 -4
  329. metadata +230 -44
  330. data/.gitignore +0 -43
  331. data/.project +0 -23
  332. data/.rubocop.yml +0 -1909
  333. data/.rubocop_todo.yml +0 -61
  334. data/.simplecov +0 -15
  335. data/.snyk +0 -11
  336. data/.yardopts +0 -27
  337. data/Brewfile +0 -12
  338. data/DOCKER.md +0 -167
  339. data/Dockerfile +0 -10
  340. data/Guardfile +0 -26
  341. data/bin/newrelic_cmd +0 -6
  342. data/config/database.yml +0 -5
  343. data/config.dot +0 -278
  344. data/docker-compose.yml +0 -107
  345. data/lefthook.yml +0 -9
  346. data/lib/new_relic/agent/range_extensions.rb +0 -27
  347. data/lib/tasks/helpers/removers.rb +0 -33
  348. data/lib/tasks/instrumentation_generator/README.md +0 -63
  349. data/lib/tasks/instrumentation_generator/TODO.md +0 -33
  350. data/lib/tasks/instrumentation_generator/instrumentation.thor +0 -121
  351. data/lib/tasks/instrumentation_generator/templates/chain.tt +0 -22
  352. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +0 -8
  353. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +0 -29
  354. data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +0 -3
  355. data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +0 -19
  356. data/lib/tasks/instrumentation_generator/templates/prepend.tt +0 -13
  357. data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +0 -3
  358. data/lib/tasks/instrumentation_generator/templates/test.tt +0 -15
  359. data/lib/tasks/multiverse.rake +0 -6
  360. data/lib/tasks/multiverse.rb +0 -83
@@ -3,6 +3,7 @@
3
3
  # frozen_string_literal: true
4
4
 
5
5
  require 'forwardable'
6
+ require_relative '../../constants'
6
7
 
7
8
  module NewRelic
8
9
  module Agent
@@ -14,30 +15,6 @@ module NewRelic
14
15
  end
15
16
  end
16
17
 
17
- # Combines potentially two properties into one.
18
- # Given the example:
19
- # :disable_net_http and :prepend_net_instrumentation
20
- # if :disable_net_http is true, then returned value is "disabled"
21
- # if :prepend_net_instrumentation is false, then returned value is "chain"
22
- # otherwise, "auto" is returned.
23
- #
24
- # Intent is:
25
- # - if user sets disable_xxx property, then don't instrument
26
- # - if user set prepend to `false` then we use method_alias chaining
27
- # - auto, when returned means, try to use prepend unless conflicting gems discovered
28
- #
29
- def self.instrumentation_value_of(disable_key, prepend_key = nil)
30
- proc do
31
- if NewRelic::Agent.config[disable_key]
32
- 'disabled'
33
- elsif prepend_key && !NewRelic::Agent.config[prepend_key]
34
- 'chain'
35
- else
36
- 'auto'
37
- end
38
- end
39
- end
40
-
41
18
  def self.instrumentation_value_from_boolean(key)
42
19
  proc do
43
20
  NewRelic::Agent.config[key] ? 'auto' : 'disabled'
@@ -48,7 +25,7 @@ module NewRelic
48
25
  # Does not appear in logs.
49
26
  def self.deprecated_description(new_setting, description)
50
27
  link_ref = new_setting.to_s.tr('.', '-')
51
- %{Please see: [#{new_setting}](docs/agents/ruby-agent/configuration/ruby-agent-configuration##{link_ref}). \n\n#{description}}
28
+ %{Please see: [#{new_setting}](##{link_ref}). \n\n#{description}}
52
29
  end
53
30
 
54
31
  class Boolean
@@ -58,6 +35,15 @@ module NewRelic
58
35
  end
59
36
 
60
37
  class DefaultSource
38
+ BOOLEAN_MAP = {
39
+ 'true' => true,
40
+ 'yes' => true,
41
+ 'on' => true,
42
+ 'false' => false,
43
+ 'no' => false,
44
+ 'off' => false
45
+ }.freeze
46
+
61
47
  attr_reader :defaults
62
48
 
63
49
  extend Forwardable
@@ -75,12 +61,33 @@ module NewRelic
75
61
  result
76
62
  end
77
63
 
64
+ def self.default_settings(key)
65
+ ::NewRelic::Agent::Configuration::DEFAULTS[key]
66
+ end
67
+
68
+ def self.value_from_defaults(key, subkey)
69
+ default_settings(key)&.send(:[], subkey)
70
+ end
71
+
72
+ def self.allowlist_for(key)
73
+ value_from_defaults(key, :allowlist)
74
+ end
75
+
76
+ def self.boolean_for(key, value)
77
+ string_value = (value.respond_to?(:call) ? value.call : value).to_s
78
+
79
+ BOOLEAN_MAP.fetch(string_value, nil)
80
+ end
81
+
82
+ def self.default_for(key)
83
+ value_from_defaults(key, :default)
84
+ end
85
+
78
86
  def self.transform_for(key)
79
- default_settings = ::NewRelic::Agent::Configuration::DEFAULTS[key]
80
- default_settings[:transform] if default_settings
87
+ value_from_defaults(key, :transform)
81
88
  end
82
89
 
83
- def self.config_search_paths # rubocop:disable Metrics/AbcSize
90
+ def self.config_search_paths
84
91
  proc {
85
92
  yaml = 'newrelic.yml'
86
93
  config_yaml = File.join('config', yaml)
@@ -132,13 +139,16 @@ module NewRelic
132
139
  case Rails::VERSION::MAJOR
133
140
  when 3
134
141
  :rails3
135
- when 4..7
142
+ when 4..8
136
143
  :rails_notifications
137
144
  else
138
145
  ::NewRelic::Agent.logger.warn("Detected untested Rails version #{Rails::VERSION::STRING}")
139
146
  :rails_notifications
140
147
  end
148
+ when defined?(::Padrino) && defined?(::Padrino::PathRouter::Router) then :padrino
141
149
  when defined?(::Sinatra) && defined?(::Sinatra::Base) then :sinatra
150
+ when defined?(::Roda) then :roda
151
+ when defined?(::Grape) then :grape
142
152
  when defined?(::NewRelic::IA) then :external
143
153
  else :ruby
144
154
  end
@@ -235,6 +245,22 @@ module NewRelic
235
245
  end
236
246
  end
237
247
 
248
+ def self.convert_to_hash(value)
249
+ return value if value.is_a?(Hash)
250
+
251
+ if value.is_a?(String)
252
+ return value.split(',').each_with_object({}) do |item, hash|
253
+ key, value = item.split('=')
254
+ hash[key] = value
255
+ end
256
+ end
257
+
258
+ raise ArgumentError.new(
259
+ "Config value '#{value}' of " \
260
+ "class #{value.class} couldn't be turned into a Hash."
261
+ )
262
+ end
263
+
238
264
  SEMICOLON = ';'.freeze
239
265
  def self.convert_to_list_on_semicolon(value)
240
266
  case value
@@ -319,6 +345,7 @@ module NewRelic
319
345
  'webpacker:compile'
320
346
  ].join(',').freeze
321
347
 
348
+ # rubocop:disable Metrics/CollectionLiteralLength
322
349
  DEFAULTS = {
323
350
  # Critical
324
351
  :agent_enabled => {
@@ -342,7 +369,8 @@ module NewRelic
342
369
  :public => true,
343
370
  :type => String,
344
371
  :allowed_from_server => false,
345
- :description => 'Your New Relic <LicenseKey />.'
372
+ :exclude_from_reported_settings => true,
373
+ :description => 'Your New Relic <InlinePopover type="licenseKey" />.'
346
374
  },
347
375
  :log_level => {
348
376
  :default => 'info',
@@ -359,9 +387,31 @@ module NewRelic
359
387
  :allowed_from_server => false,
360
388
  :description => <<~DESCRIPTION
361
389
  An array of ActiveSupport custom event names to subscribe to and instrument. For example,
362
- - one.custom.event
363
- - another.event
364
- - a.third.event
390
+ \t\t- one.custom.event
391
+ \t\t- another.event
392
+ \t\t- a.third.event
393
+ DESCRIPTION
394
+ },
395
+ :'ai_monitoring.enabled' => {
396
+ :default => false,
397
+ :public => true,
398
+ :type => Boolean,
399
+ :allowed_from_server => false,
400
+ :description => 'If `false`, all LLM instrumentation (OpenAI only for now) will be disabled and no metrics, events, or spans will be sent. AI Monitoring is automatically disabled if `high_security` mode is enabled.'
401
+ },
402
+ :'ai_monitoring.record_content.enabled' => {
403
+ :default => true,
404
+ :public => true,
405
+ :type => Boolean,
406
+ :allowed_from_server => false,
407
+ :description => <<~DESCRIPTION
408
+ If `false`, LLM instrumentation (OpenAI only for now) will not capture input and output content on specific LLM events.
409
+
410
+ \tThe excluded attributes include:
411
+ \t- `content` from LlmChatCompletionMessage events
412
+ \t- `input` from LlmEmbedding events
413
+
414
+ \tThis is an optional security setting to prevent recording sensitive data sent to and received from your LLMs.
365
415
  DESCRIPTION
366
416
  },
367
417
  # this is only set via server side config
@@ -377,7 +427,8 @@ module NewRelic
377
427
  :public => true,
378
428
  :type => String,
379
429
  :allowed_from_server => false,
380
- :description => 'Your New Relic [user key](/docs/apis/intro-apis/new-relic-api-keys/#overview-keys). Required when using the New Relic REST API v2 to record deployments using the `newrelic deployments` command.'
430
+ :exclude_from_reported_settings => true,
431
+ :description => 'Your New Relic <InlinePopover type="userKey" />. Required when using the New Relic REST API v2 to record deployments using the `newrelic deployments` command.'
381
432
  },
382
433
  :backport_fast_active_record_connection_lookup => {
383
434
  :default => false,
@@ -392,7 +443,7 @@ module NewRelic
392
443
  :public => true,
393
444
  :type => String,
394
445
  :allowed_from_server => false,
395
- :description => "Manual override for the path to your local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic's data collection service."
446
+ :description => "Manual override for the path to your local CA bundle. This CA bundle validates the SSL certificate presented by New Relic's data collection service."
396
447
  },
397
448
  :capture_memcache_keys => {
398
449
  :default => false,
@@ -409,9 +460,9 @@ module NewRelic
409
460
  :description => <<~DESCRIPTION
410
461
  When `true`, the agent captures HTTP request parameters and attaches them to transaction traces, traced errors, and [`TransactionError` events](/attribute-dictionary?attribute_name=&events_tids%5B%5D=8241).
411
462
 
412
- <Callout variant="caution">
413
- When using the `capture_params` setting, the Ruby agent will not attempt to filter secret information. <b>Recommendation:</b> To filter secret information from request parameters, use the [`attributes.include` setting](/docs/agents/ruby-agent/attributes/enable-disable-attributes-ruby) instead. For more information, see the <a href="/docs/agents/ruby-agent/attributes/ruby-attribute-examples#ex_req_params">Ruby attribute examples</a>.
414
- </Callout>
463
+ <Callout variant="caution">
464
+ \tWhen using the `capture_params` setting, the Ruby agent will not attempt to filter secret information. `Recommendation:` To filter secret information from request parameters, use the [`attributes.include` setting](/docs/agents/ruby-agent/attributes/enable-disable-attributes-ruby) instead. For more information, see the <a href="/docs/agents/ruby-agent/attributes/ruby-attribute-examples#ex_req_params">Ruby attribute examples</a>.
465
+ </Callout>
415
466
  DESCRIPTION
416
467
  },
417
468
  :'clear_transaction_state_after_fork' => {
@@ -421,12 +472,26 @@ module NewRelic
421
472
  :allowed_from_server => false,
422
473
  :description => 'If `true`, the agent will clear `Tracer::State` in `Agent.drop_buffered_data`.'
423
474
  },
475
+ :'cloud.aws.account_id' => {
476
+ :default => nil,
477
+ :public => true,
478
+ :type => String,
479
+ :allow_nil => true,
480
+ :allowed_from_server => false,
481
+ :description => 'The AWS account ID for the AWS account associated with this app'
482
+ },
424
483
  :config_path => {
425
484
  :default => DefaultSource.config_path,
426
485
  :public => true,
427
486
  :type => String,
428
487
  :allowed_from_server => false,
429
- :description => 'Path to <b>newrelic.yml</b>. If undefined, the agent checks the following directories (in order): <b>config/newrelic.yml</b>, <b>newrelic.yml</b>, <b>$HOME/.newrelic/newrelic.yml</b> and <b>$HOME/newrelic.yml</b>.'
488
+ :description => <<~DESC
489
+ Path to `newrelic.yml`. If undefined, the agent checks the following directories (in order):
490
+ \t- `config/newrelic.yml`
491
+ \t- `newrelic.yml`
492
+ \t- `$HOME/.newrelic/newrelic.yml`
493
+ \t- `$HOME/newrelic.yml`
494
+ DESC
430
495
  },
431
496
  :'exclude_newrelic_header' => {
432
497
  :default => false,
@@ -440,12 +505,14 @@ module NewRelic
440
505
  :public => true,
441
506
  :type => Boolean,
442
507
  :allowed_from_server => false,
443
- :description => 'Forces the exit handler that sends all cached data to collector ' \
444
- 'before shutting down to be installed regardless of detecting scenarios where it generally should not be. ' \
445
- 'Known use-case for this option is where Sinatra is running as an embedded service within another framework ' \
446
- 'and the agent is detecting the Sinatra app and skipping the `at_exit` handler as a result. Sinatra classically ' \
447
- 'runs the entire application in an `at_exit` block and would otherwise misbehave if the Agent\'s `at_exit` handler ' \
448
- 'was also installed in those circumstances. Note: `send_data_on_exit` should also be set to `true` in tandem with this setting.'
508
+ :description => <<~DESC
509
+ The exit handler that sends all cached data to the collector before shutting down is forcibly installed. \
510
+ This is true even when it detects scenarios where it generally should not be. The known use case for this \
511
+ option is when Sinatra runs as an embedded service within another framework. The agent detects the Sinatra \
512
+ app and skips the `at_exit` handler as a result. Sinatra classically runs the entire application in an \
513
+ `at_exit` block and would otherwise misbehave if the agent's `at_exit` handler was also installed in those \
514
+ circumstances. Note: `send_data_on_exit` should also be set to `true` in tandem with this setting.
515
+ DESC
449
516
  },
450
517
  :high_security => {
451
518
  :default => false,
@@ -552,6 +619,13 @@ module NewRelic
552
619
  :allowed_from_server => false,
553
620
  :description => 'When set to `true`, forces a synchronous connection to the New Relic [collector](/docs/using-new-relic/welcome-new-relic/get-started/glossary/#collector) during application startup. For very short-lived processes, this helps ensure the New Relic agent has time to report.'
554
621
  },
622
+ :thread_local_tracer_state => {
623
+ :default => false,
624
+ :public => true,
625
+ :type => Boolean,
626
+ :allowed_from_server => false,
627
+ :description => 'If `true`, tracer state storage is thread-local, otherwise, fiber-local'
628
+ },
555
629
  :timeout => {
556
630
  :default => 2 * 60, # 2 minutes
557
631
  :public => true,
@@ -572,7 +646,7 @@ module NewRelic
572
646
  :public => true,
573
647
  :type => Boolean,
574
648
  :allowed_from_server => true,
575
- :description => 'If `true`, enables the collection of explain plans in transaction traces. This setting will also apply to explain plans in slow SQL traces if [`slow_sql.explain_enabled`](#slow_sql-explain_enabled) is not set separately.'
649
+ :description => "If `true`, enables the collection of explain plans in transaction traces. This setting will also apply to explain plans in slow SQL traces if [`slow_sql.explain_enabled`](#slow_sql-explain_enabled) isn't set separately."
576
650
  },
577
651
  :'transaction_tracer.explain_threshold' => {
578
652
  :default => 0.5,
@@ -600,14 +674,13 @@ module NewRelic
600
674
  :public => true,
601
675
  :type => String,
602
676
  :allowed_from_server => true,
603
- :description => 'Obfuscation level for SQL queries reported in transaction trace nodes.
604
-
605
- By default, this is set to `obfuscated`, which strips out the numeric and string literals.
606
-
607
- - If you do not want the agent to capture query information, set this to `none`.
608
- - If you want the agent to capture all query information in its original form, set this to `raw`.
609
- - When you enable [high security mode](/docs/agents/manage-apm-agents/configuration/high-security-mode), this is automatically set to `obfuscated`.
610
- '
677
+ :description => <<~DESC
678
+ Obfuscation level for SQL queries reported in transaction trace nodes.
679
+ \tBy default, this is set to `obfuscated`, which strips out the numeric and string literals.
680
+ \t- If you do not want the agent to capture query information, set this to `none`.
681
+ \t- If you want the agent to capture all query information in its original form, set this to `raw`.
682
+ \t- When you enable [high security mode](/docs/agents/manage-apm-agents/configuration/high-security-mode), this is automatically set to `obfuscated`.
683
+ DESC
611
684
  },
612
685
 
613
686
  :'transaction_tracer.stack_trace_threshold' => {
@@ -625,20 +698,6 @@ module NewRelic
625
698
  :description => 'Specify a threshold in seconds. Transactions with a duration longer than this threshold are eligible for transaction traces. Specify a float value or the string `apdex_f`.'
626
699
  },
627
700
  # Error collector
628
- :'error_collector.ignore_classes' => {
629
- :default => ['ActionController::RoutingError', 'Sinatra::NotFound'],
630
- :public => true,
631
- :type => Array,
632
- :allowed_from_server => true,
633
- :dynamic_name => true,
634
- :description => <<~DESCRIPTION
635
- A list of error classes that the agent should ignore.
636
-
637
- <Callout variant="caution">
638
- This option can't be set via environment variable.
639
- </Callout>
640
- DESCRIPTION
641
- },
642
701
  :'error_collector.capture_events' => {
643
702
  :default => value_of(:'error_collector.enabled'),
644
703
  :documentation_default => true,
@@ -646,7 +705,7 @@ module NewRelic
646
705
  :type => Boolean,
647
706
  :allowed_from_server => true,
648
707
  :dynamic_name => true,
649
- :description => 'If `true`, the agent collects [TransactionError events](/docs/insights/new-relic-insights/decorating-events/error-event-default-attributes-insights).'
708
+ :description => 'If `true`, the agent collects [`TransactionError` events](/docs/insights/new-relic-insights/decorating-events/error-event-default-attributes-insights).'
650
709
  },
651
710
  :'error_collector.enabled' => {
652
711
  :default => true,
@@ -663,10 +722,9 @@ module NewRelic
663
722
  :dynamic_name => true,
664
723
  :description => <<~DESCRIPTION
665
724
  A list of error classes that the agent should treat as expected.
666
-
667
- <Callout variant="caution">
668
- This option can't be set via environment variable.
669
- </Callout>
725
+ \t<Callout variant="caution">
726
+ \t\tThis option can't be set via environment variable.
727
+ \t</Callout>
670
728
  DESCRIPTION
671
729
  },
672
730
  :'error_collector.expected_messages' => {
@@ -677,10 +735,9 @@ module NewRelic
677
735
  :dynamic_name => true,
678
736
  :description => <<~DESCRIPTION
679
737
  A map of error classes to a list of messages. When an error of one of the classes specified here occurs, if its error message contains one of the strings corresponding to it here, that error will be treated as expected.
680
-
681
- <Callout variant="caution">
682
- This option can't be set via environment variable.
683
- </Callout>
738
+ \t<Callout variant="caution">
739
+ \t\tThis option can't be set via environment variable.
740
+ \t</Callout>
684
741
  DESCRIPTION
685
742
  },
686
743
  :'error_collector.expected_status_codes' => {
@@ -691,19 +748,35 @@ module NewRelic
691
748
  :dynamic_name => true,
692
749
  :description => 'A comma separated list of status codes, possibly including ranges. Errors associated with these status codes, where applicable, will be treated as expected.'
693
750
  },
694
-
751
+ :'error_collector.ignore_classes' => {
752
+ :default => ['ActionController::RoutingError', 'Sinatra::NotFound'],
753
+ :public => true,
754
+ :type => Array,
755
+ :allowed_from_server => true,
756
+ :dynamic_name => true,
757
+ :description => <<~DESCRIPTION
758
+ A list of error classes that the agent should ignore.
759
+ \t<Callout variant="caution">
760
+ \t\tThis option can't be set via environment variable.
761
+ \t</Callout>
762
+ DESCRIPTION
763
+ },
695
764
  :'error_collector.ignore_messages' => {
696
- :default => {},
765
+ # we have to keep the hash rocket in the actual default so the
766
+ # class name key is treated like a string rather than a symbol.
767
+ # however, this isn't valid yaml, so document something that is
768
+ # valid yaml
769
+ :default => {'ThreadError' => ['queue empty']},
770
+ :documentation_default => {'ThreadError': ['queue empty']},
697
771
  :public => true,
698
772
  :type => Hash,
699
773
  :allowed_from_server => true,
700
774
  :dynamic_name => true,
701
775
  :description => <<~DESCRIPTION
702
776
  A map of error classes to a list of messages. When an error of one of the classes specified here occurs, if its error message contains one of the strings corresponding to it here, that error will be ignored.
703
-
704
- <Callout variant="caution">
705
- This option can't be set via environment variable.
706
- </Callout>
777
+ \t<Callout variant="caution">
778
+ \t\tThis option can't be set via environment variable.
779
+ \t</Callout>
707
780
  DESCRIPTION
708
781
  },
709
782
  :'error_collector.ignore_status_codes' => {
@@ -719,14 +792,14 @@ module NewRelic
719
792
  :public => true,
720
793
  :type => Integer,
721
794
  :allowed_from_server => false,
722
- :description => 'Defines the maximum number of frames in an error backtrace. Backtraces over this amount are truncated at the beginning and end.'
795
+ :description => 'Defines the maximum number of frames in an error backtrace. Backtraces over this amount are truncated in the middle, preserving the beginning and the end of the stack trace.'
723
796
  },
724
797
  :'error_collector.max_event_samples_stored' => {
725
798
  :default => 100,
726
799
  :public => true,
727
800
  :type => Integer,
728
801
  :allowed_from_server => true,
729
- :description => 'Defines the maximum number of [TransactionError events](/docs/insights/new-relic-insights/decorating-events/error-event-default-attributes-insights) reported per harvest cycle.'
802
+ :description => 'Defines the maximum number of [`TransactionError` events](/docs/insights/new-relic-insights/decorating-events/error-event-default-attributes-insights) reported per harvest cycle.'
730
803
  },
731
804
  # Browser monitoring
732
805
  :'browser_monitoring.auto_instrument' => {
@@ -737,6 +810,15 @@ module NewRelic
737
810
  :allowed_from_server => true,
738
811
  :description => 'If `true`, enables [auto-injection](/docs/browser/new-relic-browser/installation-configuration/adding-apps-new-relic-browser#select-apm-app) of the JavaScript header for page load timing (sometimes referred to as real user monitoring or RUM).'
739
812
  },
813
+ # CSP nonce
814
+ :'browser_monitoring.content_security_policy_nonce' => {
815
+ :default => value_of(:'rum.enabled'),
816
+ :documentation_default => true,
817
+ :public => true,
818
+ :type => Boolean,
819
+ :allowed_from_server => false,
820
+ :description => 'If `true`, enables auto-injection of [Content Security Policy Nonce](https://content-security-policy.com/nonce/) in browser monitoring scripts. For now, auto-injection only works with Rails 5.2+.'
821
+ },
740
822
  # Transaction events
741
823
  :'transaction_events.enabled' => {
742
824
  :default => true,
@@ -767,6 +849,53 @@ module NewRelic
767
849
  :allowed_from_server => false,
768
850
  :description => 'If `true`, the agent captures log records emitted by your application.'
769
851
  },
852
+ :'application_logging.forwarding.log_level' => {
853
+ :default => 'debug',
854
+ :public => true,
855
+ :type => String,
856
+ :allowed_from_server => false,
857
+ :allowlist => %w[debug info warn error fatal unknown DEBUG INFO WARN ERROR FATAL UNKNOWN],
858
+ :description => <<~DESCRIPTION
859
+ Sets the minimum level a log event must have to be forwarded to New Relic.
860
+
861
+ \tThis is based on the integer values of [Ruby's `Logger::Severity` constants](https://github.com/ruby/logger/blob/113b82a06b3076b93a71cd467e1605b23afb3088/lib/logger/severity.rb).
862
+
863
+ \tThe intention is to forward logs with the level given to the configuration, as well as any logs with a higher level of severity.
864
+
865
+ \tFor example, setting this value to "debug" will forward all log events to New Relic. Setting this value to "error" will only forward log events with the levels "error", "fatal", and "unknown".
866
+
867
+ \tValid values (ordered lowest to highest):
868
+ \t- "debug"
869
+ \t- "info"
870
+ \t- "warn"
871
+ \t- "error"
872
+ \t- "fatal"
873
+ \t- "unknown"
874
+ DESCRIPTION
875
+ },
876
+ :'application_logging.forwarding.custom_attributes' => {
877
+ :default => {},
878
+ :public => true,
879
+ :type => Hash,
880
+ :transform => DefaultSource.method(:convert_to_hash),
881
+ :allowed_from_server => false,
882
+ :description => 'A hash with key/value pairs to add as custom attributes to all log events forwarded to New Relic. If sending using an environment variable, the value must be formatted like: "key1=value1,key2=value2"'
883
+ },
884
+ :'application_logging.forwarding.labels.enabled' => {
885
+ :default => false,
886
+ :public => true,
887
+ :type => Boolean,
888
+ :allowed_from_server => false,
889
+ :description => 'If `true`, the agent attaches [labels](https://docs.newrelic.com/docs/apm/agents/ruby-agent/configuration/ruby-agent-configuration/#labels) to log records.'
890
+ },
891
+ :'application_logging.forwarding.labels.exclude' => {
892
+ :default => [],
893
+ :public => true,
894
+ :type => Array,
895
+ :transform => DefaultSource.method(:convert_to_list),
896
+ :allowed_from_server => false,
897
+ :description => 'A case-insensitive array or comma-delimited string containing the labels to exclude from log records.'
898
+ },
770
899
  :'application_logging.forwarding.max_samples_stored' => {
771
900
  :default => 10000,
772
901
  :public => true,
@@ -790,6 +919,13 @@ module NewRelic
790
919
  :description => 'If `true`, the agent captures metrics related to logging for your application.'
791
920
  },
792
921
  # Attributes
922
+ :'allow_all_headers' => {
923
+ :default => false,
924
+ :public => true,
925
+ :type => Boolean,
926
+ :allowed_from_server => false,
927
+ :description => 'If `true`, enables capture of all HTTP request headers for all destinations.'
928
+ },
793
929
  :'attributes.enabled' => {
794
930
  :default => true,
795
931
  :public => true,
@@ -965,11 +1101,11 @@ module NewRelic
965
1101
  :type => Array,
966
1102
  :allowed_from_server => false,
967
1103
  :transform => DefaultSource.method(:convert_to_regexp_list),
968
- :description => 'List of allowed endpoints to include in audit log'
1104
+ :description => 'List of allowed endpoints to include in audit log.'
969
1105
  },
970
1106
  :'audit_log.path' => {
971
1107
  :default => DefaultSource.audit_log_path,
972
- :documentation_default => 'config/newrelic_audit.log',
1108
+ :documentation_default => 'log/newrelic_audit.log',
973
1109
  :public => true,
974
1110
  :type => String,
975
1111
  :allowed_from_server => false,
@@ -977,25 +1113,39 @@ module NewRelic
977
1113
  },
978
1114
  # Autostart
979
1115
  :'autostart.denylisted_constants' => {
980
- :default => 'Rails::Console',
981
- :public => true,
982
- :type => String,
983
- :allowed_from_server => false,
984
- :description => 'Specify a list of constants that should prevent the agent from starting automatically. Separate individual constants with a comma `,`. For example, `Rails::Console,UninstrumentedBackgroundJob`.'
1116
+ :default => %w[Rails::Command::ConsoleCommand
1117
+ Rails::Command::CredentialsCommand
1118
+ Rails::Command::Db::System::ChangeCommand
1119
+ Rails::Command::DbConsoleCommand
1120
+ Rails::Command::DestroyCommand
1121
+ Rails::Command::DevCommand
1122
+ Rails::Command::EncryptedCommand
1123
+ Rails::Command::GenerateCommand
1124
+ Rails::Command::InitializersCommand
1125
+ Rails::Command::NotesCommand
1126
+ Rails::Command::RoutesCommand
1127
+ Rails::Command::RunnerCommand
1128
+ Rails::Command::SecretsCommand
1129
+ Rails::Console
1130
+ Rails::DBConsole].join(','),
1131
+ :public => true,
1132
+ :type => String,
1133
+ :allowed_from_server => false,
1134
+ :description => 'Specify a list of constants that should prevent the agent from starting automatically. Separate individual constants with a comma `,`. For example, `"Rails::Console,UninstrumentedBackgroundJob"`.'
985
1135
  },
986
1136
  :'autostart.denylisted_executables' => {
987
1137
  :default => 'irb,rspec',
988
1138
  :public => true,
989
1139
  :type => String,
990
1140
  :allowed_from_server => false,
991
- :description => 'Defines a comma-delimited list of executables that the agent should not instrument. For example, `rake,my_ruby_script.rb`.'
1141
+ :description => 'Defines a comma-delimited list of executables that the agent should not instrument. For example, `"rake,my_ruby_script.rb"`.'
992
1142
  },
993
1143
  :'autostart.denylisted_rake_tasks' => {
994
1144
  :default => AUTOSTART_DENYLISTED_RAKE_TASKS,
995
1145
  :public => true,
996
1146
  :type => String,
997
1147
  :allowed_from_server => false,
998
- :description => 'Defines a comma-delimited list of Rake tasks that the agent should not instrument. For example, `assets:precompile,db:migrate`.'
1148
+ :description => 'Defines a comma-delimited list of Rake tasks that the agent should not instrument. For example, `"assets:precompile,db:migrate"`.'
999
1149
  },
1000
1150
  # Code level metrics
1001
1151
  :'code_level_metrics.enabled' => {
@@ -1003,7 +1153,7 @@ module NewRelic
1003
1153
  :public => true,
1004
1154
  :type => Boolean,
1005
1155
  :allowed_from_server => true,
1006
- :description => "If `true`, the agent will report source code level metrics for traced methods.\nsee: " \
1156
+ :description => "If `true`, the agent will report source code level metrics for traced methods.\n\tSee: " \
1007
1157
  'https://docs.newrelic.com/docs/apm/agents/ruby-agent/features/ruby-codestream-integration/'
1008
1158
  },
1009
1159
  # Cross application tracer
@@ -1014,8 +1164,8 @@ module NewRelic
1014
1164
  :allowed_from_server => true,
1015
1165
  :deprecated => true,
1016
1166
  :description => deprecated_description(
1017
- :'distributed_tracing-enabled',
1018
- 'If `true`, enables [cross-application tracing](/docs/agents/ruby-agent/features/cross-application-tracing-ruby/) when `distributed_tracing.enabled` is set to `false`.'
1167
+ :'distributed_tracing.enabled',
1168
+ ' If `true`, enables [cross-application tracing](/docs/agents/ruby-agent/features/cross-application-tracing-ruby/) when `distributed_tracing.enabled` is set to `false`.'
1019
1169
  )
1020
1170
  },
1021
1171
  # Custom attributes
@@ -1026,6 +1176,56 @@ module NewRelic
1026
1176
  :allowed_from_server => false,
1027
1177
  :description => 'If `false`, custom attributes will not be sent on events.'
1028
1178
  },
1179
+ :automatic_custom_instrumentation_method_list => {
1180
+ :default => NewRelic::EMPTY_ARRAY,
1181
+ :public => true,
1182
+ :type => Array,
1183
+ :allowed_from_server => false,
1184
+ :transform => proc { |arr| NewRelic::Agent.add_automatic_method_tracers(arr) },
1185
+ :description => <<~DESCRIPTION
1186
+ An array of `CLASS#METHOD` (for instance methods) and/or `CLASS.METHOD` (for class methods) strings representing Ruby methods that the agent can automatically add custom instrumentation to. This doesn't require any modifications of the source code that defines the methods.
1187
+
1188
+ \tUse fully qualified class names (using the `::` delimiter) that include any module or class namespacing.
1189
+
1190
+ \tHere is some Ruby source code that defines a `render_png` instance method for an `Image` class and a `notify` class method for a `User` class, both within a `MyCompany` module namespace:
1191
+
1192
+ \t```rb
1193
+ \t\tmodule MyCompany
1194
+ \t\t\tclass Image
1195
+ \t\t\t\tdef render_png
1196
+ \t\t\t\t\t# code to render a PNG
1197
+ \t\t\t\tend
1198
+ \t\t\tend
1199
+
1200
+ \t\t\tclass User
1201
+ \t\t\t\tdef self.notify
1202
+ \t\t\t\t\t# code to notify users
1203
+ \t\t\t\tend
1204
+ \t\t\tend
1205
+ \t\tend
1206
+ \t```
1207
+
1208
+ \tGiven that source code, the `newrelic.yml` config file might request instrumentation for both of these methods like so:
1209
+
1210
+ \t```yaml
1211
+ \t\tautomatic_custom_instrumentation_method_list:
1212
+ \t\t\t- MyCompany::Image#render_png
1213
+ \t\t\t- MyCompany::User.notify
1214
+ \t```
1215
+
1216
+ \tThat configuration example uses YAML array syntax to specify both methods. Alternatively, you can use a comma-delimited string:
1217
+
1218
+ \t```yaml
1219
+ \t\tautomatic_custom_instrumentation_method_list: 'MyCompany::Image#render_png, MyCompany::User.notify'
1220
+ \t```
1221
+
1222
+ \tWhitespace around the comma(s) in the list is optional. When configuring the agent with a list of methods via the `NEW_RELIC_AUTOMATIC_CUSTOM_INSTRUMENTATION_METHOD_LIST` environment variable, use this comma-delimited string format:
1223
+
1224
+ \t```sh
1225
+ \t\texport NEW_RELIC_AUTOMATIC_CUSTOM_INSTRUMENTATION_METHOD_LIST='MyCompany::Image#render_png, MyCompany::User.notify'
1226
+ \t```
1227
+ DESCRIPTION
1228
+ },
1029
1229
  # Custom events
1030
1230
  :'custom_insights_events.enabled' => {
1031
1231
  :default => true,
@@ -1039,8 +1239,13 @@ module NewRelic
1039
1239
  :public => true,
1040
1240
  :type => Integer,
1041
1241
  :allowed_from_server => true,
1042
- :description => 'Specify a maximum number of custom events to buffer in memory at a time.',
1043
- :dynamic_name => true
1242
+ :dynamic_name => true,
1243
+ # Keep the extra two-space indent before the second bullet to appease translation tool
1244
+ :description => <<~DESC
1245
+ - Specify a maximum number of custom events to buffer in memory at a time.
1246
+ - When configuring the agent for [AI monitoring](/docs/ai-monitoring/intro-to-ai-monitoring), \
1247
+ set to max value `100000`. This ensures the agent captures the maximum amount of LLM events.
1248
+ DESC
1044
1249
  },
1045
1250
  # Datastore tracer
1046
1251
  :'datastore_tracer.database_name_reporting.enabled' => {
@@ -1105,6 +1310,7 @@ module NewRelic
1105
1310
  :default => false,
1106
1311
  :public => true,
1107
1312
  :type => Boolean,
1313
+ :aliases => %i[disable_active_job],
1108
1314
  :allowed_from_server => false,
1109
1315
  :description => 'If `true`, disables Active Job instrumentation.'
1110
1316
  },
@@ -1122,11 +1328,12 @@ module NewRelic
1122
1328
  :allowed_from_server => false,
1123
1329
  :description => 'If `true`, disables Active Support instrumentation.'
1124
1330
  },
1125
- :disable_activerecord_instrumentation => {
1331
+ :disable_active_record_instrumentation => {
1126
1332
  :default => value_of(:skip_ar_instrumentation),
1127
1333
  :documentation_default => false,
1128
1334
  :public => true,
1129
1335
  :type => Boolean,
1336
+ :aliases => %i[disable_activerecord_instrumentation],
1130
1337
  :allowed_from_server => false,
1131
1338
  :description => 'If `true`, disables Active Record instrumentation.'
1132
1339
  },
@@ -1135,6 +1342,7 @@ module NewRelic
1135
1342
  :public => true,
1136
1343
  :type => Boolean,
1137
1344
  :dynamic_name => true,
1345
+ :aliases => %i[disable_activerecord_notifications],
1138
1346
  :allowed_from_server => false,
1139
1347
  :description => 'If `true`, disables instrumentation for Active Record 4+'
1140
1348
  },
@@ -1159,7 +1367,7 @@ module NewRelic
1159
1367
  :public => true,
1160
1368
  :type => Boolean,
1161
1369
  :allowed_from_server => false,
1162
- :description => 'If `true`, disables the use of GC::Profiler to measure time spent in garbage collection'
1370
+ :description => 'If `true`, disables the use of `GC::Profiler` to measure time spent in garbage collection'
1163
1371
  },
1164
1372
  :disable_memory_sampler => {
1165
1373
  :default => false,
@@ -1174,7 +1382,13 @@ module NewRelic
1174
1382
  :public => true,
1175
1383
  :type => Boolean,
1176
1384
  :allowed_from_server => false,
1177
- :description => 'If `true`, the agent won\'t wrap third-party middlewares in instrumentation (regardless of whether they are installed via Rack::Builder or Rails).'
1385
+ :description => <<~DESCRIPTION
1386
+ If `true`, the agent won't wrap third-party middlewares in instrumentation (regardless of whether they are installed via `Rack::Builder` or Rails).
1387
+
1388
+ <Callout variant="important">
1389
+ When middleware instrumentation is disabled, if an application is using middleware that could alter the response code, the HTTP status code reported on the transaction may not reflect the altered value.
1390
+ </Callout>
1391
+ DESCRIPTION
1178
1392
  },
1179
1393
  :disable_samplers => {
1180
1394
  :default => false,
@@ -1197,6 +1411,13 @@ module NewRelic
1197
1411
  :allowed_from_server => false,
1198
1412
  :description => 'If `true`, disables [Sidekiq instrumentation](/docs/agents/ruby-agent/background-jobs/sidekiq-instrumentation).'
1199
1413
  },
1414
+ :disable_roda_auto_middleware => {
1415
+ :default => false,
1416
+ :public => true,
1417
+ :type => Boolean,
1418
+ :allowed_from_server => false,
1419
+ :description => 'If `true`, disables agent middleware for Roda. This middleware is responsible for advanced feature support such as [page load timing](/docs/browser/new-relic-browser/getting-started/new-relic-browser) and [error collection](/docs/apm/applications-menu/events/view-apm-error-analytics).'
1420
+ },
1200
1421
  :disable_sinatra_auto_middleware => {
1201
1422
  :default => false,
1202
1423
  :public => true,
@@ -1205,20 +1426,18 @@ module NewRelic
1205
1426
  :description => <<~DESCRIPTION
1206
1427
  If `true`, disables agent middleware for Sinatra. This middleware is responsible for advanced feature support such as [cross application tracing](/docs/apm/transactions/cross-application-traces/cross-application-tracing), [page load timing](/docs/browser/new-relic-browser/getting-started/new-relic-browser), and [error collection](/docs/apm/applications-menu/events/view-apm-error-analytics).
1207
1428
 
1208
- <Callout variant="important">
1209
- Cross application tracing is deprecated in favor of [distributed tracing](/docs/apm/distributed-tracing/getting-started/introduction-distributed-tracing). Distributed tracing is on by default for Ruby agent versions 8.0.0 and above. Middlewares are not required to support distributed tracing.
1210
-
1211
- To continue using cross application tracing, update the following options in your `newrelic.yml` configuration file:
1429
+ \t<Callout variant="important">
1430
+ \t\tCross application tracing is deprecated in favor of [distributed tracing](/docs/apm/distributed-tracing/getting-started/introduction-distributed-tracing). Distributed tracing is on by default for Ruby agent versions 8.0.0 and above. Middlewares are not required to support distributed tracing.
1212
1431
 
1213
- ```
1214
- # newrelic.yml
1432
+ \t\tTo continue using cross application tracing, update the following options in your `newrelic.yml` configuration file:
1215
1433
 
1216
- cross_application_tracer:
1217
- enabled: true
1218
- distributed_tracing:
1219
- enabled: false
1220
- ```
1221
- </Callout>
1434
+ \t\t```yaml
1435
+ \t\t\tcross_application_tracer:
1436
+ \t\t\t\tenabled: true
1437
+ \t\t\tdistributed_tracing:
1438
+ \t\t\t\tenabled: false
1439
+ \t\t```
1440
+ \t</Callout>
1222
1441
  DESCRIPTION
1223
1442
  },
1224
1443
  :disable_view_instrumentation => {
@@ -1244,7 +1463,28 @@ module NewRelic
1244
1463
  :allowed_from_server => true,
1245
1464
  :description => 'Distributed tracing lets you see the path that a request takes through your distributed system. Enabling distributed tracing changes the behavior of some New Relic features, so carefully consult the [transition guide](/docs/transition-guide-distributed-tracing) before you enable this feature.'
1246
1465
  },
1466
+ :'distributed_tracing.sampler.remote_parent_sampled' => {
1467
+ :default => 'default',
1468
+ :public => true,
1469
+ :type => String,
1470
+ :allowed_from_server => true,
1471
+ :description => 'This setting controls the behavior of transaction sampling when a remote parent is sampled and the trace flag is set in the traceparent. Available values are `default`, `always_on`, and `always_off`.'
1472
+ },
1473
+ :'distributed_tracing.sampler.remote_parent_not_sampled' => {
1474
+ :default => 'default',
1475
+ :public => true,
1476
+ :type => String,
1477
+ :allowed_from_server => true,
1478
+ :description => 'This setting controls the behavior of transaction sampling when a remote parent is not sampled and the trace flag is not set in the traceparent. Available values are `default`, `always_on`, and `always_off`.'
1479
+ },
1247
1480
  # Elasticsearch
1481
+ :'elasticsearch.capture_cluster_name' => {
1482
+ :default => true,
1483
+ :public => true,
1484
+ :type => Boolean,
1485
+ :allowed_from_server => true,
1486
+ :description => 'If `true`, the agent captures the Elasticsearch cluster name in transaction traces.'
1487
+ },
1248
1488
  :'elasticsearch.capture_queries' => {
1249
1489
  :default => true,
1250
1490
  :public => true,
@@ -1273,7 +1513,7 @@ module NewRelic
1273
1513
  :type => Array,
1274
1514
  :allowed_from_server => false,
1275
1515
  :transform => DefaultSource.method(:convert_to_list),
1276
- :description => 'Ordinarily the agent reports dyno names with a trailing dot and process ID (for example, <b>worker.3</b>). You can remove this trailing data by specifying the prefixes you want to report without trailing data (for example, <b>worker</b>).'
1516
+ :description => 'Ordinarily the agent reports dyno names with a trailing dot and process ID (for example, `worker.3`). You can remove this trailing data by specifying the prefixes you want to report without trailing data (for example, `worker`).'
1277
1517
  },
1278
1518
  # Infinite tracing
1279
1519
  :'infinite_tracing.trace_observer.host' => {
@@ -1296,6 +1536,15 @@ module NewRelic
1296
1536
  :description => 'Configures the TCP/IP port for the trace observer Host'
1297
1537
  },
1298
1538
  # Instrumentation
1539
+ :'instrumentation.active_support_broadcast_logger' => {
1540
+ :default => instrumentation_value_from_boolean(:'application_logging.enabled'),
1541
+ :documentation_default => 'auto',
1542
+ :dynamic_name => true,
1543
+ :public => true,
1544
+ :type => String,
1545
+ :allowed_from_server => false,
1546
+ :description => 'Controls auto-instrumentation of `ActiveSupport::BroadcastLogger` at start up. May be one of: `auto`, `prepend`, `chain`, `disabled`. Used in Rails versions >= 7.1.'
1547
+ },
1299
1548
  :'instrumentation.active_support_logger' => {
1300
1549
  :default => instrumentation_value_from_boolean(:'application_logging.enabled'),
1301
1550
  :documentation_default => 'auto',
@@ -1303,31 +1552,112 @@ module NewRelic
1303
1552
  :public => true,
1304
1553
  :type => String,
1305
1554
  :allowed_from_server => false,
1306
- :description => 'Controls auto-instrumentation of ActiveSupport::Logger at start up. May be one of [auto|prepend|chain|disabled].'
1555
+ :description => 'Controls auto-instrumentation of `ActiveSupport::Logger` at start up. May be one of: `auto`, `prepend`, `chain`, `disabled`. Used in Rails versions below 7.1.'
1556
+ },
1557
+ :'instrumentation.async_http' => {
1558
+ :default => 'auto',
1559
+ :documentation_default => 'auto',
1560
+ :public => true,
1561
+ :type => String,
1562
+ :dynamic_name => true,
1563
+ :allowed_from_server => false,
1564
+ :description => 'Controls auto-instrumentation of Async::HTTP at start up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1307
1565
  },
1308
1566
  :'instrumentation.bunny' => {
1309
1567
  :default => 'auto',
1568
+ :documentation_default => 'auto',
1569
+ :public => true,
1570
+ :type => String,
1571
+ :dynamic_name => true,
1572
+ :allowed_from_server => false,
1573
+ :description => 'Controls auto-instrumentation of bunny at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1574
+ },
1575
+ :'instrumentation.aws_sdk_firehose' => {
1576
+ :default => 'auto',
1577
+ :documentation_default => 'auto',
1578
+ :public => true,
1579
+ :type => String,
1580
+ :dynamic_name => true,
1581
+ :allowed_from_server => false,
1582
+ :description => 'Controls auto-instrumentation of the aws-sdk-firehose library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1583
+ },
1584
+ :'instrumentation.aws_sdk_lambda' => {
1585
+ :default => 'auto',
1586
+ :documentation_default => 'auto',
1310
1587
  :public => true,
1311
1588
  :type => String,
1312
1589
  :dynamic_name => true,
1313
1590
  :allowed_from_server => false,
1314
- :description => 'Controls auto-instrumentation of bunny at start up. May be one of [auto|prepend|chain|disabled].'
1591
+ :description => 'Controls auto-instrumentation of the aws_sdk_lambda library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1592
+ },
1593
+ :'instrumentation.aws_sdk_kinesis' => {
1594
+ :default => 'auto',
1595
+ :documentation_default => 'auto',
1596
+ :public => true,
1597
+ :type => String,
1598
+ :dynamic_name => true,
1599
+ :allowed_from_server => false,
1600
+ :description => 'Controls auto-instrumentation of the aws-sdk-kinesis library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1601
+ },
1602
+ :'instrumentation.ruby_kafka' => {
1603
+ :default => 'auto',
1604
+ :public => true,
1605
+ :type => String,
1606
+ :dynamic_name => true,
1607
+ :allowed_from_server => false,
1608
+ :description => 'Controls auto-instrumentation of the ruby-kafka library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1609
+ },
1610
+ :'instrumentation.opensearch' => {
1611
+ :default => 'auto',
1612
+ :documentation_default => 'auto',
1613
+ :public => true,
1614
+ :type => String,
1615
+ :dynamic_name => true,
1616
+ :allowed_from_server => false,
1617
+ :description => 'Controls auto-instrumentation of the opensearch-ruby library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1618
+ },
1619
+ :'instrumentation.rdkafka' => {
1620
+ :default => 'auto',
1621
+ :public => true,
1622
+ :type => String,
1623
+ :dynamic_name => true,
1624
+ :allowed_from_server => false,
1625
+ :description => 'Controls auto-instrumentation of the rdkafka library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1626
+ },
1627
+ :'instrumentation.aws_sqs' => {
1628
+ :default => 'auto',
1629
+ :public => true,
1630
+ :type => String,
1631
+ :dynamic_name => true,
1632
+ :allowed_from_server => false,
1633
+ :description => 'Controls auto-instrumentation of the aws-sdk-sqs library at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1634
+ },
1635
+ :'instrumentation.dynamodb' => {
1636
+ :default => 'auto',
1637
+ :documentation_default => 'auto',
1638
+ :public => true,
1639
+ :type => String,
1640
+ :dynamic_name => true,
1641
+ :allowed_from_server => false,
1642
+ :description => 'Controls auto-instrumentation of the aws-sdk-dynamodb library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1315
1643
  },
1316
1644
  :'instrumentation.fiber' => {
1317
1645
  :default => 'auto',
1646
+ :documentation_default => 'auto',
1318
1647
  :public => true,
1319
1648
  :type => String,
1320
1649
  :dynamic_name => true,
1321
1650
  :allowed_from_server => false,
1322
- :description => 'Controls auto-instrumentation of the Fiber class at start up. May be one of [auto|prepend|chain|disabled].'
1651
+ :description => 'Controls auto-instrumentation of the Fiber class at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1323
1652
  },
1324
1653
  :'instrumentation.concurrent_ruby' => {
1325
1654
  :default => 'auto',
1655
+ :documentation_default => 'auto',
1326
1656
  :public => true,
1327
1657
  :type => String,
1328
1658
  :dynamic_name => true,
1329
1659
  :allowed_from_server => false,
1330
- :description => 'Controls auto-instrumentation of the concurrent-ruby library at start up. May be one of [auto|prepend|chain|disabled].'
1660
+ :description => 'Controls auto-instrumentation of the concurrent-ruby library at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1331
1661
  },
1332
1662
  :'instrumentation.curb' => {
1333
1663
  :default => 'auto',
@@ -1336,7 +1666,7 @@ module NewRelic
1336
1666
  :type => String,
1337
1667
  :dynamic_name => true,
1338
1668
  :allowed_from_server => false,
1339
- :description => 'Controls auto-instrumentation of Curb at start up. May be one of [auto|prepend|chain|disabled].'
1669
+ :description => 'Controls auto-instrumentation of Curb at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1340
1670
  },
1341
1671
  :'instrumentation.delayed_job' => {
1342
1672
  :default => 'auto',
@@ -1345,15 +1675,25 @@ module NewRelic
1345
1675
  :type => String,
1346
1676
  :dynamic_name => true,
1347
1677
  :allowed_from_server => false,
1348
- :description => 'Controls auto-instrumentation of Delayed Job at start up. May be one of [auto|prepend|chain|disabled].'
1678
+ :description => 'Controls auto-instrumentation of Delayed Job at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1349
1679
  },
1350
1680
  :'instrumentation.elasticsearch' => {
1351
1681
  :default => 'auto',
1682
+ :documentation_default => 'auto',
1683
+ :public => true,
1684
+ :type => String,
1685
+ :dynamic_name => true,
1686
+ :allowed_from_server => false,
1687
+ :description => 'Controls auto-instrumentation of the elasticsearch library at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1688
+ },
1689
+ :'instrumentation.ethon' => {
1690
+ :default => 'auto',
1691
+ :documentation_default => 'auto',
1352
1692
  :public => true,
1353
1693
  :type => String,
1354
1694
  :dynamic_name => true,
1355
1695
  :allowed_from_server => false,
1356
- :description => 'Controls auto-instrumentation of the elasticsearch library at start up. May be one of [auto|prepend|chain|disabled].'
1696
+ :description => 'Controls auto-instrumentation of ethon at start up. May be one of `auto`, `prepend`, `chain`, `disabled`'
1357
1697
  },
1358
1698
  :'instrumentation.excon' => {
1359
1699
  :default => 'enabled',
@@ -1362,24 +1702,25 @@ module NewRelic
1362
1702
  :type => String,
1363
1703
  :dynamic_name => true,
1364
1704
  :allowed_from_server => false,
1365
- :description => 'Controls auto-instrumentation of Excon at start up. May be one of [enabled|disabled].'
1705
+ :description => 'Controls auto-instrumentation of Excon at start-up. May be one of: `enabled`, `disabled`.'
1366
1706
  },
1367
1707
  :'instrumentation.grape' => {
1368
1708
  :default => 'auto',
1709
+ :documentation_default => 'auto',
1369
1710
  :public => true,
1370
1711
  :type => String,
1371
1712
  :dynamic_name => true,
1372
1713
  :allowed_from_server => false,
1373
- :description => 'Controls auto-instrumentation of Grape at start up. May be one of [auto|prepend|chain|disabled].'
1714
+ :description => 'Controls auto-instrumentation of Grape at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1374
1715
  },
1375
1716
  :'instrumentation.grpc_client' => {
1376
- :default => instrumentation_value_of(:disable_grpc_client),
1717
+ :default => 'auto',
1377
1718
  :documentation_default => 'auto',
1378
1719
  :public => true,
1379
1720
  :type => String,
1380
1721
  :dynamic_name => true,
1381
1722
  :allowed_from_server => false,
1382
- :description => 'Controls auto-instrumentation of gRPC clients at start up. May be one of [auto|prepend|chain|disabled].'
1723
+ :description => 'Controls auto-instrumentation of gRPC clients at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1383
1724
  },
1384
1725
  :'instrumentation.grpc.host_denylist' => {
1385
1726
  :default => [],
@@ -1387,16 +1728,16 @@ module NewRelic
1387
1728
  :type => Array,
1388
1729
  :allowed_from_server => false,
1389
1730
  :transform => DefaultSource.method(:convert_to_regexp_list),
1390
- :description => %Q(Specifies a list of hostname patterns separated by commas that will match gRPC hostnames that traffic is to be ignored by New Relic for. New Relic's gRPC client instrumentation will ignore traffic streamed to a host matching any of these patterns, and New Relic's gRPC server instrumentation will ignore traffic for a server running on a host whose hostname matches any of these patterns. By default, no traffic is ignored when gRPC instrumentation is itself enabled. For example, "private.com$,exception.*")
1731
+ :description => %Q(Specifies a list of hostname patterns separated by commas that will match gRPC hostnames that traffic is to be ignored by New Relic for. New Relic's gRPC client instrumentation will ignore traffic streamed to a host matching any of these patterns, and New Relic's gRPC server instrumentation will ignore traffic for a server running on a host whose hostname matches any of these patterns. By default, no traffic is ignored when gRPC instrumentation is itself enabled. For example, `"private.com$,exception.*"`)
1391
1732
  },
1392
1733
  :'instrumentation.grpc_server' => {
1393
- :default => instrumentation_value_of(:disable_grpc_server),
1734
+ :default => 'auto',
1394
1735
  :documentation_default => 'auto',
1395
1736
  :public => true,
1396
1737
  :type => String,
1397
1738
  :dynamic_name => true,
1398
1739
  :allowed_from_server => false,
1399
- :description => 'Controls auto-instrumentation of gRPC servers at start up. May be one of [auto|prepend|chain|disabled].'
1740
+ :description => 'Controls auto-instrumentation of gRPC servers at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1400
1741
  },
1401
1742
  :'instrumentation.httpclient' => {
1402
1743
  :default => 'auto',
@@ -1405,7 +1746,7 @@ module NewRelic
1405
1746
  :type => String,
1406
1747
  :dynamic_name => true,
1407
1748
  :allowed_from_server => false,
1408
- :description => 'Controls auto-instrumentation of HTTPClient at start up. May be one of [auto|prepend|chain|disabled].'
1749
+ :description => 'Controls auto-instrumentation of HTTPClient at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1409
1750
  },
1410
1751
  :'instrumentation.httprb' => {
1411
1752
  :default => 'auto',
@@ -1414,7 +1755,16 @@ module NewRelic
1414
1755
  :type => String,
1415
1756
  :dynamic_name => true,
1416
1757
  :allowed_from_server => false,
1417
- :description => 'Controls auto-instrumentation of http.rb gem at start up. May be one of [auto|prepend|chain|disabled].'
1758
+ :description => 'Controls auto-instrumentation of http.rb gem at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1759
+ },
1760
+ :'instrumentation.httpx' => {
1761
+ :default => 'auto',
1762
+ :documentation_default => 'auto',
1763
+ :public => true,
1764
+ :type => String,
1765
+ :dynamic_name => true,
1766
+ :allowed_from_server => false,
1767
+ :description => 'Controls auto-instrumentation of httpx at start up. May be one of `auto`, `prepend`, `chain`, `disabled`'
1418
1768
  },
1419
1769
  :'instrumentation.logger' => {
1420
1770
  :default => instrumentation_value_from_boolean(:'application_logging.enabled'),
@@ -1423,15 +1773,25 @@ module NewRelic
1423
1773
  :type => String,
1424
1774
  :dynamic_name => true,
1425
1775
  :allowed_from_server => false,
1426
- :description => 'Controls auto-instrumentation of Ruby standard library Logger at start up. May be one of [auto|prepend|chain|disabled].'
1776
+ :description => 'Controls auto-instrumentation of Ruby standard library Logger at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1777
+ },
1778
+ :'instrumentation.logstasher' => {
1779
+ :default => instrumentation_value_from_boolean(:'application_logging.enabled'),
1780
+ :documentation_default => 'auto',
1781
+ :public => true,
1782
+ :type => String,
1783
+ :dynamic_name => true,
1784
+ :allowed_from_server => false,
1785
+ :description => 'Controls auto-instrumentation of the LogStasher library at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1427
1786
  },
1428
1787
  :'instrumentation.memcache' => {
1429
1788
  :default => 'auto',
1789
+ :documentation_default => 'auto',
1430
1790
  :public => true,
1431
1791
  :type => String,
1432
1792
  :dynamic_name => true,
1433
1793
  :allowed_from_server => false,
1434
- :description => 'Controls auto-instrumentation of dalli gem for Memcache at start up. May be one of [auto|prepend|chain|disabled].'
1794
+ :description => 'Controls auto-instrumentation of dalli gem for Memcache at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1435
1795
  },
1436
1796
  :'instrumentation.memcached' => {
1437
1797
  :default => 'auto',
@@ -1440,16 +1800,16 @@ module NewRelic
1440
1800
  :type => String,
1441
1801
  :dynamic_name => true,
1442
1802
  :allowed_from_server => false,
1443
- :description => 'Controls auto-instrumentation of memcached gem for Memcache at start up. May be one of [auto|prepend|chain|disabled].'
1803
+ :description => 'Controls auto-instrumentation of memcached gem for Memcache at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1444
1804
  },
1445
1805
  :'instrumentation.memcache_client' => {
1446
- :default => instrumentation_value_of(:disable_memcache_client),
1806
+ :default => 'auto',
1447
1807
  :documentation_default => 'auto',
1448
1808
  :public => true,
1449
1809
  :type => String,
1450
1810
  :dynamic_name => true,
1451
1811
  :allowed_from_server => false,
1452
- :description => 'Controls auto-instrumentation of memcache-client gem for Memcache at start up. May be one of [auto|prepend|chain|disabled].'
1812
+ :description => 'Controls auto-instrumentation of memcache-client gem for Memcache at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1453
1813
  },
1454
1814
  :'instrumentation.mongo' => {
1455
1815
  :default => 'enabled',
@@ -1458,7 +1818,7 @@ module NewRelic
1458
1818
  :type => String,
1459
1819
  :dynamic_name => true,
1460
1820
  :allowed_from_server => false,
1461
- :description => 'Controls auto-instrumentation of Mongo at start up. May be one of [enabled|disabled].'
1821
+ :description => 'Controls auto-instrumentation of Mongo at start-up. May be one of: `enabled`, `disabled`.'
1462
1822
  },
1463
1823
  :'instrumentation.net_http' => {
1464
1824
  :default => 'auto',
@@ -1467,7 +1827,16 @@ module NewRelic
1467
1827
  :type => String,
1468
1828
  :dynamic_name => true,
1469
1829
  :allowed_from_server => false,
1470
- :description => 'Controls auto-instrumentation of Net::HTTP at start up. May be one of [auto|prepend|chain|disabled].'
1830
+ :description => 'Controls auto-instrumentation of `Net::HTTP` at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1831
+ },
1832
+ :'instrumentation.ruby_openai' => {
1833
+ :default => 'auto',
1834
+ :documentation_default => 'auto',
1835
+ :public => true,
1836
+ :type => String,
1837
+ :dynamic_name => true,
1838
+ :allowed_from_server => false,
1839
+ :description => 'Controls auto-instrumentation of the ruby-openai gem at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`. Defaults to `disabled` in high security mode.'
1471
1840
  },
1472
1841
  :'instrumentation.puma_rack' => {
1473
1842
  :default => value_of(:'instrumentation.rack'),
@@ -1476,9 +1845,9 @@ module NewRelic
1476
1845
  :type => String,
1477
1846
  :dynamic_name => true,
1478
1847
  :allowed_from_server => false,
1479
- :description => 'Controls auto-instrumentation of Puma::Rack. When enabled, the agent hooks into the ' \
1480
- '`to_app` method in Puma::Rack::Builder to find gems to instrument during ' \
1481
- 'application startup. May be one of [auto|prepend|chain|disabled].'
1848
+ :description => 'Controls auto-instrumentation of `Puma::Rack`. When enabled, the agent hooks into the ' \
1849
+ '`to_app` method in `Puma::Rack::Builder` to find gems to instrument during ' \
1850
+ 'application startup. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1482
1851
  },
1483
1852
  :'instrumentation.puma_rack_urlmap' => {
1484
1853
  :default => value_of(:'instrumentation.rack_urlmap'),
@@ -1487,7 +1856,7 @@ module NewRelic
1487
1856
  :type => String,
1488
1857
  :dynamic_name => true,
1489
1858
  :allowed_from_server => false,
1490
- :description => 'Controls auto-instrumentation of Puma::Rack::URLMap at start up. May be one of [auto|prepend|chain|disabled].'
1859
+ :description => 'Controls auto-instrumentation of `Puma::Rack::URLMap` at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1491
1860
  },
1492
1861
  :'instrumentation.rack' => {
1493
1862
  :default => 'auto',
@@ -1497,8 +1866,8 @@ module NewRelic
1497
1866
  :dynamic_name => true,
1498
1867
  :allowed_from_server => false,
1499
1868
  :description => 'Controls auto-instrumentation of Rack. When enabled, the agent hooks into the ' \
1500
- '`to_app` method in Rack::Builder to find gems to instrument during ' \
1501
- 'application startup. May be one of [auto|prepend|chain|disabled].'
1869
+ '`to_app` method in `Rack::Builder` to find gems to instrument during ' \
1870
+ 'application startup. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1502
1871
  },
1503
1872
  :'instrumentation.rack_urlmap' => {
1504
1873
  :default => 'auto',
@@ -1507,23 +1876,25 @@ module NewRelic
1507
1876
  :type => String,
1508
1877
  :dynamic_name => true,
1509
1878
  :allowed_from_server => false,
1510
- :description => 'Controls auto-instrumentation of Rack::URLMap at start up. May be one of [auto|prepend|chain|disabled].'
1879
+ :description => 'Controls auto-instrumentation of `Rack::URLMap` at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1511
1880
  },
1512
1881
  :'instrumentation.rake' => {
1513
1882
  :default => 'auto',
1883
+ :documentation_default => 'auto',
1514
1884
  :public => true,
1515
1885
  :type => String,
1516
1886
  :dynamic_name => true,
1517
1887
  :allowed_from_server => false,
1518
- :description => 'Controls auto-instrumentation of rake at start up. May be one of [auto|prepend|chain|disabled].'
1888
+ :description => 'Controls auto-instrumentation of rake at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1519
1889
  },
1520
1890
  :'instrumentation.redis' => {
1521
1891
  :default => 'auto',
1892
+ :documentation_default => 'auto',
1522
1893
  :public => true,
1523
1894
  :type => String,
1524
1895
  :dynamic_name => true,
1525
1896
  :allowed_from_server => false,
1526
- :description => 'Controls auto-instrumentation of Redis at start up. May be one of [auto|prepend|chain|disabled].'
1897
+ :description => 'Controls auto-instrumentation of Redis at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1527
1898
  },
1528
1899
  :'instrumentation.resque' => {
1529
1900
  :default => 'auto',
@@ -1532,30 +1903,85 @@ module NewRelic
1532
1903
  :type => String,
1533
1904
  :dynamic_name => true,
1534
1905
  :allowed_from_server => false,
1535
- :description => 'Controls auto-instrumentation of resque at start up. May be one of [auto|prepend|chain|disabled].'
1906
+ :description => 'Controls auto-instrumentation of resque at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1907
+ },
1908
+ :'instrumentation.roda' => {
1909
+ :default => 'auto',
1910
+ :documentation_default => 'auto',
1911
+ :public => true,
1912
+ :type => String,
1913
+ :dynamic_name => true,
1914
+ :allowed_from_server => false,
1915
+ :description => 'Controls auto-instrumentation of Roda at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1536
1916
  },
1537
1917
  :'instrumentation.sinatra' => {
1538
1918
  :default => 'auto',
1919
+ :documentation_default => 'auto',
1539
1920
  :public => true,
1540
1921
  :type => String,
1541
1922
  :dynamic_name => true,
1542
1923
  :allowed_from_server => false,
1543
- :description => 'Controls auto-instrumentation of Sinatra at start up. May be one of [auto|prepend|chain|disabled].'
1924
+ :description => 'Controls auto-instrumentation of Sinatra at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1925
+ },
1926
+ :'instrumentation.stripe' => {
1927
+ :default => 'enabled',
1928
+ :public => true,
1929
+ :type => String,
1930
+ :allowed_from_server => false,
1931
+ :description => 'Controls auto-instrumentation of Stripe at startup. May be one of: `enabled`, `disabled`.'
1932
+ },
1933
+ :'instrumentation.view_component' => {
1934
+ :default => 'auto',
1935
+ :documentation_default => 'auto',
1936
+ :public => true,
1937
+ :type => String,
1938
+ :dynamic_name => true,
1939
+ :allowed_from_server => false,
1940
+ :description => 'Controls auto-instrumentation of ViewComponent at startup. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1941
+ },
1942
+ :'stripe.user_data.include' => {
1943
+ default: NewRelic::EMPTY_ARRAY,
1944
+ public: true,
1945
+ type: Array,
1946
+ dynamic_name: true,
1947
+ allowed_from_server: false,
1948
+ :transform => DefaultSource.method(:convert_to_list),
1949
+ :description => <<~DESCRIPTION
1950
+ An array of strings to specify which keys inside a Stripe event's `user_data` hash should be reported
1951
+ to New Relic. Each string in this array will be turned into a regular expression via `Regexp.new` to
1952
+ enable advanced matching. Setting the value to `["."]` will report all `user_data`.
1953
+ DESCRIPTION
1954
+ },
1955
+ :'stripe.user_data.exclude' => {
1956
+ default: NewRelic::EMPTY_ARRAY,
1957
+ public: true,
1958
+ type: Array,
1959
+ dynamic_name: true,
1960
+ allowed_from_server: false,
1961
+ :transform => DefaultSource.method(:convert_to_list),
1962
+ :description => <<~DESCRIPTION
1963
+ An array of strings to specify which keys and/or values inside a Stripe event's `user_data` hash should
1964
+ \tnot be reported to New Relic. Each string in this array will be turned into a regular expression via
1965
+ \t`Regexp.new` to permit advanced matching. For each hash pair, if either the key or value is matched the pair
1966
+ \tisn't reported. By default, no `user_data` is reported. Use this option only if the
1967
+ \t`stripe.user_data.include` option is also used.
1968
+ DESCRIPTION
1544
1969
  },
1545
1970
  :'instrumentation.thread' => {
1546
1971
  :default => 'auto',
1972
+ :documentation_default => 'auto',
1547
1973
  :public => true,
1548
1974
  :type => String,
1549
1975
  :dynamic_name => true,
1550
1976
  :allowed_from_server => false,
1551
- :description => 'Controls auto-instrumentation of the Thread class at start up to allow the agent to correctly nest spans inside of an asynchronous transaction. This does not enable the agent to automatically trace all threads created (see `instrumentation.thread.tracing`). May be one of [auto|prepend|chain|disabled].'
1977
+ :description => 'Controls auto-instrumentation of the Thread class at start-up to allow the agent to correctly nest spans inside of an asynchronous transaction. This does not enable the agent to automatically trace all threads created (see `instrumentation.thread.tracing`). May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1552
1978
  },
1553
1979
  :'instrumentation.thread.tracing' => {
1554
1980
  :default => true,
1555
1981
  :public => true,
1556
1982
  :type => Boolean,
1557
1983
  :allowed_from_server => false,
1558
- :description => 'Controls auto-instrumentation of the Thread class at start up to automatically add tracing to all Threads created in the application.'
1984
+ :description => 'Controls auto-instrumentation of the Thread class at start-up to automatically add tracing to all Threads created in the application.'
1559
1985
  },
1560
1986
  :'thread_ids_enabled' => {
1561
1987
  :default => false,
@@ -1566,11 +1992,12 @@ module NewRelic
1566
1992
  },
1567
1993
  :'instrumentation.tilt' => {
1568
1994
  :default => 'auto',
1995
+ :documentation_default => 'auto',
1569
1996
  :public => true,
1570
1997
  :type => String,
1571
1998
  :dynamic_name => true,
1572
1999
  :allowed_from_server => false,
1573
- :description => 'Controls auto-instrumentation of the Tilt template rendering library at start up. May be one of [auto|prepend|chain|disabled].'
2000
+ :description => 'Controls auto-instrumentation of the Tilt template rendering library at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1574
2001
  },
1575
2002
  :'instrumentation.typhoeus' => {
1576
2003
  :default => 'auto',
@@ -1579,7 +2006,7 @@ module NewRelic
1579
2006
  :type => String,
1580
2007
  :dynamic_name => true,
1581
2008
  :allowed_from_server => false,
1582
- :description => 'Controls auto-instrumentation of Typhoeus at start up. May be one of [auto|prepend|chain|disabled].'
2009
+ :description => 'Controls auto-instrumentation of Typhoeus at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1583
2010
  },
1584
2011
  # Message tracer
1585
2012
  :'message_tracer.segment_parameters.enabled' => {
@@ -1604,6 +2031,21 @@ module NewRelic
1604
2031
  :allowed_from_server => true,
1605
2032
  :description => 'If `true`, the agent obfuscates Mongo queries in transaction traces.'
1606
2033
  },
2034
+ # OpenSearch
2035
+ :'opensearch.capture_queries' => {
2036
+ :default => true,
2037
+ :public => true,
2038
+ :type => Boolean,
2039
+ :allowed_from_server => true,
2040
+ :description => 'If `true`, the agent captures OpenSearch queries in transaction traces.'
2041
+ },
2042
+ :'opensearch.obfuscate_queries' => {
2043
+ :default => true,
2044
+ :public => true,
2045
+ :type => Boolean,
2046
+ :allowed_from_server => true,
2047
+ :description => 'If `true`, the agent obfuscates OpenSearch queries in transaction traces.'
2048
+ },
1607
2049
  # Process host
1608
2050
  :'process_host.display_name' => {
1609
2051
  :default => proc { NewRelic::Agent::Hostname.get },
@@ -1623,7 +2065,7 @@ module NewRelic
1623
2065
  If `true`, when the agent is in an application using Ruby on Rails, it will start after `config/initializers` run.
1624
2066
 
1625
2067
  <Callout variant="caution">
1626
- This option may only be set by environment variable.
2068
+ \tThis option may only be set by environment variable.
1627
2069
  </Callout>
1628
2070
  DESCRIPTION
1629
2071
  },
@@ -1638,7 +2080,7 @@ module NewRelic
1638
2080
  'This configuration option converts the Array to a RegEx list. If you\'d like ' \
1639
2081
  'to allow all tasks by default, use `rake.tasks: [.+]`. No rake tasks will be ' \
1640
2082
  'instrumented unless they\'re added to this list. For more information, ' \
1641
- 'visit the (New Relic Rake Instrumentation docs)[/docs/apm/agents/ruby-agent/background-jobs/rake-instrumentation].'
2083
+ 'visit the [New Relic Rake Instrumentation docs](/docs/apm/agents/ruby-agent/background-jobs/rake-instrumentation).'
1642
2084
  },
1643
2085
  :'rake.connect_timeout' => {
1644
2086
  :default => 10,
@@ -1656,6 +2098,48 @@ module NewRelic
1656
2098
  :transform => DefaultSource.method(:convert_to_regexp_list),
1657
2099
  :description => 'Define transactions you want the agent to ignore, by specifying a list of patterns matching the URI you want to ignore. For more detail, see [the docs on ignoring specific transactions](/docs/agents/ruby-agent/api-guides/ignoring-specific-transactions/#config-ignoring).'
1658
2100
  },
2101
+ # Serverless
2102
+ :'serverless_mode.enabled' => {
2103
+ :default => false,
2104
+ :public => true,
2105
+ :type => Boolean,
2106
+ :allowed_from_server => false,
2107
+ :transform => proc { |bool| NewRelic::Agent::ServerlessHandler.env_var_set? || bool },
2108
+ :description => 'If `true`, the agent will operate in a streamlined mode suitable for use with short-lived ' \
2109
+ 'serverless functions. NOTE: Only AWS Lambda functions are supported currently and this ' \
2110
+ "option isn't intended for use without [New Relic's Ruby Lambda layer](https://docs.newrelic.com/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/monitoring-aws-lambda-serverless-monitoring/) offering."
2111
+ },
2112
+ # Sidekiq
2113
+ :'sidekiq.args.include' => {
2114
+ default: NewRelic::EMPTY_ARRAY,
2115
+ public: true,
2116
+ type: Array,
2117
+ dynamic_name: true,
2118
+ allowed_from_server: false,
2119
+ description: <<~SIDEKIQ_ARGS_INCLUDE.chomp.tr("\n", ' ')
2120
+ An array of strings that will collectively serve as an allowlist for filtering which Sidekiq
2121
+ job arguments get reported to New Relic. To capture any Sidekiq arguments,
2122
+ 'job.sidekiq.args.*' must be added to the separate `:'attributes.include'` configuration option. Each
2123
+ string in this array will be turned into a regular expression via `Regexp.new` to permit advanced
2124
+ matching. For job argument hashes, if either a key or value matches the pair will be included. All
2125
+ matching job argument array elements and job argument scalars will be included.
2126
+ SIDEKIQ_ARGS_INCLUDE
2127
+ },
2128
+ :'sidekiq.args.exclude' => {
2129
+ default: NewRelic::EMPTY_ARRAY,
2130
+ public: true,
2131
+ type: Array,
2132
+ dynamic_name: true,
2133
+ allowed_from_server: false,
2134
+ description: <<~SIDEKIQ_ARGS_EXCLUDE.chomp.tr("\n", ' ')
2135
+ An array of strings that will collectively serve as a denylist for filtering which Sidekiq
2136
+ job arguments get reported to New Relic. To capture any Sidekiq arguments,
2137
+ 'job.sidekiq.args.*' must be added to the separate `:'attributes.include'` configuration option. Each string
2138
+ in this array will be turned into a regular expression via `Regexp.new` to permit advanced matching.
2139
+ For job argument hashes, if either a key or value matches the pair will be excluded. All matching job
2140
+ argument array elements and job argument scalars will be excluded.
2141
+ SIDEKIQ_ARGS_EXCLUDE
2142
+ },
1659
2143
  # Slow SQL
1660
2144
  :'slow_sql.enabled' => {
1661
2145
  :default => value_of(:'transaction_tracer.enabled'),
@@ -1687,14 +2171,14 @@ module NewRelic
1687
2171
  :public => true,
1688
2172
  :type => String,
1689
2173
  :allowed_from_server => true,
1690
- :description => 'Defines an obfuscation level for slow SQL queries. Valid options are `obfuscated`, `raw`, or `none`).'
2174
+ :description => 'Defines an obfuscation level for slow SQL queries. Valid options are `obfuscated`, `raw`, or `none`.'
1691
2175
  },
1692
2176
  :'slow_sql.use_longer_sql_id' => {
1693
2177
  :default => false,
1694
2178
  :public => true,
1695
2179
  :type => Boolean,
1696
2180
  :allowed_from_server => true,
1697
- :description => 'Generate a longer sql_id for slow SQL traces. sql_id is used for aggregation of similar queries.'
2181
+ :description => 'Generate a longer `sql_id` for slow SQL traces. `sql_id` is used for aggregation of similar queries.'
1698
2182
  },
1699
2183
  # Span events
1700
2184
  :'span_events.enabled' => {
@@ -1717,7 +2201,12 @@ module NewRelic
1717
2201
  :public => true,
1718
2202
  :type => Integer,
1719
2203
  :allowed_from_server => true,
1720
- :description => 'Defines the maximum number of span events reported from a single harvest. Any Integer between 1 and 10000 is valid.'
2204
+ # Keep the extra two-space indent before the second bullet to appease translation tool
2205
+ :description => <<~DESC
2206
+ - Defines the maximum number of span events reported from a single harvest. Any Integer between `1` and `10000` is valid.'
2207
+ - When configuring the agent for [AI monitoring](/docs/ai-monitoring/intro-to-ai-monitoring), set to max value `10000`.\
2208
+ This ensures the agent captures the maximum amount of distributed traces.
2209
+ DESC
1721
2210
  },
1722
2211
  # Strip exception messages
1723
2212
  :'strip_exception_messages.enabled' => {
@@ -1726,7 +2215,7 @@ module NewRelic
1726
2215
  :public => true,
1727
2216
  :type => Boolean,
1728
2217
  :allowed_from_server => false,
1729
- :description => 'If true, the agent strips messages from all exceptions except those in the [allowlist](#strip_exception_messages-allowlist). Enabled automatically in [high security mode](/docs/accounts-partnerships/accounts/security/high-security).'
2218
+ :description => 'If true, the agent strips messages from all exceptions except those in the [allowed classes list](#strip_exception_messages-allowed_classes). Enabled automatically in [high security mode](/docs/accounts-partnerships/accounts/security/high-security).'
1730
2219
  },
1731
2220
  :'strip_exception_messages.allowed_classes' => {
1732
2221
  :default => '',
@@ -1736,6 +2225,28 @@ module NewRelic
1736
2225
  :transform => DefaultSource.method(:convert_to_constant_list),
1737
2226
  :description => 'Specify a list of exceptions you do not want the agent to strip when [strip_exception_messages](#strip_exception_messages-enabled) is `true`. Separate exceptions with a comma. For example, `"ImportantException,PreserveMessageException"`.'
1738
2227
  },
2228
+ # Agent Control
2229
+ :'agent_control.enabled' => {
2230
+ :default => false,
2231
+ :public => false,
2232
+ :type => Boolean,
2233
+ :allowed_from_server => false,
2234
+ :description => 'Boolean value that denotes whether Agent Control functionality should be enabled. At the moment, this functionality is limited to whether agent health should be reported. This configuration will be set using an environment variable by Agent Control, or one of its components, prior to agent startup.'
2235
+ },
2236
+ :'agent_control.health.delivery_location' => {
2237
+ :default => '/newrelic/apm/health',
2238
+ :public => false,
2239
+ :type => String,
2240
+ :allowed_from_server => false,
2241
+ :description => 'A `file:` URI that specifies the fully qualified directory path for health file(s) to be written to. This defaults to: `file:///newrelic/apm/health`. This configuration will be set using an environment variable by Agent Control, or one of its components, prior to agent startup.'
2242
+ },
2243
+ :'agent_control.health.frequency' => {
2244
+ :default => 5,
2245
+ :public => false,
2246
+ :type => Integer,
2247
+ :allowed_from_server => false,
2248
+ :description => 'The interval, in seconds, of how often the health file(s) will be written to. This configuration will be set using an environment variable by Agent Control, or one of its components, prior to agent startup.'
2249
+ },
1739
2250
  # Thread profiler
1740
2251
  :'thread_profiler.enabled' => {
1741
2252
  :default => DefaultSource.thread_profiler_enabled,
@@ -1865,7 +2376,7 @@ module NewRelic
1865
2376
  :description => 'Enable or disable debugging version of JavaScript agent loader for browser monitoring instrumentation.'
1866
2377
  },
1867
2378
  :'browser_monitoring.ssl_for_http' => {
1868
- :default => nil,
2379
+ :default => false,
1869
2380
  :allow_nil => true,
1870
2381
  :public => false,
1871
2382
  :type => Boolean,
@@ -1998,6 +2509,14 @@ module NewRelic
1998
2509
  :allowed_from_server => true,
1999
2510
  :description => 'Number of seconds betwixt connections to the New Relic span event collection services.'
2000
2511
  },
2512
+ # TODO: Sync with the other agents to see what the config should be named, how it should be enabled, how it should be described
2513
+ :'opentelemetry_bridge.enabled' => {
2514
+ :default => false,
2515
+ :public => false,
2516
+ :type => Boolean,
2517
+ :allowed_from_server => false,
2518
+ :description => 'Enables the creation of Transaction Trace segments and timeslice metrics from OpenTelemetry Spans. This will help drive New Relic UI experience for opentelemetry spans. **WARNING**: This is not feature complete and is not intended to be enabled yet.'
2519
+ },
2001
2520
  :force_reconnect => {
2002
2521
  :default => false,
2003
2522
  :public => false,
@@ -2025,17 +2544,21 @@ module NewRelic
2025
2544
  :type => Boolean,
2026
2545
  :allowed_from_server => false,
2027
2546
  :external => :infinite_tracing,
2028
- :description => "If `true` (the default), data sent to the trace observer is batched\ninstead of sending " \
2029
- 'each span individually.'
2547
+ :description => 'If `true` (the default), data sent to the trace observer is batched instead of ' \
2548
+ 'sending each span individually.'
2030
2549
  },
2031
2550
  :'infinite_tracing.compression_level' => {
2032
2551
  :default => :high,
2033
2552
  :public => true,
2034
2553
  :type => Symbol,
2035
2554
  :allowed_from_server => false,
2555
+ :allowlist => %i[none low medium high],
2036
2556
  :external => :infinite_tracing,
2037
- :description => "Configure the compression level for data sent to the trace observer\nMay be one of " \
2038
- "[none|low|medium|high]\n'high' is the default. Set the level to 'none' to disable compression"
2557
+ :description => <<~DESC
2558
+ Configure the compression level for data sent to the trace observer. \
2559
+ May be one of: `:none`, `:low`, `:medium`, `:high`. \
2560
+ Set the level to `:none` to disable compression.
2561
+ DESC
2039
2562
  },
2040
2563
  :js_agent_file => {
2041
2564
  :default => '',
@@ -2049,7 +2572,8 @@ module NewRelic
2049
2572
  :public => false,
2050
2573
  :type => String,
2051
2574
  :allowed_from_server => true,
2052
- :description => 'JavaScript agent loader content.'
2575
+ :description => 'JavaScript agent loader content.',
2576
+ :exclude_from_reported_settings => true
2053
2577
  },
2054
2578
  :keep_alive_timeout => {
2055
2579
  :default => 60,
@@ -2176,7 +2700,7 @@ module NewRelic
2176
2700
  :public => false,
2177
2701
  :type => Boolean,
2178
2702
  :allowed_from_server => false,
2179
- :description => 'Used in tests for the agent to start up, but not connect to the collector. Formerly used `developer_mode` in test config for this purpose.'
2703
+ :description => 'Used in tests for the agent to start-up, but not connect to the collector. Formerly used `developer_mode` in test config for this purpose.'
2180
2704
  },
2181
2705
  :'thread_profiler.max_profile_overhead' => {
2182
2706
  :default => 0.05,
@@ -2223,8 +2747,236 @@ module NewRelic
2223
2747
  :type => Integer,
2224
2748
  :allowed_from_server => false,
2225
2749
  :description => 'This value represents the total amount of memory available to the host (not the process), in mebibytes (1024 squared or 1,048,576 bytes).'
2750
+ },
2751
+ # security agent
2752
+ :'security.agent.enabled' => {
2753
+ :default => false,
2754
+ :external => true,
2755
+ :public => true,
2756
+ :type => Boolean,
2757
+ :allowed_from_server => false,
2758
+ :description => "If `true`, the security agent is loaded (a Ruby 'require' is performed)"
2759
+ },
2760
+ :'security.enabled' => {
2761
+ :default => false,
2762
+ :external => true,
2763
+ :public => true,
2764
+ :type => Boolean,
2765
+ :allowed_from_server => false,
2766
+ :description => 'If `true`, the security agent is started (the agent runs in its event loop)'
2767
+ },
2768
+ :'security.mode' => {
2769
+ :default => 'IAST',
2770
+ :external => true,
2771
+ :public => true,
2772
+ :type => String,
2773
+ :allowed_from_server => true,
2774
+ :allowlist => %w[IAST RASP],
2775
+ :description => 'Defines the mode for the security agent to operate in. Currently only `IAST` is supported',
2776
+ :dynamic_name => true
2777
+ },
2778
+ :'security.validator_service_url' => {
2779
+ :default => 'wss://csec.nr-data.net',
2780
+ :external => true,
2781
+ :public => true,
2782
+ :type => String,
2783
+ :allowed_from_server => true,
2784
+ :description => 'Defines the endpoint URL for posting security-related data',
2785
+ :dynamic_name => true
2786
+ },
2787
+ :'security.application_info.port' => {
2788
+ :default => nil,
2789
+ :allow_nil => true,
2790
+ :public => true,
2791
+ :type => Integer,
2792
+ :external => true,
2793
+ :allowed_from_server => false,
2794
+ :description => 'The port the application is listening on. This setting is mandatory for Passenger servers. The agent detects other servers by default.'
2795
+ },
2796
+ :'security.exclude_from_iast_scan.api' => {
2797
+ :default => [],
2798
+ :public => true,
2799
+ :type => Array,
2800
+ :external => true,
2801
+ :allowed_from_server => true,
2802
+ :transform => DefaultSource.method(:convert_to_list),
2803
+ :description => 'Defines API paths the security agent should ignore in IAST scans. Accepts an array of regex patterns matching the URI to ignore. The regex pattern should find a complete match for the URL without the endpoint. For example, `[".*account.*"], [".*/\api\/v1\/.*?\/login"]`'
2804
+ },
2805
+ :'security.exclude_from_iast_scan.http_request_parameters.header' => {
2806
+ :default => [],
2807
+ :public => true,
2808
+ :type => Array,
2809
+ :external => true,
2810
+ :allowed_from_server => true,
2811
+ :transform => DefaultSource.method(:convert_to_list),
2812
+ :description => 'An array of HTTP request headers the security agent should ignore in IAST scans. The array should specify a list of patterns matching the headers to ignore.'
2813
+ },
2814
+ :'security.exclude_from_iast_scan.http_request_parameters.query' => {
2815
+ :default => [],
2816
+ :public => true,
2817
+ :type => Array,
2818
+ :external => true,
2819
+ :allowed_from_server => true,
2820
+ :transform => DefaultSource.method(:convert_to_list),
2821
+ :description => 'An array of HTTP request query parameters the security agent should ignore in IAST scans. The array should specify a list of patterns matching the HTTP request query parameters to ignore.'
2822
+ },
2823
+ :'security.exclude_from_iast_scan.http_request_parameters.body' => {
2824
+ :default => [],
2825
+ :public => true,
2826
+ :type => Array,
2827
+ :external => true,
2828
+ :allowed_from_server => true,
2829
+ :transform => DefaultSource.method(:convert_to_list),
2830
+ :description => 'An array of HTTP request body keys the security agent should ignore in IAST scans.'
2831
+ },
2832
+ :'security.exclude_from_iast_scan.iast_detection_category.insecure_settings' => {
2833
+ :default => false,
2834
+ :external => true,
2835
+ :public => true,
2836
+ :type => Boolean,
2837
+ :allowed_from_server => false,
2838
+ :description => 'If `true`, disables the detection of low-severity insecure settings. For example, hash, crypto, cookie, random generators, trust boundary).'
2839
+ },
2840
+ :'security.exclude_from_iast_scan.iast_detection_category.invalid_file_access' => {
2841
+ :default => false,
2842
+ :external => true,
2843
+ :public => true,
2844
+ :type => Boolean,
2845
+ :allowed_from_server => false,
2846
+ :description => 'If `true`, disables file operation-related IAST detections (File Access & Application integrity violation)'
2847
+ },
2848
+ :'security.exclude_from_iast_scan.iast_detection_category.sql_injection' => {
2849
+ :default => false,
2850
+ :external => true,
2851
+ :public => true,
2852
+ :type => Boolean,
2853
+ :allowed_from_server => false,
2854
+ :description => 'If `true`, disables SQL injection detection in IAST scans.'
2855
+ },
2856
+ :'security.exclude_from_iast_scan.iast_detection_category.nosql_injection' => {
2857
+ :default => false,
2858
+ :external => true,
2859
+ :public => true,
2860
+ :type => Boolean,
2861
+ :allowed_from_server => false,
2862
+ :description => 'If `true`, disables NOSQL injection detection in IAST scans.'
2863
+ },
2864
+ :'security.exclude_from_iast_scan.iast_detection_category.ldap_injection' => {
2865
+ :default => false,
2866
+ :external => true,
2867
+ :public => true,
2868
+ :type => Boolean,
2869
+ :allowed_from_server => false,
2870
+ :description => 'If `true`, disables LDAP injection detection in IAST scans.'
2871
+ },
2872
+ :'security.exclude_from_iast_scan.iast_detection_category.javascript_injection' => {
2873
+ :default => false,
2874
+ :external => true,
2875
+ :public => true,
2876
+ :type => Boolean,
2877
+ :allowed_from_server => false,
2878
+ :description => 'If `true`, disables Javascript injection detection in IAST scans.'
2879
+ },
2880
+ :'security.exclude_from_iast_scan.iast_detection_category.command_injection' => {
2881
+ :default => false,
2882
+ :external => true,
2883
+ :public => true,
2884
+ :type => Boolean,
2885
+ :allowed_from_server => false,
2886
+ :description => 'If `true`, disables system command injection detection in IAST scans.'
2887
+ },
2888
+ :'security.exclude_from_iast_scan.iast_detection_category.xpath_injection' => {
2889
+ :default => false,
2890
+ :external => true,
2891
+ :public => true,
2892
+ :type => Boolean,
2893
+ :allowed_from_server => false,
2894
+ :description => 'If `true`, disables XPATH injection detection in IAST scans.'
2895
+ },
2896
+ :'security.exclude_from_iast_scan.iast_detection_category.ssrf' => {
2897
+ :default => false,
2898
+ :external => true,
2899
+ :public => true,
2900
+ :type => Boolean,
2901
+ :allowed_from_server => false,
2902
+ :description => 'If `true`, disables Sever-Side Request Forgery (SSRF) detection in IAST scans.'
2903
+ },
2904
+ :'security.exclude_from_iast_scan.iast_detection_category.rxss' => {
2905
+ :default => false,
2906
+ :external => true,
2907
+ :public => true,
2908
+ :type => Boolean,
2909
+ :allowed_from_server => false,
2910
+ :description => 'If `true`, disables Reflected Cross-Site Scripting (RXSS) detection in IAST scans.'
2911
+ },
2912
+ :'security.scan_schedule.delay' => {
2913
+ :default => 0,
2914
+ :public => true,
2915
+ :type => Integer,
2916
+ :external => true,
2917
+ :allowed_from_server => true,
2918
+ :description => 'Specifies the delay time (in minutes) before the IAST scan begins after the application starts.'
2919
+ },
2920
+ :'security.scan_schedule.duration' => {
2921
+ :default => 0,
2922
+ :public => true,
2923
+ :type => Integer,
2924
+ :external => true,
2925
+ :allowed_from_server => true,
2926
+ :description => 'Indicates the duration (in minutes) for which the IAST scan will be performed.'
2927
+ },
2928
+ :'security.scan_schedule.schedule' => {
2929
+ :default => '',
2930
+ :public => true,
2931
+ :type => String,
2932
+ :external => true,
2933
+ :allowed_from_server => true,
2934
+ :description => 'Specifies a cron expression that sets when the IAST scan should run.',
2935
+ :dynamic_name => true
2936
+ },
2937
+ :'security.scan_schedule.always_sample_traces' => {
2938
+ :default => false,
2939
+ :external => true,
2940
+ :public => true,
2941
+ :type => Boolean,
2942
+ :allowed_from_server => false,
2943
+ :description => 'If `true`, allows IAST to continuously gather trace data in the background. The security agent uses collected data to perform an IAST scan at the scheduled time.'
2944
+ },
2945
+ :'security.scan_controllers.iast_scan_request_rate_limit' => {
2946
+ :default => 3600,
2947
+ :public => true,
2948
+ :type => Integer,
2949
+ :external => true,
2950
+ :allowed_from_server => true,
2951
+ :description => 'Sets the maximum number of HTTP requests allowed for the IAST scan per minute. Any Integer between 12 and 3600 is valid. The default value is 3600.'
2952
+ },
2953
+ :'security.scan_controllers.scan_instance_count' => {
2954
+ :default => 0,
2955
+ :public => true,
2956
+ :type => Integer,
2957
+ :external => true,
2958
+ :allowed_from_server => true,
2959
+ :description => 'The number of application instances for a specific entity to perform IAST analysis on.'
2960
+ },
2961
+ :'security.scan_controllers.report_http_response_body' => {
2962
+ :default => true,
2963
+ :public => true,
2964
+ :type => Boolean,
2965
+ :external => true,
2966
+ :allowed_from_server => true,
2967
+ :description => 'If `true`, enables the sending of HTTP responses bodies. Disabling this also disables Reflected Cross-Site Scripting (RXSS) vulnerability detection.'
2968
+ },
2969
+ :'security.iast_test_identifier' => {
2970
+ :default => nil,
2971
+ :allow_nil => true,
2972
+ :public => true,
2973
+ :type => String,
2974
+ :external => true,
2975
+ :allowed_from_server => true,
2976
+ :description => 'A unique test identifier when runnning IAST in a CI/CD environment to differentiate between different test runs. For example, a build number.'
2226
2977
  }
2227
2978
  }.freeze
2979
+ # rubocop:enable Metrics/CollectionLiteralLength
2228
2980
  end
2229
2981
  end
2230
2982
  end