newrelic_rpm 8.2.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (439) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -2
  3. data/.rubocop.yml +1919 -0
  4. data/.rubocop_todo.yml +100 -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 +3654 -2951
  10. data/CONTRIBUTING.md +21 -6
  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 +20 -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 +11 -7
  29. data/lib/new_relic/agent/agent.rb +94 -924
  30. data/lib/new_relic/agent/agent_helpers/connect.rb +227 -0
  31. data/lib/new_relic/agent/agent_helpers/harvest.rb +153 -0
  32. data/lib/new_relic/agent/agent_helpers/shutdown.rb +72 -0
  33. data/lib/new_relic/agent/agent_helpers/special_startup.rb +74 -0
  34. data/lib/new_relic/agent/agent_helpers/start_worker_thread.rb +167 -0
  35. data/lib/new_relic/agent/agent_helpers/startup.rb +202 -0
  36. data/lib/new_relic/agent/agent_helpers/transmit.rb +76 -0
  37. data/lib/new_relic/agent/agent_logger.rb +23 -19
  38. data/lib/new_relic/agent/attribute_filter.rb +64 -47
  39. data/lib/new_relic/agent/attribute_processing.rb +7 -7
  40. data/lib/new_relic/agent/attributes.rb +5 -4
  41. data/lib/new_relic/agent/audit_logger.rb +8 -3
  42. data/lib/new_relic/agent/autostart.rb +20 -18
  43. data/lib/new_relic/agent/chained_call.rb +1 -1
  44. data/lib/new_relic/agent/commands/agent_command.rb +3 -3
  45. data/lib/new_relic/agent/commands/agent_command_router.rb +12 -11
  46. data/lib/new_relic/agent/commands/thread_profiler_session.rb +5 -7
  47. data/lib/new_relic/agent/configuration/default_source.rb +1353 -1355
  48. data/lib/new_relic/agent/configuration/dotted_hash.rb +6 -5
  49. data/lib/new_relic/agent/configuration/environment_source.rb +11 -9
  50. data/lib/new_relic/agent/configuration/event_harvest_config.rb +13 -6
  51. data/lib/new_relic/agent/configuration/high_security_source.rb +8 -9
  52. data/lib/new_relic/agent/configuration/manager.rb +82 -68
  53. data/lib/new_relic/agent/configuration/manual_source.rb +1 -1
  54. data/lib/new_relic/agent/configuration/mask_defaults.rb +3 -3
  55. data/lib/new_relic/agent/configuration/security_policy_source.rb +82 -85
  56. data/lib/new_relic/agent/configuration/server_source.rb +19 -18
  57. data/lib/new_relic/agent/configuration/yaml_source.rb +16 -13
  58. data/lib/new_relic/agent/configuration.rb +1 -1
  59. data/lib/new_relic/agent/connect/request_builder.rb +17 -19
  60. data/lib/new_relic/agent/connect/response_handler.rb +5 -8
  61. data/lib/new_relic/agent/custom_event_aggregator.rb +14 -15
  62. data/lib/new_relic/agent/database/explain_plan_helpers.rb +4 -5
  63. data/lib/new_relic/agent/database/obfuscation_helpers.rb +14 -13
  64. data/lib/new_relic/agent/database/obfuscator.rb +2 -2
  65. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +3 -3
  66. data/lib/new_relic/agent/database.rb +37 -48
  67. data/lib/new_relic/agent/database_adapter.rb +3 -1
  68. data/lib/new_relic/agent/datastores/metric_helper.rb +17 -18
  69. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +7 -6
  70. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +6 -10
  71. data/lib/new_relic/agent/datastores/mongo.rb +1 -1
  72. data/lib/new_relic/agent/datastores/nosql_obfuscator.rb +41 -0
  73. data/lib/new_relic/agent/datastores/redis.rb +5 -7
  74. data/lib/new_relic/agent/datastores.rb +7 -9
  75. data/lib/new_relic/agent/deprecator.rb +1 -1
  76. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +6 -6
  77. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +31 -29
  78. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +22 -21
  79. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +19 -19
  80. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +49 -51
  81. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +5 -6
  82. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +76 -77
  83. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +37 -36
  84. data/lib/new_relic/agent/distributed_tracing.rb +33 -35
  85. data/lib/new_relic/agent/encoding_normalizer.rb +4 -2
  86. data/lib/new_relic/agent/error_collector.rb +27 -23
  87. data/lib/new_relic/agent/error_event_aggregator.rb +4 -5
  88. data/lib/new_relic/agent/error_filter.rb +15 -16
  89. data/lib/new_relic/agent/error_trace_aggregator.rb +4 -3
  90. data/lib/new_relic/agent/event_aggregator.rb +22 -21
  91. data/lib/new_relic/agent/event_buffer.rb +7 -8
  92. data/lib/new_relic/agent/event_listener.rb +1 -2
  93. data/lib/new_relic/agent/event_loop.rb +22 -20
  94. data/lib/new_relic/agent/external.rb +11 -12
  95. data/lib/new_relic/agent/guid_generator.rb +13 -11
  96. data/lib/new_relic/agent/harvester.rb +4 -5
  97. data/lib/new_relic/agent/heap.rb +7 -9
  98. data/lib/new_relic/agent/hostname.rb +20 -13
  99. data/lib/new_relic/agent/http_clients/abstract.rb +8 -9
  100. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +6 -11
  101. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +8 -9
  102. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +4 -5
  103. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +2 -4
  104. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +2 -4
  105. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +4 -5
  106. data/lib/new_relic/agent/http_clients/uri_util.rb +1 -3
  107. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +9 -22
  108. data/lib/new_relic/agent/instrumentation/action_controller_other_subscriber.rb +39 -0
  109. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +37 -30
  110. data/lib/new_relic/agent/instrumentation/action_dispatch.rb +31 -0
  111. data/lib/new_relic/agent/instrumentation/action_dispatch_subscriber.rb +64 -0
  112. data/lib/new_relic/agent/instrumentation/action_mailbox.rb +30 -0
  113. data/lib/new_relic/agent/instrumentation/action_mailbox_subscriber.rb +33 -0
  114. data/lib/new_relic/agent/instrumentation/action_mailer.rb +30 -0
  115. data/lib/new_relic/agent/instrumentation/action_mailer_subscriber.rb +85 -0
  116. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +18 -19
  117. data/lib/new_relic/agent/instrumentation/active_job.rb +33 -13
  118. data/lib/new_relic/agent/instrumentation/active_job_subscriber.rb +41 -0
  119. data/lib/new_relic/agent/instrumentation/active_merchant.rb +19 -5
  120. data/lib/new_relic/agent/instrumentation/active_record.rb +37 -35
  121. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +71 -61
  122. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +49 -46
  123. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +4 -4
  124. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +26 -17
  125. data/lib/new_relic/agent/instrumentation/active_storage.rb +7 -3
  126. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +8 -33
  127. data/lib/new_relic/agent/instrumentation/active_support.rb +27 -0
  128. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +23 -0
  129. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +20 -0
  130. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +12 -0
  131. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +24 -0
  132. data/lib/new_relic/agent/instrumentation/active_support_subscriber.rb +41 -0
  133. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +11 -11
  134. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +20 -22
  135. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +4 -4
  136. data/lib/new_relic/agent/instrumentation/bunny.rb +4 -5
  137. data/lib/new_relic/agent/instrumentation/concurrent_ruby/chain.rb +36 -0
  138. data/lib/new_relic/agent/instrumentation/concurrent_ruby/instrumentation.rb +21 -0
  139. data/lib/new_relic/agent/instrumentation/concurrent_ruby/prepend.rb +27 -0
  140. data/lib/new_relic/agent/instrumentation/concurrent_ruby.rb +31 -0
  141. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +67 -58
  142. data/lib/new_relic/agent/instrumentation/curb/chain.rb +41 -43
  143. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +52 -53
  144. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +12 -14
  145. data/lib/new_relic/agent/instrumentation/curb.rb +7 -7
  146. data/lib/new_relic/agent/instrumentation/custom_events.rb +12 -0
  147. data/lib/new_relic/agent/instrumentation/custom_events_subscriber.rb +37 -0
  148. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +6 -9
  149. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +4 -9
  150. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +1 -2
  151. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +28 -10
  152. data/lib/new_relic/agent/instrumentation/elasticsearch/chain.rb +29 -0
  153. data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +66 -0
  154. data/lib/new_relic/agent/instrumentation/elasticsearch/prepend.rb +13 -0
  155. data/lib/new_relic/agent/instrumentation/elasticsearch.rb +31 -0
  156. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +6 -6
  157. data/lib/new_relic/agent/instrumentation/excon.rb +24 -8
  158. data/lib/new_relic/agent/instrumentation/fiber/chain.rb +20 -0
  159. data/lib/new_relic/agent/instrumentation/fiber/instrumentation.rb +24 -0
  160. data/lib/new_relic/agent/instrumentation/fiber/prepend.rb +18 -0
  161. data/lib/new_relic/agent/instrumentation/fiber.rb +25 -0
  162. data/lib/new_relic/agent/instrumentation/grape/chain.rb +7 -8
  163. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +12 -12
  164. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +4 -4
  165. data/lib/new_relic/agent/instrumentation/grape.rb +12 -13
  166. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +97 -0
  167. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +89 -0
  168. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +111 -0
  169. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +30 -0
  170. data/lib/new_relic/agent/instrumentation/grpc/helper.rb +32 -0
  171. data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +69 -0
  172. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +134 -0
  173. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +35 -0
  174. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +26 -0
  175. data/lib/new_relic/agent/instrumentation/grpc_client.rb +23 -0
  176. data/lib/new_relic/agent/instrumentation/grpc_server.rb +25 -0
  177. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +3 -4
  178. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +7 -8
  179. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +1 -3
  180. data/lib/new_relic/agent/instrumentation/httpclient.rb +3 -3
  181. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +3 -3
  182. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +11 -11
  183. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +2 -2
  184. data/lib/new_relic/agent/instrumentation/httprb.rb +4 -4
  185. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +4 -5
  186. data/lib/new_relic/agent/instrumentation/logger/chain.rb +2 -2
  187. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +27 -20
  188. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +1 -1
  189. data/lib/new_relic/agent/instrumentation/logger.rb +7 -6
  190. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +2 -3
  191. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +26 -18
  192. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +8 -10
  193. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +20 -18
  194. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +22 -15
  195. data/lib/new_relic/agent/instrumentation/memcache.rb +22 -23
  196. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +11 -12
  197. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +5 -7
  198. data/lib/new_relic/agent/instrumentation/mongo.rb +3 -3
  199. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +21 -18
  200. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +4 -5
  201. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +10 -10
  202. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +5 -5
  203. data/lib/new_relic/agent/instrumentation/net_http.rb +8 -8
  204. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +51 -9
  205. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +1 -1
  206. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +4 -3
  207. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +2 -2
  208. data/lib/new_relic/agent/instrumentation/padrino.rb +4 -9
  209. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +6 -6
  210. data/lib/new_relic/agent/instrumentation/queue_time.rb +5 -6
  211. data/lib/new_relic/agent/instrumentation/rack/chain.rb +27 -19
  212. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +3 -2
  213. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +14 -12
  214. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +13 -7
  215. data/lib/new_relic/agent/instrumentation/rack.rb +15 -15
  216. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +15 -15
  217. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +4 -4
  218. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +9 -8
  219. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +17 -5
  220. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +8 -5
  221. data/lib/new_relic/agent/instrumentation/rails_notifications/custom_events.rb +30 -0
  222. data/lib/new_relic/agent/instrumentation/rake/chain.rb +2 -7
  223. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +14 -16
  224. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +1 -1
  225. data/lib/new_relic/agent/instrumentation/rake.rb +9 -9
  226. data/lib/new_relic/agent/instrumentation/redis/chain.rb +25 -14
  227. data/lib/new_relic/agent/instrumentation/redis/constants.rb +17 -0
  228. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +53 -25
  229. data/lib/new_relic/agent/instrumentation/redis/middleware.rb +16 -0
  230. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +10 -5
  231. data/lib/new_relic/agent/instrumentation/redis.rb +13 -7
  232. data/lib/new_relic/agent/instrumentation/resque/chain.rb +4 -5
  233. data/lib/new_relic/agent/instrumentation/resque/helper.rb +2 -2
  234. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +4 -5
  235. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +2 -3
  236. data/lib/new_relic/agent/instrumentation/resque.rb +17 -17
  237. data/lib/new_relic/agent/instrumentation/sequel.rb +16 -19
  238. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +2 -2
  239. data/lib/new_relic/agent/instrumentation/sidekiq/client.rb +20 -0
  240. data/lib/new_relic/agent/instrumentation/sidekiq/extensions/delayed_class.rb +30 -0
  241. data/lib/new_relic/agent/instrumentation/sidekiq/server.rb +37 -0
  242. data/lib/new_relic/agent/instrumentation/sidekiq.rb +24 -70
  243. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +1 -1
  244. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +2 -3
  245. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +5 -4
  246. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +1 -1
  247. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +2 -2
  248. data/lib/new_relic/agent/instrumentation/sinatra.rb +26 -17
  249. data/lib/new_relic/agent/instrumentation/thread/chain.rb +24 -0
  250. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +28 -0
  251. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +22 -0
  252. data/lib/new_relic/agent/instrumentation/thread.rb +20 -0
  253. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +1 -1
  254. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +2 -2
  255. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +1 -1
  256. data/lib/new_relic/agent/instrumentation/tilt.rb +4 -4
  257. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +5 -5
  258. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +13 -15
  259. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +2 -2
  260. data/lib/new_relic/agent/instrumentation/typhoeus.rb +2 -2
  261. data/lib/new_relic/agent/instrumentation.rb +1 -1
  262. data/lib/new_relic/agent/internal_agent_error.rb +2 -2
  263. data/lib/new_relic/agent/javascript_instrumentor.rb +38 -37
  264. data/lib/new_relic/agent/linking_metadata.rb +44 -0
  265. data/lib/new_relic/agent/local_log_decorator.rb +37 -0
  266. data/lib/new_relic/agent/log_event_aggregator.rb +235 -0
  267. data/lib/new_relic/agent/log_once.rb +1 -1
  268. data/lib/new_relic/agent/log_priority.rb +20 -0
  269. data/lib/new_relic/agent/logging.rb +21 -17
  270. data/lib/new_relic/agent/memory_logger.rb +2 -2
  271. data/lib/new_relic/agent/messaging.rb +61 -63
  272. data/lib/new_relic/agent/method_tracer.rb +28 -22
  273. data/lib/new_relic/agent/method_tracer_helpers.rb +88 -11
  274. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +16 -16
  275. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +5 -4
  276. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -2
  277. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +6 -9
  278. data/lib/new_relic/agent/monitors.rb +6 -7
  279. data/lib/new_relic/agent/new_relic_service/encoders.rb +6 -6
  280. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +5 -5
  281. data/lib/new_relic/agent/new_relic_service/marshaller.rb +2 -2
  282. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +4 -4
  283. data/lib/new_relic/agent/new_relic_service.rb +242 -185
  284. data/lib/new_relic/agent/{noticible_error.rb → noticeable_error.rb} +2 -5
  285. data/lib/new_relic/agent/null_logger.rb +7 -3
  286. data/lib/new_relic/agent/obfuscator.rb +8 -10
  287. data/lib/new_relic/agent/parameter_filtering.rb +24 -10
  288. data/lib/new_relic/agent/payload_metric_mapping.rb +9 -10
  289. data/lib/new_relic/agent/pipe_channel_manager.rb +17 -11
  290. data/lib/new_relic/agent/pipe_service.rb +7 -4
  291. data/lib/new_relic/agent/prepend_supportability.rb +2 -2
  292. data/lib/new_relic/agent/priority_sampled_buffer.rb +8 -11
  293. data/lib/new_relic/agent/range_extensions.rb +8 -28
  294. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +11 -11
  295. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +12 -13
  296. data/lib/new_relic/agent/rules_engine.rb +5 -4
  297. data/lib/new_relic/agent/sampler.rb +3 -4
  298. data/lib/new_relic/agent/sampler_collection.rb +3 -4
  299. data/lib/new_relic/agent/samplers/cpu_sampler.rb +2 -1
  300. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +6 -6
  301. data/lib/new_relic/agent/samplers/memory_sampler.rb +24 -13
  302. data/lib/new_relic/agent/samplers/object_sampler.rb +1 -1
  303. data/lib/new_relic/agent/samplers/vm_sampler.rb +21 -19
  304. data/lib/new_relic/agent/span_event_aggregator.rb +10 -10
  305. data/lib/new_relic/agent/span_event_primitive.rb +62 -56
  306. data/lib/new_relic/agent/sql_sampler.rb +17 -17
  307. data/lib/new_relic/agent/stats.rb +78 -41
  308. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +9 -11
  309. data/lib/new_relic/agent/stats_engine/stats_hash.rb +12 -13
  310. data/lib/new_relic/agent/stats_engine.rb +7 -7
  311. data/lib/new_relic/agent/synthetics_event_aggregator.rb +7 -8
  312. data/lib/new_relic/agent/system_info.rb +85 -65
  313. data/lib/new_relic/agent/threading/agent_thread.rb +18 -14
  314. data/lib/new_relic/agent/threading/backtrace_node.rb +12 -13
  315. data/lib/new_relic/agent/threading/backtrace_service.rb +10 -9
  316. data/lib/new_relic/agent/threading/thread_profile.rb +22 -22
  317. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -1
  318. data/lib/new_relic/agent/tracer.rb +82 -56
  319. data/lib/new_relic/agent/transaction/abstract_segment.rb +100 -37
  320. data/lib/new_relic/agent/transaction/datastore_segment.rb +19 -18
  321. data/lib/new_relic/agent/transaction/distributed_tracer.rb +62 -56
  322. data/lib/new_relic/agent/transaction/distributed_tracing.rb +43 -44
  323. data/lib/new_relic/agent/transaction/external_request_segment.rb +41 -34
  324. data/lib/new_relic/agent/transaction/message_broker_segment.rb +30 -29
  325. data/lib/new_relic/agent/transaction/request_attributes.rb +35 -35
  326. data/lib/new_relic/agent/transaction/segment.rb +17 -10
  327. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -3
  328. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -1
  329. data/lib/new_relic/agent/transaction/trace.rb +15 -11
  330. data/lib/new_relic/agent/transaction/trace_builder.rb +10 -10
  331. data/lib/new_relic/agent/transaction/trace_context.rb +35 -35
  332. data/lib/new_relic/agent/transaction/trace_node.rb +25 -24
  333. data/lib/new_relic/agent/transaction/tracing.rb +14 -11
  334. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +5 -5
  335. data/lib/new_relic/agent/transaction.rb +169 -125
  336. data/lib/new_relic/agent/transaction_error_primitive.rb +27 -25
  337. data/lib/new_relic/agent/transaction_event_aggregator.rb +12 -12
  338. data/lib/new_relic/agent/transaction_event_primitive.rb +32 -33
  339. data/lib/new_relic/agent/transaction_event_recorder.rb +16 -15
  340. data/lib/new_relic/agent/transaction_metrics.rb +10 -9
  341. data/lib/new_relic/agent/transaction_sampler.rb +5 -6
  342. data/lib/new_relic/agent/transaction_time_aggregator.rb +21 -20
  343. data/lib/new_relic/agent/utilization/aws.rb +33 -3
  344. data/lib/new_relic/agent/utilization/azure.rb +3 -3
  345. data/lib/new_relic/agent/utilization/gcp.rb +7 -7
  346. data/lib/new_relic/agent/utilization/pcf.rb +5 -4
  347. data/lib/new_relic/agent/utilization/vendor.rb +43 -28
  348. data/lib/new_relic/agent/utilization_data.rb +7 -5
  349. data/lib/new_relic/agent/vm/jruby_vm.rb +1 -1
  350. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +2 -2
  351. data/lib/new_relic/agent/vm/mri_vm.rb +40 -15
  352. data/lib/new_relic/agent/vm/snapshot.rb +4 -4
  353. data/lib/new_relic/agent/vm.rb +1 -1
  354. data/lib/new_relic/agent/worker_loop.rb +5 -7
  355. data/lib/new_relic/agent.rb +62 -81
  356. data/lib/new_relic/cli/command.rb +20 -22
  357. data/lib/new_relic/cli/commands/deployments.rb +91 -41
  358. data/lib/new_relic/cli/commands/install.rb +21 -24
  359. data/lib/new_relic/coerce.rb +15 -13
  360. data/lib/new_relic/collection_helper.rb +50 -48
  361. data/lib/new_relic/constants.rb +2 -1
  362. data/lib/new_relic/control/class_methods.rb +3 -3
  363. data/lib/new_relic/control/frameworks/external.rb +2 -2
  364. data/lib/new_relic/control/frameworks/rails.rb +13 -9
  365. data/lib/new_relic/control/frameworks/rails3.rb +3 -4
  366. data/lib/new_relic/control/frameworks/rails4.rb +1 -1
  367. data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -1
  368. data/lib/new_relic/control/frameworks/ruby.rb +3 -3
  369. data/lib/new_relic/control/frameworks/sinatra.rb +7 -1
  370. data/lib/new_relic/control/frameworks.rb +1 -1
  371. data/lib/new_relic/control/instance_methods.rb +26 -45
  372. data/lib/new_relic/control/instrumentation.rb +39 -11
  373. data/lib/new_relic/control/private_instance_methods.rb +48 -0
  374. data/lib/new_relic/control/server_methods.rb +3 -4
  375. data/lib/new_relic/control.rb +1 -2
  376. data/lib/new_relic/delayed_job_injection.rb +1 -1
  377. data/lib/new_relic/dependency_detection.rb +29 -28
  378. data/lib/new_relic/environment_report.rb +40 -32
  379. data/lib/new_relic/helper.rb +48 -7
  380. data/lib/new_relic/language_support.rb +29 -5
  381. data/lib/new_relic/latest_changes.rb +7 -6
  382. data/lib/new_relic/local_environment.rb +22 -26
  383. data/lib/new_relic/metric_data.rb +31 -26
  384. data/lib/new_relic/metric_spec.rb +8 -6
  385. data/lib/new_relic/noticed_error.rb +17 -21
  386. data/lib/new_relic/rack/agent_hooks.rb +1 -1
  387. data/lib/new_relic/rack/agent_middleware.rb +5 -3
  388. data/lib/new_relic/rack/browser_monitoring.rb +133 -123
  389. data/lib/new_relic/rack.rb +1 -1
  390. data/lib/new_relic/recipes/capistrano3.rb +3 -61
  391. data/lib/new_relic/recipes/capistrano_legacy.rb +23 -26
  392. data/lib/new_relic/recipes/helpers/send_deployment.rb +70 -0
  393. data/lib/new_relic/recipes.rb +1 -1
  394. data/lib/new_relic/supportability_helper.rb +8 -9
  395. data/lib/new_relic/traced_thread.rb +39 -0
  396. data/lib/new_relic/version.rb +6 -17
  397. data/lib/newrelic_rpm.rb +14 -3
  398. data/lib/sequel/extensions/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +15 -18
  399. data/lib/sequel/plugins/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +8 -14
  400. data/lib/tasks/all.rb +2 -2
  401. data/lib/tasks/config.rake +21 -117
  402. data/lib/tasks/coverage_report.rake +28 -0
  403. data/lib/tasks/helpers/format.rb +123 -0
  404. data/lib/tasks/helpers/matches.rb +12 -0
  405. data/lib/tasks/helpers/prompt.rb +24 -0
  406. data/lib/tasks/helpers/removers.rb +33 -0
  407. data/lib/tasks/install.rake +4 -0
  408. data/lib/tasks/instrumentation_generator/README.md +63 -0
  409. data/lib/tasks/instrumentation_generator/TODO.md +33 -0
  410. data/lib/tasks/instrumentation_generator/instrumentation.thor +121 -0
  411. data/lib/tasks/instrumentation_generator/templates/Envfile.tt +9 -0
  412. data/lib/tasks/instrumentation_generator/templates/chain.tt +22 -0
  413. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +8 -0
  414. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +29 -0
  415. data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +13 -0
  416. data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +3 -0
  417. data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +19 -0
  418. data/lib/tasks/instrumentation_generator/templates/prepend.tt +13 -0
  419. data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +3 -0
  420. data/lib/tasks/instrumentation_generator/templates/test.tt +15 -0
  421. data/lib/tasks/multiverse.rake +4 -0
  422. data/lib/tasks/multiverse.rb +5 -32
  423. data/lib/tasks/newrelic.rb +1 -1
  424. data/lib/tasks/tests.rake +10 -15
  425. data/newrelic.yml +544 -452
  426. data/newrelic_rpm.gemspec +35 -31
  427. data/recipes/newrelic.rb +2 -2
  428. data/test/agent_helper.rb +196 -180
  429. metadata +130 -102
  430. data/ROADMAP.md +0 -24
  431. data/bin/mongrel_rpm +0 -33
  432. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +0 -44
  433. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +0 -75
  434. data/lib/new_relic/agent/instrumentation/authlogic.rb +0 -25
  435. data/lib/new_relic/agent/instrumentation/data_mapper.rb +0 -204
  436. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +0 -26
  437. data/lib/new_relic/agent/instrumentation/sunspot.rb +0 -33
  438. /data/lib/tasks/{config.html.erb → helpers/config.html.erb} +0 -0
  439. /data/lib/tasks/{config.text.erb → helpers/config.text.erb} +0 -0
