newrelic_rpm 8.9.0 → 8.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (377) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +23 -8
  4. data/.rubocop_todo.yml +243 -0
  5. data/.simplecov +10 -2
  6. data/.snyk +11 -0
  7. data/Brewfile +1 -0
  8. data/CHANGELOG.md +78 -0
  9. data/Guardfile +1 -0
  10. data/Rakefile +5 -0
  11. data/Thorfile +6 -0
  12. data/bin/newrelic +2 -1
  13. data/bin/newrelic_cmd +1 -0
  14. data/bin/nrdebug +3 -2
  15. data/init.rb +3 -2
  16. data/install.rb +1 -0
  17. data/lib/new_relic/agent/adaptive_sampler.rb +4 -3
  18. data/lib/new_relic/agent/agent/shutdown.rb +3 -2
  19. data/lib/new_relic/agent/agent/special_startup.rb +3 -2
  20. data/lib/new_relic/agent/agent/start_worker_thread.rb +15 -14
  21. data/lib/new_relic/agent/agent/startup.rb +11 -10
  22. data/lib/new_relic/agent/agent.rb +35 -33
  23. data/lib/new_relic/agent/agent_logger.rb +2 -1
  24. data/lib/new_relic/agent/attribute_filter.rb +1 -0
  25. data/lib/new_relic/agent/attribute_processing.rb +4 -3
  26. data/lib/new_relic/agent/attributes.rb +2 -1
  27. data/lib/new_relic/agent/audit_logger.rb +1 -0
  28. data/lib/new_relic/agent/autostart.rb +1 -0
  29. data/lib/new_relic/agent/chained_call.rb +1 -0
  30. data/lib/new_relic/agent/commands/agent_command.rb +1 -0
  31. data/lib/new_relic/agent/commands/agent_command_router.rb +4 -3
  32. data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -0
  33. data/lib/new_relic/agent/configuration/default_source.rb +35 -7
  34. data/lib/new_relic/agent/configuration/dotted_hash.rb +1 -0
  35. data/lib/new_relic/agent/configuration/environment_source.rb +2 -1
  36. data/lib/new_relic/agent/configuration/event_harvest_config.rb +1 -0
  37. data/lib/new_relic/agent/configuration/high_security_source.rb +1 -0
  38. data/lib/new_relic/agent/configuration/manager.rb +2 -1
  39. data/lib/new_relic/agent/configuration/manual_source.rb +1 -0
  40. data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -0
  41. data/lib/new_relic/agent/configuration/security_policy_source.rb +7 -3
  42. data/lib/new_relic/agent/configuration/server_source.rb +7 -6
  43. data/lib/new_relic/agent/configuration/yaml_source.rb +4 -1
  44. data/lib/new_relic/agent/configuration.rb +1 -0
  45. data/lib/new_relic/agent/connect/request_builder.rb +1 -0
  46. data/lib/new_relic/agent/connect/response_handler.rb +4 -3
  47. data/lib/new_relic/agent/custom_event_aggregator.rb +5 -4
  48. data/lib/new_relic/agent/database/explain_plan_helpers.rb +1 -0
  49. data/lib/new_relic/agent/database/obfuscation_helpers.rb +1 -0
  50. data/lib/new_relic/agent/database/obfuscator.rb +2 -1
  51. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +1 -0
  52. data/lib/new_relic/agent/database.rb +3 -2
  53. data/lib/new_relic/agent/database_adapter.rb +1 -0
  54. data/lib/new_relic/agent/datastores/metric_helper.rb +9 -8
  55. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +2 -0
  56. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +1 -0
  57. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +2 -1
  58. data/lib/new_relic/agent/datastores/mongo.rb +1 -0
  59. data/lib/new_relic/agent/datastores/redis.rb +3 -2
  60. data/lib/new_relic/agent/datastores.rb +4 -3
  61. data/lib/new_relic/agent/deprecator.rb +1 -0
  62. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +1 -0
  63. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +16 -16
  64. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +9 -9
  65. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +18 -18
  66. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +8 -8
  67. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +2 -2
  68. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +40 -39
  69. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +16 -14
  70. data/lib/new_relic/agent/distributed_tracing.rb +17 -17
  71. data/lib/new_relic/agent/encoding_normalizer.rb +1 -0
  72. data/lib/new_relic/agent/error_collector.rb +6 -4
  73. data/lib/new_relic/agent/error_event_aggregator.rb +3 -3
  74. data/lib/new_relic/agent/error_filter.rb +1 -0
  75. data/lib/new_relic/agent/error_trace_aggregator.rb +2 -1
  76. data/lib/new_relic/agent/event_aggregator.rb +20 -19
  77. data/lib/new_relic/agent/event_buffer.rb +1 -0
  78. data/lib/new_relic/agent/event_listener.rb +1 -0
  79. data/lib/new_relic/agent/event_loop.rb +7 -6
  80. data/lib/new_relic/agent/external.rb +9 -8
  81. data/lib/new_relic/agent/guid_generator.rb +2 -1
  82. data/lib/new_relic/agent/harvester.rb +1 -0
  83. data/lib/new_relic/agent/heap.rb +3 -2
  84. data/lib/new_relic/agent/hostname.rb +4 -2
  85. data/lib/new_relic/agent/http_clients/abstract.rb +1 -1
  86. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +5 -5
  87. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +4 -4
  88. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +1 -1
  89. data/lib/new_relic/agent/http_clients/uri_util.rb +1 -1
  90. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +6 -4
  91. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +10 -4
  92. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +6 -4
  93. data/lib/new_relic/agent/instrumentation/active_job.rb +2 -1
  94. data/lib/new_relic/agent/instrumentation/active_merchant.rb +2 -1
  95. data/lib/new_relic/agent/instrumentation/active_record.rb +9 -8
  96. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +15 -14
  97. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +3 -2
  98. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +1 -0
  99. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +5 -3
  100. data/lib/new_relic/agent/instrumentation/active_storage.rb +2 -1
  101. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +16 -14
  102. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +1 -0
  103. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +1 -0
  104. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +1 -0
  105. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +2 -1
  106. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +2 -1
  107. data/lib/new_relic/agent/instrumentation/authlogic.rb +2 -1
  108. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +10 -9
  109. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +10 -10
  110. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +4 -3
  111. data/lib/new_relic/agent/instrumentation/bunny.rb +1 -1
  112. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +13 -9
  113. data/lib/new_relic/agent/instrumentation/curb/chain.rb +21 -21
  114. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +8 -8
  115. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +2 -2
  116. data/lib/new_relic/agent/instrumentation/curb.rb +2 -1
  117. data/lib/new_relic/agent/instrumentation/data_mapper.rb +43 -42
  118. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +1 -1
  119. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +2 -2
  120. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +1 -1
  121. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +3 -2
  122. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +3 -2
  123. data/lib/new_relic/agent/instrumentation/excon.rb +2 -1
  124. data/lib/new_relic/agent/instrumentation/grape/chain.rb +6 -5
  125. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +5 -4
  126. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +4 -3
  127. data/lib/new_relic/agent/instrumentation/grape.rb +1 -0
  128. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +98 -0
  129. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +90 -0
  130. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +112 -0
  131. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +31 -0
  132. data/lib/new_relic/agent/instrumentation/grpc/helper.rb +33 -0
  133. data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +70 -0
  134. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +135 -0
  135. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +36 -0
  136. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +27 -0
  137. data/lib/new_relic/agent/instrumentation/grpc_client.rb +24 -0
  138. data/lib/new_relic/agent/instrumentation/grpc_server.rb +26 -0
  139. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +1 -0
  140. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +6 -5
  141. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +1 -0
  142. data/lib/new_relic/agent/instrumentation/httpclient.rb +2 -1
  143. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +1 -0
  144. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +4 -3
  145. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +1 -0
  146. data/lib/new_relic/agent/instrumentation/httprb.rb +2 -1
  147. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +2 -1
  148. data/lib/new_relic/agent/instrumentation/logger/chain.rb +2 -1
  149. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +5 -0
  150. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +1 -0
  151. data/lib/new_relic/agent/instrumentation/logger.rb +2 -1
  152. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +2 -2
  153. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +19 -19
  154. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +8 -8
  155. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +17 -14
  156. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +14 -14
  157. data/lib/new_relic/agent/instrumentation/memcache.rb +1 -1
  158. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +1 -0
  159. data/lib/new_relic/agent/instrumentation/mongo.rb +2 -1
  160. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +14 -12
  161. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +1 -0
  162. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +5 -4
  163. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +1 -0
  164. data/lib/new_relic/agent/instrumentation/net_http.rb +2 -1
  165. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +5 -4
  166. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +1 -0
  167. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +1 -0
  168. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +1 -0
  169. data/lib/new_relic/agent/instrumentation/padrino.rb +2 -1
  170. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +3 -2
  171. data/lib/new_relic/agent/instrumentation/queue_time.rb +1 -0
  172. data/lib/new_relic/agent/instrumentation/rack/chain.rb +12 -11
  173. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +1 -0
  174. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +7 -6
  175. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +4 -3
  176. data/lib/new_relic/agent/instrumentation/rack.rb +1 -0
  177. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +6 -5
  178. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -0
  179. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +3 -1
  180. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +3 -1
  181. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +3 -1
  182. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +3 -2
  183. data/lib/new_relic/agent/instrumentation/rake/chain.rb +2 -1
  184. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +1 -1
  185. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +1 -0
  186. data/lib/new_relic/agent/instrumentation/rake.rb +3 -2
  187. data/lib/new_relic/agent/instrumentation/redis/chain.rb +3 -3
  188. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +5 -5
  189. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +3 -3
  190. data/lib/new_relic/agent/instrumentation/redis.rb +2 -1
  191. data/lib/new_relic/agent/instrumentation/resque/chain.rb +2 -1
  192. data/lib/new_relic/agent/instrumentation/resque/helper.rb +1 -0
  193. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +1 -0
  194. data/lib/new_relic/agent/instrumentation/resque.rb +3 -2
  195. data/lib/new_relic/agent/instrumentation/sequel.rb +8 -7
  196. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -0
  197. data/lib/new_relic/agent/instrumentation/sidekiq.rb +6 -4
  198. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +1 -0
  199. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +2 -1
  200. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +1 -0
  201. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +1 -0
  202. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +2 -1
  203. data/lib/new_relic/agent/instrumentation/sinatra.rb +2 -1
  204. data/lib/new_relic/agent/instrumentation/sunspot.rb +2 -1
  205. data/lib/new_relic/agent/instrumentation/thread/chain.rb +2 -1
  206. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +1 -0
  207. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +1 -0
  208. data/lib/new_relic/agent/instrumentation/thread.rb +2 -1
  209. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +1 -0
  210. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +1 -0
  211. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +1 -0
  212. data/lib/new_relic/agent/instrumentation/tilt.rb +1 -0
  213. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +1 -0
  214. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +6 -5
  215. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +1 -0
  216. data/lib/new_relic/agent/instrumentation/typhoeus.rb +2 -1
  217. data/lib/new_relic/agent/instrumentation.rb +1 -0
  218. data/lib/new_relic/agent/internal_agent_error.rb +1 -0
  219. data/lib/new_relic/agent/javascript_instrumentor.rb +7 -6
  220. data/lib/new_relic/agent/linking_metadata.rb +2 -2
  221. data/lib/new_relic/agent/log_event_aggregator.rb +6 -5
  222. data/lib/new_relic/agent/log_once.rb +1 -0
  223. data/lib/new_relic/agent/log_priority.rb +1 -0
  224. data/lib/new_relic/agent/logging.rb +13 -12
  225. data/lib/new_relic/agent/memory_logger.rb +1 -0
  226. data/lib/new_relic/agent/messaging.rb +18 -18
  227. data/lib/new_relic/agent/method_tracer.rb +6 -5
  228. data/lib/new_relic/agent/method_tracer_helpers.rb +8 -5
  229. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +3 -2
  230. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +3 -2
  231. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -0
  232. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +2 -1
  233. data/lib/new_relic/agent/monitors.rb +5 -4
  234. data/lib/new_relic/agent/new_relic_service/encoders.rb +2 -1
  235. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +4 -3
  236. data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -0
  237. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +1 -0
  238. data/lib/new_relic/agent/new_relic_service.rb +11 -11
  239. data/lib/new_relic/agent/noticible_error.rb +1 -1
  240. data/lib/new_relic/agent/null_logger.rb +1 -0
  241. data/lib/new_relic/agent/obfuscator.rb +2 -1
  242. data/lib/new_relic/agent/parameter_filtering.rb +1 -0
  243. data/lib/new_relic/agent/payload_metric_mapping.rb +1 -0
  244. data/lib/new_relic/agent/pipe_channel_manager.rb +6 -5
  245. data/lib/new_relic/agent/pipe_service.rb +1 -0
  246. data/lib/new_relic/agent/prepend_supportability.rb +2 -1
  247. data/lib/new_relic/agent/priority_sampled_buffer.rb +2 -1
  248. data/lib/new_relic/agent/range_extensions.rb +8 -27
  249. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +2 -1
  250. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +1 -0
  251. data/lib/new_relic/agent/rules_engine.rb +2 -1
  252. data/lib/new_relic/agent/sampler.rb +1 -0
  253. data/lib/new_relic/agent/sampler_collection.rb +1 -0
  254. data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -0
  255. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +1 -0
  256. data/lib/new_relic/agent/samplers/memory_sampler.rb +5 -4
  257. data/lib/new_relic/agent/samplers/object_sampler.rb +1 -0
  258. data/lib/new_relic/agent/samplers/vm_sampler.rb +1 -0
  259. data/lib/new_relic/agent/span_event_aggregator.rb +2 -1
  260. data/lib/new_relic/agent/span_event_primitive.rb +15 -11
  261. data/lib/new_relic/agent/sql_sampler.rb +7 -6
  262. data/lib/new_relic/agent/stats.rb +3 -1
  263. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -0
  264. data/lib/new_relic/agent/stats_engine/stats_hash.rb +3 -2
  265. data/lib/new_relic/agent/stats_engine.rb +1 -0
  266. data/lib/new_relic/agent/synthetics_event_aggregator.rb +6 -5
  267. data/lib/new_relic/agent/system_info.rb +8 -7
  268. data/lib/new_relic/agent/threading/agent_thread.rb +11 -6
  269. data/lib/new_relic/agent/threading/backtrace_node.rb +6 -3
  270. data/lib/new_relic/agent/threading/backtrace_service.rb +1 -0
  271. data/lib/new_relic/agent/threading/thread_profile.rb +1 -0
  272. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -0
  273. data/lib/new_relic/agent/tracer.rb +17 -14
  274. data/lib/new_relic/agent/transaction/abstract_segment.rb +64 -31
  275. data/lib/new_relic/agent/transaction/datastore_segment.rb +12 -11
  276. data/lib/new_relic/agent/transaction/distributed_tracer.rb +52 -47
  277. data/lib/new_relic/agent/transaction/distributed_tracing.rb +21 -21
  278. data/lib/new_relic/agent/transaction/external_request_segment.rb +36 -27
  279. data/lib/new_relic/agent/transaction/message_broker_segment.rb +6 -5
  280. data/lib/new_relic/agent/transaction/request_attributes.rb +29 -28
  281. data/lib/new_relic/agent/transaction/segment.rb +8 -7
  282. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -0
  283. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -0
  284. data/lib/new_relic/agent/transaction/trace.rb +3 -2
  285. data/lib/new_relic/agent/transaction/trace_builder.rb +10 -9
  286. data/lib/new_relic/agent/transaction/trace_context.rb +22 -19
  287. data/lib/new_relic/agent/transaction/trace_node.rb +9 -8
  288. data/lib/new_relic/agent/transaction/tracing.rb +7 -6
  289. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -0
  290. data/lib/new_relic/agent/transaction.rb +22 -21
  291. data/lib/new_relic/agent/transaction_error_primitive.rb +9 -8
  292. data/lib/new_relic/agent/transaction_event_aggregator.rb +5 -4
  293. data/lib/new_relic/agent/transaction_event_primitive.rb +3 -3
  294. data/lib/new_relic/agent/transaction_event_recorder.rb +14 -12
  295. data/lib/new_relic/agent/transaction_metrics.rb +3 -2
  296. data/lib/new_relic/agent/transaction_sampler.rb +4 -3
  297. data/lib/new_relic/agent/transaction_time_aggregator.rb +13 -12
  298. data/lib/new_relic/agent/utilization/aws.rb +4 -3
  299. data/lib/new_relic/agent/utilization/azure.rb +1 -0
  300. data/lib/new_relic/agent/utilization/gcp.rb +6 -5
  301. data/lib/new_relic/agent/utilization/pcf.rb +3 -2
  302. data/lib/new_relic/agent/utilization/vendor.rb +27 -26
  303. data/lib/new_relic/agent/utilization_data.rb +1 -0
  304. data/lib/new_relic/agent/vm/jruby_vm.rb +1 -0
  305. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -0
  306. data/lib/new_relic/agent/vm/mri_vm.rb +1 -0
  307. data/lib/new_relic/agent/vm/snapshot.rb +1 -0
  308. data/lib/new_relic/agent/vm.rb +1 -0
  309. data/lib/new_relic/agent/worker_loop.rb +2 -1
  310. data/lib/new_relic/agent.rb +11 -10
  311. data/lib/new_relic/cli/command.rb +5 -4
  312. data/lib/new_relic/cli/commands/deployments.rb +9 -8
  313. data/lib/new_relic/cli/commands/install.rb +6 -5
  314. data/lib/new_relic/coerce.rb +4 -4
  315. data/lib/new_relic/collection_helper.rb +2 -1
  316. data/lib/new_relic/control/class_methods.rb +1 -0
  317. data/lib/new_relic/control/frameworks/external.rb +1 -0
  318. data/lib/new_relic/control/frameworks/rails.rb +3 -2
  319. data/lib/new_relic/control/frameworks/rails3.rb +1 -0
  320. data/lib/new_relic/control/frameworks/rails4.rb +1 -0
  321. data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -0
  322. data/lib/new_relic/control/frameworks/ruby.rb +1 -0
  323. data/lib/new_relic/control/frameworks/sinatra.rb +1 -0
  324. data/lib/new_relic/control/frameworks.rb +1 -0
  325. data/lib/new_relic/control/instance_methods.rb +5 -4
  326. data/lib/new_relic/control/instrumentation.rb +7 -6
  327. data/lib/new_relic/control/server_methods.rb +2 -1
  328. data/lib/new_relic/control.rb +1 -0
  329. data/lib/new_relic/delayed_job_injection.rb +1 -0
  330. data/lib/new_relic/dependency_detection.rb +18 -16
  331. data/lib/new_relic/environment_report.rb +1 -0
  332. data/lib/new_relic/helper.rb +4 -3
  333. data/lib/new_relic/language_support.rb +6 -0
  334. data/lib/new_relic/latest_changes.rb +1 -0
  335. data/lib/new_relic/local_environment.rb +5 -6
  336. data/lib/new_relic/metric_data.rb +3 -2
  337. data/lib/new_relic/metric_spec.rb +2 -1
  338. data/lib/new_relic/noticed_error.rb +1 -1
  339. data/lib/new_relic/rack/agent_hooks.rb +1 -0
  340. data/lib/new_relic/rack/agent_middleware.rb +1 -0
  341. data/lib/new_relic/rack/browser_monitoring.rb +3 -2
  342. data/lib/new_relic/rack.rb +1 -0
  343. data/lib/new_relic/recipes/capistrano3.rb +7 -6
  344. data/lib/new_relic/recipes/capistrano_legacy.rb +12 -11
  345. data/lib/new_relic/recipes.rb +1 -0
  346. data/lib/new_relic/supportability_helper.rb +5 -4
  347. data/lib/new_relic/version.rb +3 -2
  348. data/lib/newrelic_rpm.rb +1 -0
  349. data/lib/sequel/extensions/newrelic_instrumentation.rb +6 -5
  350. data/lib/sequel/plugins/newrelic_instrumentation.rb +1 -0
  351. data/lib/tasks/all.rb +1 -0
  352. data/lib/tasks/config.rake +2 -1
  353. data/lib/tasks/coverage_report.rake +22 -11
  354. data/lib/tasks/install.rake +1 -0
  355. data/lib/tasks/instrumentation_generator/README.md +63 -0
  356. data/lib/tasks/instrumentation_generator/TODO.md +33 -0
  357. data/lib/tasks/instrumentation_generator/instrumentation.thor +96 -0
  358. data/lib/tasks/instrumentation_generator/templates/Envfile.tt +10 -0
  359. data/lib/tasks/instrumentation_generator/templates/chain.tt +22 -0
  360. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +7 -0
  361. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +30 -0
  362. data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +13 -0
  363. data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +3 -0
  364. data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +19 -0
  365. data/lib/tasks/instrumentation_generator/templates/prepend.tt +14 -0
  366. data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +3 -0
  367. data/lib/tasks/instrumentation_generator/templates/test.tt +16 -0
  368. data/lib/tasks/multiverse.rake +1 -0
  369. data/lib/tasks/multiverse.rb +8 -7
  370. data/lib/tasks/newrelic.rb +1 -0
  371. data/lib/tasks/tests.rake +1 -0
  372. data/newrelic.yml +505 -486
  373. data/newrelic_rpm.gemspec +15 -17
  374. data/recipes/newrelic.rb +1 -0
  375. data/test/agent_helper.rb +114 -118
  376. metadata +58 -89
  377. data/bin/mongrel_rpm +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e16c313766a7d9c51bc1a1c3031f666747b4a3aefa773cf226d28510d90d6658
