newrelic_rpm 7.0.0 → 8.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rubocop.yml +1941 -0
  4. data/.yardopts +1 -0
  5. data/Brewfile +10 -0
  6. data/CHANGELOG.md +431 -1
  7. data/CONTRIBUTING.md +32 -5
  8. data/DOCKER.md +167 -0
  9. data/Dockerfile +10 -0
  10. data/Guardfile +8 -8
  11. data/LICENSE +0 -6
  12. data/README.md +20 -18
  13. data/Rakefile +39 -29
  14. data/THIRD_PARTY_NOTICES.md +14 -199
  15. data/bin/mongrel_rpm +8 -9
  16. data/bin/newrelic +1 -1
  17. data/bin/nrdebug +14 -14
  18. data/docker-compose.yml +85 -0
  19. data/init.rb +0 -2
  20. data/lefthook.yml +9 -0
  21. data/lib/new_relic/agent/adaptive_sampler.rb +9 -5
  22. data/lib/new_relic/agent/agent.rb +72 -49
  23. data/lib/new_relic/agent/agent_logger.rb +15 -9
  24. data/lib/new_relic/agent/attribute_filter.rb +31 -31
  25. data/lib/new_relic/agent/attributes.rb +2 -2
  26. data/lib/new_relic/agent/audit_logger.rb +4 -0
  27. data/lib/new_relic/agent/autostart.rb +19 -17
  28. data/lib/new_relic/agent/commands/agent_command.rb +2 -2
  29. data/lib/new_relic/agent/commands/agent_command_router.rb +6 -5
  30. data/lib/new_relic/agent/commands/thread_profiler_session.rb +7 -6
  31. data/lib/new_relic/agent/configuration/default_source.rb +731 -476
  32. data/lib/new_relic/agent/configuration/dotted_hash.rb +3 -3
  33. data/lib/new_relic/agent/configuration/environment_source.rb +5 -4
  34. data/lib/new_relic/agent/configuration/event_harvest_config.rb +39 -16
  35. data/lib/new_relic/agent/configuration/high_security_source.rb +7 -7
  36. data/lib/new_relic/agent/configuration/manager.rb +74 -64
  37. data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -1
  38. data/lib/new_relic/agent/configuration/security_policy_source.rb +73 -73
  39. data/lib/new_relic/agent/configuration/server_source.rb +14 -12
  40. data/lib/new_relic/agent/configuration/yaml_source.rb +26 -5
  41. data/lib/new_relic/agent/connect/request_builder.rb +14 -15
  42. data/lib/new_relic/agent/connect/response_handler.rb +0 -3
  43. data/lib/new_relic/agent/custom_event_aggregator.rb +9 -9
  44. data/lib/new_relic/agent/database/explain_plan_helpers.rb +3 -4
  45. data/lib/new_relic/agent/database/obfuscation_helpers.rb +12 -12
  46. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +2 -2
  47. data/lib/new_relic/agent/database.rb +30 -31
  48. data/lib/new_relic/agent/datastores/metric_helper.rb +13 -11
  49. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +2 -3
  50. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +3 -5
  51. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +1 -2
  52. data/lib/new_relic/agent/datastores/mongo.rb +5 -10
  53. data/lib/new_relic/agent/datastores/redis.rb +2 -4
  54. data/lib/new_relic/agent/datastores.rb +7 -9
  55. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +9 -9
  56. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +21 -16
  57. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +10 -12
  58. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +42 -43
  59. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +3 -3
  60. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +41 -43
  61. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +25 -25
  62. data/lib/new_relic/agent/distributed_tracing.rb +17 -18
  63. data/lib/new_relic/agent/encoding_normalizer.rb +1 -1
  64. data/lib/new_relic/agent/error_collector.rb +65 -50
  65. data/lib/new_relic/agent/error_event_aggregator.rb +1 -1
  66. data/lib/new_relic/agent/error_filter.rb +173 -0
  67. data/lib/new_relic/agent/error_trace_aggregator.rb +1 -1
  68. data/lib/new_relic/agent/event_aggregator.rb +1 -1
  69. data/lib/new_relic/agent/event_buffer.rb +6 -7
  70. data/lib/new_relic/agent/event_listener.rb +0 -1
  71. data/lib/new_relic/agent/event_loop.rb +14 -14
  72. data/lib/new_relic/agent/external.rb +1 -34
  73. data/lib/new_relic/agent/guid_generator.rb +2 -9
  74. data/lib/new_relic/agent/harvester.rb +3 -4
  75. data/lib/new_relic/agent/heap.rb +1 -3
  76. data/lib/new_relic/agent/hostname.rb +16 -10
  77. data/lib/new_relic/agent/http_clients/abstract.rb +7 -9
  78. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +1 -5
  79. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +4 -4
  80. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +3 -3
  81. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +1 -2
  82. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +8 -3
  83. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +2 -3
  84. data/lib/new_relic/agent/http_clients/uri_util.rb +0 -1
  85. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +2 -3
  86. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +28 -26
  87. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +5 -7
  88. data/lib/new_relic/agent/instrumentation/active_job.rb +12 -5
  89. data/lib/new_relic/agent/instrumentation/active_merchant.rb +17 -3
  90. data/lib/new_relic/agent/instrumentation/active_record.rb +20 -18
  91. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +56 -46
  92. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +28 -25
  93. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +3 -3
  94. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +22 -16
  95. data/lib/new_relic/agent/instrumentation/active_storage.rb +1 -1
  96. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +23 -0
  97. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +20 -0
  98. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +12 -0
  99. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +24 -0
  100. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +18 -9
  101. data/lib/new_relic/agent/instrumentation/authlogic.rb +10 -0
  102. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +1 -1
  103. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +8 -9
  104. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +52 -46
  105. data/lib/new_relic/agent/instrumentation/curb/chain.rb +20 -21
  106. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +34 -38
  107. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +10 -11
  108. data/lib/new_relic/agent/instrumentation/data_mapper.rb +22 -10
  109. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +5 -7
  110. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +5 -9
  111. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +23 -4
  112. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +2 -2
  113. data/lib/new_relic/agent/instrumentation/excon.rb +3 -23
  114. data/lib/new_relic/agent/instrumentation/grape/chain.rb +1 -2
  115. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +6 -7
  116. data/lib/new_relic/agent/instrumentation/grape.rb +2 -3
  117. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +2 -3
  118. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +0 -1
  119. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +0 -2
  120. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +2 -2
  121. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +6 -6
  122. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +1 -1
  123. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +2 -3
  124. data/lib/new_relic/agent/instrumentation/logger/chain.rb +21 -0
  125. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +58 -0
  126. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +13 -0
  127. data/lib/new_relic/agent/instrumentation/logger.rb +26 -0
  128. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +7 -2
  129. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +5 -1
  130. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +9 -2
  131. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +9 -10
  132. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +5 -6
  133. data/lib/new_relic/agent/instrumentation/mongo.rb +3 -141
  134. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +4 -4
  135. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +3 -4
  136. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +5 -5
  137. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +4 -4
  138. data/lib/new_relic/agent/instrumentation/net_http.rb +7 -2
  139. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +2 -3
  140. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +23 -19
  141. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +3 -2
  142. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +2 -2
  143. data/lib/new_relic/agent/instrumentation/padrino.rb +2 -5
  144. data/lib/new_relic/agent/instrumentation/queue_time.rb +8 -8
  145. data/lib/new_relic/agent/instrumentation/rack/chain.rb +8 -7
  146. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +2 -1
  147. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +4 -5
  148. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +2 -2
  149. data/lib/new_relic/agent/instrumentation/rack.rb +1 -1
  150. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +11 -47
  151. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +2 -2
  152. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +0 -1
  153. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +11 -0
  154. data/lib/new_relic/agent/instrumentation/rake/chain.rb +0 -5
  155. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +6 -6
  156. data/lib/new_relic/agent/instrumentation/rake.rb +1 -1
  157. data/lib/new_relic/agent/instrumentation/redis/chain.rb +6 -6
  158. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +2 -2
  159. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +1 -1
  160. data/lib/new_relic/agent/instrumentation/redis.rb +5 -1
  161. data/lib/new_relic/agent/instrumentation/resque/chain.rb +2 -3
  162. data/lib/new_relic/agent/instrumentation/resque/helper.rb +19 -0
  163. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +9 -7
  164. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +1 -2
  165. data/lib/new_relic/agent/instrumentation/resque.rb +17 -8
  166. data/lib/new_relic/agent/instrumentation/sequel.rb +7 -9
  167. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -1
  168. data/lib/new_relic/agent/instrumentation/sidekiq.rb +22 -1
  169. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +0 -1
  170. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +12 -5
  171. data/lib/new_relic/agent/instrumentation/sinatra.rb +21 -11
  172. data/lib/new_relic/agent/instrumentation/sunspot.rb +11 -1
  173. data/lib/new_relic/agent/instrumentation/thread/chain.rb +24 -0
  174. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +27 -0
  175. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +22 -0
  176. data/lib/new_relic/agent/instrumentation/thread.rb +20 -0
  177. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +24 -0
  178. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +40 -0
  179. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +13 -0
  180. data/lib/new_relic/agent/instrumentation/tilt.rb +25 -0
  181. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +4 -4
  182. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +3 -5
  183. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +1 -1
  184. data/lib/new_relic/agent/internal_agent_error.rb +1 -1
  185. data/lib/new_relic/agent/javascript_instrumentor.rb +38 -33
  186. data/lib/new_relic/agent/linking_metadata.rb +45 -0
  187. data/lib/new_relic/agent/local_log_decorator.rb +37 -0
  188. data/lib/new_relic/agent/log_event_aggregator.rb +234 -0
  189. data/lib/new_relic/agent/log_priority.rb +20 -0
  190. data/lib/new_relic/agent/logging.rb +11 -8
  191. data/lib/new_relic/agent/memory_logger.rb +1 -1
  192. data/lib/new_relic/agent/messaging.rb +46 -62
  193. data/lib/new_relic/agent/method_tracer.rb +145 -144
  194. data/lib/new_relic/agent/method_tracer_helpers.rb +82 -2
  195. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +21 -13
  196. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +2 -2
  197. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +0 -1
  198. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +4 -7
  199. data/lib/new_relic/agent/monitors.rb +1 -2
  200. data/lib/new_relic/agent/new_relic_service/encoders.rb +4 -4
  201. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +1 -1
  202. data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -1
  203. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +4 -3
  204. data/lib/new_relic/agent/new_relic_service.rb +61 -53
  205. data/lib/new_relic/agent/noticible_error.rb +0 -2
  206. data/lib/new_relic/agent/null_logger.rb +6 -2
  207. data/lib/new_relic/agent/obfuscator.rb +6 -8
  208. data/lib/new_relic/agent/parameter_filtering.rb +16 -8
  209. data/lib/new_relic/agent/payload_metric_mapping.rb +8 -9
  210. data/lib/new_relic/agent/pipe_channel_manager.rb +15 -12
  211. data/lib/new_relic/agent/pipe_service.rb +6 -3
  212. data/lib/new_relic/agent/priority_sampled_buffer.rb +4 -7
  213. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +9 -9
  214. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +12 -12
  215. data/lib/new_relic/agent/rules_engine.rb +2 -2
  216. data/lib/new_relic/agent/sampler.rb +2 -3
  217. data/lib/new_relic/agent/sampler_collection.rb +2 -3
  218. data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -1
  219. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +10 -7
  220. data/lib/new_relic/agent/samplers/memory_sampler.rb +9 -3
  221. data/lib/new_relic/agent/samplers/vm_sampler.rb +18 -18
  222. data/lib/new_relic/agent/span_event_aggregator.rb +10 -10
  223. data/lib/new_relic/agent/span_event_primitive.rb +48 -45
  224. data/lib/new_relic/agent/sql_sampler.rb +9 -9
  225. data/lib/new_relic/agent/stats.rb +62 -37
  226. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +7 -9
  227. data/lib/new_relic/agent/stats_engine/stats_hash.rb +8 -9
  228. data/lib/new_relic/agent/stats_engine.rb +7 -7
  229. data/lib/new_relic/agent/synthetics_event_aggregator.rb +1 -2
  230. data/lib/new_relic/agent/system_info.rb +22 -20
  231. data/lib/new_relic/agent/threading/agent_thread.rb +4 -5
  232. data/lib/new_relic/agent/threading/backtrace_node.rb +6 -9
  233. data/lib/new_relic/agent/threading/backtrace_service.rb +12 -13
  234. data/lib/new_relic/agent/threading/thread_profile.rb +16 -19
  235. data/lib/new_relic/agent/tracer.rb +57 -72
  236. data/lib/new_relic/agent/transaction/abstract_segment.rb +38 -10
  237. data/lib/new_relic/agent/transaction/datastore_segment.rb +7 -6
  238. data/lib/new_relic/agent/transaction/distributed_tracer.rb +8 -9
  239. data/lib/new_relic/agent/transaction/distributed_tracing.rb +21 -22
  240. data/lib/new_relic/agent/transaction/external_request_segment.rb +6 -5
  241. data/lib/new_relic/agent/transaction/message_broker_segment.rb +24 -30
  242. data/lib/new_relic/agent/transaction/request_attributes.rb +7 -7
  243. data/lib/new_relic/agent/transaction/segment.rb +6 -3
  244. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +0 -2
  245. data/lib/new_relic/agent/transaction/trace.rb +8 -8
  246. data/lib/new_relic/agent/transaction/trace_context.rb +14 -16
  247. data/lib/new_relic/agent/transaction/trace_node.rb +16 -16
  248. data/lib/new_relic/agent/transaction/tracing.rb +9 -6
  249. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -2
  250. data/lib/new_relic/agent/transaction.rb +132 -119
  251. data/lib/new_relic/agent/transaction_error_primitive.rb +18 -16
  252. data/lib/new_relic/agent/transaction_event_aggregator.rb +7 -8
  253. data/lib/new_relic/agent/transaction_event_primitive.rb +29 -29
  254. data/lib/new_relic/agent/transaction_event_recorder.rb +1 -1
  255. data/lib/new_relic/agent/transaction_metrics.rb +8 -7
  256. data/lib/new_relic/agent/transaction_sampler.rb +0 -1
  257. data/lib/new_relic/agent/transaction_time_aggregator.rb +11 -11
  258. data/lib/new_relic/agent/utilization/aws.rb +32 -2
  259. data/lib/new_relic/agent/utilization/azure.rb +1 -1
  260. data/lib/new_relic/agent/utilization/vendor.rb +15 -2
  261. data/lib/new_relic/agent/utilization_data.rb +3 -4
  262. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -1
  263. data/lib/new_relic/agent/vm/mri_vm.rb +13 -1
  264. data/lib/new_relic/agent/vm/snapshot.rb +4 -4
  265. data/lib/new_relic/agent/worker_loop.rb +8 -10
  266. data/lib/new_relic/agent.rb +36 -41
  267. data/lib/new_relic/cli/command.rb +15 -17
  268. data/lib/new_relic/cli/commands/deployments.rb +21 -23
  269. data/lib/new_relic/cli/commands/install.rb +6 -10
  270. data/lib/new_relic/coerce.rb +5 -8
  271. data/lib/new_relic/collection_helper.rb +48 -47
  272. data/lib/new_relic/constants.rb +0 -4
  273. data/lib/new_relic/control/class_methods.rb +2 -2
  274. data/lib/new_relic/control/frameworks/external.rb +1 -1
  275. data/lib/new_relic/control/frameworks/rails.rb +5 -6
  276. data/lib/new_relic/control/frameworks/rails3.rb +2 -3
  277. data/lib/new_relic/control/frameworks/ruby.rb +2 -2
  278. data/lib/new_relic/control/frameworks/sinatra.rb +6 -0
  279. data/lib/new_relic/control/instance_methods.rb +4 -5
  280. data/lib/new_relic/control/instrumentation.rb +35 -5
  281. data/lib/new_relic/control/server_methods.rb +2 -3
  282. data/lib/new_relic/control.rb +0 -1
  283. data/lib/new_relic/dependency_detection.rb +7 -9
  284. data/lib/new_relic/environment_report.rb +16 -18
  285. data/lib/new_relic/helper.rb +45 -5
  286. data/lib/new_relic/language_support.rb +20 -2
  287. data/lib/new_relic/latest_changes.rb +2 -2
  288. data/lib/new_relic/local_environment.rb +9 -7
  289. data/lib/new_relic/metric_data.rb +6 -7
  290. data/lib/new_relic/metric_spec.rb +3 -3
  291. data/lib/new_relic/noticed_error.rb +18 -19
  292. data/lib/new_relic/rack/agent_middleware.rb +2 -2
  293. data/lib/new_relic/rack/browser_monitoring.rb +9 -9
  294. data/lib/new_relic/recipes/capistrano3.rb +11 -13
  295. data/lib/new_relic/recipes/capistrano_legacy.rb +11 -14
  296. data/lib/new_relic/supportability_helper.rb +2 -2
  297. data/lib/new_relic/traced_thread.rb +35 -0
  298. data/lib/new_relic/version.rb +5 -16
  299. data/lib/newrelic_rpm.rb +10 -34
  300. data/lib/sequel/extensions/newrelic_instrumentation.rb +4 -7
  301. data/lib/sequel/plugins/newrelic_instrumentation.rb +3 -9
  302. data/lib/tasks/all.rb +2 -2
  303. data/lib/tasks/config.html.erb +14 -25
  304. data/lib/tasks/config.rake +36 -27
  305. data/lib/tasks/multiverse.rb +4 -6
  306. data/lib/tasks/tests.rake +3 -7
  307. data/newrelic.yml +610 -3
  308. data/newrelic_rpm.gemspec +14 -14
  309. data/recipes/newrelic.rb +1 -1
  310. data/test/agent_helper.rb +98 -59
  311. metadata +69 -20
  312. data/ROADMAP.md +0 -24
  313. data/lib/new_relic/agent/datastores/mongo/statement_formatter.rb +0 -53
  314. data/lib/new_relic/agent/instrumentation/excon/connection.rb +0 -49
  315. data/lib/new_relic/agent/instrumentation/merb/controller.rb +0 -44
  316. data/lib/new_relic/agent/instrumentation/merb/errors.rb +0 -33
  317. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +0 -125
  318. data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +0 -46
  319. data/lib/new_relic/agent/supported_versions.rb +0 -275
  320. data/lib/new_relic/control/frameworks/merb.rb +0 -29
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/Guardfile CHANGED
@@ -1,24 +1,24 @@
1
1
  require './test/multiverse/lib/multiverse/bundler_patch'