data/CONTRIBUTING.md CHANGED
@@ -31,7 +31,7 @@ incorrect.
31
31
 
32
32
  If you are planning on contributing a new feature or an otherwise complex
33
33
  contribution, we kindly ask you to start a conversation with the maintainer team
34
- by opening up an Github issue first.
34
+ by opening up a GitHub issue first.
35
35
 
36
36
 
37
37
  ### General Guidelines
@@ -66,7 +66,8 @@ issues](../../issues?q=is%3Aissue+is%3Aclosed).
66
66
  ### Pull Requests
67
67
 
68
68
  We can only accept PRs for version v6.12.0 or greater due to open source
69
- licensing restrictions.
69
+ licensing restrictions. Please set the merge branch to `dev` unless the issue
70
+ states otherwise.
70
71
 
71
72
  ### Code of Conduct
72
73
 
@@ -84,18 +85,29 @@ release from this repo, use the appropriate tag. New Relic usually pushes beta
84
85
  versions of a release to a working branch before tagging them for General
85
86
  Availability.
86
87
 
88
+ The `main` branch houses the code from the latest release. The `dev` branch
89
+ includes unreleased work. Please create all new branches off of `dev`.
90
+
87
91
  ## Development Environment Setup
88
92
 
89
93
  1. Fork and clone the repo locally
