newrelic_rpm 6.15.0 → 8.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (427) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -1
  3. data/.rubocop.yml +1817 -0
  4. data/.rubocop_todo.yml +59 -0
  5. data/.simplecov +15 -0
  6. data/.snyk +11 -0
  7. data/.yardopts +1 -0
  8. data/Brewfile +12 -0
  9. data/CHANGELOG.md +754 -40
  10. data/CONTRIBUTING.md +32 -5
  11. data/DOCKER.md +167 -0
  12. data/Dockerfile +10 -0
  13. data/Gemfile +0 -1
  14. data/Guardfile +9 -8
  15. data/LICENSE +0 -6
  16. data/README.md +21 -20
  17. data/Rakefile +27 -29
  18. data/THIRD_PARTY_NOTICES.md +14 -199
  19. data/Thorfile +5 -0
  20. data/bin/newrelic +3 -2
  21. data/bin/newrelic_cmd +1 -0
  22. data/bin/nrdebug +76 -53
  23. data/config.dot +5 -5
  24. data/docker-compose.yml +107 -0
  25. data/init.rb +4 -6
  26. data/install.rb +2 -2
  27. data/lefthook.yml +9 -0
  28. data/lib/new_relic/agent/adaptive_sampler.rb +13 -9
  29. data/lib/new_relic/agent/agent/shutdown.rb +35 -0
  30. data/lib/new_relic/agent/agent/special_startup.rb +72 -0
  31. data/lib/new_relic/agent/agent/start_worker_thread.rb +163 -0
  32. data/lib/new_relic/agent/agent/startup.rb +197 -0
  33. data/lib/new_relic/agent/agent.rb +178 -555
  34. data/lib/new_relic/agent/agent_logger.rb +23 -19
  35. data/lib/new_relic/agent/attribute_filter.rb +66 -47
  36. data/lib/new_relic/agent/attribute_processing.rb +7 -7
  37. data/lib/new_relic/agent/attributes.rb +5 -4
  38. data/lib/new_relic/agent/audit_logger.rb +8 -3
  39. data/lib/new_relic/agent/autostart.rb +20 -19
  40. data/lib/new_relic/agent/chained_call.rb +1 -1
  41. data/lib/new_relic/agent/commands/agent_command.rb +3 -3
  42. data/lib/new_relic/agent/commands/agent_command_router.rb +12 -11
  43. data/lib/new_relic/agent/commands/thread_profiler_session.rb +9 -7
  44. data/lib/new_relic/agent/configuration/default_source.rb +1728 -1194
  45. data/lib/new_relic/agent/configuration/dotted_hash.rb +6 -5
  46. data/lib/new_relic/agent/configuration/environment_source.rb +11 -9
  47. data/lib/new_relic/agent/configuration/event_harvest_config.rb +40 -17
  48. data/lib/new_relic/agent/configuration/high_security_source.rb +9 -8
  49. data/lib/new_relic/agent/configuration/manager.rb +82 -69
  50. data/lib/new_relic/agent/configuration/manual_source.rb +1 -1
  51. data/lib/new_relic/agent/configuration/mask_defaults.rb +3 -3
  52. data/lib/new_relic/agent/configuration/security_policy_source.rb +90 -77
  53. data/lib/new_relic/agent/configuration/server_source.rb +21 -19
  54. data/lib/new_relic/agent/configuration/yaml_source.rb +31 -7
  55. data/lib/new_relic/agent/configuration.rb +1 -1
  56. data/lib/new_relic/agent/connect/request_builder.rb +18 -18
  57. data/lib/new_relic/agent/connect/response_handler.rb +5 -8
  58. data/lib/new_relic/agent/custom_event_aggregator.rb +14 -14
  59. data/lib/new_relic/agent/database/explain_plan_helpers.rb +4 -5
  60. data/lib/new_relic/agent/database/obfuscation_helpers.rb +14 -13
  61. data/lib/new_relic/agent/database/obfuscator.rb +2 -2
  62. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +3 -3
  63. data/lib/new_relic/agent/database.rb +53 -47
  64. data/lib/new_relic/agent/database_adapter.rb +3 -1
  65. data/lib/new_relic/agent/datastores/metric_helper.rb +17 -18
  66. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +7 -6
  67. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +6 -10
  68. data/lib/new_relic/agent/datastores/mongo.rb +6 -11
  69. data/lib/new_relic/agent/datastores/nosql_obfuscator.rb +41 -0
  70. data/lib/new_relic/agent/datastores/redis.rb +5 -11
  71. data/lib/new_relic/agent/datastores.rb +11 -13
  72. data/lib/new_relic/agent/deprecator.rb +1 -1
  73. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +10 -10
  74. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +39 -32
  75. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +22 -22
  76. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +19 -19
  77. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +50 -52
  78. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +5 -6
  79. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +76 -77
  80. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +39 -38
  81. data/lib/new_relic/agent/distributed_tracing.rb +32 -100
  82. data/lib/new_relic/agent/encoding_normalizer.rb +4 -2
  83. data/lib/new_relic/agent/error_collector.rb +73 -54
  84. data/lib/new_relic/agent/error_event_aggregator.rb +4 -5
  85. data/lib/new_relic/agent/error_filter.rb +174 -0
  86. data/lib/new_relic/agent/error_trace_aggregator.rb +4 -3
  87. data/lib/new_relic/agent/event_aggregator.rb +22 -21
  88. data/lib/new_relic/agent/event_buffer.rb +7 -8
  89. data/lib/new_relic/agent/event_listener.rb +1 -2
  90. data/lib/new_relic/agent/event_loop.rb +25 -23
  91. data/lib/new_relic/agent/external.rb +11 -44
  92. data/lib/new_relic/agent/guid_generator.rb +4 -11
  93. data/lib/new_relic/agent/harvester.rb +4 -5
  94. data/lib/new_relic/agent/heap.rb +6 -8
  95. data/lib/new_relic/agent/hostname.rb +20 -13
  96. data/lib/new_relic/agent/http_clients/abstract.rb +10 -11
  97. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +6 -11
  98. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +8 -9
  99. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +4 -5
  100. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +2 -4
  101. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +8 -4
  102. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +4 -5
  103. data/lib/new_relic/agent/http_clients/uri_util.rb +1 -3
  104. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +8 -8
  105. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +38 -31
  106. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +12 -13
  107. data/lib/new_relic/agent/instrumentation/active_job.rb +14 -7
  108. data/lib/new_relic/agent/instrumentation/active_merchant.rb +20 -6
  109. data/lib/new_relic/agent/instrumentation/active_record.rb +29 -27
  110. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +71 -61
  111. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +31 -44
  112. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +4 -4
  113. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +27 -20
  114. data/lib/new_relic/agent/instrumentation/active_storage.rb +2 -2
  115. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +18 -15
  116. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +23 -0
  117. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +20 -0
  118. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +12 -0
  119. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +24 -0
  120. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +18 -10
  121. data/lib/new_relic/agent/instrumentation/authlogic.rb +10 -2
  122. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +45 -0
  123. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +150 -0
  124. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +35 -0
  125. data/lib/new_relic/agent/instrumentation/bunny.rb +11 -154
  126. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +68 -58
  127. data/lib/new_relic/agent/instrumentation/curb/chain.rb +91 -0
  128. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +221 -0
  129. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +61 -0
  130. data/lib/new_relic/agent/instrumentation/curb.rb +11 -243
  131. data/lib/new_relic/agent/instrumentation/data_mapper.rb +65 -54
  132. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +35 -0
  133. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +48 -0
  134. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +33 -0
  135. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +29 -53
  136. data/lib/new_relic/agent/instrumentation/elasticsearch/chain.rb +29 -0
  137. data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +66 -0
  138. data/lib/new_relic/agent/instrumentation/elasticsearch/prepend.rb +13 -0
  139. data/lib/new_relic/agent/instrumentation/elasticsearch.rb +31 -0
  140. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +5 -5
  141. data/lib/new_relic/agent/instrumentation/excon.rb +22 -24
  142. data/lib/new_relic/agent/instrumentation/grape/chain.rb +24 -0
  143. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +100 -0
  144. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +17 -0
  145. data/lib/new_relic/agent/instrumentation/grape.rb +11 -112
  146. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +97 -0
  147. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +89 -0
  148. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +111 -0
  149. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +30 -0
  150. data/lib/new_relic/agent/instrumentation/grpc/helper.rb +32 -0
  151. data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +69 -0
  152. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +134 -0
  153. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +35 -0
  154. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +26 -0
  155. data/lib/new_relic/agent/instrumentation/grpc_client.rb +23 -0
  156. data/lib/new_relic/agent/instrumentation/grpc_server.rb +25 -0
  157. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +24 -0
  158. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +37 -0
  159. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +15 -0
  160. data/lib/new_relic/agent/instrumentation/httpclient.rb +10 -32
  161. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +22 -0
  162. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +30 -0
  163. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +15 -0
  164. data/lib/new_relic/agent/instrumentation/httprb.rb +29 -0
  165. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +4 -5
  166. data/lib/new_relic/agent/instrumentation/logger/chain.rb +21 -0
  167. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +66 -0
  168. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +13 -0
  169. data/lib/new_relic/agent/instrumentation/logger.rb +26 -0
  170. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +15 -0
  171. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +57 -128
  172. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +59 -0
  173. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +90 -0
  174. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +101 -0
  175. data/lib/new_relic/agent/instrumentation/memcache.rb +56 -72
  176. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +13 -12
  177. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +5 -7
  178. data/lib/new_relic/agent/instrumentation/mongo.rb +5 -136
  179. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +21 -18
  180. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +24 -0
  181. data/lib/new_relic/agent/instrumentation/{net_prepend.rb → net_http/instrumentation.rb} +13 -13
  182. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +21 -0
  183. data/lib/new_relic/agent/instrumentation/net_http.rb +44 -0
  184. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +10 -9
  185. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +38 -0
  186. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +28 -0
  187. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +20 -0
  188. data/lib/new_relic/agent/instrumentation/padrino.rb +20 -58
  189. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +3 -3
  190. data/lib/new_relic/agent/instrumentation/queue_time.rb +8 -9
  191. data/lib/new_relic/agent/instrumentation/rack/chain.rb +66 -0
  192. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +33 -0
  193. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +75 -0
  194. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +43 -0
  195. data/lib/new_relic/agent/instrumentation/rack.rb +30 -140
  196. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +16 -52
  197. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -1
  198. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +5 -4
  199. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +3 -3
  200. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +3 -2
  201. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +13 -3
  202. data/lib/new_relic/agent/instrumentation/rake/chain.rb +20 -0
  203. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +149 -0
  204. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +14 -0
  205. data/lib/new_relic/agent/instrumentation/rake.rb +16 -157
  206. data/lib/new_relic/agent/instrumentation/redis/chain.rb +45 -0
  207. data/lib/new_relic/agent/instrumentation/redis/constants.rb +17 -0
  208. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +72 -0
  209. data/lib/new_relic/agent/instrumentation/redis/middleware.rb +16 -0
  210. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +29 -0
  211. data/lib/new_relic/agent/instrumentation/redis.rb +18 -107
  212. data/lib/new_relic/agent/instrumentation/resque/chain.rb +21 -0
  213. data/lib/new_relic/agent/instrumentation/resque/helper.rb +19 -0
  214. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +34 -0
  215. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +15 -0
  216. data/lib/new_relic/agent/instrumentation/resque.rb +28 -39
  217. data/lib/new_relic/agent/instrumentation/sequel.rb +14 -16
  218. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +2 -2
  219. data/lib/new_relic/agent/instrumentation/sidekiq/client.rb +20 -0
  220. data/lib/new_relic/agent/instrumentation/sidekiq/extensions/delayed_class.rb +30 -0
  221. data/lib/new_relic/agent/instrumentation/sidekiq/server.rb +37 -0
  222. data/lib/new_relic/agent/instrumentation/sidekiq.rb +23 -64
  223. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +55 -0
  224. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +30 -36
  225. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +125 -0
  226. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +33 -0
  227. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +2 -2
  228. data/lib/new_relic/agent/instrumentation/sinatra.rb +34 -163
  229. data/lib/new_relic/agent/instrumentation/sunspot.rb +11 -3
  230. data/lib/new_relic/agent/instrumentation/thread/chain.rb +24 -0
  231. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +28 -0
  232. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +22 -0
  233. data/lib/new_relic/agent/instrumentation/thread.rb +20 -0
  234. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +24 -0
  235. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +41 -0
  236. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +13 -0
  237. data/lib/new_relic/agent/instrumentation/tilt.rb +25 -0
  238. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +22 -0
  239. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +80 -0
  240. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +14 -0
  241. data/lib/new_relic/agent/instrumentation/typhoeus.rb +12 -91
  242. data/lib/new_relic/agent/instrumentation.rb +1 -1
  243. data/lib/new_relic/agent/internal_agent_error.rb +2 -2
  244. data/lib/new_relic/agent/javascript_instrumentor.rb +47 -41
  245. data/lib/new_relic/agent/linking_metadata.rb +44 -0
  246. data/lib/new_relic/agent/local_log_decorator.rb +37 -0
  247. data/lib/new_relic/agent/log_event_aggregator.rb +235 -0
  248. data/lib/new_relic/agent/log_once.rb +1 -1
  249. data/lib/new_relic/agent/log_priority.rb +20 -0
  250. data/lib/new_relic/agent/logging.rb +24 -21
  251. data/lib/new_relic/agent/memory_logger.rb +2 -2
  252. data/lib/new_relic/agent/messaging.rb +65 -81
  253. data/lib/new_relic/agent/method_tracer.rb +154 -149
  254. data/lib/new_relic/agent/method_tracer_helpers.rb +85 -3
  255. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +25 -17
  256. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +5 -4
  257. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -2
  258. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +6 -9
  259. data/lib/new_relic/agent/monitors.rb +6 -7
  260. data/lib/new_relic/agent/new_relic_service/encoders.rb +6 -6
  261. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +5 -5
  262. data/lib/new_relic/agent/new_relic_service/marshaller.rb +2 -2
  263. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +5 -4
  264. data/lib/new_relic/agent/new_relic_service.rb +248 -196
  265. data/lib/new_relic/agent/{noticible_error.rb → noticeable_error.rb} +2 -5
  266. data/lib/new_relic/agent/null_logger.rb +7 -3
  267. data/lib/new_relic/agent/obfuscator.rb +8 -10
  268. data/lib/new_relic/agent/parameter_filtering.rb +24 -10
  269. data/lib/new_relic/agent/payload_metric_mapping.rb +9 -10
  270. data/lib/new_relic/agent/pipe_channel_manager.rb +27 -17
  271. data/lib/new_relic/agent/pipe_service.rb +8 -5
  272. data/lib/new_relic/agent/prepend_supportability.rb +2 -2
  273. data/lib/new_relic/agent/priority_sampled_buffer.rb +8 -11
  274. data/lib/new_relic/agent/range_extensions.rb +8 -28
  275. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +11 -11
  276. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +13 -13
  277. data/lib/new_relic/agent/rules_engine.rb +5 -4
  278. data/lib/new_relic/agent/sampler.rb +3 -4
  279. data/lib/new_relic/agent/sampler_collection.rb +3 -4
  280. data/lib/new_relic/agent/samplers/cpu_sampler.rb +3 -2
  281. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +12 -9
  282. data/lib/new_relic/agent/samplers/memory_sampler.rb +24 -13
  283. data/lib/new_relic/agent/samplers/object_sampler.rb +1 -1
  284. data/lib/new_relic/agent/samplers/vm_sampler.rb +21 -19
  285. data/lib/new_relic/agent/span_event_aggregator.rb +12 -12
  286. data/lib/new_relic/agent/span_event_primitive.rb +62 -56
  287. data/lib/new_relic/agent/sql_sampler.rb +18 -18
  288. data/lib/new_relic/agent/stats.rb +78 -41
  289. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +9 -11
  290. data/lib/new_relic/agent/stats_engine/stats_hash.rb +12 -13
  291. data/lib/new_relic/agent/stats_engine.rb +8 -8
  292. data/lib/new_relic/agent/synthetics_event_aggregator.rb +7 -8
  293. data/lib/new_relic/agent/system_info.rb +85 -65
  294. data/lib/new_relic/agent/threading/agent_thread.rb +18 -14
  295. data/lib/new_relic/agent/threading/backtrace_node.rb +12 -13
  296. data/lib/new_relic/agent/threading/backtrace_service.rb +14 -14
  297. data/lib/new_relic/agent/threading/thread_profile.rb +23 -23
  298. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -1
  299. data/lib/new_relic/agent/tracer.rb +76 -85
  300. data/lib/new_relic/agent/transaction/abstract_segment.rb +103 -40
  301. data/lib/new_relic/agent/transaction/datastore_segment.rb +21 -17
  302. data/lib/new_relic/agent/transaction/distributed_tracer.rb +63 -56
  303. data/lib/new_relic/agent/transaction/distributed_tracing.rb +43 -44
  304. data/lib/new_relic/agent/transaction/external_request_segment.rb +44 -34
  305. data/lib/new_relic/agent/transaction/message_broker_segment.rb +31 -36
  306. data/lib/new_relic/agent/transaction/request_attributes.rb +35 -35
  307. data/lib/new_relic/agent/transaction/segment.rb +14 -10
  308. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -3
  309. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -1
  310. data/lib/new_relic/agent/transaction/trace.rb +15 -11
  311. data/lib/new_relic/agent/transaction/trace_builder.rb +10 -10
  312. data/lib/new_relic/agent/transaction/trace_context.rb +35 -35
  313. data/lib/new_relic/agent/transaction/trace_node.rb +25 -24
  314. data/lib/new_relic/agent/transaction/tracing.rb +14 -11
  315. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +4 -4
  316. data/lib/new_relic/agent/transaction.rb +164 -145
  317. data/lib/new_relic/agent/transaction_error_primitive.rb +27 -25
  318. data/lib/new_relic/agent/transaction_event_aggregator.rb +12 -12
  319. data/lib/new_relic/agent/transaction_event_primitive.rb +32 -33
  320. data/lib/new_relic/agent/transaction_event_recorder.rb +16 -15
  321. data/lib/new_relic/agent/transaction_metrics.rb +10 -9
  322. data/lib/new_relic/agent/transaction_sampler.rb +5 -6
  323. data/lib/new_relic/agent/transaction_time_aggregator.rb +26 -25
  324. data/lib/new_relic/agent/utilization/aws.rb +33 -3
  325. data/lib/new_relic/agent/utilization/azure.rb +3 -3
  326. data/lib/new_relic/agent/utilization/gcp.rb +7 -7
  327. data/lib/new_relic/agent/utilization/pcf.rb +5 -4
  328. data/lib/new_relic/agent/utilization/vendor.rb +43 -28
  329. data/lib/new_relic/agent/utilization_data.rb +7 -5
  330. data/lib/new_relic/agent/vm/jruby_vm.rb +1 -1
  331. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +2 -2
  332. data/lib/new_relic/agent/vm/mri_vm.rb +40 -15
  333. data/lib/new_relic/agent/vm/snapshot.rb +5 -5
  334. data/lib/new_relic/agent/vm.rb +1 -1
  335. data/lib/new_relic/agent/worker_loop.rb +10 -12
  336. data/lib/new_relic/agent.rb +64 -75
  337. data/lib/new_relic/cli/command.rb +20 -22
  338. data/lib/new_relic/cli/commands/deployments.rb +92 -42
  339. data/lib/new_relic/cli/commands/install.rb +12 -15
  340. data/lib/new_relic/coerce.rb +15 -13
  341. data/lib/new_relic/collection_helper.rb +50 -48
  342. data/lib/new_relic/constants.rb +1 -4
  343. data/lib/new_relic/control/class_methods.rb +3 -3
  344. data/lib/new_relic/control/frameworks/external.rb +2 -2
  345. data/lib/new_relic/control/frameworks/rails.rb +23 -17
  346. data/lib/new_relic/control/frameworks/rails3.rb +3 -4
  347. data/lib/new_relic/control/frameworks/rails4.rb +1 -1
  348. data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -1
  349. data/lib/new_relic/control/frameworks/ruby.rb +3 -3
  350. data/lib/new_relic/control/frameworks/sinatra.rb +7 -1
  351. data/lib/new_relic/control/frameworks.rb +1 -1
  352. data/lib/new_relic/control/instance_methods.rb +23 -45
  353. data/lib/new_relic/control/instrumentation.rb +39 -11
  354. data/lib/new_relic/control/private_instance_methods.rb +48 -0
  355. data/lib/new_relic/control/server_methods.rb +3 -4
  356. data/lib/new_relic/control.rb +1 -2
  357. data/lib/new_relic/delayed_job_injection.rb +1 -1
  358. data/lib/new_relic/dependency_detection.rb +126 -19
  359. data/lib/new_relic/environment_report.rb +40 -32
  360. data/lib/new_relic/helper.rb +48 -7
  361. data/lib/new_relic/language_support.rb +29 -5
  362. data/lib/new_relic/latest_changes.rb +7 -6
  363. data/lib/new_relic/local_environment.rb +24 -18
  364. data/lib/new_relic/metric_data.rb +31 -26
  365. data/lib/new_relic/metric_spec.rb +8 -6
  366. data/lib/new_relic/noticed_error.rb +22 -30
  367. data/lib/new_relic/rack/agent_hooks.rb +1 -1
  368. data/lib/new_relic/rack/agent_middleware.rb +5 -3
  369. data/lib/new_relic/rack/browser_monitoring.rb +133 -123
  370. data/lib/new_relic/rack.rb +1 -1
  371. data/lib/new_relic/recipes/capistrano3.rb +3 -61
  372. data/lib/new_relic/recipes/capistrano_legacy.rb +23 -26
  373. data/lib/new_relic/recipes/helpers/send_deployment.rb +69 -0
  374. data/lib/new_relic/recipes.rb +1 -1
  375. data/lib/new_relic/supportability_helper.rb +9 -10
  376. data/lib/new_relic/traced_thread.rb +35 -0
  377. data/lib/new_relic/version.rb +6 -17
  378. data/lib/newrelic_rpm.rb +11 -35
  379. data/lib/sequel/extensions/newrelic_instrumentation.rb +12 -15
  380. data/lib/sequel/plugins/newrelic_instrumentation.rb +4 -10
  381. data/lib/tasks/all.rb +3 -3
  382. data/lib/tasks/config.rake +22 -117
  383. data/lib/tasks/coverage_report.rake +28 -0
  384. data/lib/tasks/helpers/config.html.erb +21 -0
  385. data/lib/tasks/{config.text.erb → helpers/config.text.erb} +0 -0
  386. data/lib/tasks/helpers/format.rb +123 -0
  387. data/lib/tasks/helpers/matches.rb +12 -0
  388. data/lib/tasks/helpers/prompt.rb +24 -0
  389. data/lib/tasks/helpers/removers.rb +33 -0
  390. data/lib/tasks/install.rake +4 -0
  391. data/lib/tasks/instrumentation_generator/README.md +63 -0
  392. data/lib/tasks/instrumentation_generator/TODO.md +33 -0
  393. data/lib/tasks/instrumentation_generator/instrumentation.thor +124 -0
  394. data/lib/tasks/instrumentation_generator/templates/Envfile.tt +9 -0
  395. data/lib/tasks/instrumentation_generator/templates/chain.tt +22 -0
  396. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +8 -0
  397. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +29 -0
  398. data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +13 -0
  399. data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +3 -0
  400. data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +19 -0
  401. data/lib/tasks/instrumentation_generator/templates/prepend.tt +13 -0
  402. data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +3 -0
  403. data/lib/tasks/instrumentation_generator/templates/test.tt +15 -0
  404. data/lib/tasks/multiverse.rake +4 -0
  405. data/lib/tasks/multiverse.rb +5 -32
  406. data/lib/tasks/newrelic.rb +1 -1
  407. data/lib/tasks/tests.rake +10 -15
  408. data/newrelic.yml +648 -3
  409. data/newrelic_rpm.gemspec +25 -25
  410. data/recipes/newrelic.rb +2 -2
  411. data/test/agent_helper.rb +219 -178
  412. metadata +164 -122
  413. data/ROADMAP.md +0 -24
  414. data/bin/mongrel_rpm +0 -33
  415. data/cert/cacert.pem +0 -1177
  416. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +0 -44
  417. data/lib/new_relic/agent/datastores/mongo/statement_formatter.rb +0 -53
  418. data/lib/new_relic/agent/instrumentation/excon/connection.rb +0 -49
  419. data/lib/new_relic/agent/instrumentation/http.rb +0 -49
  420. data/lib/new_relic/agent/instrumentation/merb/controller.rb +0 -44
  421. data/lib/new_relic/agent/instrumentation/merb/errors.rb +0 -33
  422. data/lib/new_relic/agent/instrumentation/net.rb +0 -70
  423. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +0 -125
  424. data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +0 -46
  425. data/lib/new_relic/agent/supported_versions.rb +0 -275
  426. data/lib/new_relic/control/frameworks/merb.rb +0 -29
  427. data/lib/tasks/config.html.erb +0 -32