4
- data.tar.gz: cb464a40400ce3b4a41178f737fa804952bfe22de66dc88f73deccaa256520a6
3
+ metadata.gz: 5293c4968708ee7ff95720c57446722d8649e7095fd44f03b88f562d156b7cbf
4
+ data.tar.gz: df7b918b393af7aa8852bbb2867e0f7468a0ce7e78316f3a0cb8e0cedeb2aaeb
5
5
  SHA512:
6
- metadata.gz: 93915783c6110bbc027d03d614b5ad582ba0bf73b93933d4a93f11a7e698fd82436c74b3b941c27846e6e1ae408b7d8929b9c1d7dcae0e6103ed3ded2836c9c2
7
- data.tar.gz: f7a5196e10ecd5dd88ed16b218cdcb760511d3747f1c821ccc7f4b6c5e22c28a1e08d581022513d04e6540d6d5cd62419cc587c05c8154d4a7abe6a574944a97
6
+ metadata.gz: 863115396ffd0b911d11da3d0ccbe8a4e7bc98f6d406080261c4a41272a78139406146524e0f3f121ae0f729635235b40c8666caf8b70b9e20182d82b178789c
7
+ data.tar.gz: 24f7b15184ec2fd778712a215e4f6fc7d029c37b3cfb3f1efe9d0d085999abe2e795b6f644c6ac420904de3a5c7759797e462c94deb73173566c536c8bf3cb54
data/.gitignore CHANGED
@@ -16,6 +16,7 @@ tags
16
16
  *.swo