2
2
 
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)}
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) }
5
5
 
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"}
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")
8
8
 
9
9
  guard_options = {
10
10
  spring: "bundle exec ruby #{ruby_options} ",
11
- test_folders: ['test/new_relic'] + test_folders,
11
+ test_folders: ['test/new_relic'] + test_folders,
12
12
  all_after_pass: false,
13
13
  all_on_start: false
14
14
  }
15
15
 
16
16
  guard :minitest, guard_options do
17
- watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
17
+ watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
18
18
  watch(%r{^test/.+_test\.rb$})
19
- watch(%r{^test/rum/.*}) { "test/new_relic/rack/browser_monitoring_test.rb" }
19
+ watch(%r{^test/rum/.*}) { "test/new_relic/rack/browser_monitoring_test.rb" }
20
20
  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" }
21
+ watch('test/test_helper.rb') { "test/new_relic" }
22
22
  watch('test/agent_helper.rb') { "test/new_relic" }
23
23
  watch('lib/new_relic/agent/configuration/default_source.rb') { "test/new_relic/agent/configuration/orphan_configuration_test.rb" }
24
24
  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,4 @@
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
+ [![Blue banner - Community Plus: This code is currently maintained by New Relic engineering teams and delivered here in GitHub. See the README for troubleshooting and defect reporting instructions.](https://github.com/newrelic/opensource-website/raw/master/src/images/categories/Community_Plus.png)](https://opensource.newrelic.com/oss-category/#community-plus)
2
2
 
3
3
  # New Relic Ruby Agent
4
4
 
@@ -8,9 +8,11 @@ You can also extend the agent's performance monitoring to
8
8
  [collect and analyze business data](https://docs.newrelic.com/docs/agents/ruby-agent/getting-started/introduction-new-relic-ruby#business-data)
9
9
  to help you improve the customer experience and make data-driven business decisions.
10
10
 
11
- The New Relic Ruby Agent is dual-purposed as a either a Gem or a Rails plugin,
11
+ The New Relic Ruby agent is dual-purposed as either a Gem or a Rails plugin,
12
12
  hosted on [github](https://github.com/newrelic/newrelic-ruby-agent).
13
13
 
14
+ [![Gem Version](https://badge.fury.io/rb/newrelic_rpm.svg)](https://badge.fury.io/rb/newrelic_rpm)
15
+
14
16
  ## Supported Environments
15
17
 
16
18
  An up-to-date list of Ruby versions and frameworks for the latest agent
@@ -21,11 +23,13 @@ Environments" section below.
21
23
 
22
24
  ## Installing and Using
23
25
 
26
+ The latest released gem for the Ruby agent can be found at [Rubygems.org](https://rubygems.org/gems/newrelic_rpm)
27
+
24
28
  ### Quick Start
25
29
 
26
30
  #### With Bundler
27
31
 
28
- For using with Bundler, add the Ruby Agent to your project's Gemfile.
32
+ For using with Bundler, add the Ruby agent to your project's Gemfile.
29
33
 
30
34
  ```ruby
31
35
  gem 'newrelic_rpm'
@@ -67,16 +71,18 @@ For complete documentation on installing the New Relic Ruby agent, see the follo
67
71
  * [GAE Flexible Environment](https://docs.newrelic.com/docs/agents/ruby-agent/installation/install-new-relic-ruby-agent-gae-flexible-environment)
68
72
  * [Pure Rack Apps](http://docs.newrelic.com/docs/ruby/rack-middlewares)
69
73
  * [Ruby agent and Heroku](https://docs.newrelic.com/docs/agents/ruby-agent/installation/ruby-agent-heroku)
70
- * [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs)
74
+ * [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/monitor-ruby-background-processes)
71
75
  * [Uninstall the Ruby agent](https://docs.newrelic.com/docs/agents/ruby-agent/installation/uninstall-ruby-agent)
72
76
 
73
77
  ### Recording Deploys
74
78
 
75
- The Ruby Agent supports recording deployments in New Relic via a command line
76
- tool or Capistrano recipes. For more information on these features see
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
77
81
  [our deployment documentation](http://docs.newrelic.com/docs/ruby/recording-deployments-with-the-ruby-agent)
78
82
  for more information.
79
83
 
84
+ *There is a [known issue](https://github.com/newrelic/newrelic-ruby-agent/issues/715) that prevents newly generated New Relic API keys from recording deploys.
85
+
80
86
  ## Support
81
87
 
82
88
  Should you need assistance with New Relic products, you are in good hands with several support diagnostic tools and support channels.
@@ -99,17 +105,14 @@ If the issue has been confirmed as a bug or is a Feature request, please file a
99
105
 
100
106
  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.
101
107
 
102
- 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.
108
+ 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.
103
109
 
104
110
  Please review [New Relic’s General Data Privacy Notice](https://newrelic.com/termsandconditions/privacy) for more information.
105
111
 
106
- ## Roadmap
107
- 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.
108
-
109
112
  ## Contributing
110
113
 
111
- 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.
112
- 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.
114
+ 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.
115
+ 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.
113
116
 
114
117
  **A note about vulnerabilities**
115
118
 
@@ -124,13 +127,12 @@ the [New Relic Ruby agent](https://opensource.newrelic.com/projects/newrelic/new
124
127
 
125
128
  ## License
126
129
 
127
- The New Relic Ruby agent is licensed under the [Apache 2.0](http://apache.org/licenses/LICENSE-2.0.txt) License.
128
- 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).
130
+ 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.
129
131
 
130
- ## Thank You
132
+ 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).
131
133
 
132
- Thank you, and may your application scale to infinity plus one.
134
+ ## Thank You
133
135
 
134
- Lew Cirne, Founder and CEO
136
+ Thank you,
135
137
 
136
- New Relic, Inc.
138
+ New Relic Ruby agent team
data/Rakefile CHANGED
@@ -10,16 +10,7 @@ task :test => ['test:newrelic']
10
10
 
11
11
  namespace :test do
12
12
  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
-
13
+ task :all => %w[newrelic multiverse all_compatible_envs]
23
14
  agent_home = File.expand_path(File.dirname(__FILE__))
24
15
 
25
16
  desc "Run agent performance tests"
@@ -27,14 +18,21 @@ namespace :test do
27
18
  require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'performance', 'lib', 'performance'))
28
19
  options = {}
29
20
  options[:suite] = args[:suite] if args[:suite]
30
- options[:name] = args[:name] if args[:name]
21
+ options[:name] = args[:name] if args[:name]
31
22
  Performance::Runner.new(options).run_and_report
32
23
  end
33
24
 
34
- desc "Run agent within existing mini environments"
35
- task :env, [:env1, :env2, :env3, :env4, :env5, :env6] => [] do |t, args|
25
+ desc "Run agent within existing mini environment(s): env[name1,name2,name3,etc.]"
26
+ task :env do |t, args|
36
27
  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
28
+ Environments::Runner.new(args.to_a).run_and_report
29
+ end
30
+
31
+ desc "Run all mini environment tests known to work with the current Ruby version"
32
+ task :all_compatible_envs do |t, args|
33
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'helpers', 'ruby_rails_mappings'))
34
+ rails_versions = rails_versions_for_ruby_version(RUBY_VERSION)
35
+ Rake::Task['test:env'].invoke(*rails_versions)
38
36
  end
39
37
 
40
38
  Rake::TestTask.new(:intentional_fail) do |t|
@@ -51,15 +49,14 @@ namespace :test do
51
49
 
52
50
  # Note unit testing task is defined in lib/tasks/tests.rake to facilitate
53
51
  # running them in a rails application environment.
54
-
55
52
  end
56
53
 
57
54
  desc 'Record build number and stage'
58
- task :record_build, [ :build_number, :stage ] do |t, args|
55
+ task :record_build, [:build_number, :stage] do |t, args|
59
56
  build_string = args.build_number
60
57
  build_string << ".#{args.stage}" unless args.stage.nil? || args.stage.empty?
61
58
 
62
- gitsha = File.exists?(".git") ? `git rev-parse HEAD` : "Unknown"
59
+ gitsha = File.exist?(".git") ? `git rev-parse HEAD` : "Unknown"
63
60
  gitsha.chomp!
64
61
 
65
62
  File.open("lib/new_relic/build.rb", "w") do |f|
@@ -110,24 +107,38 @@ task :update_ca_bundle do |t|
110
107
  end
111
108
 
112
109
  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'))
110
+ CROSS_AGENT_TESTS_UPSTREAM_PATH = File.expand_path(File.join('..', 'cross_agent_tests')).freeze
111
+ CROSS_AGENT_TESTS_LOCAL_PATH = File.expand_path(File.join('test', 'fixtures', 'cross_agent_tests')).freeze
112
+
113
+ def prompt_to_continue(command, destination = 'local')
114
+ puts "The following rsync command will be executed to update the #{destination} copy of the specs:"
115
+ puts
116
+ puts command
117
+ puts
118
+ puts "CAUTION: Any unsaved changes that exist within the #{destination} content will be OVERWRITTEN!"
119
+ if destination.eql?('local')
120
+ puts 'CAUTION 2: Before continuing, make sure your local repo is on the correct, synced branch!'
121
+ end
122
+ puts
123
+ print "Do you wish to continue? ('y' to continue, return to cancel) [n] "
124
+ continue = STDIN.gets.chomp
125
+ if continue.downcase.eql?('y')
126
+ system(command)
127
+ else
128
+ puts 'Cancelled'
129
+ end
130
+ end
115
131
 
116
- # Note: before you pull, make sure your local repo is on the correct, synced branch!
117
132
  desc 'Pull latest changes from cross_agent_tests repo'
118
133
  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)
134
+ command = " rsync -av --exclude .git #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/ #{CROSS_AGENT_TESTS_LOCAL_PATH}/"
135
+ prompt_to_continue(command)
123
136
  end
124
137
 
125
138
  desc 'Copy changes from embedded cross_agent_tests to official repo working copy'
126
139
  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)
140
+ command = "rsync -av #{CROSS_AGENT_TESTS_LOCAL_PATH}/ #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/"
141
+ prompt_to_continue(command, 'remote (agent spec repo)')
131
142
  end
132
143
  end
133
144
 
@@ -137,4 +148,3 @@ task :console do
137
148
  ARGV.clear
138
149
  Pry.start
139
150
  end
140
-