90
94
  - Fork the repository inside GitHub
91
95
  - `git clone git@github.com:<gh username>/newrelic-ruby-agent.git`
92
96
  1. Pick a Ruby version
93
- - Use rbenv or rvm to install any version of Ruby between 2.2 up to 3.0.1
97
+ - Use rbenv, rvm, chruby, asdf, etc. to install any version of Ruby between 2.4 up to the latest stable version
94
98
  1. Install development dependencies
95
99
  - `bundle install`
96
100
  1. Check that your env is setup correctly
97
101
  - `bundle exec rake`
98
102
 
103
+ **Optional:** Install [lefthook](https://github.com/evilmartians/lefthook) to
104
+ integrate our team's git hooks, such as [rubocop](https://github.com/rubocop/rubocop)
105
+ linting into your workflow.
106
+
107
+ **Note:** These setup instructions will not allow you to run the entire test
108
+ suite. Some of our suites require services such as MySQL, Postgres, Redis, and
109
+ others to run.
110
+
99
111
  ## Testing
100
112
 
101
113
  The agent includes a suite of unit and functional tests which should be used to
@@ -116,7 +128,7 @@ This will run the unit tests in standalone mode. You can run against a specific
116
128
  by passing the version name (which should match the name of a subdirectory in test/environments)
117
129
  as an argument to the test:env rake task, like this:
118
130
 
119
- bundle exec rake test:env[rails60]
131
+ bundle exec rake 'test:env[rails60]'
120
132
 
121
133
  These tests are setup to run automatically in
122
134
  [GitHub Actions](https://github.com/newrelic/newrelic-ruby-agent/actions) under several
@@ -152,6 +164,10 @@ These tests can be run by invoking:
152
164
  More details are available in
153
165
  [test/multiverse/README.md](https://github.com/newrelic/newrelic-ruby-agent/blob/main/test/multiverse/README.md).
154
166
 
167
+ ### Leveraging Docker for Development and/or Testing
168
+
169
+ See [DOCKER.md](DOCKER.md).
170
+
155
171
  ## Contributor License Agreement
156
172
 
157
173
  Keep in mind that when you submit your Pull Request, you'll need to sign the CLA
@@ -167,8 +183,7 @@ For more information about CLAs, please check out Alex Russell’s excellent pos
167
183
  We host a public Slack with a dedicated channel for contributors and maintainers
168
184
  of open source projects hosted by New Relic. If you are contributing to this
169
185
  project, you're welcome to request access to the #oss-contributors channel in
170
- the newrelicusers.slack.com workspace. To request access, see
171
- https://newrelicusers-signup.herokuapp.com/.
186
+ the newrelicusers.slack.com workspace. To request access, please use this [link](https://join.slack.com/t/newrelicusers/shared_invite/zt-1ayj69rzm-~go~Eo1whIQGYnu3qi15ng).
172
187
 
173
188
  ## Explorer's Hub
174
189
 
data/DOCKER.md ADDED
@@ -0,0 +1,167 @@
1
+ # Using Docker with the New Relic Ruby Agent
2
+
3
+ These instructions will guide you through the process of setting up Docker for
4
+ use with developing the New Relic Ruby Agent. The use of Docker containers can
5
+ provide for a consistent experience free from machine specific issues.
6
+
7
+ ## Quick Start
8
+
9
+ ```shell
10
+ # unit tests (Ruby only)
11
+ $ docker build -t newrelic_rpm .
12
+ $ docker run --rm newrelic_rpm
13
+
14
+ # or
15
+
16
+ # functional tests (MySQL, PostgreSQL, Redis, etc.)
17
+ $ docker-compose up
18
+ $ docker-compose exec app bundle exec rake test:all
19
+ ```
20
+
21
+
22
+ ## Install Docker
23
+
24
+ You will need to have [Docker Desktop](https://www.docker.com/) installed and
25
+ running on your machine.
26
+
27
+ If you are using on macOS and using [Homebrew](https://brew.sh/), Docker can be
28
+ installed as a cask via:
29
+
30
+ ```shell
31
+ $ brew install --cask docker
32
+ ```
33
+
34
+ and then launched via the `/Applications/Docker.app` launcher that is installed.
35
+
36
+ For alternatives to using macOS with Homebrew, see Docker's
37
+ [Get Started Guide](https://www.docker.com/get-started).
38
+
39
+
40
+ ## Clone the project
41
+
42
+ Use git to clone the [newrelic/newrelic-ruby-agent](https://github.com/newrelic/newrelic-ruby-agent)
43
+ project.
44
+
45
+ The [Dockerfile](Dockerfile) and [docker-compose.yml](docker-compose.yml)
46
+ files are located in the root of the project, where this `DOCKER.md`
47
+ document resides.
48
+
49
+
50
+ ## Using just the Dockerfile (unit tests and standalone dev only)
51
+
52
+ The project `Dockerfile` can be used by itself to run the project unit tests.
53
+ Docker Compose and the project `docker-compose.yml` file will be needed to
54
+ run functional tests which involve communicating with data systems such as
55
+ PostgreSQL and Redis.
56
+
57
+ To run the unit tests using `Dockerfile` by itself, first change
58
+ directories to the root of the project, then build an image, and
59
+ finally run a container from the image:
60
+
61
+ ```shell
62
+ $ cd /path/to/project/git/clone
63
+ $ docker build -t newrelic_rpm .
64
+ $ docker run --rm newrelic_rpm
65
+ ```
66
+
67
+ The `Dockerfile` specifies a default Ruby version to test with. To override this
68
+ version, pass the `ruby_version` build arg like so when building the image:
69
+
70
+ ```shell
71
+ docker build --build-arg ruby_version=2.7 .
72
+ ```
73
+
74
+ **Legend:**
75
+ * `build -t <TAG>` applies a tag to the image during building.
76
+ * `.` indicates "here" and tells Docker that the `Dockerfile` file can be found
77
+ in the current directory
78
+ * `run --rm` tells Docker to remove the container after the tests complete.
79
+ * `--build-arg ruby_version=<RUBY VERSION>` specifies that a given Ruby version should be used (use MAJOR.MINOR or optionally MAJOR.MINOR.PATCH)
80
+
81
+
82
+ ## Using Docker Compose (for functional tests and developing with services)
83
+
84
+ Docker Compose launches multiple containers simultaneously to support the
85
+ running of the functional tests that require a variety of data handling
86
+ server applications such as PostgreSQL, Redis, memcached, etc. Each one of
87
+ these server applications uses its own container and then there's a Ruby
88
+ container (referred to as the "app" container) that runs the Minitest tests
89
+ while connecting to the other containers.
90
+
91
+ In one shell session, change to the root of the project and then bring up all
92
+ containers with Docker Compose:
93
+
94
+ ```shell
95
+ $ docker-compose up
96
+ ```
97
+
98
+ By default, `docker-compose` will use the default Ruby version specified in the
99
+ `Dockerfile` file. To override this version with a custom desired version, set
100
+ the `RUBY_VERSION` environment variable before calling `docker-compose`,
101
+ like so:
102
+
103
+ ```shell
104
+ RUBY_VERSION=3.0 docker-compose up
105
+ ```
106
+
107
+ In a separate shell session (probably in a separate terminal split, tab, or
108
+ window), execute the 'test:all' rake task to test all standard, environment,
109
+ and multiverse tests:
110
+
111
+ ```shell
112
+ $ docker-compose exec app bundle exec rake test:all
113
+ ```
114
+
115
+ In lieu of running the tests, an interactive Bash shell can be
116
+ launched against the running Ruby app container for development and/or
117
+ debugging. While the `docker-compose up` shell session is still running,
118
+ bring up an additional local shell session and run the following:
119
+
120
+ ```shell
121
+ $ docker-compose exec app bash
122
+ ```
123
+
124
+ You will be dropped at a Bash prompt as the "relic" user, with "ruby" and
125
+ "bundle" in your PATH.
126
+
127
+
128
+ ## Output
129
+
130
+ When using Docker Compose, one shell session will produce STDOUT output that
131
+ pertains to all of the services (MySQL, MongoDB, etc.) and the other shell
132
+ session will produce STDOUT output related to the Ruby based functional tests.
133
+ Both streams of output may provide information about any errors or warnings
134
+ that take place.
135
+
136
+
137
+ ## Cleanup
138
+
139
+ If the project `Dockerfile` is being used without Docker Compose, then use
140
+ `docker ps` to show information about containers and `docker images`
141
+ for information about images. The `docker stop`, `docker kill`, `docker rm`
142
+ and `docker rmi` commands can be used with the appropriate container and image
143
+ ids. Run `docker --help` or read through the hosted [CLI documentation](https://docs.docker.com/engine/reference/commandline/docker/).
144
+
145
+ When Docker Compose is used, invoking `ctrl-c` in the shell session that is
146
+ running the `docker-compose up` command should suffice to prompt Docker Compose
147
+ to shut down all running containers. Otherwise, `docker-compose down` can be
148
+ ran after the `docker-compose up` process has been stopped. All relevant
149
+ containers and images can then be optionally discarded using the `docker` CLI
150
+ commands described in the previous paragraph.
151
+
152
+ Use `docker ps -a` to show a list of all containers. Pass a container id to
153
+ `docker rm` (ex: `docker rm 5c15ee2f1c4f`) to remove it.
154
+
155
+ Use `docker images` to show a list of all images. Typically, you'll want to
156
+ keep these images if you plan on running Docker with them again in the future.
157
+ If you are done with them, you can pass an image id to `docker rmi` to remove
158
+ an image (ex: `docker rmi 4253856b2570`).
159
+
160
+ ## Questions, Feature Requests, Contributions, etc.
161
+
162
+ The maintainers of New Relic's Ruby agent project are hopeful that the use of
163
+ containers and these instructions can provide consistency and a lowered barrier
164
+ of entry when it comes to providing contributions to the agent project itself.
165
+
166
+ For questions, feature requests, proposals to support Podman, PRs to improve
167
+ behavior or documentation, etc., please see [CONTRIBUTING.md](CONTRIBUTING.md).
data/Dockerfile ADDED
@@ -0,0 +1,10 @@
1
+ ARG ruby_version=3.1
2
+
3
+ FROM ruby:$ruby_version
4
+
5
+ WORKDIR /usr/src/app
6
+
7
+ COPY . .
8
+ RUN bundle install
9
+
10
+ CMD ["bundle", "exec", "rake"]
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # This file is distributed under New Relic's license terms.
3
2
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
3
  # frozen_string_literal: true
data/Guardfile CHANGED
@@ -1,24 +1,25 @@
1
+ # frozen_string_literal: true
1
2
  require './test/multiverse/lib/multiverse/bundler_patch'
2
3
 
3
- test_folders = Dir.glob("test/new_relic/*").select{|f| File.directory?(f)}
4
- test_folders += Dir.glob("test/new_relic/**/*").select{|f| File.directory?(f)}
4
+ test_folders = Dir.glob("test/new_relic/*").select { |f| File.directory?(f) }
5
+ test_folders += Dir.glob("test/new_relic/**/*").select { |f| File.directory?(f) }
5
6
 
6
- rake_lib_path = Bundler.with_unbundled_env{ `bundle exec gem which rake`.chomp.gsub("lib/rake.rb", "lib") }
7
- ruby_options = %{-w -I"#{rake_lib_path}" "#{rake_lib_path}/rake/rake_test_loader.rb"}
7
+ rake_lib_path = Bundler.with_unbundled_env { `bundle exec gem which rake`.chomp.gsub("lib/rake.rb", "lib") }
8
+ ruby_options = %(-w -I"#{rake_lib_path}" "#{rake_lib_path}/rake/rake_test_loader.rb")
8
9
 
9
10
  guard_options = {
10
11
  spring: "bundle exec ruby #{ruby_options} ",
11
- test_folders: ['test/new_relic'] + test_folders,
12
+ test_folders: ['test/new_relic'] + test_folders,
12
13
  all_after_pass: false,
13
14
  all_on_start: false
14
15
  }
15
16
 
16
17
  guard :minitest, guard_options do
17
- watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
18
+ watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
18
19
  watch(%r{^test/.+_test\.rb$})
19
- watch(%r{^test/rum/.*}) { "test/new_relic/rack/browser_monitoring_test.rb" }
20
+ watch(%r{^test/rum/.*}) { "test/new_relic/rack/browser_monitoring_test.rb" }
20
21
  watch(%r{^test/fixtures/cross_agent_tests/distributed_tracing/(.+).json}) { |m| "test/new_relic/agent/distributed_tracing/#{m[1]}_cross_agent_test.rb" }
21
- watch('test/test_helper.rb') { "test/new_relic" }
22
+ watch('test/test_helper.rb') { "test/new_relic" }
22
23
  watch('test/agent_helper.rb') { "test/new_relic" }
23
24
  watch('lib/new_relic/agent/configuration/default_source.rb') { "test/new_relic/agent/configuration/orphan_configuration_test.rb" }
24
25
  watch(%r{^lib/new_relic/agent/transaction/(.+).rb}) { |m| "test/new_relic/agent/distributed_tracing/#{m[1]}_cross_agent_test.rb" }
data/LICENSE CHANGED
@@ -175,10 +175,6 @@
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- Versions 6.12.0 and above for this project are licensed under
179
- Apache 2.0. For prior versions of this project, please see the
180
- LICENSE file in the root directory of that version for more information.
181
-
182
178
  APPENDIX: How to apply the Apache License to your work.
183
179
 
184
180
  To apply the Apache License to your work, attach the following
@@ -204,5 +200,3 @@
204
200
  See the License for the specific language governing permissions and
205
201
  limitations under the License.
206
202
 
207
-
208
-
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
- [![Community Plus header](https://github.com/newrelic/opensource-website/raw/master/src/images/categories/Community_Plus.png)](https://opensource.newrelic.com/oss-category/#community-plus)
1
+ [![Community Plus header](https://github.com/newrelic/opensource-website/raw/main/src/images/categories/Community_Plus.png)](https://opensource.newrelic.com/oss-category/#community-plus)
2
+
2
3
 
3
4
  # New Relic Ruby Agent
4
5
 
@@ -8,9 +9,11 @@ You can also extend the agent's performance monitoring to
8
9
  [collect and analyze business data](https://docs.newrelic.com/docs/agents/ruby-agent/getting-started/introduction-new-relic-ruby#business-data)
9
10
  to help you improve the customer experience and make data-driven business decisions.
10
11
 
11
- The New Relic Ruby Agent is dual-purposed as a either a Gem or a Rails plugin,
12
+ The New Relic Ruby agent is dual-purposed as either a Gem or a Rails plugin,
12
13
  hosted on [github](https://github.com/newrelic/newrelic-ruby-agent).
13
14
 
15
+ This code is actively maintained by New Relic engineering teams and delivered here in GitHub. See below for troubleshooting and defect reporting instructions.
16
+
14
17
  [![Gem Version](https://badge.fury.io/rb/newrelic_rpm.svg)](https://badge.fury.io/rb/newrelic_rpm)
15
18
 
16
19
  ## Supported Environments
@@ -23,13 +26,13 @@ Environments" section below.
23
26
 
24
27
  ## Installing and Using
25
28
 
26
- The latest released gem for the Ruby Agent can be found at [Rubygems.org](https://rubygems.org/gems/newrelic_rpm)
29
+ The latest released gem for the Ruby agent can be found at [Rubygems.org](https://rubygems.org/gems/newrelic_rpm)
27
30
 
28
31
  ### Quick Start
29
32
 
30
33
  #### With Bundler
31
34
 
32
- For using with Bundler, add the Ruby Agent to your project's Gemfile.
35
+ For using with Bundler, add the Ruby agent to your project's Gemfile.
33
36
 
34
37
  ```ruby
35
38
  gem 'newrelic_rpm'
@@ -71,16 +74,17 @@ For complete documentation on installing the New Relic Ruby agent, see the follo
71
74
  * [GAE Flexible Environment](https://docs.newrelic.com/docs/agents/ruby-agent/installation/install-new-relic-ruby-agent-gae-flexible-environment)
72
75
  * [Pure Rack Apps](http://docs.newrelic.com/docs/ruby/rack-middlewares)
73
76
  * [Ruby agent and Heroku](https://docs.newrelic.com/docs/agents/ruby-agent/installation/ruby-agent-heroku)
74
- * [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs)
77
+ * [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/monitor-ruby-background-processes)
75
78
  * [Uninstall the Ruby agent](https://docs.newrelic.com/docs/agents/ruby-agent/installation/uninstall-ruby-agent)
76
79
 
77
80
  ### Recording Deploys
78
81
 
79
- The Ruby Agent supports recording deployments in New Relic via a command line
80
- tool or Capistrano recipes. For more information on these features see
82
+ The Ruby agent supports recording deployments in New Relic via a command line
83
+ tool or Capistrano recipes. For more information on these features, see
81
84
  [our deployment documentation](http://docs.newrelic.com/docs/ruby/recording-deployments-with-the-ruby-agent)
82
85
  for more information.
83
86
 
87
+
84
88
  ## Support
85
89
 
86
90
  Should you need assistance with New Relic products, you are in good hands with several support diagnostic tools and support channels.
@@ -89,7 +93,7 @@ This [troubleshooting framework](https://discuss.newrelic.com/t/ruby-troubleshoo
89
93
 
90
94
  New Relic offers NRDiag, [a client-side diagnostic utility](https://docs.newrelic.com/docs/using-new-relic/cross-product-functions/troubleshooting/new-relic-diagnostics) that automatically detects common problems with New Relic agents. If NRDiag detects a problem, it suggests troubleshooting steps. NRDiag can also automatically attach troubleshooting data to a New Relic Support ticket.
91
95
 
92
- If the issue has been confirmed as a bug or is a Feature request, please file a Github issue.
96
+ If the issue has been confirmed as a bug or is a Feature request, please file a GitHub issue.
93
97
 
94
98
  **Support Channels**
95
99
 
@@ -103,17 +107,14 @@ If the issue has been confirmed as a bug or is a Feature request, please file a
103
107
 
104
108
  At New Relic we take your privacy and the security of your information seriously, and are committed to protecting your information. We must emphasize the importance of not sharing personal data in public forums, and ask all users to scrub logs and diagnostic information for sensitive information, whether personal, proprietary, or otherwise.
105
109
 
106
- We define “Personal Data” as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address and email address.
110
+ We define “Personal Data” as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address, and email address.
107
111
 
108
112
  Please review [New Relic’s General Data Privacy Notice](https://newrelic.com/termsandconditions/privacy) for more information.
109
113
 
110
- ## Roadmap
111
- See our [roadmap](https://github.com/newrelic/newrelic-ruby-agent/blob/main/ROADMAP.md), to learn more about our product vision, understand our plans, and provide us valuable feedback.
112
-
113
114
  ## Contributing
114
115
 
115
- We encourage contributions to improve the New Relic Ruby agent! Keep in mind when you submit your pull request, you'll need to sign the CLA via the click-through using CLA-Assistant. You only have to sign the CLA one time per project.
116
- If you have any questions, or to execute our corporate CLA, required if your contribution is on behalf of a company, please drop us an email at opensource@newrelic.com.
116
+ We encourage contributions to improve the New Relic Ruby agent! Keep in mind when you submit your pull request, you'll need to sign the Contributor License Agreement (CLA) via the click-through using CLA-Assistant. You only have to sign the CLA one time per project.
117
+ If you have any questions, or to execute our corporate CLA (required if your contribution is on behalf of a company), please drop us an email at opensource@newrelic.com.
117
118
 
118
119
  **A note about vulnerabilities**
119
120
 
@@ -128,13 +129,12 @@ the [New Relic Ruby agent](https://opensource.newrelic.com/projects/newrelic/new
128
129
 
129
130
  ## License
130
131
 
131
- The New Relic Ruby agent is licensed under the [Apache 2.0](http://apache.org/licenses/LICENSE-2.0.txt) License.
132
- The New Relic Ruby agent also uses source code from third-party libraries. Full details on which libraries are used and the terms under which they are licensed can be found in the [THIRD_PARTY_NOTICES.md](https://github.com/newrelic/newrelic-ruby-agent/blob/main/THIRD_PARTY_NOTICES.md).
132
+ As of version 6.12 (released July 16, 2020), the New Relic Ruby agent is licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for a copy of the license. For older agent versions, check the LICENSE file included with the source code.
133
133
 
134
- ## Thank You
134
+ The New Relic Ruby agent may use source code from third-party libraries. When used, these libraries will be outlined in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
135
135
 
136
- Thank you, and may your application scale to infinity plus one.
136
+ ## Thank You
137
137
 
138
- Lew Cirne, Founder
138
+ Thank you,
139
139
 
140
- New Relic, Inc.
140
+ New Relic Ruby agent team
data/Rakefile CHANGED
@@ -1,7 +1,13 @@
1
+ # This file is distributed under New Relic's license terms.
2
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3
+ # frozen_string_literal: true
4
+
1
5
  require 'rubygems'
2
6
  require 'rake/testtask'
3
7
  require 'yard'
4
8
  require "#{File.dirname(__FILE__)}/lib/tasks/all.rb"
9
+ require_relative 'lib/tasks/helpers/prompt'
10
+ include Prompt
5
11
 
6
12
  YARD::Rake::YardocTask.new
7
13
 
@@ -10,16 +16,7 @@ task :test => ['test:newrelic']
10
16
 
11
17
  namespace :test do
12
18
  desc "Run all tests"
13
- task :all => %w{newrelic multiverse}
14
-
15
- begin
16
- require 'test_bisect'
17
- TestBisect::BisectTask.new do |t|
18
- t.test_task_name = 'test:newrelic'
19
- end
20
- rescue LoadError
21
- end
22
-
19
+ task :all => %w[newrelic multiverse all_compatible_envs]
23
20
  agent_home = File.expand_path(File.dirname(__FILE__))
24
21
 
25
22
  desc "Run agent performance tests"
@@ -27,14 +24,21 @@ namespace :test do
27
24
  require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'performance', 'lib', 'performance'))
28
25
  options = {}
29
26
  options[:suite] = args[:suite] if args[:suite]
30
- options[:name] = args[:name] if args[:name]
27
+ options[:name] = args[:name] if args[:name]
31
28
  Performance::Runner.new(options).run_and_report
32
29
  end
33
30
 
34
- desc "Run agent within existing mini environments"
35
- task :env, [:env1, :env2, :env3, :env4, :env5, :env6] => [] do |t, args|
31
+ desc "Run agent within existing mini environment(s): env[name1,name2,name3,etc.]"
32
+ task :env do |t, args|
36
33
  require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'environments', 'lib', 'environments', 'runner'))
37
- Environments::Runner.new(args.map{|_,v| v}).run_and_report
34
+ Environments::Runner.new(args.to_a).run_and_report
35
+ end
36
+
37
+ desc "Run all mini environment tests known to work with the current Ruby version"
38
+ task :all_compatible_envs do |t, args|
39
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'helpers', 'ruby_rails_mappings'))
40
+ rails_versions = rails_versions_for_ruby_version(RUBY_VERSION)
41
+ Rake::Task['test:env'].invoke(*rails_versions)
38
42
  end
39
43
 
40
44
  Rake::TestTask.new(:intentional_fail) do |t|
@@ -51,15 +55,14 @@ namespace :test do
51
55
 
52
56
  # Note unit testing task is defined in lib/tasks/tests.rake to facilitate
53
57
  # running them in a rails application environment.
54
-
55
58
  end
56
59
 
57
60
  desc 'Record build number and stage'
58
- task :record_build, [ :build_number, :stage ] do |t, args|
61
+ task :record_build, [:build_number, :stage] do |t, args|
59
62
  build_string = args.build_number
60
63
  build_string << ".#{args.stage}" unless args.stage.nil? || args.stage.empty?
61
64
 
62
- gitsha = File.exists?(".git") ? `git rev-parse HEAD` : "Unknown"
65
+ gitsha = File.exist?(".git") ? `git rev-parse HEAD` : "Unknown"
63
66
  gitsha.chomp!
64
67
 
65
68
  File.open("lib/new_relic/build.rb", "w") do |f|
@@ -110,31 +113,26 @@ task :update_ca_bundle do |t|
110
113
  end
111
114
 
112
115
  namespace :cross_agent_tests do
113
- cross_agent_tests_upstream_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'cross_agent_tests'))
114
- cross_agent_tests_local_path = File.expand_path(File.join(File.dirname(__FILE__), 'test', 'fixtures', 'cross_agent_tests'))
116
+ CROSS_AGENT_TESTS_UPSTREAM_PATH = File.expand_path(File.join('..', 'cross_agent_tests')).freeze
117
+ CROSS_AGENT_TESTS_LOCAL_PATH = File.expand_path(File.join('test', 'fixtures', 'cross_agent_tests')).freeze
115
118
 
116
- # Note: before you pull, make sure your local repo is on the correct, synced branch!
117
119
  desc 'Pull latest changes from cross_agent_tests repo'
118
120
  task :pull do
119
- puts "Updating embedded cross_agent_tests from #{cross_agent_tests_upstream_path}..."
120
- cmd = "rsync -avu --exclude .git #{cross_agent_tests_upstream_path}/ #{cross_agent_tests_local_path}/"
121
- puts cmd
122
- system(cmd)
121
+ command = " rsync -av --exclude .git #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/ #{CROSS_AGENT_TESTS_LOCAL_PATH}/"
122
+ prompt_to_continue(command)
123
123
  end
124
124
 
125
125
  desc 'Copy changes from embedded cross_agent_tests to official repo working copy'
126
126
  task :push do
127
- puts "Copying changes from embedded cross_agent_tests to #{cross_agent_tests_upstream_path}..."
128
- cmd = "rsync -avu #{cross_agent_tests_local_path}/ #{cross_agent_tests_upstream_path}/"
129
- puts cmd
130
- system(cmd)
127
+ command = "rsync -av #{CROSS_AGENT_TESTS_LOCAL_PATH}/ #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/"
128
+ prompt_to_continue(command, 'remote (agent spec repo)')
131
129
  end
132
130
  end
133
131
 
132
+ desc 'Start an interactive console session'
134
133
  task :console do
135
134
  require 'pry'
136
135
  require 'newrelic_rpm'
137
136
  ARGV.clear
138
137
  Pry.start
139
138
  end
140
-