17
17
 
18
18
  coverage
19
+ coverage_*
19
20
  /doc/
20
21
  /log/
21
22
  /lerg/
data/.rubocop.yml CHANGED
@@ -1,5 +1,12 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
1
3
  require:
4
+ # Default minitest configurations: https://github.com/rubocop/rubocop-minitest/blob/master/config/default.yml
5
+ - rubocop-minitest
6
+ # Default performance configurations: https://github.com/rubocop/rubocop-performance/blob/master/config/default.yml
2
7
  - rubocop-performance
8
+ # Default rake configurations: https://github.com/rubocop/rubocop-rake/blob/master/config/default.yml
9
+ <%= '- rubocop-rake' if RUBY_VERSION >= '2.4.0' %>
3
10
 
4
11
  AllCops:
5
12
  TargetRubyVersion: 2.7
@@ -256,7 +263,9 @@ Layout/LineEndStringConcatenationIndentation:
256
263
  Enabled: false
257
264
 
258
265
  Layout/LineLength:
259
- Enabled: false
266
+ # TODO: get this down to something closer to the 80 col ideal
267
+ # we should be able to manage 120
268
+ Max: 576
260
269
 
261
270
  Layout/MultilineArrayBraceLayout:
262
271
  Enabled: true
@@ -1361,9 +1370,6 @@ Style/FormatString:
1361
1370
  Style/FormatStringToken:
1362
1371
  Enabled: false
1363
1372
 
1364
- Style/FrozenStringLiteralComment:
1365
- Enabled: false
1366
-
1367
1373
  # Disabling for now
1368
1374
  Style/GlobalStdStream:
1369
1375
  Enabled: false
@@ -1468,18 +1474,27 @@ Style/MapToHash:
1468
1474
  Enabled: false
1469
1475
 
1470
1476
  Style/MethodCallWithArgsParentheses:
1471
- Enabled: false
1477
+ Enabled: true
1478
+ AllowedMethods:
1479
+ - puts
1480
+ - require
1481
+ - raise
1482
+ - include
1483
+ - fail
1484
+ - print
1485
+ - add_dependency
1486
+ - add_development_dependency
1487
+ AllowedPatterns: [^assert, ^refute]
1472
1488
 
1473
- # Disabling for now
1474
1489
  Style/MethodCallWithoutArgsParentheses:
1475
1490
  Enabled: false
1476
- IgnoredMethods: []
1491
+ AllowedMethods: []
1477
1492
 
1478
1493
  Style/MethodCalledOnDoEndBlock:
1479
1494
  Enabled: false
1480
1495
 
1481
1496
  Style/MethodDefParentheses:
1482
- Enabled: false
1497
+ Enabled: true
1483
1498
 
