newrelic_rpm 6.7.0.359 → 6.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (300) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -0
  3. data/CHANGELOG.md +493 -4
  4. data/CONTRIBUTING.md +106 -19
  5. data/Gemfile +6 -2
  6. data/Guardfile +18 -1
  7. data/LICENSE +208 -38
  8. data/README.md +81 -85
  9. data/ROADMAP.md +24 -0
  10. data/Rakefile +2 -0
  11. data/THIRD_PARTY_NOTICES.md +213 -0
  12. data/bin/nrdebug +1 -1
  13. data/init.rb +1 -1
  14. data/install.rb +1 -1
  15. data/lib/new_relic/agent/adaptive_sampler.rb +1 -1
  16. data/lib/new_relic/agent/agent.rb +63 -44
  17. data/lib/new_relic/agent/agent_logger.rb +5 -1
  18. data/lib/new_relic/agent/attribute_filter.rb +8 -8
  19. data/lib/new_relic/agent/attribute_processing.rb +1 -1
  20. data/lib/new_relic/agent/attributes.rb +152 -0
  21. data/lib/new_relic/agent/audit_logger.rb +11 -1
  22. data/lib/new_relic/agent/autostart.rb +20 -15
  23. data/lib/new_relic/agent/chained_call.rb +1 -1
  24. data/lib/new_relic/agent/commands/agent_command.rb +1 -1
  25. data/lib/new_relic/agent/commands/agent_command_router.rb +1 -1
  26. data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -1
  27. data/lib/new_relic/agent/configuration/default_source.rb +138 -17
  28. data/lib/new_relic/agent/configuration/dotted_hash.rb +1 -1
  29. data/lib/new_relic/agent/configuration/environment_source.rb +1 -1
  30. data/lib/new_relic/agent/configuration/event_harvest_config.rb +1 -1
  31. data/lib/new_relic/agent/configuration/high_security_source.rb +1 -1
  32. data/lib/new_relic/agent/configuration/manager.rb +1 -1
  33. data/lib/new_relic/agent/configuration/manual_source.rb +1 -1
  34. data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -1
  35. data/lib/new_relic/agent/configuration/security_policy_source.rb +1 -1
  36. data/lib/new_relic/agent/configuration/server_source.rb +2 -2
  37. data/lib/new_relic/agent/configuration/yaml_source.rb +12 -7
  38. data/lib/new_relic/agent/configuration.rb +1 -1
  39. data/lib/new_relic/agent/connect/request_builder.rb +4 -12
  40. data/lib/new_relic/agent/connect/response_handler.rb +1 -1
  41. data/lib/new_relic/agent/custom_event_aggregator.rb +1 -1
  42. data/lib/new_relic/agent/database/explain_plan_helpers.rb +1 -1
  43. data/lib/new_relic/agent/database/obfuscation_helpers.rb +2 -2
  44. data/lib/new_relic/agent/database/obfuscator.rb +1 -1
  45. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +1 -1
  46. data/lib/new_relic/agent/database.rb +2 -3
  47. data/lib/new_relic/agent/database_adapter.rb +33 -0
  48. data/lib/new_relic/agent/datastores/metric_helper.rb +1 -1
  49. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +3 -3
  50. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +1 -1
  51. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +9 -9
  52. data/lib/new_relic/agent/datastores/mongo/statement_formatter.rb +1 -1
  53. data/lib/new_relic/agent/datastores/mongo.rb +2 -2
  54. data/lib/new_relic/agent/datastores/redis.rb +1 -1
  55. data/lib/new_relic/agent/datastores.rb +1 -1
  56. data/lib/new_relic/agent/deprecator.rb +1 -1
  57. data/lib/new_relic/agent/{cross_app_payload.rb → distributed_tracing/cross_app_payload.rb} +3 -2
  58. data/lib/new_relic/agent/{cross_app_tracing.rb → distributed_tracing/cross_app_tracing.rb} +61 -46
  59. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +84 -0
  60. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +75 -0
  61. data/lib/new_relic/agent/{distributed_trace_payload.rb → distributed_tracing/distributed_trace_payload.rb} +25 -102
  62. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +39 -0
  63. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +246 -0
  64. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +126 -0
  65. data/lib/new_relic/agent/distributed_tracing.rb +156 -7
  66. data/lib/new_relic/agent/encoding_normalizer.rb +1 -1
  67. data/lib/new_relic/agent/error_collector.rb +34 -17
  68. data/lib/new_relic/agent/error_event_aggregator.rb +8 -6
  69. data/lib/new_relic/agent/error_trace_aggregator.rb +1 -1
  70. data/lib/new_relic/agent/event_aggregator.rb +1 -1
  71. data/lib/new_relic/agent/event_buffer.rb +1 -1
  72. data/lib/new_relic/agent/event_listener.rb +1 -1
  73. data/lib/new_relic/agent/event_loop.rb +1 -1
  74. data/lib/new_relic/agent/external.rb +8 -8
  75. data/lib/new_relic/agent/guid_generator.rb +28 -0
  76. data/lib/new_relic/agent/harvester.rb +1 -1
  77. data/lib/new_relic/agent/heap.rb +1 -1
  78. data/lib/new_relic/agent/hostname.rb +8 -2
  79. data/lib/new_relic/agent/http_clients/abstract.rb +82 -0
  80. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +25 -20
  81. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +29 -14
  82. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +18 -22
  83. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +11 -12
  84. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +17 -5
  85. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +5 -7
  86. data/lib/new_relic/agent/http_clients/uri_util.rb +12 -11
  87. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +6 -8
  88. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +5 -1
  89. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +12 -4
  90. data/lib/new_relic/agent/instrumentation/active_job.rb +1 -1
  91. data/lib/new_relic/agent/instrumentation/active_merchant.rb +1 -1
  92. data/lib/new_relic/agent/instrumentation/active_record.rb +85 -38
  93. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +17 -6
  94. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +1 -1
  95. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +35 -11
  96. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +8 -3
  97. data/lib/new_relic/agent/instrumentation/active_storage.rb +1 -1
  98. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +9 -5
  99. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +10 -9
  100. data/lib/new_relic/agent/instrumentation/authlogic.rb +1 -1
  101. data/lib/new_relic/agent/instrumentation/bunny.rb +48 -29
  102. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +1 -1
  103. data/lib/new_relic/agent/instrumentation/curb.rb +66 -19
  104. data/lib/new_relic/agent/instrumentation/data_mapper.rb +4 -2
  105. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +3 -1
  106. data/lib/new_relic/agent/instrumentation/excon/connection.rb +7 -4
  107. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +3 -2
  108. data/lib/new_relic/agent/instrumentation/excon.rb +2 -2
  109. data/lib/new_relic/agent/instrumentation/grape.rb +6 -11
  110. data/lib/new_relic/agent/instrumentation/http.rb +7 -4
  111. data/lib/new_relic/agent/instrumentation/httpclient.rb +6 -4
  112. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +1 -1
  113. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +7 -3
  114. data/lib/new_relic/agent/instrumentation/memcache.rb +4 -2
  115. data/lib/new_relic/agent/instrumentation/merb/controller.rb +1 -1
  116. data/lib/new_relic/agent/instrumentation/merb/errors.rb +1 -1
  117. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +1 -1
  118. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +9 -7
  119. data/lib/new_relic/agent/instrumentation/mongo.rb +10 -4
  120. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +36 -3
  121. data/lib/new_relic/agent/instrumentation/net.rb +48 -28
  122. data/lib/new_relic/agent/instrumentation/net_prepend.rb +40 -0
  123. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +26 -2
  124. data/lib/new_relic/agent/instrumentation/padrino.rb +3 -1
  125. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +1 -1
  126. data/lib/new_relic/agent/instrumentation/queue_time.rb +1 -1
  127. data/lib/new_relic/agent/instrumentation/rack.rb +3 -1
  128. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +1 -1
  129. data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +1 -1
  130. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +1 -1
  131. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -1
  132. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +1 -1
  133. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +1 -1
  134. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +1 -1
  135. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +1 -1
  136. data/lib/new_relic/agent/instrumentation/rake.rb +2 -1
  137. data/lib/new_relic/agent/instrumentation/redis.rb +12 -6
  138. data/lib/new_relic/agent/instrumentation/resque.rb +4 -1
  139. data/lib/new_relic/agent/instrumentation/sequel.rb +1 -1
  140. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -1
  141. data/lib/new_relic/agent/instrumentation/sidekiq.rb +48 -24
  142. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +1 -1
  143. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +1 -1
  144. data/lib/new_relic/agent/instrumentation/sinatra.rb +1 -2
  145. data/lib/new_relic/agent/instrumentation/sunspot.rb +1 -1
  146. data/lib/new_relic/agent/instrumentation/typhoeus.rb +24 -7
  147. data/lib/new_relic/agent/instrumentation.rb +1 -1
  148. data/lib/new_relic/agent/internal_agent_error.rb +1 -1
  149. data/lib/new_relic/agent/javascript_instrumentor.rb +1 -1
  150. data/lib/new_relic/agent/log_once.rb +1 -1
  151. data/lib/new_relic/agent/logging.rb +19 -5
  152. data/lib/new_relic/agent/memory_logger.rb +1 -1
  153. data/lib/new_relic/agent/messaging.rb +6 -74
  154. data/lib/new_relic/agent/method_tracer.rb +10 -8
  155. data/lib/new_relic/agent/method_tracer_helpers.rb +3 -3
  156. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +110 -0
  157. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +27 -0
  158. data/lib/new_relic/agent/{inbound_request_monitor.rb → monitors/inbound_request_monitor.rb} +2 -2
  159. data/lib/new_relic/agent/{synthetics_monitor.rb → monitors/synthetics_monitor.rb} +3 -5
  160. data/lib/new_relic/agent/monitors.rb +27 -0
  161. data/lib/new_relic/agent/new_relic_service/encoders.rb +1 -1
  162. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +1 -1
  163. data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -1
  164. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +1 -1
  165. data/lib/new_relic/agent/new_relic_service.rb +34 -10
  166. data/lib/new_relic/agent/noticible_error.rb +22 -0
  167. data/lib/new_relic/agent/null_logger.rb +1 -1
  168. data/lib/new_relic/agent/obfuscator.rb +1 -1
  169. data/lib/new_relic/agent/parameter_filtering.rb +1 -1
  170. data/lib/new_relic/agent/payload_metric_mapping.rb +1 -1
  171. data/lib/new_relic/agent/pipe_channel_manager.rb +1 -1
  172. data/lib/new_relic/agent/pipe_service.rb +1 -1
  173. data/lib/new_relic/agent/prepend_supportability.rb +1 -1
  174. data/lib/new_relic/agent/priority_sampled_buffer.rb +8 -5
  175. data/lib/new_relic/agent/range_extensions.rb +1 -1
  176. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +1 -1
  177. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +1 -1
  178. data/lib/new_relic/agent/rules_engine.rb +1 -1
  179. data/lib/new_relic/agent/sampler.rb +1 -1
  180. data/lib/new_relic/agent/sampler_collection.rb +1 -1
  181. data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -1
  182. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +1 -1
  183. data/lib/new_relic/agent/samplers/memory_sampler.rb +2 -2
  184. data/lib/new_relic/agent/samplers/object_sampler.rb +1 -1
  185. data/lib/new_relic/agent/samplers/vm_sampler.rb +1 -1
  186. data/lib/new_relic/agent/span_event_aggregator.rb +2 -1
  187. data/lib/new_relic/agent/span_event_primitive.rb +108 -54
  188. data/lib/new_relic/agent/sql_sampler.rb +6 -6
  189. data/lib/new_relic/agent/stats.rb +1 -1
  190. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +2 -2
  191. data/lib/new_relic/agent/stats_engine/stats_hash.rb +1 -1
  192. data/lib/new_relic/agent/stats_engine.rb +1 -1
  193. data/lib/new_relic/agent/supported_versions.rb +3 -3
  194. data/lib/new_relic/agent/synthetics_event_aggregator.rb +1 -1
  195. data/lib/new_relic/agent/system_info.rb +13 -4
  196. data/lib/new_relic/agent/threading/agent_thread.rb +1 -1
  197. data/lib/new_relic/agent/threading/backtrace_node.rb +1 -1
  198. data/lib/new_relic/agent/threading/backtrace_service.rb +1 -1
  199. data/lib/new_relic/agent/threading/thread_profile.rb +1 -1
  200. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -1
  201. data/lib/new_relic/agent/tracer.rb +34 -19
  202. data/lib/new_relic/agent/transaction/abstract_segment.rb +32 -5
  203. data/lib/new_relic/agent/transaction/datastore_segment.rb +1 -1
  204. data/lib/new_relic/agent/transaction/distributed_tracer.rb +177 -0
  205. data/lib/new_relic/agent/transaction/distributed_tracing.rb +58 -147
  206. data/lib/new_relic/agent/transaction/external_request_segment.rb +32 -39
  207. data/lib/new_relic/agent/transaction/message_broker_segment.rb +5 -12
  208. data/lib/new_relic/agent/transaction/request_attributes.rb +1 -1
  209. data/lib/new_relic/agent/transaction/segment.rb +28 -2
  210. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -1
  211. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -1
  212. data/lib/new_relic/agent/transaction/trace.rb +3 -5
  213. data/lib/new_relic/agent/transaction/trace_builder.rb +1 -1
  214. data/lib/new_relic/agent/transaction/trace_context.rb +168 -0
  215. data/lib/new_relic/agent/transaction/trace_node.rb +11 -9
  216. data/lib/new_relic/agent/transaction/tracing.rb +1 -1
  217. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -1
  218. data/lib/new_relic/agent/transaction.rb +104 -82
  219. data/lib/new_relic/agent/transaction_error_primitive.rb +11 -16
  220. data/lib/new_relic/agent/transaction_event_aggregator.rb +1 -1
  221. data/lib/new_relic/agent/transaction_event_primitive.rb +29 -40
  222. data/lib/new_relic/agent/transaction_event_recorder.rb +1 -1
  223. data/lib/new_relic/agent/transaction_metrics.rb +1 -1
  224. data/lib/new_relic/agent/transaction_sampler.rb +1 -1
  225. data/lib/new_relic/agent/transaction_time_aggregator.rb +1 -1
  226. data/lib/new_relic/agent/utilization/aws.rb +1 -1
  227. data/lib/new_relic/agent/utilization/azure.rb +1 -1
  228. data/lib/new_relic/agent/utilization/gcp.rb +1 -1
  229. data/lib/new_relic/agent/utilization/pcf.rb +1 -1
  230. data/lib/new_relic/agent/utilization/vendor.rb +1 -1
  231. data/lib/new_relic/agent/utilization_data.rb +1 -1
  232. data/lib/new_relic/agent/vm/jruby_vm.rb +1 -1
  233. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -1
  234. data/lib/new_relic/agent/vm/mri_vm.rb +7 -5
  235. data/lib/new_relic/agent/vm/snapshot.rb +1 -1
  236. data/lib/new_relic/agent/vm.rb +1 -1
  237. data/lib/new_relic/agent/worker_loop.rb +1 -1
  238. data/lib/new_relic/agent.rb +49 -8
  239. data/lib/new_relic/cli/command.rb +1 -1
  240. data/lib/new_relic/cli/commands/deployments.rb +1 -2
  241. data/lib/new_relic/cli/commands/install.rb +4 -3
  242. data/lib/new_relic/coerce.rb +32 -7
  243. data/lib/new_relic/collection_helper.rb +1 -1
  244. data/lib/new_relic/constants.rb +42 -0
  245. data/lib/new_relic/control/class_methods.rb +1 -1
  246. data/lib/new_relic/control/frameworks/external.rb +1 -1
  247. data/lib/new_relic/control/frameworks/merb.rb +1 -1
  248. data/lib/new_relic/control/frameworks/rails.rb +1 -1
  249. data/lib/new_relic/control/frameworks/rails3.rb +1 -1
  250. data/lib/new_relic/control/frameworks/rails4.rb +1 -1
  251. data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -1
  252. data/lib/new_relic/control/frameworks/ruby.rb +1 -1
  253. data/lib/new_relic/control/frameworks/sinatra.rb +1 -1
  254. data/lib/new_relic/control/frameworks.rb +1 -1
  255. data/lib/new_relic/control/instance_methods.rb +11 -2
  256. data/lib/new_relic/control/instrumentation.rb +1 -1
  257. data/lib/new_relic/control/server_methods.rb +1 -1
  258. data/lib/new_relic/control.rb +1 -1
  259. data/lib/new_relic/delayed_job_injection.rb +1 -1
  260. data/lib/new_relic/dependency_detection.rb +9 -5
  261. data/lib/new_relic/environment_report.rb +2 -4
  262. data/lib/new_relic/helper.rb +1 -1
  263. data/lib/new_relic/language_support.rb +1 -1
  264. data/lib/new_relic/latest_changes.rb +2 -2
  265. data/lib/new_relic/local_environment.rb +1 -1
  266. data/lib/new_relic/metric_data.rb +1 -1
  267. data/lib/new_relic/metric_spec.rb +1 -1
  268. data/lib/new_relic/noticed_error.rb +39 -18
  269. data/lib/new_relic/rack/agent_hooks.rb +1 -1
  270. data/lib/new_relic/rack/agent_middleware.rb +1 -1
  271. data/lib/new_relic/rack/browser_monitoring.rb +6 -1
  272. data/lib/new_relic/rack.rb +1 -1
  273. data/lib/new_relic/recipes/capistrano3.rb +1 -1
  274. data/lib/new_relic/recipes/capistrano_legacy.rb +1 -1
  275. data/lib/new_relic/recipes.rb +1 -1
  276. data/lib/new_relic/supportability_helper.rb +17 -1
  277. data/lib/new_relic/version.rb +2 -2
  278. data/lib/newrelic_rpm.rb +1 -1
  279. data/lib/sequel/extensions/newrelic_instrumentation.rb +1 -1
  280. data/lib/sequel/plugins/newrelic_instrumentation.rb +1 -1
  281. data/lib/tasks/all.rb +1 -1
  282. data/lib/tasks/multiverse.rb +35 -1
  283. data/lib/tasks/newrelic.rb +1 -1
  284. data/lib/tasks/tests.rake +6 -1
  285. data/newrelic_rpm.gemspec +18 -13
  286. data/recipes/newrelic.rb +1 -1
  287. data/test/agent_helper.rb +339 -72
  288. metadata +104 -41
  289. data/.travis.yml +0 -175
  290. data/lib/new_relic/agent/cross_app_monitor.rb +0 -110
  291. data/lib/new_relic/agent/distributed_trace_monitor.rb +0 -40
  292. data/lib/new_relic/agent/http_clients/abstract_request.rb +0 -31
  293. data/lib/new_relic/agent/transaction/attributes.rb +0 -154
  294. data/lib/new_relic/build.rb +0 -2
  295. data/lib/new_relic/metrics.rb +0 -13
  296. data/lib/tasks/versions.html.erb +0 -28
  297. data/lib/tasks/versions.postface.html +0 -8
  298. data/lib/tasks/versions.preface.html +0 -9
  299. data/lib/tasks/versions.rake +0 -65
  300. data/lib/tasks/versions.txt.erb +0 -14
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'forwardable'
6
6
 