data/CHANGELOG.md CHANGED
@@ -1,9 +1,723 @@
1
1
  # New Relic Ruby Agent Release Notes #
2
2
 
3
+ ## v8.13.1
4
+
5
+ Version 8.13.1 of the agent provides a bugfix for Redis v5.0 instrumentation.
6
+
7
+ * **Fix NoMethodError when using Sidekiq v7.0 with Redis Client v0.11**
8
+
9
+ In some cases, the `RedisClient` object cannot directly access methods like db, port, or path. These methods are always available on the `client.config` object. This raised a `NoMethodError` in environments that used Sidekiq v7.0 and [Redis Client](https://rubygems.org/gems/redis-client) v0.11. Thank you to [fcheung](https://github.com/fcheung) and [@stevenou](https://github.com/stevenou) for bringing this to our attention! [Issue#1639](https://github.com/newrelic/newrelic-ruby-agent/issues/1639)
10
+
11
+
12
+ ## v8.13.0
13
+
14
+ Version 8.13.0 of the agent updates our Rack, Redis, and Sidekiq instrumentation. It also delivers some bugfixes.
15
+
16
+ * **Support for Redis v5.0**
17
+
18
+ Redis v5.0 restructures where some of our instrumented methods are located and how they are named. It also introduces a new [instrumentation middleware API](https://github.com/redis-rb/redis-client#instrumentation-and-middlewares). This API is used for pipelined and multi calls to maintain reporting parity with previous Redis versions. However, it is introduced later in the chain, so you may see errors that used to appear at the segment level on the transaction instead. The agent's behavior when used with older supported Redis versions will remain unaffected. [PR#1611](https://github.com/newrelic/newrelic-ruby-agent/pull/1611)
19
+
20
+ * **Support for Sidekiq v7.0**
21
+
22
+ Sidekiq v7.0 removed Delayed Extensions and began offering client and server [middleware](https://github.com/mperham/sidekiq/blob/main/docs/middleware.md) classes to inherit from. The agent's Sidekiq instrumentation has been updated accordingly. The agent's behavior when used with older Sidekiq versions will remain unaffected. [PR#1615](https://github.com/newrelic/newrelic-ruby-agent/pull/1615) **NOTE:** an issue was discovered with Sidekiq v7.0+ and addressed by Ruby agent v8.13.1. If you are using Sidekiq, please skip Ruby agent v8.13.0 and use v8.13.1 or above.
23
+
24
+ * **Support for Rack v3.0: Rack::Builder#new accepting a block**
25
+
26
+ Via [rack/rack#1942](https://github.com/rack/rack/pull/1942) (released with Rack v3.0), `Rack::Builder#run` now optionally accepts a block instead of an app argument. The agent's instrumentation has been updated to support the use of a block with `Rack::Builder#run`. [PR#1600](https://github.com/newrelic/newrelic-ruby-agent/pull/1600)
27
+
28
+ * **Bugfix: Correctly identify Unicorn, Rainbows and FastCGI with Rack v3.0**
29
+
30
+ Unicorn, Rainbows, or FastCGI web applications using Rack v3.0 may previously have had the "dispatcher" value incorrectly reported as "Webrick" instead of "Unicorn", "Rainbows", or "FastCGI". This issue has now been addressed. [PR#1585](https://github.com/newrelic/newrelic-ruby-agent/pull/1585)
31
+
32
+ * **Bugfix: add_method_tracer fails to record code level metric attributes on private methods**
33
+
34
+ When using `add_method_tracer` on a private method, the agent was unable to record code level metrics for the method. This resulted in the following being logged to the newrelic_agent.log file.
35
+ ```
36
+ WARN : Unable to determine source code info for 'Example', method 'private_method' - NameError: undefined method 'private_method' for class '#<Class:Example>'
37
+ ```
38
+ Thank you [@jdelStrother](https://github.com/jdelStrother) for bringing this issue to our attention and suggesting a fix! [PR#1593](https://github.com/newrelic/newrelic-ruby-agent/pull/1593)
39
+
40
+
41
+ * **Bugfix: Category is a required keyword arg for NewRelic::Agent::Tracer.in_transaction**
42
+
43
+ When support for Ruby 2.0 was dropped in version 8.0.0 of the agent, the agent API methods were updated to use the required keyword argument feature built into Ruby, rather than manually raising ArgumentErrors. The API method `NewRelic::Agent::Tracer.in_transaction` removed the ArgumentError raised by the agent, but did not update the method arguments to identify `:category` as a required keyword argument. This is now resolved. Thank you [@tatzsuzuki](https://github.com/tatzsuzuki) for bringing this to our attention. [PR#1587](https://github.com/newrelic/newrelic-ruby-agent/pull/1587)
44
+
45
+ ## v8.12.0
46
+
47
+ Version 8.12.0 of the agent delivers new Elasticsearch instrumentation, increases the default number of recorded Custom Events, announces the deprecation of Ruby 2.3, and brings some valuable code cleanup.
48
+
49
+ * **Support for Elasticsearch instrumentation**
50
+
51
+ This release adds support to automatically instrument the [elasticsearch](https://rubygems.org/gems/elasticsearch) gem. Versions 7.x and 8.x are supported. [PR#1525](https://github.com/newrelic/newrelic-ruby-agent/pull/1525)
52
+
53
+ | Configuration name | Default | Behavior |
54
+ | ----------- | ----------- |----------- |
55
+ | `instrumentation.elasticsearch` | auto | Controls auto-instrumentation of the elasticsearch library at start up. May be one of `auto`, `prepend`, `chain`, `disabled`. |
56
+ | `elasticsearch.capture_queries` | true | If `true`, the agent captures Elasticsearch queries in transaction traces. |
57
+ | `elasticsearch.obfuscate_queries` | true | If `true`, the agent obfuscates Elasticsearch queries in transaction traces. |
58
+
59
+ * **Custom Event Limit Increase**
60
+
61
+ This version increases the default limit of custom events from 1000 events per minute to 3000 events per minute. In the scenario that custom events were being limited, this change will allow more custom events to be sent to New Relic. There is also a new configurable maximum limit of 100,000 events per minute. To change the limits, see the documentation for [max_samples_stored](https://docs.newrelic.com/docs/apm/agents/ruby-agent/configuration/ruby-agent-configuration/#custom_insights_events-max_samples_stored). To learn more about the change and how to determine if custom events are being dropped, see our Explorers Hub [post](https://discuss.newrelic.com/t/send-more-custom-events-with-the-latest-apm-agents/190497). [PR#1541](https://github.com/newrelic/newrelic-ruby-agent/pull/1541)
62
+
63
+ * **Deprecate support for Ruby 2.3**
64
+
65
+ Ruby 2.3 reached end of life on March 31, 2019. The Ruby agent has deprecated support for Ruby 2.3 and will make breaking changes for this version in its next major release, v9.0.0 (release date not yet planned). All 8.x.x versions of the agent will remain compatible with Ruby 2.3.
66
+
67
+ * **Cleanup: Remove orphaned code**
68
+
69
+ In both the agent and unit tests, changes have taken place over the years that have left certain bits of code unreachable. This orphaned code can complicate code maintenance and refactoring, so getting it squared away can be very helpful. Commmuniy member [@ohbarye](https://github.com/ohbarye) contributed two separate cleanup PRs for this release; one for the agent and one for the tests. [PR#1537](https://github.com/newrelic/newrelic-ruby-agent/pull/1537) [PR#1548](https://github.com/newrelic/newrelic-ruby-agent/pull/1548)
70
+
71
+ Thank you to [@ohbarye](https://github.com/ohbarye) for contributing this helpful cleanup!
72
+
73
+
74
+ ## v8.11.0
75
+
76
+ Version 8.11.0 of the agent updates the `newrelic deployments` command to work with API keys issued to newer accounts, fixes a memory leak in the instrumentation of Curb error handling, further preps for Ruby 3.2.0 support, and includes several community member driven cleanup and improvement efforts. Thank you to everyone involved!
77
+
78
+
79
+ * **Added support for New Relic REST API v2 when using `newrelic deployments` command**
80
+
81
+ Previously, the `newrelic deployments` command only supported the older version of the deployments api, which does not currently support newer license keys. Now you can use the New Relic REST API v2 to record deployments by providing your user API key to the agent configuration using `api_key`. When this configuration option is present, the `newrelic deployments` command will automatically use the New Relic REST API v2 deployment endpoint. [PR#1461](https://github.com/newrelic/newrelic-ruby-agent/pull/1461)
82
+
83
+ Thank you to [@Arkham](https://github.com/Arkham) for bringing this to our attention!
84
+
85
+
86
+ * **Cleanup: Performance tests, constants, rubocop-minitest assertions and refutations**
87
+
88
+ Community member [@esquith](https://github.com/esquith) contributed a whole slew of cleanup successes for our performance test configuration, orphaned constants in our code base, and RuboCop related improvements. [PR#1406](https://github.com/newrelic/newrelic-ruby-agent/pull/1406) [PR#1408](https://github.com/newrelic/newrelic-ruby-agent/pull/1408) [PR#1409](https://github.com/newrelic/newrelic-ruby-agent/pull/1409) [PR#1411](https://github.com/newrelic/newrelic-ruby-agent/pull/1411)
89
+
90
+ Thank you [@esquith](https://github.com/esquith) for these great contributions!
91
+
92
+
93
+ * **CI: Notify on a change from failure to success**
94
+
95
+ A super handy, much beloved feature of certain CI and build systems is to not only notify when builds start to fail, but also to notify again when the builds once again start to go green. Community member [@luigieai](https://github.com/luigieai) was able to figure out how to configure our existing complex, multiple-3rd-party-action based GitHub Actions pipeline to notify on a switch back to success from failure. [PR#1519](https://github.com/newrelic/newrelic-ruby-agent/pull/1519)
96
+
97
+ This is much appreciated! Thank you, [@luigieai](https://github.com/luigieai).
98
+
99
+
100
+ * **Spelling corrections**
101
+
102
+ Community member [@jsoref](https://github.com/jsoref), author of the [Check Spelling](https://github.com/marketplace/actions/check-spelling) GitHub Action, contributed a significant number of spelling corrections throughout the code base. The intelligent issues that were flagged made for a more comprehensive review than a simple dictionary based check would have been able to provide, and the changes are much appreciated. [PR#1508](https://github.com/newrelic/newrelic-ruby-agent/pull/1508)
103
+
104
+ Thank you very much, [@jsoref](https://github.com/jsoref)!
105
+
106
+
107
+ * **Ruby 3.2.0-preview2 compatibility**
108
+
109
+ Ruby 3.2.0-preview1 introduced a change to the way that Ruby reports VM stats and the approach was changed yet again to a 3rd approach with the preview2 release. New Relic reports on Ruby VM stats and is keeping track of the Ruby 3.2 development process to help ensure our customers with a smooth and worthwhile upgrade process once Ruby 3.2.0 (non-preview) is released. [PR#1436](https://github.com/newrelic/newrelic-ruby-agent/pull/1436)
110
+
111
+
112
+ * **Bugfix: Fix memory leak in the Curb instrumentation**
113
+
114
+ Community member [@charkost](https://github.com/charkost) was able to rework the `on_failure` callback logic prepped via the agent's Curb instrumentation in order to avoid some nesting that was causing memory leaks. [PR#1518](https://github.com/newrelic/newrelic-ruby-agent/pull/1518)
115
+
116
+ Many thanks for both the heads up on the issue and the fix, [@charkost](https://github.com/charkost)!
117
+
118
+
119
+ ## v8.10.1
120
+
121
+
122
+ * **Bugfix: Missing unscoped metrics when instrumentation.thread.tracing is enabled**
123
+
124
+ Previously, when `instrumentation.thread.tracing` was set to true, some puma applications encountered a bug where a varying number of unscoped metrics would be missing. The agent now will correctly store and send all unscoped metrics.
125
+
126
+ Thank you to @texpert for providing details of their situation to help resolve the issue.
127
+
128
+
129
+ * **Bugfix: gRPC instrumentation causes ArgumentError when other Google gems are present**
130
+
131
+ Previously, when the agent had gRPC instrumentation enabled in an application using other gems (such as google-ads-googleads), the instrumentation could cause the error `ArgumentError: wrong number of arguments (given 3, expected 2)`. The gRPC instrumentation has been updated to prevent this issue from occurring in the future.
132
+
133
+ Thank you to @FeminismIsAwesome for bringing this issue to our attention.
134
+
135
+
136
+ ## v8.10.0
137
+
138
+
139
+ * **New gRPC instrumentation**
140
+
141
+ The agent will now instrument [gRPC](https://grpc.io/) activity performed by clients and servers that use the [grpc](https://rubygems.org/gems/grpc) RubyGem. Instrumentation is automatic and enabled by default, so gRPC users should not need to modify any existing application code or agent configuration to benefit from the instrumentation. The instrumentation makes use of distributed tracing for a comprehensive overview of all gRPC traffic taking place across multiple monitored applications. This allows you to observe your client and server activity using any service that adheres to the W3C standard.
142
+
143
+ The following new configuration parameters have been added for gRPC. All are optional.
144
+
145
+ | Configuration name | Default | Behavior |
146
+ | ----------- | ----------- |----------- |
147
+ | `instrumentation.grpc_client` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
148
+ | `instrumentation.grpc_server` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
149
+ | `instrumentation.grpc.host_denylist` | "" | Provide a comma delimited list of host regex patterns (ex: "private.com$,exception.*") |
150
+
151
+
152
+ * **Code-level metrics functionality is enabled by default**
153
+
154
+ The code-level metrics functionality for the Ruby agent's [CodeStream integration](https://docs.newrelic.com/docs/apm/agents/ruby-agent/features/ruby-codestream-integration) is now enabled by default after we have received positive feedback and no open bugs for the past two releases.
155
+
156
+
157
+ * **Performance: Rework timing range overlap calculations for multiple transaction segments**
158
+
159
+ Many thanks to GitHub community members @bmulholland and @hkdnet. @bmulholland alerted us to [rmosolgo/graphql-ruby#3945](https://github.com/rmosolgo/graphql-ruby/issues/3945). That Issue essentially notes that the New Relic Ruby agent incurs a significant performance hit when the `graphql` RubyGem (which ships with New Relic Ruby agent support) is used with DataLoader to generate a high number of transactions. Then @hkdnet diagnosed the root cause in the Ruby agent and put together both a proof of concept fix and a full blown PR to resolve the problem. The agent keeps track multiple segments that are concurrently in play for a given transaction in order to merge the ones whose start and stop times intersect. The logic for doing this find-and-merge operation has been reworked to a) be deferred entirely until the transaction is ready to be recorded, and b) made more performant when it is needed. GraphQL DataLoader users and other users who generate lots of activity for monitoring within a short amount of time will hopefully see some good performance gains from these changes.
160
+
161
+
162
+ * **Performance: Make frozen string literals the default for the agent**
163
+
164
+ The Ruby `frozen_string_literal: true` magic source code comment has now been applied consistently across all Ruby files belonging to the agent. This can provide a performance boost, given that Ruby can rely on the strings remaining immutable. Previously only about a third of the agent's code was freezing string literals by default. Now that 100% of the code freezes string literals by default, we have internally observed some related performance gains through testing. We are hopeful that these will translate into some real world gains in production capacities.
165
+
166
+
167
+ * **Bugfix: Error when setting the yaml configuration with `transaction_tracer.transaction_threshold: apdex_f`**
168
+
169
+ Originally, the agent was only checking the `transaction_tracer.transaction_threshold` from the newrelic.yml correctly if it was on two lines.
170
+
171
+ Example:
172
+
173
+ ```
174
+ # newrelic.yml
175
+ transaction_tracer:
176
+ transaction_threshold: apdex_f
177
+ ```
178
+
179
+ When this was instead changed to be on one line, the agent was not able to correctly identify the value of apdex_f.
180
+
181
+ Example:
182
+ ```
183
+ # newrelic.yml
184
+ transaction_tracer.transaction_threshold: apdex_f
185
+ ```
186
+ This would cause prevent transactions from finishing due to the error `ArgumentError: comparison of Float with String failed`. This has now been corrected and the agent is able to process newrelic.yml with a one line `transaction_tracer.transaction_threshold: apdex_f` correctly now.
187
+
188
+ Thank you to @oboxodo for bringing this to our attention.
189
+
190
+
191
+ * **Bugfix: Don't modify frozen Logger**
192
+
193
+ Previously the agent would modify each instance of the Logger class by adding a unique instance variable as part of the instrumentation. This could cause the error `FrozenError: can't modify frozen Logger` to be thrown if the Logger instance had been frozen. The agent will now check if the object is frozen before attempting to modify the object. Thanks to @mkcosta for bringing this issue to our attention.
194
+
195
+
196
+ ## v8.9.0
197
+
198
+
199
+ * **Add support for Dalli 3.1.0 to Dalli 3.2.2**
200
+
201
+ Dalli versions 3.1.0 and above include breaking changes where the agent previously hooked into the gem. We have updated our instrumentation to correctly hook into Dalli 3.1.0 and above. At this time, 3.2.2 is the latest Dalli version and is confirmed to be supported.
202
+
203
+
204
+ * **Bugfix: Infinite Tracing hung on connection restart**
205
+
206
+ Previously, when using infinite tracing, the agent would intermittently encounter a deadlock when attempting to restart the infinite tracing connection. This bug would prevent the agent from sending all data types, including non-infinite-tracing-related data. This change reworks how we restart infinite tracing to prevent potential deadlocks.
207
+
208
+ * **Bugfix: Use read_nonblock instead of read on pipe**
209
+
210
+ Previously, our PipeChannelManager was using read which could cause Resque jobs to get stuck in some versions. This change updates the PipeChannelManager to use read_nonblock instead. This method can leverage error handling to allow the instrumentation to gracefully log a message and exit the stuck Resque job.
211
+
212
+
213
+ ## v8.8.0
214
+
215
+ * **Support Makara database adapters with ActiveRecord**
216
+
217
+ Thanks to a community submission from @lucasklaassen with [PR #1177](https://github.com/newrelic/newrelic-ruby-agent/pull/1177), the Ruby agent will now correctly work well with the [Makara gem](https://github.com/instacart/makara). Functionality such as SQL obfuscation should now work when Makara database adapters are used with Active Record.
218
+
219
+ * **Lowered the minimum payload size to compress**
220
+
221
+ Previously the Ruby agent used a particularly large payload size threshold of 64KiB that would need to be met before the agent would compress data en route to New Relic's collector. The original value stems from segfault issues that very old Rubies (< 2.2) used to encounter when compressing smaller payloads. This value has been lowered to 2KiB (2048 bytes), which should provide a more optimal balance between the CPU cycles spent on compression and the bandwidth savings gained from it.
222
+
223
+ * **Provide Code Level Metrics for New Relic CodeStream**
224
+
225
+ For Ruby on Rails applications and/or those with manually traced methods, the agent is now capable of reporting metrics with Ruby method-level granularity. When the new `code_level_metrics.enabled` configuration parameter is set to a `true` value, the agent will associate source-code-related metadata with the metrics for things such as Rails controller methods. Then, when the corresponding Ruby class file that defines the methods is loaded up in a [New Relic CodeStream](https://www.codestream.com/)-powered IDE, [the four golden signals](https://sre.google/sre-book/monitoring-distributed-systems/) for each method will be presented to the developer directly.
226
+
227
+ * **Supportability Metrics will always report uncompressed payload size**
228
+
229
+ New Relic's agent specifications call for Supportability Metrics to always reference the uncompressed payload byte size. Previously, the Ruby agent was calculating the byte size after compression. Furthermore, compression is only performed on payloads of a certain size. This means that sometimes the value could have represented a compressed size and sometimes an uncompressed one. Now the uncompressed value is always used, bringing consistency for comparing two instances of the same metric and alignment with the New Relic agent specifications.
230
+
231
+
232
+ ## v8.7.0
233
+
234
+ * **APM logs-in-context log forwarding on by default**
235
+
236
+ Automatic application log forwarding is now enabled by default. This version of the agent will automatically send enriched application logs to New Relic. To learn more about this feature see [here](https://docs.newrelic.com/docs/apm/new-relic-apm/getting-started/get-started-logs-context/), and additional configuration options are available [here](https://docs.newrelic.com/docs/logs/logs-context/configure-logs-context-ruby). To learn about how to toggle log ingestion on or off by account see [here](https://docs.newrelic.com/docs/logs/logs-context/disable-automatic-logging).
237
+
238
+ * **Improved async support and Thread instrumentation**
239
+
240
+ Previously, the agent was not able to record events and metrics inside Threads created inside of an already running transaction. This release includes 2 new configuration options to support multithreaded applications to automatically instrument threads. A new configuration option,`instrumentation.thread.tracing` (disabled by default), has been introduced that, when enabled, will allow the agent to insert New Relic tracing inside of all Threads created by an application. To support applications that only want some threads instrumented by New Relic, a new class is available, `NewRelic::TracedThread`, that will create a thread that includes New Relic instrumentation, see our [API documentation](https://www.rubydoc.info/gems/newrelic_rpm/NewRelic) for more details.
241
+
242
+ New configuration options included in this release:
243
+ | Configuration name | Default | Behavior |
244
+ | ----------- | ----------- |----------- |
245
+ | `instrumentation.thread` | `auto` (enabled) | Allows the agent to correctly nest spans inside of an asynchronous transaction |
246
+ | `instrumentation.thread.tracing` | `false` (disabled) | Automatically add tracing to all Threads created in the application. This may be enabled by default in a future release. |
247
+
248
+ We'd like to thank @mikeantonelli for sharing a gist with us that provided our team with an entry point for this feature.
249
+
250
+ * **Deprecate support for Ruby 2.2**
251
+
252
+ Ruby 2.2 reached end of life on March 31, 2018. The agent has deprecated support for Ruby 2.2 and will make breaking changes for this version in its next major release.
253
+
254
+ * **Deprecate instrumentation versions with low adoption and/or versions over five years old**
255
+
256
+ This release deprecates the following instrumentation:
257
+ | Deprecated | Replacement |
258
+ | ----------- | ----------- |
259
+ | ActiveMerchant < 1.65.0 | ActiveMerchant >= 1.65.0 |
260
+ | Acts As Solr (all versions) | none |
261
+ | Authlogic (all versions) | none |
262
+ | Bunny < 2.7.0 | bunny >= 2.7.0 |
263
+ | Dalli < 3.2.1 | Dalli >= 3.2.1 |
264
+ | DataMapper (all versions) | none |
265
+ | Delayed Job < 4.1.0 | Delayed Job >= 4.1.0 |
266
+ | Excon < 0.56.0 | Excon >= 0.56.0 |
267
+ | Grape < 0.19.2 | Grape >= 0.19.2 |
268
+ | HTTPClient < 2.8.3 | HTTPClient 2.8.3 |
269
+ | HTTP.rb < 2.2.2 | HTTP.rb >= 2.2.2 |
270
+ | Mongo < 2.4.1 | Mongo >= 2.4.1 |
271
+ | Padrino < 0.15.0 | Padrino >= 0.15.0 |
272
+ | Passenger < 5.1.3 | Passenger >= 5.1.3 |
273
+ | Puma < 3.9.0 | Puma >= 3.9.0 |
274
+ | Rack < 1.6.8 | Rack >= 1.6.8 |
275
+ | Rails 3.2.x | Rails >= 4.x |
276
+ | Rainbows (all versions) | none |
277
+ | Sequel < 4.45.0 | Sequel >= 4.45.0 |
278
+ | Sidekiq < 5.0.0 | Sidekiq >= 5.0.0 |
279
+ | Sinatra < 2.0.0 | Sinatra >= 2.0.0 |
280
+ | Sunspot (all versions) | none |
281
+ | Typhoeus < 1.3.0 | Typhoeus >= 1.3.0 |
282
+ | Unicorn < 5.3.0 | Unicorn >= 5.3.0 |
283
+
284
+ For the gems with deprecated versions, we will no longer test those versions in our multiverse suite. They may, however, still be compatible with the agent. We will no longer fix bug reports for issues related to these gem versions.
285
+
286
+ * **Clarify documentation for `rake.tasks` configuration**
287
+
288
+ The `rake.tasks` description in the default `newrelic.yml` file and the [New Relic Ruby Agent Configuration docs](https://docs.newrelic.com/docs/apm/agents/ruby-agent/configuration/ruby-agent-configuration#rake-tasks) have been updated to clarify its behavior and usage. The documentation now reads:
289
+
290
+ > Specify an array of Rake tasks to automatically instrument. This configuration option converts the Array to a RegEx list. If you'd like to allow all tasks by default, use `rake.tasks: [.+]`. Rake tasks will not be instrumented unless they're added to this list. For more information, visit the (New Relic Rake Instrumentation docs)[/docs/apm/agents/ruby-agent/background-jobs/rake-instrumentation].
291
+
292
+ We thank @robotfelix for suggesting these changes.
293
+
294
+ * **Internally leverage `Object.const_get` and `Object.const_defined?`**
295
+
296
+ When dynamically checking for or obtaining a handle to a class constant from a string, leverage the `Object` class's built in methods wherever possible to enjoy simpler, more performant operations. All JRubies and CRubies v2.5 and below need a bit of assistance beyond what `Object` can provide given that those Rubies may yield an unwanted constant from a different namespace than the one that was specified. But for all other Rubies and even for those Rubies in contexts where we can 100% trust the string value coming in, leverage the `Object` class's methods and reap the benefits.
297
+
298
+ * **Enable Environment Variables setting Array configurations to be converted to Arrays**
299
+
300
+ Prior to this change, when comma-separated lists were passed as environment variables, an error would be emitted to the `newrelic_agent.log` and a String would be set as the value. Now, Arrays will be accurately coerced.
301
+
302
+ * **Bugfix: Allow TransactionEvents to be sampled at the expected rate**
303
+
304
+ The `transaction_events.max_samples_stored` capacity value within the TransactionEventAggregator did not match up with its expected harvest cycle interval, causing TransactionEvents to be over-sampled. This bugfix builds upon the updates made in [#952](https://github.com/newrelic/newrelic-ruby-agent/pull/952) so that the interval and capacity behave as expected for the renamed `transaction_events*` configuration options.
305
+
306
+ * **Bugfix: Error events missing attributes when created outside of a transaction**
307
+
308
+ Previously the agent was not assigning a priority to error events that were created by calling notice_error outside the scope of a transaction. This caused issues with sampling when the error event buffer was full, resulting in a `NoMethodError: undefined method '<' for nil:NilClass` in the newrelic_agent.log. This bugfix ensures that a priority is always assigned on error events so that the agent will be able to sample these error events correctly. Thank you to @olleolleolle for bringing this issue to our attention.
309
+
310
+
311
+
312
+ ## v8.6.0
313
+
314
+ * **Telemetry-in-Context: Automatic Application Logs, a quick way to view logs no matter where you are in the platform**
315
+
316
+ - Adds support for forwarding application logs to New Relic. This automatically sends application logs that have been enriched to power Telemetry-in-Context. This is disabled by default in this release. This may be on by default in a future release.
317
+ - Adds support for enriching application logs written to disk or standard out. This can be used with another log forwarder to power Telemetry-in-Context if in-agent log forwarding is not desired. We recommend enabling either log forwarding or local log decorating, but not both features. This is disabled by default in this release.
318
+ - Improves speed and Resque support for logging metrics which shows the rate of log message by severity in the Logs chart in the APM Summary view. This is enabled by default in this release.
319
+
320
+ To learn more about Telemetry-in-Context and the configuration options please see the documentation [here](https://docs.newrelic.com/docs/apm/agents/ruby-agent/configuration/ruby-agent-configuration/).
321
+
322
+ * **Improve the usage of the 'hostname' executable and other executables**
323
+
324
+ In all places where a call to an executable binary is made (currently this is done only for the 'hostname' and 'uname' binaries), leverage a new helper method when making the call. This new helper will a) not attempt to execute the binary if it cannot be found, and b) prevent STDERR/STDOUT content from appearing anywhere except New Relic's own logs if the New Relic logger is set to the 'debug' level. When calling 'hostname', fall back to `Socket.gethostname` if the 'hostname' binary cannot be found. When calling 'uname', fall back on using a value of 'unknown' if the 'uname' command fails. Many thanks to @metaskills and @brcarp for letting us know that Ruby AWS Lambda functions can't invoke 'hostname' and for providing ideas and feedback with [Issue #697](https://github.com/newrelic/newrelic-ruby-agent/issues/697).
325
+
326
+ * **Documentation: remove confusing duplicate RUM entry from newrelic.yml**
327
+
328
+ The `browser_monitoring.auto_instrument` configuration option to enable web page load timing (RUM) was confusingly listed twice in the newrelic.yml config file. This option is enabled by default. The newrelic.yml file has been updated to list the option only once. Many thanks to @robotfelix for bringing this to our attention with [Issue #955](https://github.com/newrelic/newrelic-ruby-agent/issues/955).
329
+
330
+ * **Bugfix: fix unit test failures when New Relic environment variables are present**
331
+
332
+ Previously, unit tests would fail with unexpected invocation errors when `NEW_RELIC_LICENSE_KEY` and `NEW_RELIC_HOST` environment variables were present. Now, tests will discard these environment variables before running.
333
+
334
+ * **Bugfix: Curb - satisfy method_with_tracing's verb argument requirement**
335
+
336
+ When Curb instrumentation is used (either via prepend or chain), be sure to always pass the verb argument over to `method_with_tracing` which requires it. Thank you to @knarewski for bringing this issue to our attention, for providing a means of reproducing an error, and for providing a fix. That fix has been replicated by the agent team with permission. See [Issue 1033](https://github.com/newrelic/newrelic-ruby-agent/issues/1033) for more details.
337
+
338
+
339
+ ## v8.5.0
340
+
341
+ * **AWS: Support IMDSv2 by using a token with metadata API calls**
342
+
343
+ When querying AWS for instance metadata, include a token in the request headers. If an AWS user configures instances to require a token, the agent will now work. For instances that do not require the inclusion of a token, the agent will continue to work in that context as well.
344
+
345
+ * **Muffle anticipated stderr warnings for "hostname" calls**
346
+
347
+ When using the `hostname` binary to obtain hostname information, redirect STDERR to /dev/null. Thanks very much to @frenkel for raising this issue on behalf of OpenBSD users everywhere and for providing a solution with [PR #965](https://github.com/newrelic/newrelic-ruby-agent/pull/965).
348
+
349
+ * **Added updated configuration options for transaction events and deprecated previous configs**
350
+ This release deprecates and replaces the following configuration options:
351
+ | Deprecated | Replacement |
352
+ | ----------- | ----------- |
353
+ | event_report_period.analytic_event_data | event_report_period.transaction_event_data |
354
+ | analytics_events.enabled | transaction_events.enabled |
355
+ | analytics_events.max_samples_stored | transaction_events.max_samples_stored |
356
+
357
+ * **Eliminated warnings for redefined constants in ParameterFiltering**
358
+
359
+ Fixed the ParameterFiltering constant definitions so that they are not redefined on multiple reloads of the module. Thank you to @TonyArra for bringing this issue to our attention.
360
+
361
+ * **Docker for development**
362
+
363
+ Docker and Docker Compose may now be used for local development and testing with the provided `Dockerfile` and `docker-compose.yml` files in the project root. See [DOCKER.md](DOCKER.md) for usage instructions.
364
+
365
+
366
+ * **Bugfix: Rails 5 + Puma errors in rack "can't add a new key into hash during iteration"**
367
+
368
+ When using rails 5 with puma, the agent would intermittently cause rack to raise a `RuntimeError: can't add a new key into hash during iteration`. We have identified the source of the error in our instrumentation and corrected the behavior so it no longer interferes with rack. Thanks to @sasharevzin for bringing attention to this error and providing a reproduction of the issue for us to investigate.
369
+
370
+ * **CI: target JRuby 9.3.3.0**
371
+
372
+ Many thanks to @ahorek for [PR #919](https://github.com/newrelic/newrelic-ruby-agent/pull/919), [PR #921](https://github.com/newrelic/newrelic-ruby-agent/pull/921), and [PR #922](https://github.com/newrelic/newrelic-ruby-agent/pull/922) to keep us up to date on the JRuby side of things. The agent is now actively being tested against JRuby 9.3.3.0. NOTE that this release does not contain any non-CI related changes for JRuby. Old agent versions are still expected to work with newer JRubies and the newest agent version is still expected to work with older JRubies.
373
+
374
+ * **CI: Update unit tests for Rails 7.0.2**
375
+
376
+ Ensure that the 7.0.2 release of Rails is fully compatible with all relevant tests.
377
+
378
+ * **CI: Ubuntu 20.04 LTS**
379
+
380
+ To stay current and secure, our CI automation is now backed by version 20.04 of Ubuntu's long term support offering (previously 18.04).
381
+
382
+
383
+ ## v8.4.0
384
+
385
+ * **Provide basic support for Rails 7.0**
386
+
387
+ This release includes Rails 7.0 as a tested Rails version. Updates build upon the agent's current Rails instrumentation and do not include additional instrumentation for new features.
388
+
389
+ * **Improve the performance of NewRelic::Agent::GuidGenerator#generate_guid**
390
+
391
+ This method is called by many basic operations within the agent including transactions, datastore segments, and external request segments. Thank you, @jdelstrother for contributing this performance improvement!
392
+
393
+ * **Documentation: Development environment prep instructions**
394
+
395
+ The multiverse collection of test suites requires a variety of data handling software (MySQL, Redis, memcached, etc.) to be available on the machine running the tests. The [project documentation](test/multiverse/README.md) has been updated to outline the relevant software packages, and a `Brewfile` file has been added to automate software installation with Homebrew.
396
+
397
+ * **Bugfix: Add ControllerInstrumentation::Shims to Sinatra framework**
398
+
399
+ When the agent is disabled by setting the configuration settings `enabled`, `agent_enabled`, and/or `monitor_mode` to false, the agent loads shims for public controller instrumentation methods. These shims were missing for the Sinatra framework, causing applications to crash if the agent was disabled. Thank you, @NC-piercej for bringing this to our attention!
400
+
401
+
402
+ ## v8.3.0
403
+
404
+ * **Updated the agent to support Ruby 3.1.0**
405
+
406
+ Most of the changes involved updating the multiverse suite to exclude runs for older versions of instrumented gems that are not compatible with Ruby 3.1.0. In addition, Infinite Tracing testing was updated to accommodate `YAML::unsafe_load` for Psych 4 support.
407
+
408
+ * **Bugfix: Update AdaptiveSampler#sampled? algorithm**
409
+
410
+ One of the clauses in `AdaptiveSampler#sampled?` would always return false due to Integer division returning a result of zero. This method has been updated to use Float division instead, to exponentially back off the number of samples required. This may increase the number of traces collected for transactions. A huge thank you to @romul for bringing this to our attention and breaking down the problem!
411
+
412
+ * **Bugfix: Correctly encode ASCII-8BIT log messages**
413
+
414
+ The encoding update for the DecoratingLogger in v8.2.0 did not account for ASCII-8BIT encoded characters qualifying as `valid_encoding?`. Now, ASCII-8BIT characters will be encoded as UTF-8 and include replacement characters as needed. We're very grateful for @nikajukic's collaboration and submission of a test case to resolve this issue.
415
+
416
+
417
+ ## v8.2.0
418
+
419
+ * **New Instrumentation for Tilt gem**
420
+
421
+ Template rendering using [Tilt](https://github.com/rtomayko/tilt) is now instrumented. See [PR #847](https://github.com/newrelic/newrelic-ruby-agent/pull/847) for details.
422
+
423
+ * **Configuration `error_collector.ignore_errors` is marked as deprecated**
424
+
425
+ This setting has been marked as deprecated in the documentation since version 7.2.0 and is now flagged as deprecated within the code.
426
+
427
+ * **Remove Rails 2 instrumentation**
428
+
429
+ Though any version of Rails 2 has not been supported by the Ruby Agent since v3.18.1.330, instrumentation for ActionController and ActionWebService specific to that version were still part of the agent. This instrumentation has been removed.
430
+
431
+ * **Remove duplicated settings from newrelic.yml**
432
+
433
+ Thank you @jakeonfire for bringing this to our attention and @kuroponzu for making the changes!
434
+
435
+ * **Bugfix: Span Events recorded when using newrelic_ignore**
436
+
437
+ Previously, the agent was incorrectly recording span events only on transactions that should be ignored. This fix will prevent any span events from being created for transactions using newrelic_ignore, or ignored through the `rules.ignore_url_regexes` configuration option.
438
+
439
+ * **Bugfix: Print deprecation warning for Cross-Application Tracing if enabled**
440
+
441
+ Prior to this change, the deprecation warning would log whenever the agent started up, regardless of configuration. Thank you @alpha-san for bringing this to our attention!
442
+
443
+ * **Bugfix: Scrub non-unicode characters from DecoratingLogger**
444
+
445
+ To prevent `JSON::GeneratorErrors`, the DecoratingLogger replaces non-unicode characters with the replacement character: �. Thank you @jdelStrother for bringing this to our attention!
446
+
447
+ * **Bugfix: Distributed tracing headers emitted errors when agent was not connected**
448
+
449
+ Previously, when the agent had not yet connected it would fail to create a trace context payload and emit an error, "TypeError: no implicit conversion of nil into String," to the agent logs. The correct behavior in this situation is to not create these headers due to the lack of required information. Now, the agent will not attempt to create trace context payloads until it has connected. Thank you @Izzette for bringing this to our attention!
450
+
451
+
452
+ ## v8.1.0
453
+
454
+ * **Instrumentation for Ruby standard library Logger**
455
+
456
+ The agent will now automatically instrument Logger, recording number of lines and size of logging output, with breakdown by severity.
457
+
458
+ * **Bugfix for Padrino instrumentation**
459
+
460
+ A bug was introduced to the way the agent installs padrino instrumentation in 7.0.0. This release fixes the issues with the padrino instrumentation. Thanks to @sriedel for bringing this issue to our attention.
461
+
462
+ * **Bugfix: Stop deadlocks between New Relic thread and Delayed Job sampling thread**
463
+
464
+ Running the agent's polling queries for the DelayedJobSampler within the same ActiveRecord connection decreases the frequency of deadlocks in development environments. Thanks @jdelStrother for bringing this to our attention and providing excellent sample code to speed up development!
465
+
466
+ * **Bugfix: Allow Net::HTTP request to IPv6 addresses**
467
+
468
+ The agent will no longer raise an `URI::InvalidURIError` error if an IPv6 address is passed to Net::HTTP. Thank you @tristinbarnett and @tabathadelane for crafting a solution!
469
+
470
+ * **Bugfix: Allow integers to be passed to error_collector.ignore_status_codes configuration**
471
+
472
+ Integers not wrapped in quotation marks can be passed to `error_collector.ignore_status_codes` in the `newrelic.yml` file. Our thanks goes to @elaguerta and @brammerl for resolving this issue!
473
+
474
+ * **Bugfix: Allow add_method_tracer to be used on BasicObjects**
475
+
476
+ Previously, our `add_method_tracer` changes referenced `self.class` which is not available on `BasicObjects`. This has been fixed. Thanks to @toncid for bringing this issue to our attention.
477
+
478
+
479
+ ## v8.0.0
480
+
481
+ * **`add_method_tracer` refactored to use prepend over alias_method chaining**
482
+
483
+ This release overhauls the implementation of `add_method_tracer`, as detailed in [issue #502](https://github.com/newrelic/newrelic-ruby-agent/issues/502). The main breaking updates are as follows:
484
+ - A metric name passed to `add_method_tracer` will no longer be interpolated in an instance context as before. To maintain this behavior, pass a Proc object with the same arity as the method being traced. For example:
485
+ ```ruby
486
+ # OLD
487
+ add_method_tracer :foo, '#{args[0]}.#{args[1]}'
488
+
489
+ # NEW
490
+ add_method_tracer :foo, -> (*args) { "#{args[0]}.#{args[1]}" }
491
+ ```
492
+
493
+ - Similarly, the `:code_header` and `:code_footer` options to `add_method_tracer` will *only* accept a Proc object, which will be bound to the calling instance when the traced method is invoked.
494
+
495
+ - Calling `add_method_tracer` for a method will overwrite any previously defined tracers for that method. To specify multiple metric names for a single method tracer, pass them to `add_method_tracer` as an array.
496
+
497
+ See updated documentation on the following pages for full details:
498
+ - [Ruby Custom Instrumentation: Method Tracers](https://docs.newrelic.com/docs/agents/ruby-agent/api-guides/ruby-custom-instrumentation/#method_tracers)
499
+ - [MethodTracer::ClassMethods#add_method_tracer](https://rubydoc.info/github/newrelic/newrelic-ruby-agent/NewRelic/Agent/MethodTracer/ClassMethods#add_method_tracer-instance_method)
500
+
501
+
502
+ * **Distributed tracing is enabled by default**
503
+
504
+ [Distributed tracing](https://docs.newrelic.com/docs/distributed-tracing/enable-configure/language-agents-enable-distributed-tracing/) tracks and observes service requests as they flow through distributed systems. Distributed tracing is now enabled by default and replaces [cross application tracing](https://docs.newrelic.com/docs/agents/ruby-agent/features/cross-application-tracing-ruby/).
505
+
506
+ * **Bugfix: Incorrectly loading configuration options from newrelic.yml**
507
+
508
+ The agent will now import the configuration options [`error_collector.ignore_messages`](https://docs.newrelic.com/docs/agents/ruby-agent/configuration/ruby-agent-configuration/#error_collector-ignore_messages) and [`error_collector.expected_messages`](https://docs.newrelic.com/docs/agents/ruby-agent/configuration/ruby-agent-configuration/#error_collector-expected_messages) from the `newrelic.yml` file correctly.
509
+
510
+ * **Cross Application is now deprecated, and disabled by default**
511
+
512
+ [Distributed tracing](https://docs.newrelic.com/docs/distributed-tracing/enable-configure/language-agents-enable-distributed-tracing/) is replacing [cross application tracing](https://docs.newrelic.com/docs/agents/ruby-agent/features/cross-application-tracing-ruby/) as the default means of tracing between services. To continue using it, enable it with `cross_application_tracer.enabled: true` and `distributed_tracing.enabled: false`
513
+
514
+ * **Update configuration option default value for `span_events.max_samples_stored` from 1000 to 2000**
515
+
516
+ For more information about this configuration option, visit [the Ruby agent documentation](https://docs.newrelic.com/docs/agents/ruby-agent/configuration/ruby-agent-configuration/#span_events-max_samples_stored).
517
+
518
+ * **Agent now enforces server supplied maximum value for configuration option `span_events.max_samples_stored`**
519
+
520
+ Upon connection to the New Relic servers, the agent will now enforce a maximum value allowed for the configuration option [`span_events.max_samples_stored`](https://docs.newrelic.com/docs/agents/ruby-agent/configuration/ruby-agent-configuration/#span_events-max_samples_stored) sent from the New Relic servers.
521
+
522
+ * **Remove Ruby 2.0 required kwarg compatibility checks**
523
+
524
+ Our agent has code that provides compatibility for required keyword arguments in Ruby versions below 2.1. Since the agent now only supports Ruby 2.2+, this code is no longer required.
525
+
526
+ * **Replace Time.now with Process.clock_gettime**
527
+
528
+ Calls to `Time.now` have been replaced with calls to `Process.clock_gettime` to leverage the system's built-in clocks for elapsed time (`Process::CLOCK_MONOTONIC`) and wall-clock time (`Process::CLOCK_REALTIME`). This results in fewer object allocations, more accurate elapsed time records, and enhanced performance. Thanks to @sdemjanenko and @viraptor for advocating for this change!
529
+
530
+ * **Updated generated default newrelic.yml**
531
+
532
+ Thank you @wyhaines and @creaturenex for your contribution. The default newrelic.yml that the agent can generate is now updated with commented out examples of all configuration options.
533
+
534
+ * **Bugfix: Psych 4.0 causes errors when loading newrelic.yml**
535
+
536
+ Psych 4.0 now uses safe load behavior when using `YAML.load` which by default doesn't allow aliases, causing errors when the agent loads the config file. We have updated how we load the config file to avoid these errors.
537
+
538
+ * **Remove support for Excon versions below 0.19.0**
539
+
540
+ Excon versions below 0.19.0 will no longer be instrumented through the Ruby agent.
541
+
542
+ * **Remove support for Mongo versions below 2.1**
543
+
544
+ Mongo versions below 2.1 will no longer be instrumented through the Ruby agent.
545
+
546
+ * **Remove tests for Rails 3.0 and Rails 3.1**
547
+
548
+ As of the 7.0 release, the Ruby agent stopped supporting Rails 3.0 and Rails 3.1. Despite this, we still had tests for these versions running on the agent's CI. Those tests are now removed.
549
+
550
+ * **Update test Gemfiles for patched versions**
551
+
552
+ The gem has individual Gemfiles it uses to test against different common user setups. Rails 5.2, 6.0, and 6.1 have been updated to the latest patch versions in the test Gemfiles. Rack was updated in the Rails61 test suite to 2.1.4 to resolve a security vulnerability.
553
+
554
+ * **Remove Merb Support**
555
+
556
+ This release removes the remaining support for the [Merb](https://weblog.rubyonrails.org/2008/12/23/merb-gets-merged-into-rails-3/) framework. It merged with Rails during the 3.0 release. Now that the Ruby agent supports Rails 3.2 and above, we thought it was time to say goodbye.
557
+
558
+ * **Remove deprecated method External.start_segment**
559
+
560
+ The method `NewRelic::Agent::External.start_segment` has been deprecated as of Ruby Agent 6.0.0. This method is now removed.
561
+
562
+ * **Added testing and support for the following gem versions**
563
+
564
+ - activemerchant 1.121.0
565
+ - bunny 2.19.0
566
+ - excon 0.85.0
567
+ - mongo 2.14.0, 2.15.1
568
+ - padrino 0.15.1
569
+ - resque 2.1.0
570
+ - sequel 5.48.0
571
+ - yajl-ruby 1.4.1
572
+
573
+ * **This version adds support for ARM64/Graviton2 platform using Ruby 3.0.2+**
574
+
575
+
576
+ ## v7.2.0
577
+
578
+ * **Expected Errors and Ignore Errors**
579
+ This release adds support for configuration for expected/ignored errors by class name, status code, and message. The following configuration options are now available:
580
+ - `error_collector.ignore_classes`
581
+ - `error_collector.ignore_messages`
582
+ - `error_collector.ignore_status_codes`
583
+ - `error_collector.expected_classes`
584
+ - `error_collector.expected_messages`
585
+ - `error_collector.expected_status_codes`
586
+ For more details about expected and ignored errors, please see our [configuration documentation](https://docs.newrelic.com/docs/agents/ruby-agent/configuration/)
587
+
588
+ * **Bugfix: resolves "can't add a new key into hash during iteration" Errors**
589
+
590
+ Thanks to @wyhaines for this fix that prevents "can't add a new key into hash during iteration" errors from occurring when iterating over environment data.
591
+
592
+ * **Bugfix: kwarg support fixed for Rack middleware instrumentation**
593
+
594
+ Thanks to @walro for submitting this fix. This fixes the rack instrumentation when using kwargs.
595
+
596
+ * **Update known conflicts with use of Module#Prepend**
597
+
598
+ With our release of v7.0.0, we updated our instrumentation to use Module#Prepend by default, instead of method chaining. We have received reports of conflicts and added a check for these known conflicts. If a known conflict with prepend is detected while using the default value of 'auto' for gem instrumentation, the agent will instead install method chaining instrumentation in order to avoid this conflict. This check can be bypassed by setting the instrumentation method for the gem to 'prepend'.
599
+
600
+ ## v7.1.0
601
+
602
+ * **Add support for CSP nonces when using our API to insert the browser agent**
603
+
604
+ We now support passing in a nonce to our API method `browser_timing_header` to allow the browser agent to run on applications using CSP nonces. This allows users to inject the browser agent themselves and use the nonce required for the script to run. In order to utilize this new feature, you must disable auto instrumentation for the browser agent, and use the API method browser_timing_header to pass the nonce in and inject the script manually.
605
+
606
+ * **Removed MD5 use in the SQL sampler**
607
+
608
+ In order to allow the agent to run in FIPS compliant environments, the usage of MD5 for aggregating slow sql traces has been replaced with SHA1.
609
+
610
+ * **Enable server-side configuration of distributed tracing**
611
+
612
+ `distributed_tracing.enabled` may now be set in server-side application configuration.
613
+
614
+ * **Bugfix: Fix for missing part of a previous bugfix**
615
+
616
+ Our previous fix of "nil Middlewares injection now prevented and gracefully handled in Sinatra" released in 7.0.0 was partially overwritten by some of the other changes in that release. This release adds back those missing sections of the bugfix, and should resolve the issue for sinatra users.
617
+
618
+ * **Update known conflicts with use of Module#Prepend**
619
+
620
+ With our release of v7.0.0, we updated our instrumentation to use Module#Prepend by default, instead of method chaining. We have received reports of conflicts and added a check for these known conflicts. If a known conflict with prepend is detected while using the default value of 'auto' for gem instrumentation, the agent will instead install method chaining instrumentation in order to avoid this conflict. This check can be bypassed by setting the instrumentation method for the gem to 'prepend'.
621
+
622
+ * **Bugfix: Updated support for ActiveRecord 6.1+ instrumentation**
623
+
624
+ Previously, the agent depended on `connection_id` to be present in the Active Support instrumentation for `sql.active_record`
625
+ to get the current ActiveRecord connection. As of Rails 6.1, `connection_id` has been dropped in favor of providing the connection
626
+ object through the `connection` value exclusively. This resulted in datastore spans displaying fallback behavior, including showing
627
+ "ActiveRecord" as the database vendor.
628
+
629
+ * **Bugfix: Updated support for Resque's FORK_PER_JOB option**
630
+
631
+ Support for Resque's FORK_PER_JOB flag within the Ruby agent was incomplete and nonfunctional. The agent should now behave
632
+ correctly when running in a non-forking Resque worker process.
633
+
634
+ * **Bugfix: Added check for ruby2_keywords in add_transaction_tracer**
635
+
636
+ Thanks @beauraF for the contribution! Previously, the add_transaction_tracer was not updated when we added support for ruby 3. In order to correctly support `**kwargs`, ruby2_keywords was added to correctly update the method signature to use **kwargs in ruby versions that support that.
637
+
638
+ * **Confirmed support for yajl 1.4.0**
639
+
640
+ Thanks to @creaturenex for the contribution! `yajl-ruby` 1.4.0 was added to our test suite and confirmed all tests pass, showing the agent supports this version as well.
641
+
642
+
643
+ ## v7.0.0
644
+
645
+ * **Ruby Agent 6.x to 7.x Migration Guide Available**
646
+
647
+ Please see our [Ruby Agent 6.x to 7.x migration guide](https://docs.newrelic.com/docs/agents/ruby-agent/getting-started/migration-7x-guide/) for helpful strategies and tips for migrating from earlier versions of the Ruby agent to 7.0.0. We cover new configuration settings, diagnosing and installing SSL CA certificates and deprecated items and their replacements in this guide.
648
+
649
+ * **Ruby 2.0 and 2.1 Dropped**
650
+
651
+ Support for Ruby 2.0 and 2.1 dropped with this release. No code changes that would prevent the agent from continuing to
652
+ work with these releases are known. However, Rubies 2.0 and 2.1 are no longer included in our test matrices and are not supported
653
+ for 7.0.0 and onward.
654
+
655
+ * **Implemented prepend auto-instrumentation strategies for most Ruby gems/libraries**
656
+
657
+ This release brings the auto-instrumentation strategies for most gems into the modern era for Ruby by providing both
658
+ prepend and method-chaining (a.k.a. method-aliasing) strategies for auto instrumenting. Prepend, which has been available since
659
+ Ruby 2.0 is now the default strategy employed in auto-instrumenting. It is known that some external gems lead to Stack Level
660
+ too Deep exceptions when prepend and method-chaining are mixed. In such known cases, auto-instrumenting strategy will fall back
661
+ to method-chaining automatically.
662
+
663
+ This release also deprecates many overlapping and inconsistently named configuration settings in favor of being able to control
664
+ behavior of instrumentation per library with one setting that can be one of auto (the default), disabled, prepend, or chain.
665
+
666
+ Please see the above-referenced migration guide for further details.
667
+
668
+ * **Removed SSL cert bundle**
669
+
670
+ The agent will no longer ship this bundle and will rely on system certs.
671
+
672
+ * **Removed deprecated config options**
673
+
674
+ The following config options were previously deprecated and are no longer available
675
+ - `disable_active_record_4`
676
+ - `disable_active_record_5`
677
+ - `autostart.blacklisted_constants`
678
+ - `autostart.blacklisted_executables`
679
+ - `autostart.blacklisted_rake_tasks`
680
+ - `strip_exception_messages.whitelist`
681
+
682
+ * **Removed deprecated attribute**
683
+
684
+ The attribute `httpResponseCode` was previously deprecated and replaced with `http.statusCode`. This deprecated attribute has now been removed.
685
+
686
+ * **Removed deprecated option in notice_error**
687
+
688
+ Previously, the `:trace_only` option to NewRelic::Agent.notice_error was deprecated and replaced with `:expected`. This deprecated option has been removed.
689
+
690
+ * **Removed deprecated api methods**
691
+
692
+ Previously the api methods `create_distributed_trace_payload` and `accept_distributed_trace_payload` were deprecated. These have now been removed. Instead, please see `insert_distributed_trace_headers` and `accept_distributed_trace_headers`, respectively.
693
+
694
+ * **Bugfix: Prevent browser monitoring middleware from installing to middleware multiple times**
695
+
696
+ In rare cases on jRuby, the BrowserMonitoring middleware could attempt to install itself
697
+ multiple times at start up. This bug fix addresses that by using a mutex to introduce
698
+ thread safety to the operation. Sintra in particular can have this race condition because
699
+ its middleware stack is not installed until the first request is received.
700
+
701
+ * **Skip constructing Time for transactions**
702
+
703
+ Thanks to @viraptor, we are no longer constructing an unused Time object with every call to starting a new Transaction.
704
+
705
+ * **Bugfix: nil Middlewares injection now prevented and gracefully handled in Sinatra**
706
+
707
+ Previously, the agent could potentially inject multiples of an instrumented middleware if Sinatra received many
708
+ requests at once during start up and initialization due to Sinatra's ability to delay full start up as long as possible.
709
+ This has now been fixed and the Ruby agent correctly instruments only once as well as gracefully handles nil middleware
710
+ classes in general.
711
+
712
+ * **Bugfix: Ensure transaction nesting max depth is always consistent with length of segments**
713
+
714
+ Thanks to @warp for noticing and fixing the scenario where Transaction nesting_max_depth can get out of sync
715
+ with segments length resulting in an exception when attempting to nest the initial segment which does not exist.
716
+
3
717
  ## v6.15.0
4
718
 
5
719
  * **Official Ruby 3.0 support**
6
-
720
+
7
721
  The ruby agent has been verified to run on ruby 3.0.0
8
722
 
9
723
  * **Added support for Rails 6.1**
@@ -17,7 +731,7 @@
17
731
 
18
732
  * **Bugfix: No longer overwrites sidekiq trace data**
19
733
 
20
- Distributed traing data is now added to the job trace info rather than overwriting the existing data.
734
+ Distributed tracing data is now added to the job trace info rather than overwriting the existing data.
21
735
 
22
736
  * **Bugfix: Fixes cases where errors are reported for spans with no other attributes**
23
737
 
@@ -26,7 +740,7 @@
26
740
  This is now fixed and errors are now correctly recorded against such span events.
27
741
 
28
742
  * **Bugfix: `DistributedTracing.insert_distributed_trace_headers` Supportability metric now recorded**
29
-
743
+
30
744
  Previously, API calls to `DistributedTracing.insert_distributed_trace_headers` would lead to an exception
31
745
  about the missing supportability metric rather than flowing through the API implementation as intended.
32
746
  This would potentially lead to broken distributed traces as the trace headers were not inserted on the API call.
@@ -36,61 +750,61 @@
36
750
  * **Bugfix: child completions after parent completes sometimes throws exception attempting to access nil parent**
37
751
 
38
752
  In scenarios where the child segment/span is completing after the parent in jRuby, the parent may have already
39
- been freed and no longer accessible. This would lead to attempting to calll `descendant_complete` on a Nil
753
+ been freed and no longer accessible. This would lead to an attempt to call `descendant_complete` on a Nil
40
754
  object. This is fixed to protect against calling the `descendant_complete` in such cases.
41
-
755
+
42
756
  * **Feature: implements `force_install_exit_handler` config flag**
43
-
44
- The `force_install_exit_handler` configuration flag allows an application to instruct the agent to install it's
45
- graceful shutdown exit handler, which will send any locally cached data to the New Relic collector prior to the
46
- application shutting down. This useful for when the primary framework has an embedded Sinatra application that
757
+
758
+ The `force_install_exit_handler` configuration flag allows an application to instruct the agent to install its
759
+ graceful shutdown exit handler, which will send any locally cached data to the New Relic collector prior to the
760
+ application shutting down. This is useful for when the primary framework has an embedded Sinatra application that
47
761
  is otherwise detected and skips installing the exit hook for graceful shutdowns.
48
762
 
49
763
  * **Default prepend_net_instrumentation to false**
50
764
 
51
- Previously, `prepend_net_instrumentation` defaulted to true. However, many gems are still using monkey patching on Net::HTTP, which causes compatibility issues with using prepend. Defaulting this to false minimizes instances of
52
- unexpected compatibilty issues.
53
-
765
+ Previously, `prepend_net_instrumentation` defaulted to true. However, many gems are still using monkey patching on Net::HTTP, which causes compatibility issues with using prepend. Defaulting this to false minimizes instances of
766
+ unexpected compatibility issues.
767
+
54
768
  ## v6.14.0
55
769
 
56
770
  * **Bugfix: Method tracers no longer cloning arguments**
57
-
771
+
58
772
  Previously, when calling add_method_tracer with certain combination of arguments, it would lead to the wrapped method's arguments being cloned rather than passed to the original method for manipulation as intended. This has been fixed.
59
773
 
60
774
  * **Bugfix: Delayed Job instrumentation fixed for Ruby 2.7+**
61
775
 
62
- Previously, the agent was erroneousy separating positional and keyword arguments on the instrumented method calls into
776
+ Previously, the agent was erroneously separating positional and keyword arguments on the instrumented method calls into
63
777
  Delayed Job's library. The led to Delayed job not auto-instrumenting correctly and has been fixed.
64
778
 
65
779
  * **Bugfix: Ruby 2.7+ methods sometimes erroneously attributed compiler warnings to the Agent's `add_method_tracer`**
66
-
780
+
67
781
  The specific edge cases presented are now fixed by this release of the agent. There are still some known corner-cases
68
- that will be resolved with upcoming changes in next major release of the Agent. If you encounter a problem with adding
69
- method tracers and compiler warnings raised, please continue to submit small repoducible examples.
782
+ that will be resolved with upcoming changes in next major release of the Agent. If you encounter a problem with adding
783
+ method tracers and compiler warnings raised, please continue to submit small reproducible examples.
70
784
 
71
785
  * **Bugfix: Ruby 2.7+ fix for keyword arguments on Rack apps is unnecessary and removed**
72
786
 
73
- A common fix for positional and keyword arguments for method parameters was implemented where it was not needed and
74
- led to RackApps getting extra arguments converted to keyword arguments rather than Hash when it expected one. This
787
+ A common fix for positional and keyword arguments for method parameters was implemented where it was not needed and
788
+ led to RackApps getting extra arguments converted to keyword arguments rather than Hash when it expected one. This
75
789
  Ruby 2.7+ change was reverted so that Rack apps behave correctly for Ruby >= 2.7.
76
790
 
77
791
  * **Feature: captures incoming and outgoing request headers for distributed tracing**
78
792
 
79
- HTTP request headers will be logged when log level is at least debug level. Similarly, request headers
793
+ HTTP request headers will be logged when log level is at least debug level. Similarly, request headers
80
794
  for exchanges with New Relic servers are now audit logged when audit logging is enabled.
81
-
795
+
82
796
  * **Bugfix: `newrelic.yml.erb` added to the configuration search path**
83
797
 
84
798
  Previously, when a user specifies a `newrelic.yml.erb` and no `newrelic.yml` file, the agent fails to find
85
799
  the `.erb` file because it was not in the list of files searched at startup. The Ruby agent has long supported this as a
86
- means of configuring the agent programatically. The `newrelic.yml.erb` filename is restored to the search
800
+ means of configuring the agent programmatically. The `newrelic.yml.erb` filename is restored to the search
87
801
  path and will be utilized if present. NOTE: `newrelic.yml` still takes precedence over `newrelic.yml.erb` If found,
88
802
  the `.yml` file is used instead of the `.erb` file. Search directories and order of traversal remain unchanged.
89
803
 
90
804
  * **Bugfix: dependency detection of Redis now works without raising an exception**
91
-
805
+
92
806
  Previously, when detecting if Redis was available to instrument, the dependency detection would fail with an Exception raised
93
- (with side effect of not attempting to instrument Redis). This is now fixed with a better dependency check that resolves falsly without raising an `Exception`.
807
+ (with side effect of not attempting to instrument Redis). This is now fixed with a better dependency check that resolves falsely without raising an `Exception`.
94
808
 
95
809
  * **Bugfix: Gracefully handles NilClass as a Middleware Class when instrumenting**
96
810
 
@@ -99,12 +813,12 @@
99
813
 
100
814
  * **Memory Sampler updated to recognize macOS Big Sur**
101
815
 
102
- Previously, the agent was unable to recognize the platform macOS Big Sur in the memory sampler, resulting in an error being logged. The memory sampler is now able to recognize Big Sur.
816
+ Previously, the agent was unable to recognize the platform macOS Big Sur in the memory sampler, resulting in an error being logged. The memory sampler is now able to recognize Big Sur.
103
817
 
104
818
  * **Prepend implementation of Net::HTTP instrumentation available**
105
-
819
+
106
820
  There is now a config option (`prepend_net_instrumentation`) that will enable the agent to use prepend while instrumenting Net::HTTP. This option is set to true by default.
107
-
821
+
108
822
  ## v6.13.1
109
823
 
110
824
  * **Bugfix: obfuscating URLs to external services no longer modifying original URI**
@@ -186,7 +900,7 @@
186
900
  ## v6.12.0
187
901
 
188
902
  * The New Relic Ruby Agent is now open source under the [Apache 2 license](LICENSE)
189
- and you can now observe the project roadmap. See our [Contributing guide](https://github.com/newrelic/newrelic-ruby-agent/blob/main/CONTRIBUTING.md)
903
+ and you can now observe the [issues we're working on](https://github.com/orgs/newrelic/projects/17). See our [Contributing guide](https://github.com/newrelic/newrelic-ruby-agent/blob/main/CONTRIBUTING.md)
190
904
  and [Code of Conduct](https://github.com/newrelic/.github/blob/master/CODE_OF_CONDUCT.md) for details on contributing!
191
905
 
192
906
  * **Security: Updated all uses of Rake to >= 12.3.3**
@@ -215,10 +929,10 @@
215
929
  Additionally, a bug in recording the metric for "findAndModify" as all lowercased "findandmodify"
216
930
  for versions 2.1 through 2.5 was fixed.
217
931
 
218
- * **Bugfix: Priority Sampler causes crash in high throughput environents in rare cases**
932
+ * **Bugfix: Priority Sampler causes crash in high throughput environments in rare cases**
219
933
 
220
934
  Previously, the priority sampling buffer would, in rare cases, generate an error in high-throughput
221
- environments once capacity is reached and the sampling algorthym engages. This issue is fixed.
935
+ environments once capacity is reached and the sampling algorithm engages. This issue is fixed.
222
936
 
223
937
  * **Additional Transaction Information applied to Span Events**
224
938
 
@@ -937,7 +1651,7 @@
937
1651
 
938
1652
  Prior to this version, using an SSL connection to New Relic was
939
1653
  the default behavior, but could be overridden. SSL connections are
940
- now enforced (not overrideable).
1654
+ now enforced (not overridable).
941
1655
 
942
1656
  * Additional security checking before trying to explain
943
1657
  multi-statement SQL queries
@@ -1103,7 +1817,7 @@
1103
1817
  The agent will now collect slow SQL explain plans, if configured to, on
1104
1818
  connections using the PostGIS adapter. Thanks Ari Pollak for the contribution!
1105
1819
 
1106
- * Lazily intialize New Relic Config
1820
+ * Lazily initialize New Relic Config
1107
1821
 
1108
1822
  The agent will lazily initialize the New Relic config. This allows the agent
1109
1823
  to pickup configuration from environment variables set by dotenv and similar
@@ -1350,7 +2064,7 @@
1350
2064
  * Include ControllerInstrumentation module with ActiveSupport.on_load
1351
2065
 
1352
2066
  The agent will now use the `on_load :action_controller` hook to include
1353
- the ControllerInstrumentation module in to both the `Base` and `API`
2067
+ the ControllerInstrumentation module into both the `Base` and `API`
1354
2068
  classes of ActionController for Rails 5. This ensures that the proper
1355
2069
  load order is retained, minimizing side-effects of having the agent in
1356
2070
  an application.
@@ -1395,7 +2109,7 @@
1395
2109
  better compatibility between our ActiveRecord Instrumentation and
1396
2110
  other third party gems that modify ActiveRecord using `Module#prepend`.
1397
2111
 
1398
- * Use license key passed in to NewRelic::Agent.manual_start
2112
+ * Use license key passed into NewRelic::Agent.manual_start
1399
2113
 
1400
2114
  Previously, the license key passed in when manually starting the agent
1401
2115
  with NewRelic::Agent.manual_start was not referenced when setting up
@@ -2528,7 +3242,7 @@
2528
3242
  runtime relative to the directory that the host process is started from.
2529
3243
 
2530
3244
  In cases where the host process was started from outside of the application's
2531
- root directory (for example, if the process is started from from '/'), it will
3245
+ root directory (for example, if the process is started from '/'), it will
2532
3246
  now also attempt to locate its configuration file based on the value of
2533
3247
  Rails.root for Rails applications.
2534
3248
 
@@ -2577,7 +3291,7 @@
2577
3291
  Rack::Builder, or via Rails' middleware stack in Rails 3.0+.
2578
3292
 
2579
3293
  This instrumentation may be disabled with the
2580
- disable_middlware_instrumentation configuration setting.
3294
+ disable_middleware_instrumentation configuration setting.
2581
3295
 
2582
3296
  For more details, see the documentation for this feature:
2583
3297
 
@@ -2715,7 +3429,7 @@
2715
3429
  * Separate in-transaction GC timings for web and background processes
2716
3430
 
2717
3431
  Previously, an application with GC instrumentation enabled, and both web and
2718
- background processes reporting in to it would show an overly inflated GC band
3432
+ background processes reporting into it would show an overly inflated GC band
2719
3433
  on the application overview graph, because data from both web and non-web
2720
3434
  transactions would be included. This has been fixed, and GC time during web
2721
3435
  and non-web transactions is now tracked separately.
@@ -2943,7 +3657,7 @@
2943
3657
 
2944
3658
  The agent's ActiveRecord 4.0 instrumentation could not gather SQL explain
2945
3659
  plans on JRuby by default because of a dependency on ObjectSpace, which isn't
2946
- avialable by default. This has been fixed.
3660
+ available by default. This has been fixed.
2947
3661
 
2948
3662
  * Fix for Curb http_put_with_newrelic
2949
3663
 
@@ -3576,7 +4290,7 @@
3576
4290
 
3577
4291
  * corrupt marshal data from pipe children crashing agent
3578
4292
 
3579
- If the agent received corrupted data from the Reqsue worker child agent
4293
+ If the agent received corrupted data from the Resque worker child agent
3580
4294
  it could crash the agent itself. fixed.
3581
4295
 
3582
4296
  * should reset RubyBench GC counter between polls
@@ -3630,7 +4344,7 @@
3630
4344
  * fix for issues with RAILS_ROOT deprecation warnings
3631
4345
  * fixed incorrect 1.9 GC time reporting
3632
4346
  * obfuscation for Slow SQL queries respects transaction trace config
3633
- * fix for RUM instrumentation repoting bad timing info in some cases
4347
+ * fix for RUM instrumentation reporting bad timing info in some cases
3634
4348
  * refactored ActiveRecord instrumentation, no longer requires Rails
3635
4349
 
3636
4350
  ## v3.3.0