1484
1499
  Style/MinMax:
1485
1500
  Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,243 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2022-09-09 22:01:39 UTC using RuboCop version 1.36.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 4
10
+ # This cop supports safe autocorrection (--autocorrect).
11
+ # Configuration parameters: EnforcedStyle.
12
+ # SupportedStyles: empty_lines, no_empty_lines
13
+ Layout/EmptyLinesAroundBlockBody:
14
+ Exclude:
15
+ - 'test/multiverse/suites/active_record/db/schema.rb'
16
+ - 'test/multiverse/suites/active_record_pg/db/schema.rb'
17
+
18
+ # Offense count: 52
19
+ # This cop supports safe autocorrection (--autocorrect).
20
+ Minitest/AssertEmptyLiteral:
21
+ Enabled: false
22
+
23
+ # Offense count: 13
24
+ # This cop supports safe autocorrection (--autocorrect).
25
+ Minitest/AssertEqual:
26
+ Exclude:
27
+ - 'test/multiverse/suites/config_file_loading/config_file_loading_test.rb'
28
+ - 'test/new_relic/agent/configuration/default_source_test.rb'
29
+ - 'test/new_relic/agent/error_trace_aggregator_test.rb'
30
+ - 'test/new_relic/agent/method_tracer_helpers_test.rb'
31
+ - 'test/new_relic/agent/method_tracer_test.rb'
32
+ - 'test/new_relic/agent/transaction_sampler_test.rb'
33
+ - 'test/new_relic/metric_data_test.rb'
34
+
35
+ # Offense count: 145
36
+ # This cop supports safe autocorrection (--autocorrect).
37
+ Minitest/AssertInDelta:
38
+ Enabled: false
39
+
40
+ # Offense count: 22
41
+ # This cop supports safe autocorrection (--autocorrect).
42
+ Minitest/AssertIncludes:
43
+ Exclude:
44
+ - 'test/agent_helper.rb'
45
+ - 'test/multiverse/suites/rails/active_support_logger_test.rb'
46
+ - 'test/multiverse/suites/sequel/sequel_plugin_test.rb'
47
+ - 'test/multiverse/suites/sinatra_agent_disabled/shim_test.rb'
48
+ - 'test/new_relic/agent/audit_logger_test.rb'
49
+ - 'test/new_relic/agent/configuration/manager_test.rb'
50
+ - 'test/new_relic/agent/configuration/orphan_configuration_test.rb'
51
+ - 'test/new_relic/agent/error_trace_aggregator_test.rb'
52
+ - 'test/new_relic/agent/javascript_instrumentor_test.rb'
53
+ - 'test/new_relic/agent/method_visibility_test.rb'
54
+ - 'test/new_relic/agent/sampler_test.rb'
55
+ - 'test/new_relic/agent/tracer_state_test.rb'
56
+ - 'test/new_relic/control/instance_methods_test.rb'
57
+ - 'test/new_relic/environment_report_test.rb'
58
+ - 'test/new_relic/metric_data_test.rb'
59
+
60
+ # Offense count: 4
61
+ # This cop supports safe autocorrection (--autocorrect).
62
+ Minitest/AssertKindOf:
63
+ Exclude:
64
+ - 'test/new_relic/agent/agent_test.rb'
65
+ - 'test/new_relic/agent/pipe_channel_manager_test.rb'
66
+ - 'test/new_relic/agent_test.rb'
67
+
68
+ # Offense count: 4
69
+ # This cop supports safe autocorrection (--autocorrect).
70
+ Minitest/AssertNil:
71
+ Exclude:
72
+ - 'test/multiverse/suites/agent_only/log_events_test.rb'
73
+
74
+ # Offense count: 5
75
+ # This cop supports safe autocorrection (--autocorrect).
76
+ Minitest/AssertPathExists:
77
+ Exclude:
78
+ - 'infinite_tracing/test/support/fixtures.rb'
79
+ - 'test/multiverse/suites/mongo/helpers/mongo_server_test.rb'
80
+
81
+ # Offense count: 140
82
+ # This cop supports safe autocorrection (--autocorrect).
83
+ Minitest/AssertPredicate:
84
+ Enabled: false
85
+
86
+ # Offense count: 6
87
+ Minitest/AssertRaisesCompoundBody:
88
+ Exclude:
89
+ - 'test/new_relic/agent/collector_response_code_test.rb'
90
+ - 'test/new_relic/agent/new_relic_service_test.rb'
91
+ - 'test/new_relic/cli/commands/deployments_test.rb'
92
+
93
+ # Offense count: 9
94
+ # This cop supports safe autocorrection (--autocorrect).
95
+ Minitest/AssertRespondTo:
96
+ Exclude:
97
+ - 'test/multiverse/suites/sequel/sequel_plugin_test.rb'
98
+ - 'test/multiverse/suites/sinatra_agent_disabled/shim_test.rb'
99
+ - 'test/new_relic/agent/configuration/default_source_test.rb'
100
+ - 'test/new_relic/collection_helper_test.rb'
101
+ - 'test/new_relic/data_container_tests.rb'
102
+
103
+ # Offense count: 35
104
+ # This cop supports safe autocorrection (--autocorrect).
105
+ Minitest/AssertTruthy:
106
+ Exclude:
107
+ - 'test/multiverse/suites/agent_only/error_events_test.rb'
108
+ - 'test/multiverse/suites/rack/puma_rack_urlmap_test.rb'
109
+ - 'test/multiverse/suites/sequel/sequel_safety_test.rb'
110
+ - 'test/new_relic/agent/commands/thread_profiler_session_test.rb'
111
+ - 'test/new_relic/agent/configuration/environment_source_test.rb'
112
+ - 'test/new_relic/agent/configuration/manager_test.rb'
113
+ - 'test/new_relic/agent/configuration/security_policy_source_test.rb'
114
+ - 'test/new_relic/agent/configuration/yaml_source_test.rb'
115
+ - 'test/new_relic/agent/distributed_tracing/distributed_trace_payload_test.rb'
116
+ - 'test/new_relic/agent/distributed_tracing/trace_context_payload_test.rb'
117
+ - 'test/new_relic/agent/priority_sampled_buffer_test.rb'
118
+ - 'test/new_relic/agent/transaction/distributed_tracing_test.rb'
119
+ - 'test/new_relic/agent_test.rb'
120
+ - 'test/new_relic/gem_notifications_tests.rb'
121
+ - 'test/new_relic/language_support_test.rb'
122
+
123
+ # Offense count: 27
124
+ Minitest/AssertWithExpectedArgument:
125
+ Exclude:
126
+ - 'infinite_tracing/test/infinite_tracing/worker_test.rb'
127
+ - 'test/agent_helper.rb'
128
+ - 'test/multiverse/suites/grpc/grpc_client_test.rb'
129
+ - 'test/multiverse/suites/rails/error_tracing_test.rb'
130
+ - 'test/multiverse/suites/sidekiq/sidekiq_instrumentation_test.rb'
131
+ - 'test/new_relic/agent/agent_test.rb'
132
+ - 'test/new_relic/agent/configuration/default_source_test.rb'
133
+ - 'test/new_relic/agent/configuration/orphan_configuration_test.rb'
134
+ - 'test/new_relic/agent/datastores/redis_test.rb'
135
+ - 'test/new_relic/agent/distributed_tracing/distributed_tracing_cross_agent_test.rb'
136
+ - 'test/new_relic/agent/method_tracer_helpers_test.rb'
137
+ - 'test/new_relic/control_test.rb'
138
+
139
+ # Offense count: 4
140
+ Minitest/DuplicateTestRun:
141
+ Exclude:
142
+ - 'test/multiverse/suites/rails/error_tracing_test.rb'
143
+ - 'test/multiverse/suites/sinatra/ignoring_test.rb'
144
+
145
+ # Offense count: 38
146
+ # This cop supports safe autocorrection (--autocorrect).
147
+ Minitest/LiteralAsActualArgument:
148
+ Exclude:
149
+ - 'test/multiverse/suites/rails/active_support_logger_test.rb'
150
+ - 'test/new_relic/agent/configuration/environment_source_test.rb'
151
+ - 'test/new_relic/agent/connect/request_builder_test.rb'
152
+ - 'test/new_relic/agent/error_trace_aggregator_test.rb'
153
+ - 'test/new_relic/agent/instrumentation/controller_instrumentation_test.rb'
154
+ - 'test/new_relic/agent/new_relic_service_test.rb'
155
+ - 'test/new_relic/agent/samplers/cpu_sampler_test.rb'
156
+ - 'test/new_relic/agent/samplers/memory_sampler_test.rb'
157
+ - 'test/new_relic/agent/stats_test.rb'
158
+ - 'test/new_relic/agent/transaction/abstract_segment_test.rb'
159
+ - 'test/new_relic/agent/transaction/datastore_segment_test.rb'
160
+ - 'test/new_relic/agent/transaction_sampler_test.rb'
161
+ - 'test/new_relic/gem_notifications_tests.rb'
162
+ - 'test/new_relic/marshalling_test_cases.rb'
163
+ - 'test/new_relic/noticed_error_test.rb'
164
+
165
+ # Offense count: 260
166
+ Minitest/MultipleAssertions:
167
+ Max: 28
168
+
169
+ # Offense count: 9
170
+ # This cop supports safe autocorrection (--autocorrect).
171
+ Minitest/RefuteEqual:
172
+ Exclude:
173
+ - 'test/agent_helper.rb'
174
+ - 'test/multiverse/suites/config_file_loading/config_file_loading_test.rb'
175
+ - 'test/new_relic/agent/agent_test.rb'
176
+ - 'test/new_relic/agent/configuration/manager_test.rb'
177
+ - 'test/new_relic/marshalling_test_cases.rb'
178
+
179
+ # Offense count: 121
180
+ # This cop supports safe autocorrection (--autocorrect).
181
+ Minitest/RefuteFalse:
182
+ Enabled: false
183
+
184
+ # Offense count: 16
185
+ # This cop supports safe autocorrection (--autocorrect).
186
+ Minitest/RefuteIncludes:
187
+ Exclude:
188
+ - 'test/multiverse/suites/datamapper/datamapper_test.rb'
189
+ - 'test/multiverse/suites/grpc/grpc_server_test.rb'
190
+ - 'test/multiverse/suites/mongo/helpers/mongo_operation_tests.rb'
191
+ - 'test/multiverse/suites/mongo/mongo2_instrumentation_test.rb'
192
+ - 'test/multiverse/suites/rack/rack_cascade_test.rb'
193
+ - 'test/new_relic/agent/configuration/manager_test.rb'
194
+ - 'test/new_relic/control/instance_methods_test.rb'
195
+
196
+ # Offense count: 3
197
+ # This cop supports safe autocorrection (--autocorrect).
198
+ Minitest/RefutePathExists:
199
+ Exclude:
200
+ - 'test/multiverse/suites/mongo/helpers/mongo_server_test.rb'
201
+
202
+ # Offense count: 96
203
+ # This cop supports safe autocorrection (--autocorrect).
204
+ Minitest/RefutePredicate:
205
+ Enabled: false
206
+
207
+ # Offense count: 27
208
+ # This cop supports safe autocorrection (--autocorrect).
209
+ Minitest/TestMethodName:
210
+ Enabled: false
211
+
212
+ # Offense count: 2
213
+ # This cop supports safe autocorrection (--autocorrect).
214
+ Rake/Desc:
215
+ Exclude:
216
+ - 'Rakefile'
217
+ - 'lib/tasks/config.rake'
218
+
219
+ # Offense count: 15
220
+ Rake/MethodDefinitionInTask:
221
+ Exclude:
222
+ - 'Rakefile'
223
+ - 'infinite_tracing/tasks/proto.rake'
224
+ - 'lib/tasks/config.rake'
225
+ - 'lib/tasks/tests.rake'
226
+
227
+ # Offense count: 2
228
+ # This cop supports unsafe autocorrection (--autocorrect-all).
229
+ # Configuration parameters: EnforcedStyle.
230
+ # SupportedStyles: always, always_true, never
231
+ Style/FrozenStringLiteralComment:
232
+ Exclude:
233
+ - 'test/multiverse/suites/active_record/db/schema.rb'
234
+ - 'test/multiverse/suites/active_record_pg/db/schema.rb'
235
+
236
+ # Offense count: 26
237
+ # This cop supports safe autocorrection (--autocorrect).
238
+ # Configuration parameters: IgnoreMacros, AllowedMethods, IgnoredMethods, AllowedPatterns, IgnoredPatterns, IncludedMacros, AllowParenthesesInMultilineCall, AllowParenthesesInChaining, AllowParenthesesInCamelCaseMethod, AllowParenthesesInStringInterpolation, EnforcedStyle.
239
+ # SupportedStyles: require_parentheses, omit_parentheses
240
+ Style/MethodCallWithArgsParentheses:
241
+ Exclude:
242
+ - 'test/multiverse/suites/active_record/db/schema.rb'
243
+ - 'test/multiverse/suites/active_record_pg/db/schema.rb'
data/.simplecov CHANGED
@@ -1,5 +1,13 @@
1
+ # frozen_string_literal: true
2
+ require 'securerandom'
3
+
4
+ random = SecureRandom.uuid
5
+ SimpleCov.command_name(random)
6
+ SimpleCov.coverage_dir("coverage_#{random}")
7
+
1
8
  SimpleCov.start do