@@ -48,23 +48,30 @@ module NewRelic
48
48
  Proc.new {
49
49
  paths = [
50
50
  File.join("config","newrelic.yml"),
51
- File.join("newrelic.yml")
51
+ File.join("newrelic.yml"),
52
+ File.join("config","newrelic.yml.erb"),
53
+ File.join("newrelic.yml.erb")
52
54
  ]
53
55
 
54
56
  if NewRelic::Control.instance.root
55
57
  paths << File.join(NewRelic::Control.instance.root, "config", "newrelic.yml")
56
58
  paths << File.join(NewRelic::Control.instance.root, "newrelic.yml")
59
+ paths << File.join(NewRelic::Control.instance.root, "config", "newrelic.yml.erb")
60
+ paths << File.join(NewRelic::Control.instance.root, "newrelic.yml.erb")
57
61
  end
58
62
 
59
63
  if ENV["HOME"]
60
64
  paths << File.join(ENV["HOME"], ".newrelic", "newrelic.yml")
61
65
  paths << File.join(ENV["HOME"], "newrelic.yml")
66
+ paths << File.join(ENV["HOME"], ".newrelic", "newrelic.yml.erb")
67
+ paths << File.join(ENV["HOME"], "newrelic.yml.erb")
62
68
  end
63
69
 
64
70
  # If we're packaged for warbler, we can tell from GEM_HOME
65
71
  if ENV["GEM_HOME"] && ENV["GEM_HOME"].end_with?(".jar!")
66
72
  app_name = File.basename(ENV["GEM_HOME"], ".jar!")
67
73
  paths << File.join(ENV["GEM_HOME"], app_name, "config", "newrelic.yml")
74
+ paths << File.join(ENV["GEM_HOME"], app_name, "config", "newrelic.yml.erb")
68
75
  end
69
76
 
70
77
  paths
@@ -218,9 +225,19 @@ module NewRelic
218
225
  end
219
226
  const_names.compact
220
227
  end
228
+
229
+ def self.enforce_fallback(allowed_values: nil, fallback: nil)
230
+ Proc.new do |configured_value|
231
+ if allowed_values.any? { |v| v =~ /#{configured_value}/i }
232
+ configured_value
233
+ else
234
+ fallback
235
+ end
236
+ end
237
+ end
221
238
  end
222
239
 
223
- AUTOSTART_BLACKLISTED_RAKE_TASKS = [
240
+ AUTOSTART_DENYLISTED_RAKE_TASKS = [
224
241
  'about',
225
242
  'assets:clean',
226
243
  'assets:clobber',
@@ -385,7 +402,21 @@ module NewRelic
385
402
  :public => true,
386
403
  :type => Boolean,
387
404
  :allowed_from_server => false,
388
- :description => 'When <code>true</code>, the agent captures HTTP request parameters and attaches them to transaction traces, traced errors, and <a href="https://docs.newrelic.com/docs/insights/new-relic-insights/decorating-events/error-event-default-attributes-insights">TransactionError events</a>.'
405
+ :description => 'When <code>true</code>, the agent captures HTTP request parameters ' \
406
+ 'and attaches them to transaction traces, traced errors, and ' \
407
+ '<a href="https://docs.newrelic.com/attribute-dictionary?attribute_name=&events_tids%5B%5D=8241">'\
408
+ '<code>TransactionError</code> events.' \
409
+ "\n" \
410
+ '<div class="callout-warning">' \
411
+ "\n" \
412
+ '<p>When using the <code>capture_params</code> setting, the Ruby agent will not attempt ' \
413
+ 'to filter secret information. <b>Recommendation:</b> To filter secret information from ' \
414
+ 'request parameters, use the <a href="/docs/agents/ruby-agent/attributes/enable-disable-attributes-ruby">' \
415
+ '<code>attributes.include</code> setting</a> instead. For more information, see the ' \
416
+ '<a href="/docs/agents/ruby-agent/attributes/ruby-attribute-examples#ex_req_params">' \
417
+ 'Ruby attribute examples</a>.' \
418
+ "</p>\n" \
419
+ '</div>'
389
420
  },
390
421
  :config_path => {
391
422
  :default => DefaultSource.config_path,
@@ -416,6 +447,17 @@ module NewRelic
416
447
  :description => 'Autodetected application framework used to enable framework-specific functionality.'
417
448
  },
418
449
  :'autostart.blacklisted_constants' => {
450
+ :default => 'Rails::Console',
451
+ :public => true,
452
+ :type => String,
453
+ :allowed_from_server => false,
454
+ :description => 'Deprecated. ' \
455
+ 'For agent versions 6.8.0 or higher, ' \
456
+ 'use <a href="#autostart-denylisted_constants"><code>' \
457
+ 'autostart.denylisted_constants' \
458
+ '</code></a> instead.'
459
+ },
460
+ :'autostart.denylisted_constants' => {
419
461
  :default => 'Rails::Console',
420
462
  :public => true,
421
463
  :type => String,
@@ -427,10 +469,32 @@ module NewRelic
427
469
  :public => true,
428
470
  :type => String,
429
471
  :allowed_from_server => false,
472
+ :description => 'Deprecated. ' \
473
+ 'For agent versions 6.8.0 or higher, ' \
474
+ 'use <a href="#autostart-denylisted_executables"><code>' \
475
+ 'autostart.denylisted_executables' \
476
+ '</code></a> instead.'
477
+ },
478
+ :'autostart.denylisted_executables' => {
479
+ :default => value_of(:'autostart.blacklisted_executables'),
480
+ :public => true,
481
+ :type => String,
482
+ :allowed_from_server => false,
430
483
  :description => 'Defines a comma-delimited list of executables that the agent should not instrument. For example, <code>rake,my_ruby_script.rb</code>.'
431
484
  },
432
485
  :'autostart.blacklisted_rake_tasks' => {
433
- :default => AUTOSTART_BLACKLISTED_RAKE_TASKS,
486
+ :default => AUTOSTART_DENYLISTED_RAKE_TASKS,
487
+ :public => true,
488
+ :type => String,
489
+ :allowed_from_server => false,
490
+ :description => 'Deprecated. ' \
491
+ 'For agent versions 6.8.0 or higher, ' \
492
+ 'use <a href="#autostart-denylisted_rake_tasks"><code>' \
493
+ 'autostart.denylisted_rake_tasks' \
494
+ '</code></a> instead.'
495
+ },
496
+ :'autostart.denylisted_rake_tasks' => {
497
+ :default => value_of(:'autostart.blacklisted_rake_tasks'),
434
498
  :public => true,
435
499
  :type => String,
436
500
  :allowed_from_server => false,
@@ -478,15 +542,28 @@ module NewRelic
478
542
  :public => true,
479
543
  :type => Boolean,
480
544
  :allowed_from_server => false,
481
- :description => 'If true, the agent strips messages from all exceptions except those in the <a href="#strip_exception_messages-whitelist">whitelist</a>. Enabled automatically in <a href="https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security">high security mode</a>.'
545
+ :description => 'If true, the agent strips messages from all exceptions except those in the <a href="#strip_exception_messages-allowlist">allowlist</a>. Enabled automatically in <a href="https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security">high security mode</a>.'
482
546
  },
483
547
  :'strip_exception_messages.whitelist' => {
548
+ :default => '',
549
+ :public => true,
550
+ :type => String,
551
+ :deprecated => true,
552
+ :allowed_from_server => false,
553
+ :transform => DefaultSource.method(:convert_to_constant_list),
554
+ :description => 'Deprecated. ' \
555
+ 'For agent versions 6.8.0 or higher, ' \
556
+ 'use <a href="#strip_exception_messages.allowed_classes"><code>' \
557
+ 'strip_exception_messages.allowed_classes' \
558
+ '</code></a> instead.'
559
+ },
560
+ :'strip_exception_messages.allowed_classes' => {
484
561
  :default => '',
485
562
  :public => true,
486
563
  :type => String,
487
564
  :allowed_from_server => false,
488
565
  :transform => DefaultSource.method(:convert_to_constant_list),
489
- :description => 'Specify a whitelist of exceptions you do not want the agent to strip when <a href="#strip_exception_messages-enabled">strip_exception_messages</a> is <code>true</code>. Separate exceptions with a comma. For example, <code>"ImportantException,PreserveMessageException"</code>.'
566
+ :description => 'Specify a list of exceptions you do not want the agent to strip when <a href="#strip_exception_messages-enabled">strip_exception_messages</a> is <code>true</code>. Separate exceptions with a comma. For example, <code>"ImportantException,PreserveMessageException"</code>.'
490
567
  },
491
568
  :host => {
492
569
  :default => DefaultSource.host,
@@ -545,7 +622,7 @@ module NewRelic
545
622
  :description => 'Use HTTP PUT requests instead of POST.'
546
623
  },
547
624
  :compressed_content_encoding => {
548
- :default => 'deflate',
625
+ :default => 'gzip',
549
626
  :public => false,
550
627
  :type => String,
551
628
  :allowed_from_server => false,
@@ -618,15 +695,6 @@ module NewRelic
618
695
  :allowed_from_server => true,
619
696
  :description => 'Number of seconds betwixt connections to the New Relic span event collection services.'
620
697
  },
621
- :'data_report_periods.analytic_event_data' => {
622
- :default => 60,
623
- :public => false,
624
- :type => Integer,
625
- :deprecated => true,
626
- :dynamic_name => true,
627
- :allowed_from_server => true,
628
- :description => 'Number of seconds between connections to the New Relic data collection service for sending transaction event data.'
629
- },
630
698
  :keep_retrying => {
631
699
  :default => true,
632
700
  :public => false,
@@ -635,6 +703,18 @@ module NewRelic
635
703
  :allowed_from_server => false,
636
704
  :description => 'Enable or disable retrying failed connections to the New Relic data collection service.'
637
705
  },
706
+ :force_install_exit_handler => {
707
+ :default => false,
708
+ :public => true,
709
+ :type => Boolean,
710
+ :allowed_from_server => false,
711
+ :description => 'Forces the exit handler that sends all cached data to collector ' \
712
+ 'before shuttng down to be installed regardless of detecting scenarios where it generally should not be. ' \
713
+ 'Known use-case for this option is where Sinatra is running as an embedded service within another framework ' \
714
+ 'and the agent is detecting the Sinatra app and skipping the at_exit handler as a result. Sinatra classically ' \
715
+ 'runs the entire application in an at_exit block and would otherwise misbehave if the Agent\'s at_exit handler ' \
716
+ 'is also installed in those circumstances. Note: `send_data_on_exit` should also be set to `true` in tandem with this setting.'
717
+ },
638
718
  :force_reconnect => {
639
719
  :default => false,
640
720
  :public => false,
@@ -762,6 +842,13 @@ module NewRelic
762
842
  :allowed_from_server => false,
763
843
  :description => 'If <code>true</code>, uses Module.prepend rather than alias_method for ActiveRecord instrumentation.'
764
844
  },
845
+ :prepend_net_instrumentation => {
846
+ :default => false,
847
+ :public => true,
848
+ :type => Boolean,
849
+ :allowed_from_server => false,
850
+ :description => 'If <code>true</code>, uses Module.prepend rather than alias_method for Net::HTTP instrumentation.'
851
+ },
765
852
  :disable_data_mapper => {
766
853
  :default => false,
767
854
  :public => true,
@@ -1860,12 +1947,46 @@ module NewRelic
1860
1947
  :allowed_from_server => true,
1861
1948
  :description => 'If <code>true</code>, enables span event sampling.'
1862
1949
  },
1950
+ :'span_events.queue_size' => {
1951
+ :default => 10_000,
1952
+ :public => true,
1953
+ :type => Integer,
1954
+ :allowed_from_server => false,
1955
+ :external => :infinite_tracing,
1956
+ :description => "Sets the maximum number of span events to buffer when streaming to the trace observer."
1957
+ },
1863
1958
  :'span_events.max_samples_stored' => {
1864
1959
  :default => 1000,
1865
1960
  :public => true,
1866
1961
  :type => Integer,
1867
1962
  :allowed_from_server => true,
1868
1963
  :description => 'Defines the maximum number of span events reported from a single harvest.'
1964
+ },
1965
+ :'exclude_newrelic_header' => {
1966
+ :default => false,
1967
+ :public => true,
1968
+ :type => Boolean,
1969
+ :allowed_from_server => true,
1970
+ :description => "Allows newrelic distributed tracing headers to be suppressed on outbound requests."
1971
+ },
1972
+ :'infinite_tracing.trace_observer.host' => {
1973
+ :default => '',
1974
+ :public => true,
1975
+ :type => String,
1976
+ :allowed_from_server => false,
1977
+ :external => :infinite_tracing,
1978
+ :description => "Configures the hostname for the Trace Observer Host. " \
1979
+ "When configured, enables tail-based sampling by sending all recorded spans " \
1980
+ "to a Trace Observer for further sampling decisions, irrespective of any usual " \
1981
+ "agent sampling decision."
1982
+ },
1983
+ :'infinite_tracing.trace_observer.port' => {
1984
+ :default => 443,
1985
+ :public => true,
1986
+ :type => Integer,
1987
+ :allowed_from_server => false,
1988
+ :external => :infinite_tracing,
1989
+ :description => "Configures the TCP/IP port for the Trace Observer Host"
1869
1990
  }
1870
1991
  }.freeze
1871
1992
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/configuration/dotted_hash'
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'forwardable'
6
6
  require 'new_relic/agent/configuration/mask_defaults'
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/configuration/dotted_hash'
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/configuration/dotted_hash'
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -70,7 +70,7 @@ module NewRelic
70
70
 
71
71
  def fix_transaction_threshold(merged_settings)
72
72
  # when value is "apdex_f" remove the config and defer to default
73
- if merged_settings['transaction_tracer.transaction_threshold'] =~ /apdex_f/i
73
+ if merged_settings['transaction_tracer.transaction_threshold'].to_s =~ /apdex_f/i
74
74
  merged_settings.delete('transaction_tracer.transaction_threshold')
75
75
  end
76
76
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/configuration/dotted_hash'
6
6
 
@@ -12,6 +12,7 @@ module NewRelic
12
12
  attr_reader :generated_for_user, :license_key
13
13
 
14
14
  def initialize(path, env)
15
+ @path = path
15
16
  config = {}
16
17
  @failures = []
17
18
 
@@ -111,30 +112,34 @@ module NewRelic
111
112
 
112
113
  def substitute_transaction_threshold(config)
113
114
  if config['transaction_tracer'] &&
114
- config['transaction_tracer']['transaction_threshold'] =~ /apdex_f/i
115
+ config['transaction_tracer']['transaction_threshold'].to_s =~ /apdex_f/i
115
116
  # when value is "apdex_f" remove the config and defer to default
116
117
  config['transaction_tracer'].delete('transaction_threshold')
117
118
  end
118
119
  end
119
120
 
120
121
  def booleanify_values(config, *keys)
121
- # auto means defer ro default
122
+ # auto means defer to default
122
123
  keys.each do |option|
123
- if config[option] == 'auto'
124
+ if 'auto' == config[option]
124
125
  config.delete(option)
125
126
  elsif !config[option].nil? && !is_boolean?(config[option])
126
- config[option] = !!(config[option] =~ /yes|on|true/i)
127
+ coerced_value = !!(config[option].to_s =~ /yes|on|true/i)
128
+ if !coerced_value
129
+ log_failure "Unexpected value (#{config[option]}) for '#{option}' in #{@path}"
130
+ end
131
+ config[option] = coerced_value
127
132
  end
128
133
  end
129
134
  end
130
135
 
131
136
  def is_boolean?(value)
132
- value == !!value
137
+ !!value == value
133
138
  end
134
139
 
135
140
  def log_failure(*messages)
136
141
  ::NewRelic::Agent.logger.error(*messages)
137
- @failures << messages
142
+ messages.each { |message| @failures << message }
138
143
  end
139
144
  end
140
145
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/configuration/manager'
6
6
  require 'new_relic/agent/configuration/dotted_hash'
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/environment_report'
6
6
  require 'new_relic/agent/configuration/event_harvest_config'
@@ -11,10 +11,11 @@ module NewRelic
11
11
 
12
12
  class RequestBuilder
13
13
 
14
- def initialize(new_relic_service, config, event_harvest_config)
14
+ def initialize(new_relic_service, config, event_harvest_config, environment_report)
15
15
  @service = new_relic_service
16
16
  @config = config
17
17
  @event_harvest_config = event_harvest_config
18
+ @environment_report = sanitize_environment_report(environment_report)
18
19
  end
19
20
 
20
21
 
@@ -29,7 +30,7 @@ module NewRelic
29
30
  :language => 'ruby',
30
31
  :labels => Agent.config.parsed_labels,
31
32
  :agent_version => NewRelic::VERSION::STRING,
32
- :environment => sanitize_environment_report(environment_report),
33
+ :environment => @environment_report,
33
34
  :metadata => environment_metadata,
34
35
  :settings => Agent.config.to_collector_hash,
35
36
  :high_security => Agent.config[:high_security],
@@ -47,15 +48,6 @@ module NewRelic
47
48
  environment_report
48
49
  end
49
50
 
50
- # Checks whether we should send environment info, and if so,
51
- # returns the snapshot from the local environment.
52
- # Generating the EnvironmentReport has the potential to trigger
53
- # require calls in Rails environments, so this method should only
54
- # be called synchronously from on the main thread.
55
- def environment_report
56
- Agent.config[:send_environment_info] ? Array(EnvironmentReport.new) : []
57
- end
58
-
59
51
  def environment_metadata
60
52
  ENV.select {|k, v| k =~ /^NEW_RELIC_METADATA_/}
61
53
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
 
6
6
  module NewRelic
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/event_aggregator'
6
6
  require 'new_relic/agent/attribute_processing'
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/database/obfuscator'
6
6
  require 'new_relic/agent/database/postgres_explain_obfuscator'
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -11,7 +11,7 @@ module NewRelic
11
11
  :double_quotes => /"(?:[^"]|"")*?(?:\\".*|"(?!"))/,
12
12
  :dollar_quotes => /(\$(?!\d)[^$]*?\$).*?(?:\1|$)/,
13
13
  :uuids => /\{?(?:[0-9a-fA-F]\-*){32}\}?/,
14
- :numeric_literals => /\b-?(?:[0-9]+\.)?[0-9]+([eE][+-]?[0-9]+)?\b/,
14
+ :numeric_literals => /-?\b(?:[0-9]+\.)?[0-9]+([eE][+-]?[0-9]+)?\b/,
15
15
  :boolean_literals => /\b(?:true|false|null)\b/i,
16
16
  :hexadecimal_literals => /0x[0-9a-fA-F]+/,
17
17
  :comments => /(?:#|--).*?(?=\r|\n|$)/i,
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/database/obfuscation_helpers'
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'singleton'
6
6
  require 'new_relic/agent/database/explain_plan_helpers'
@@ -133,10 +133,9 @@ module NewRelic
133
133
  ]
134
134
 
135
135
  SQL_COMMENT_REGEX = Regexp.new('/\*.*?\*/', Regexp::MULTILINE).freeze
136
- EMPTY_STRING = ''.freeze
137
136
 
138
137
  def parse_operation_from_query(sql)
139
- sql = Helper.correctly_encoded(sql).gsub(SQL_COMMENT_REGEX, EMPTY_STRING)
138
+ sql = Helper.correctly_encoded(sql).gsub(SQL_COMMENT_REGEX, NewRelic::EMPTY_STR)
140
139
  if sql =~ /(\w+)/
141
140
  op = $1.downcase
142
141
  return op if KNOWN_OPERATIONS.include?(op)
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+
5
+ module NewRelic
6
+ module Agent
7
+ class DatabaseAdapter
8
+ VERSIONS = {
9
+ '6.1.0' => proc { ActiveRecord::Base.connection_db_config.configuration_hash[:adapter] },
10
+ '4.0.0' => proc { ActiveRecord::Base.connection_config[:adapter] },
11
+ '3.0.0' => proc { |env| ActiveRecord::Base.configurations[env]['adapter'] }
12
+ }
13
+
14
+ def self.value
15
+ return unless defined? ActiveRecord::Base
16
+ new(::NewRelic::Control.instance.env, ActiveRecord::VERSION::STRING).value
17
+ end
18
+
19
+ attr_reader :env, :version
20
+
21
+ def initialize(env, version)
22
+ @env = env
23
+ @version = Gem::Version.new(version)
24
+ end
25
+
26
+ def value
27
+ match = VERSIONS.keys.find { |key| version >= Gem::Version.new(key) }
28
+ return unless match
29
+ VERSIONS[match].call(env)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  module NewRelic
6
6
  module Agent
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
  require 'new_relic/agent/datastores/mongo/obfuscator'
5
5
 
6
6
  module NewRelic
@@ -13,7 +13,7 @@ module NewRelic
13
13
  OBFUSCATE_KEYS = [ 'filter', 'query', 'pipeline' ].freeze
14
14
 
15
15
  # Keys that will get completely removed from the statement.
16
- BLACKLISTED_KEYS = [ 'deletes', 'documents', 'updates' ].freeze
16
+ DENYLISTED_KEYS = [ 'deletes', 'documents', 'updates' ].freeze
17
17
 
18
18
  def self.format(command_name, database_name, command)
19
19
  return nil unless NewRelic::Agent.config[:'mongo.capture_queries']
@@ -25,7 +25,7 @@ module NewRelic
25
25
  }
26
26
 
27
27
  command.each do |key, value|
28
- next if BLACKLISTED_KEYS.include?(key)
28
+ next if DENYLISTED_KEYS.include?(key)
29
29
  if OBFUSCATE_KEYS.include?(key)
30
30
  obfuscated = obfuscate(value)
31
31
  result[key] = obfuscated if obfuscated
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  require 'new_relic/agent/datastores/mongo/obfuscator'
6
6
  require 'new_relic/agent/datastores/metric_helper'