2
- enable_coverage :branch
9
+ enable_coverage(:branch)
3
10
  SimpleCov.root(File.join(File.dirname(__FILE__), '/lib'))
4
- track_files "**/*.rb"
11
+ track_files("**/*.rb")
12
+ formatter(SimpleCov::Formatter::SimpleFormatter)
5
13
  end
data/.snyk ADDED
@@ -0,0 +1,11 @@
1
+ exclude:
2
+ global:
3
+ # The project Dockerfile is only used to orchestrate container usage for
4
+ # local development with containers that are not to be exposed to the
5
+ # outside world. We use vanilla "ruby" images and do not layer on any
6
+ # additional software dependencies or configurations ourselves that would
7
+ # change the original "ruby" images' security profile. We defer all
8
+ # security mitigation for the images to the "ruby" image maintainers (who
9
+ # themselves are periodically updating their base Ubuntu layers to mitigate
10
+ # issues).
11
+ - Dockerfile
data/Brewfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  brew 'imagemagick'
2
3
  brew 'memcached'
3
4
  tap 'mongodb/brew'
data/CHANGELOG.md CHANGED
@@ -1,6 +1,84 @@
1
1
  # New Relic Ruby Agent Release Notes #
2
2
 
3
3
 
4
+ ## v8.10.1
5
+
6
+
7
+ * **Bugfix: Missing unscoped metrics when instrumentation.thread.tracing is enabled**
8
+
9
+ 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.
10
+
11
+ Thank you to @texpert for providing details of their situation to help resolve the issue.
12
+
13
+
14
+ * **Bugfix: gRPC instrumentation causes ArgumentError when other Google gems are present**
15
+
16
+ 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.
17
+
18
+ Thank you to @FeminismIsAwesome for bringing this issue to our attention.
19
+
20
+
21
+ ## v8.10.0
22
+
23
+
24
+ * **New gRPC instrumentation**
25
+
26
+ 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.
27
+
28
+ The following new configuration parameters have been added for gRPC. All are optional.
29
+
30
+ | Configuration name | Default | Behavior |
31
+ | ----------- | ----------- |----------- |
32
+ | `instrumentation.grpc_client` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
33
+ | `instrumentation.grpc_server` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
34
+ | `instrumentation.grpc.host_denylist` | "" | Provide a comma delimited list of host regex patterns (ex: "private.com$,exception.*") |
35
+
36
+
37
+ * **Code-level metrics functionality is enabled by default**
38
+
39
+ 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.
40
+
41
+
42
+ * **Performance: Rework timing range overlap calculations for multiple transaction segments**
43
+
44
+ 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 perfomance 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.
45
+
46
+
47
+ * **Performance: Make frozen string literals the default for the agent**
48
+
49
+ 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.
50
+
51
+
52
+ * **Bugfix: Error when setting the yaml configuration with `transaction_tracer.transaction_threshold: apdex_f`**
53
+
54
+ Originally, the agent was only checking the `transaction_tracer.transaction_threshold` from the newrelic.yml correctly if it was on two lines.
55
+
56
+ Example:
57
+
58
+ ```
59
+ # newrelic.yml
60
+ transaction_tracer:
61
+ transaction_threshold: apdex_f
62
+ ```
63
+
64
+ When this was instead changed to be on one line, the agent was not able to correctly identify the value of apdex_f.
65
+
66
+ Example:
67
+ ```
68
+ # newrelic.yml
69
+ transaction_tracer.transaction_threshold: apdex_f
70
+ ```
71
+ 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.
72
+
73
+ Thank you to @oboxodo for bringing this to our attention.
74
+
75
+
76
+ * **Bugfix: Don't modify frozen Logger**
77
+
78
+ 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.
79
+
80
+
81
+
4
82
  ## v8.9.0
5
83
 
6
84
 
data/Guardfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require './test/multiverse/lib/multiverse/bundler_patch'
2
3
 
3
4
  test_folders = Dir.glob("test/new_relic/*").select { |f| File.directory?(f) }
data/Rakefile CHANGED
@@ -1,3 +1,8 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
1
6
  require 'rubygems'
2
7
  require 'rake/testtask'
3
8
  require 'yard'
data/Thorfile ADDED
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ Dir["./lib/tasks/**/*.thor"].sort.each { |f| load f }
data/bin/newrelic CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  # executes one of the commands in the new_relic/commands directory
3
4
  # pass the name of the command as an argument
4
5
 
@@ -9,5 +10,5 @@ begin
9
10
  rescue NewRelic::Cli::Command::CommandFailure => failure
10
11
  STDERR.puts failure.message
11
12
  STDERR.puts failure.options if failure.options
12
- exit 1
13
+ exit(1)
13
14
  end
data/bin/newrelic_cmd CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  # This command has been renamed "newrelic"
3
4
  # executes one of the commands in the new_relic/commands directory
4
5
  # pass the name of the command as an argument
data/bin/nrdebug CHANGED
@@ -3,6 +3,7 @@
3
3
  # encoding: utf-8
4
4
  # This file is distributed under New Relic's license terms.
5
5
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
6
+ # frozen_string_literal: true
6
7
 
7
8
  require 'tempfile'
8
9
  require 'rbconfig'
@@ -178,10 +179,10 @@ class ProcessReport
178
179
  def open
179
180
  if @path
180
181
  File.open(@path, "w") do |f|
181
- yield f
182
+ yield(f)
182
183
  end
183
184
  else
184
- yield $stdout
185
+ yield($stdout)
185
186
  end
186
187
  end
187
188
 
data/init.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  # This is the initialization for the New Relic Ruby Agent when used as
6
7
  # a plugin
@@ -24,7 +25,7 @@ begin
24
25
  Rails.configuration
25
26
  end
26
27
 
27
- NewRelic::Control.instance.init_plugin :config => current_config
28
+ NewRelic::Control.instance.init_plugin(:config => current_config)
28
29
  rescue => e
29
- ::NewRelic::Agent.logger.error "Error initializing New Relic plugin. Agent is disabled.", e
30
+ ::NewRelic::Agent.logger.error("Error initializing New Relic plugin. Agent is disabled.", e)
30
31
  end
data/install.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  if __FILE__ == $0 || $0 =~ /script\/plugin/ || File.basename($0) == 'rake'
6
7
  $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
@@ -1,11 +1,12 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
7
8
  class AdaptiveSampler
8
- def initialize target_samples = 10, period_duration = 60
9
+ def initialize(target_samples = 10, period_duration = 60)
9
10
  @target = target_samples
10
11
  @seen = 0
11
12
  @seen_last = 0
@@ -84,7 +85,7 @@ module NewRelic
84
85
  end
85
86
  end
86
87
  if target_changed
87
- NewRelic::Agent.logger.debug "Sampling target set to: #{target}"
88
+ NewRelic::Agent.logger.debug("Sampling target set to: #{target}")
88
89
  end
89
90
  end
90
91
  end
@@ -99,7 +100,7 @@ module NewRelic
99
100
  end
100
101
  end
101
102
  if period_changed
102
- NewRelic::Agent.logger.debug "Sampling period set to: #{period_duration}"
103
+ NewRelic::Agent.logger.debug("Sampling period set to: #{period_duration}")
103
104
  end
104
105
  end
105
106
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -9,7 +10,7 @@ module NewRelic
9
10
  # data.
10
11
  def shutdown
11
12
  return unless started?
12
- ::NewRelic::Agent.logger.info "Starting Agent shutdown"
13
+ ::NewRelic::Agent.logger.info("Starting Agent shutdown")
13
14
 
14
15
  stop_event_loop
15
16
  trap_signals_for_litespeed
@@ -26,7 +27,7 @@ module NewRelic
26
27
  graceful_disconnect
27
28
  end
28
29
  rescue => e
29
- ::NewRelic::Agent.logger.error e
30
+ ::NewRelic::Agent.logger.error(e)
30
31
  end
31
32
  end
32
33
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -10,8 +11,8 @@ module NewRelic
10
11
  # before connecting, otherwise the parent process sends useless data
11
12
  def using_forking_dispatcher?
12
13
  # TODO: MAJOR VERSION - remove :rainbows
13
- if [:puma, :passenger, :rainbows, :unicorn].include? Agent.config[:dispatcher]
14
- ::NewRelic::Agent.logger.info "Deferring startup of agent reporting thread because #{Agent.config[:dispatcher]} may fork."
14
+ if [:puma, :passenger, :rainbows, :unicorn].include?(Agent.config[:dispatcher])
15
+ ::NewRelic::Agent.logger.info("Deferring startup of agent reporting thread because #{Agent.config[:dispatcher]} may fork.")
15
16
  true
16
17
  else
17
18
  false