newrelic_rpm 8.10.1 → 8.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (395) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rubocop.yml +20 -190
  4. data/.rubocop_todo.yml +11 -202
  5. data/.simplecov +6 -4
  6. data/Brewfile +1 -0
  7. data/CHANGELOG.md +113 -41
  8. data/Gemfile +0 -1
  9. data/README.md +1 -1
  10. data/Rakefile +3 -20
  11. data/Thorfile +0 -1
  12. data/bin/nrdebug +65 -43
  13. data/config.dot +5 -5
  14. data/docker-compose.yml +22 -0
  15. data/init.rb +1 -2
  16. data/install.rb +1 -2
  17. data/lib/new_relic/agent/adaptive_sampler.rb +0 -1
  18. data/lib/new_relic/agent/agent/shutdown.rb +1 -1
  19. data/lib/new_relic/agent/agent/special_startup.rb +2 -1
  20. data/lib/new_relic/agent/agent/start_worker_thread.rb +0 -1
  21. data/lib/new_relic/agent/agent/startup.rb +1 -1
  22. data/lib/new_relic/agent/agent.rb +100 -73
  23. data/lib/new_relic/agent/agent_logger.rb +4 -5
  24. data/lib/new_relic/agent/attribute_filter.rb +39 -21
  25. data/lib/new_relic/agent/attribute_processing.rb +3 -4
  26. data/lib/new_relic/agent/attributes.rb +1 -1
  27. data/lib/new_relic/agent/audit_logger.rb +3 -3
  28. data/lib/new_relic/agent/autostart.rb +0 -1
  29. data/lib/new_relic/agent/chained_call.rb +0 -1
  30. data/lib/new_relic/agent/commands/agent_command.rb +0 -1
  31. data/lib/new_relic/agent/commands/agent_command_router.rb +3 -4
  32. data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -1
  33. data/lib/new_relic/agent/configuration/default_source.rb +82 -31
  34. data/lib/new_relic/agent/configuration/dotted_hash.rb +2 -2
  35. data/lib/new_relic/agent/configuration/environment_source.rb +4 -4
  36. data/lib/new_relic/agent/configuration/event_harvest_config.rb +0 -1
  37. data/lib/new_relic/agent/configuration/high_security_source.rb +1 -1
  38. data/lib/new_relic/agent/configuration/manager.rb +4 -2
  39. data/lib/new_relic/agent/configuration/manual_source.rb +0 -1
  40. data/lib/new_relic/agent/configuration/mask_defaults.rb +2 -3
  41. data/lib/new_relic/agent/configuration/security_policy_source.rb +10 -1
  42. data/lib/new_relic/agent/configuration/server_source.rb +0 -1
  43. data/lib/new_relic/agent/configuration/yaml_source.rb +3 -3
  44. data/lib/new_relic/agent/configuration.rb +0 -1
  45. data/lib/new_relic/agent/connect/request_builder.rb +2 -2
  46. data/lib/new_relic/agent/connect/response_handler.rb +1 -2
  47. data/lib/new_relic/agent/custom_event_aggregator.rb +0 -1
  48. data/lib/new_relic/agent/database/explain_plan_helpers.rb +0 -1
  49. data/lib/new_relic/agent/database/obfuscation_helpers.rb +1 -1
  50. data/lib/new_relic/agent/database/obfuscator.rb +0 -1
  51. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +0 -1
  52. data/lib/new_relic/agent/database.rb +20 -14
  53. data/lib/new_relic/agent/database_adapter.rb +2 -1
  54. data/lib/new_relic/agent/datastores/metric_helper.rb +0 -4
  55. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +5 -5
  56. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +2 -5
  57. data/lib/new_relic/agent/datastores/mongo.rb +0 -1
  58. data/lib/new_relic/agent/datastores/nosql_obfuscator.rb +41 -0
  59. data/lib/new_relic/agent/datastores/redis.rb +0 -1
  60. data/lib/new_relic/agent/datastores.rb +0 -1
  61. data/lib/new_relic/agent/deprecator.rb +0 -1
  62. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +0 -1
  63. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +3 -1
  64. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +3 -1
  65. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +1 -1
  66. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +1 -2
  67. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +0 -1
  68. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +1 -1
  69. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +0 -1
  70. data/lib/new_relic/agent/distributed_tracing.rb +0 -1
  71. data/lib/new_relic/agent/encoding_normalizer.rb +2 -1
  72. data/lib/new_relic/agent/error_collector.rb +3 -1
  73. data/lib/new_relic/agent/error_event_aggregator.rb +0 -1
  74. data/lib/new_relic/agent/error_filter.rb +5 -5
  75. data/lib/new_relic/agent/error_trace_aggregator.rb +2 -2
  76. data/lib/new_relic/agent/event_aggregator.rb +1 -1
  77. data/lib/new_relic/agent/event_buffer.rb +0 -1
  78. data/lib/new_relic/agent/event_listener.rb +0 -1
  79. data/lib/new_relic/agent/event_loop.rb +4 -3
  80. data/lib/new_relic/agent/external.rb +1 -2
  81. data/lib/new_relic/agent/guid_generator.rb +0 -1
  82. data/lib/new_relic/agent/harvester.rb +0 -1
  83. data/lib/new_relic/agent/heap.rb +2 -3
  84. data/lib/new_relic/agent/hostname.rb +0 -1
  85. data/lib/new_relic/agent/http_clients/abstract.rb +2 -1
  86. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +0 -1
  87. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +0 -1
  88. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +1 -2
  89. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +1 -2
  90. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +0 -1
  91. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +2 -2
  92. data/lib/new_relic/agent/http_clients/uri_util.rb +0 -1
  93. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +0 -1
  94. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +0 -1
  95. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +1 -2
  96. data/lib/new_relic/agent/instrumentation/active_job.rb +0 -1
  97. data/lib/new_relic/agent/instrumentation/active_merchant.rb +3 -2
  98. data/lib/new_relic/agent/instrumentation/active_record.rb +0 -1
  99. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +0 -1
  100. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +0 -1
  101. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +0 -1
  102. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +0 -1
  103. data/lib/new_relic/agent/instrumentation/active_storage.rb +0 -1
  104. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +2 -1
  105. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +0 -1
  106. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +0 -1
  107. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +0 -1
  108. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +0 -1
  109. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +1 -1
  110. data/lib/new_relic/agent/instrumentation/authlogic.rb +0 -1
  111. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +0 -1
  112. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +0 -1
  113. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +0 -1
  114. data/lib/new_relic/agent/instrumentation/bunny.rb +0 -1
  115. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +3 -3
  116. data/lib/new_relic/agent/instrumentation/curb/chain.rb +0 -1
  117. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +14 -11
  118. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +0 -1
  119. data/lib/new_relic/agent/instrumentation/curb.rb +0 -1
  120. data/lib/new_relic/agent/instrumentation/data_mapper.rb +1 -2
  121. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +0 -1
  122. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +0 -1
  123. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +0 -1
  124. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +1 -1
  125. data/lib/new_relic/agent/instrumentation/elasticsearch/chain.rb +29 -0
  126. data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +66 -0
  127. data/lib/new_relic/agent/instrumentation/elasticsearch/prepend.rb +13 -0
  128. data/lib/new_relic/agent/instrumentation/elasticsearch.rb +31 -0
  129. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +0 -1
  130. data/lib/new_relic/agent/instrumentation/excon.rb +0 -1
  131. data/lib/new_relic/agent/instrumentation/grape/chain.rb +0 -1
  132. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +1 -1
  133. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +0 -1
  134. data/lib/new_relic/agent/instrumentation/grape.rb +0 -1
  135. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +0 -1
  136. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +0 -1
  137. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +0 -1
  138. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +0 -1
  139. data/lib/new_relic/agent/instrumentation/grpc/helper.rb +0 -1
  140. data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +0 -1
  141. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +0 -1
  142. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +0 -1
  143. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +0 -1
  144. data/lib/new_relic/agent/instrumentation/grpc_client.rb +0 -1
  145. data/lib/new_relic/agent/instrumentation/grpc_server.rb +0 -1
  146. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +0 -1
  147. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +0 -1
  148. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +0 -1
  149. data/lib/new_relic/agent/instrumentation/httpclient.rb +0 -1
  150. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +0 -1
  151. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +0 -1
  152. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +0 -1
  153. data/lib/new_relic/agent/instrumentation/httprb.rb +0 -1
  154. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +0 -1
  155. data/lib/new_relic/agent/instrumentation/logger/chain.rb +0 -1
  156. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +4 -1
  157. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +0 -1
  158. data/lib/new_relic/agent/instrumentation/logger.rb +0 -1
  159. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +0 -1
  160. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +1 -2
  161. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +0 -1
  162. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +0 -1
  163. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +1 -2
  164. data/lib/new_relic/agent/instrumentation/memcache.rb +4 -5
  165. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +1 -2
  166. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +0 -1
  167. data/lib/new_relic/agent/instrumentation/mongo.rb +0 -1
  168. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +3 -2
  169. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +0 -1
  170. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +0 -1
  171. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +0 -1
  172. data/lib/new_relic/agent/instrumentation/net_http.rb +0 -1
  173. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +4 -3
  174. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +0 -1
  175. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +0 -1
  176. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +0 -1
  177. data/lib/new_relic/agent/instrumentation/padrino.rb +0 -1
  178. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +0 -1
  179. data/lib/new_relic/agent/instrumentation/queue_time.rb +0 -2
  180. data/lib/new_relic/agent/instrumentation/rack/chain.rb +0 -1
  181. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +0 -1
  182. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +3 -1
  183. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +0 -1
  184. data/lib/new_relic/agent/instrumentation/rack.rb +0 -1
  185. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +0 -1
  186. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +0 -1
  187. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +0 -1
  188. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +0 -1
  189. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +0 -1
  190. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +0 -1
  191. data/lib/new_relic/agent/instrumentation/rake/chain.rb +0 -1
  192. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +6 -1
  193. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +0 -1
  194. data/lib/new_relic/agent/instrumentation/rake.rb +0 -1
  195. data/lib/new_relic/agent/instrumentation/redis/chain.rb +0 -1
  196. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +0 -1
  197. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +0 -1
  198. data/lib/new_relic/agent/instrumentation/redis.rb +0 -1
  199. data/lib/new_relic/agent/instrumentation/resque/chain.rb +0 -1
  200. data/lib/new_relic/agent/instrumentation/resque/helper.rb +0 -1
  201. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +0 -1
  202. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +0 -1
  203. data/lib/new_relic/agent/instrumentation/resque.rb +0 -1
  204. data/lib/new_relic/agent/instrumentation/sequel.rb +0 -1
  205. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +0 -1
  206. data/lib/new_relic/agent/instrumentation/sidekiq.rb +2 -2
  207. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +0 -1
  208. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +0 -1
  209. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +0 -1
  210. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +0 -1
  211. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +0 -1
  212. data/lib/new_relic/agent/instrumentation/sinatra.rb +1 -1
  213. data/lib/new_relic/agent/instrumentation/sunspot.rb +0 -1
  214. data/lib/new_relic/agent/instrumentation/thread/chain.rb +0 -1
  215. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +1 -1
  216. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +0 -1
  217. data/lib/new_relic/agent/instrumentation/thread.rb +0 -1
  218. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +0 -1
  219. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +1 -1
  220. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +0 -1
  221. data/lib/new_relic/agent/instrumentation/tilt.rb +0 -1
  222. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +0 -1
  223. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +3 -4
  224. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +0 -1
  225. data/lib/new_relic/agent/instrumentation/typhoeus.rb +0 -1
  226. data/lib/new_relic/agent/instrumentation.rb +0 -1
  227. data/lib/new_relic/agent/internal_agent_error.rb +0 -1
  228. data/lib/new_relic/agent/javascript_instrumentor.rb +2 -2
  229. data/lib/new_relic/agent/linking_metadata.rb +0 -1
  230. data/lib/new_relic/agent/local_log_decorator.rb +1 -1
  231. data/lib/new_relic/agent/log_event_aggregator.rb +1 -1
  232. data/lib/new_relic/agent/log_once.rb +0 -1
  233. data/lib/new_relic/agent/log_priority.rb +0 -1
  234. data/lib/new_relic/agent/logging.rb +0 -1
  235. data/lib/new_relic/agent/memory_logger.rb +0 -1
  236. data/lib/new_relic/agent/messaging.rb +2 -2
  237. data/lib/new_relic/agent/method_tracer.rb +4 -1
  238. data/lib/new_relic/agent/method_tracer_helpers.rb +1 -2
  239. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +0 -1
  240. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +1 -1
  241. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +0 -1
  242. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +0 -1
  243. data/lib/new_relic/agent/monitors.rb +0 -1
  244. data/lib/new_relic/agent/new_relic_service/encoders.rb +0 -1
  245. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +0 -1
  246. data/lib/new_relic/agent/new_relic_service/marshaller.rb +0 -1
  247. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +0 -1
  248. data/lib/new_relic/agent/new_relic_service.rb +195 -142
  249. data/lib/new_relic/agent/{noticible_error.rb → noticeable_error.rb} +1 -2
  250. data/lib/new_relic/agent/null_logger.rb +0 -1
  251. data/lib/new_relic/agent/obfuscator.rb +1 -2
  252. data/lib/new_relic/agent/parameter_filtering.rb +0 -1
  253. data/lib/new_relic/agent/payload_metric_mapping.rb +0 -1
  254. data/lib/new_relic/agent/pipe_channel_manager.rb +2 -1
  255. data/lib/new_relic/agent/pipe_service.rb +0 -1
  256. data/lib/new_relic/agent/prepend_supportability.rb +0 -1
  257. data/lib/new_relic/agent/priority_sampled_buffer.rb +2 -3
  258. data/lib/new_relic/agent/range_extensions.rb +0 -1
  259. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +0 -1
  260. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +0 -1
  261. data/lib/new_relic/agent/rules_engine.rb +1 -1
  262. data/lib/new_relic/agent/sampler.rb +0 -1
  263. data/lib/new_relic/agent/sampler_collection.rb +0 -1
  264. data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -1
  265. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +0 -1
  266. data/lib/new_relic/agent/samplers/memory_sampler.rb +10 -6
  267. data/lib/new_relic/agent/samplers/object_sampler.rb +0 -1
  268. data/lib/new_relic/agent/samplers/vm_sampler.rb +2 -1
  269. data/lib/new_relic/agent/span_event_aggregator.rb +0 -1
  270. data/lib/new_relic/agent/span_event_primitive.rb +1 -2
  271. data/lib/new_relic/agent/sql_sampler.rb +0 -1
  272. data/lib/new_relic/agent/stats.rb +13 -3
  273. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -2
  274. data/lib/new_relic/agent/stats_engine/stats_hash.rb +1 -2
  275. data/lib/new_relic/agent/stats_engine.rb +0 -1
  276. data/lib/new_relic/agent/synthetics_event_aggregator.rb +0 -1
  277. data/lib/new_relic/agent/system_info.rb +4 -2
  278. data/lib/new_relic/agent/threading/agent_thread.rb +3 -3
  279. data/lib/new_relic/agent/threading/backtrace_node.rb +0 -1
  280. data/lib/new_relic/agent/threading/backtrace_service.rb +1 -1
  281. data/lib/new_relic/agent/threading/thread_profile.rb +4 -2
  282. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +0 -1
  283. data/lib/new_relic/agent/tracer.rb +6 -3
  284. data/lib/new_relic/agent/transaction/abstract_segment.rb +5 -3
  285. data/lib/new_relic/agent/transaction/datastore_segment.rb +3 -1
  286. data/lib/new_relic/agent/transaction/distributed_tracer.rb +4 -1
  287. data/lib/new_relic/agent/transaction/distributed_tracing.rb +1 -1
  288. data/lib/new_relic/agent/transaction/external_request_segment.rb +2 -2
  289. data/lib/new_relic/agent/transaction/message_broker_segment.rb +1 -1
  290. data/lib/new_relic/agent/transaction/request_attributes.rb +0 -1
  291. data/lib/new_relic/agent/transaction/segment.rb +1 -1
  292. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +0 -1
  293. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +0 -1
  294. data/lib/new_relic/agent/transaction/trace.rb +4 -1
  295. data/lib/new_relic/agent/transaction/trace_builder.rb +0 -1
  296. data/lib/new_relic/agent/transaction/trace_context.rb +0 -1
  297. data/lib/new_relic/agent/transaction/trace_node.rb +3 -3
  298. data/lib/new_relic/agent/transaction/tracing.rb +0 -1
  299. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +2 -2
  300. data/lib/new_relic/agent/transaction.rb +13 -5
  301. data/lib/new_relic/agent/transaction_error_primitive.rb +0 -1
  302. data/lib/new_relic/agent/transaction_event_aggregator.rb +1 -1
  303. data/lib/new_relic/agent/transaction_event_primitive.rb +0 -1
  304. data/lib/new_relic/agent/transaction_event_recorder.rb +1 -2
  305. data/lib/new_relic/agent/transaction_metrics.rb +1 -2
  306. data/lib/new_relic/agent/transaction_sampler.rb +0 -1
  307. data/lib/new_relic/agent/transaction_time_aggregator.rb +2 -2
  308. data/lib/new_relic/agent/utilization/aws.rb +0 -1
  309. data/lib/new_relic/agent/utilization/azure.rb +1 -2
  310. data/lib/new_relic/agent/utilization/gcp.rb +1 -2
  311. data/lib/new_relic/agent/utilization/pcf.rb +2 -2
  312. data/lib/new_relic/agent/utilization/vendor.rb +3 -2
  313. data/lib/new_relic/agent/utilization_data.rb +3 -1
  314. data/lib/new_relic/agent/vm/jruby_vm.rb +0 -1
  315. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +0 -1
  316. data/lib/new_relic/agent/vm/mri_vm.rb +35 -23
  317. data/lib/new_relic/agent/vm/snapshot.rb +1 -2
  318. data/lib/new_relic/agent/vm.rb +0 -1
  319. data/lib/new_relic/agent/worker_loop.rb +0 -1
  320. data/lib/new_relic/agent.rb +17 -18
  321. data/lib/new_relic/cli/command.rb +1 -2
  322. data/lib/new_relic/cli/commands/deployments.rb +72 -21
  323. data/lib/new_relic/cli/commands/install.rb +1 -1
  324. data/lib/new_relic/coerce.rb +6 -1
  325. data/lib/new_relic/collection_helper.rb +2 -2
  326. data/lib/new_relic/constants.rb +0 -1
  327. data/lib/new_relic/control/class_methods.rb +0 -1
  328. data/lib/new_relic/control/frameworks/external.rb +0 -1
  329. data/lib/new_relic/control/frameworks/rails.rb +5 -1
  330. data/lib/new_relic/control/frameworks/rails3.rb +0 -1
  331. data/lib/new_relic/control/frameworks/rails4.rb +0 -1
  332. data/lib/new_relic/control/frameworks/rails_notifications.rb +0 -1
  333. data/lib/new_relic/control/frameworks/ruby.rb +0 -1
  334. data/lib/new_relic/control/frameworks/sinatra.rb +0 -1
  335. data/lib/new_relic/control/frameworks.rb +0 -1
  336. data/lib/new_relic/control/instance_methods.rb +17 -40
  337. data/lib/new_relic/control/instrumentation.rb +2 -1
  338. data/lib/new_relic/control/private_instance_methods.rb +48 -0
  339. data/lib/new_relic/control/server_methods.rb +0 -1
  340. data/lib/new_relic/control.rb +0 -1
  341. data/lib/new_relic/delayed_job_injection.rb +0 -1
  342. data/lib/new_relic/dependency_detection.rb +5 -4
  343. data/lib/new_relic/environment_report.rb +23 -14
  344. data/lib/new_relic/helper.rb +2 -2
  345. data/lib/new_relic/language_support.rb +3 -3
  346. data/lib/new_relic/latest_changes.rb +4 -4
  347. data/lib/new_relic/local_environment.rb +9 -4
  348. data/lib/new_relic/metric_data.rb +27 -22
  349. data/lib/new_relic/metric_spec.rb +2 -1
  350. data/lib/new_relic/noticed_error.rb +3 -6
  351. data/lib/new_relic/rack/agent_hooks.rb +0 -1
  352. data/lib/new_relic/rack/agent_middleware.rb +2 -1
  353. data/lib/new_relic/rack/browser_monitoring.rb +131 -123
  354. data/lib/new_relic/rack.rb +0 -1
  355. data/lib/new_relic/recipes/capistrano3.rb +2 -59
  356. data/lib/new_relic/recipes/capistrano_legacy.rb +1 -2
  357. data/lib/new_relic/recipes/helpers/send_deployment.rb +69 -0
  358. data/lib/new_relic/recipes.rb +0 -1
  359. data/lib/new_relic/supportability_helper.rb +1 -2
  360. data/lib/new_relic/traced_thread.rb +1 -1
  361. data/lib/new_relic/version.rb +2 -3
  362. data/lib/newrelic_rpm.rb +0 -1
  363. data/lib/sequel/extensions/newrelic_instrumentation.rb +2 -3
  364. data/lib/sequel/plugins/newrelic_instrumentation.rb +0 -1
  365. data/lib/tasks/all.rb +0 -1
  366. data/lib/tasks/config.rake +4 -113
  367. data/lib/tasks/coverage_report.rake +14 -19
  368. data/lib/tasks/{config.html.erb → helpers/config.html.erb} +0 -0
  369. data/lib/tasks/{config.text.erb → helpers/config.text.erb} +0 -0
  370. data/lib/tasks/helpers/format.rb +123 -0
  371. data/lib/tasks/helpers/matches.rb +12 -0
  372. data/lib/tasks/helpers/prompt.rb +24 -0
  373. data/lib/tasks/helpers/removers.rb +33 -0
  374. data/lib/tasks/install.rake +0 -1
  375. data/lib/tasks/instrumentation_generator/README.md +1 -1
  376. data/lib/tasks/instrumentation_generator/instrumentation.thor +45 -17
  377. data/lib/tasks/instrumentation_generator/templates/Envfile.tt +0 -1
  378. data/lib/tasks/instrumentation_generator/templates/chain.tt +2 -2
  379. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +3 -2
  380. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +0 -1
  381. data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +2 -2
  382. data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +1 -1
  383. data/lib/tasks/instrumentation_generator/templates/prepend.tt +1 -2
  384. data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +1 -1
  385. data/lib/tasks/instrumentation_generator/templates/test.tt +1 -2
  386. data/lib/tasks/multiverse.rake +0 -1
  387. data/lib/tasks/multiverse.rb +3 -29
  388. data/lib/tasks/newrelic.rb +0 -1
  389. data/lib/tasks/tests.rake +3 -8
  390. data/newrelic.yml +23 -4
  391. data/newrelic_rpm.gemspec +8 -9
  392. data/recipes/newrelic.rb +0 -1
  393. data/test/agent_helper.rb +23 -35
  394. metadata +20 -80
  395. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +0 -44
@@ -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
@@ -65,7 +64,7 @@ module NewRelic
65
64
 
66
65
  def metric_action(name)
67
66
  case name
68
- when /#{RENDER_TEMPLATE_EVENT_NAME}$/ then 'Rendering'
67
+ when /#{RENDER_TEMPLATE_EVENT_NAME}$/o then 'Rendering'
69
68
  when RENDER_PARTIAL_EVENT_NAME then 'Partial'
70
69
  when RENDER_COLLECTION_EVENT_NAME then 'Partial'
71
70
  end
@@ -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
@@ -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
@@ -25,7 +24,8 @@ DependencyDetection.defer do
25
24
  gateway.class_eval do
26
25
  implemented_methods = public_instance_methods(false).map(&:to_sym)
27
26
  gateway_name = self.name.split('::').last
28
- [:authorize, :purchase, :credit, :void, :capture, :recurring, :store, :unstore, :update].each do |operation|
27
+ actions = [:authorize, :purchase, :credit, :void, :capture, :recurring, :store, :unstore, :update]
28
+ actions.each do |operation|
29
29
  if implemented_methods.include?(operation)
30
30
  add_method_tracer operation, [-> (*) { "ActiveMerchant/gateway/#{gateway_name}/#{operation}" },
31
31
  -> (*) { "ActiveMerchant/gateway/#{gateway_name}" },
@@ -38,6 +38,7 @@ DependencyDetection.defer do
38
38
 
39
39
  executes do
40
40
  next unless Gem::Version.new(ActiveMerchant::VERSION) < Gem::Version.new('1.65.0')
41
+
41
42
  deprecation_msg = 'The Ruby Agent is dropping support for ActiveMerchant versions below 1.65.0 ' \
42
43
  'in version 9.0.0. Please upgrade your ActiveMerchant version to continue receiving full support. ' \
43
44
 
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -11,6 +10,7 @@ module NewRelic
11
10
  class ActiveStorageSubscriber < NotificationsSubscriber
12
11
  def start(name, id, payload)
13
12
  return unless state.is_execution_traced?
13
+
14
14
  start_segment(name, id, payload)
15
15
  rescue => e
16
16
  log_notification_error(e, name, 'start')
@@ -18,6 +18,7 @@ module NewRelic
18
18
 
19
19
  def finish(name, id, payload)
20
20
  return unless state.is_execution_traced?
21
+
21
22
  finish_segment(id, payload)
22
23
  rescue => e
23
24
  log_notification_error(e, name, 'finish')
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -15,6 +14,7 @@ module NewRelic
15
14
  parse_query_without_newrelic(*args)
16
15
  ensure
17
16
  return unless txn = ::NewRelic::Agent::Tracer.current_transaction
17
+
18
18
  txn.current_segment.params[:statement] = ::NewRelic::Agent::Database.truncate_query(args.first.inspect) rescue nil
19
19
  end
20
20
  end
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -274,6 +273,7 @@ module NewRelic
274
273
 
275
274
  def self.class_name(traced_obj, options = {})
276
275
  return options[:class_name] if options[:class_name]
276
+
277
277
  if traced_obj.is_a?(Class) || traced_obj.is_a?(Module)
278
278
  traced_obj.name
279
279
  else
@@ -416,14 +416,14 @@ module NewRelic
416
416
  end
417
417
  end
418
418
 
419
- # overrideable method to determine whether to trace an action
419
+ # overridable method to determine whether to trace an action
420
420
  # or not - you may override this in your controller and supply
421
421
  # your own logic for ignoring transactions.
422
422
  def do_not_trace?
423
423
  _is_filtered?(NR_DO_NOT_TRACE_KEY)
424
424
  end
425
425
 
426
- # overrideable method to determine whether to trace an action
426
+ # overridable method to determine whether to trace an action
427
427
  # for purposes of apdex measurement - you can use this to
428
428
  # ignore things like api calls or other fast non-user-facing
429
429
  # actions
@@ -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
@@ -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
@@ -9,7 +8,6 @@ module NewRelic
9
8
  module Curb
10
9
  module Easy
11
10
  attr_accessor :_nr_instrumented,
12
- :_nr_failure_instrumented,
13
11
  :_nr_http_verb,
14
12
  :_nr_header_str,
15
13
  :_nr_original_on_header,
@@ -143,7 +141,7 @@ module NewRelic
143
141
  request._nr_original_on_complete = original_callback
144
142
  request.on_complete do |finished_request|
145
143
  begin
146
- segment.process_response_headers(wrapped_response)
144
+ segment.process_response_headers(wrapped_response) if segment
147
145
  ensure
148
146
  segment.finish if segment
149
147
  # Make sure the existing completion callback is run, and restore the
@@ -158,24 +156,30 @@ module NewRelic
158
156
  # NOTE: on_failure is not always called, so we're not always
159
157
  # unhooking the callback. No harm/no foul in production, but
160
158
  # definitely something to beware of if debugging callback issues
161
- # _nr_failure_instrumented exists to prevent infinitely chaining
159
+ # @__newrelic_original_callback exists to prevent infinitely chaining
162
160
  # our on_failure callback hook.
163
- def install_failure_callback(request, wrapped_response, segment)
164
- return if request._nr_failure_instrumented
161
+ def install_failure_callback(request, _wrapped_response, segment)
165
162
  original_callback = request.on_failure
163
+
164
+ nr_original_callback = original_callback.instance_variable_get(:@__newrelic_original_callback)
165
+ original_callback = nr_original_callback || original_callback
166
+
166
167
  request._nr_original_on_failure = original_callback
167
- request.on_failure do |failed_request, error|
168
+
169
+ newrelic_callback = proc do |failed_request, error|
168
170
  begin
169
171
  if segment
170
- noticible_error = NewRelic::Agent::NoticibleError.new(error[0].name, error[-1])
171
- segment.notice_error(noticible_error)
172
+ noticeable_error = NewRelic::Agent::NoticeableError.new(error[0].name, error[-1])
173
+ segment.notice_error(noticeable_error)
172
174
  end
173
175
  ensure
174
176
  original_callback.call(failed_request, error) if original_callback
175
177
  remove_failure_callback(failed_request)
176
178
  end
177
- request._nr_failure_instrumented = true
178
179
  end
180
+ newrelic_callback.instance_variable_set(:@__newrelic_original_callback, original_callback)
181
+
182
+ request.on_failure(&newrelic_callback)
179
183
  end
180
184
 
181
185
  # on_failure callbacks cannot be removed in the on_complete
@@ -192,7 +196,6 @@ module NewRelic
192
196
  # fires before the on_failure callback.
193
197
  def remove_failure_callback(request)
194
198
  request.on_failure(&request._nr_original_on_failure)
195
- request._nr_failure_instrumented = false
196
199
  end
197
200
 
198
201
  private
@@ -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
@@ -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
@@ -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
@@ -130,7 +129,7 @@ module NewRelic
130
129
  use_model_name = NewRelic::Helper.instance_methods_include?(clazz, :model)
131
130
  metric_operation = method_name.to_s.gsub(/[!?]/, "")
132
131
 
133
- Proc.new do |*args, &blk|
132
+ proc do |*args, &blk|
134
133
  begin
135
134
  if operation_only
136
135
  # Used by direct SQL, like ::DataMapper::Adapters::DataObjectsAdapter#select
@@ -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
@@ -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
@@ -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
@@ -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
@@ -97,6 +96,7 @@ DependencyDetection.defer do
97
96
 
98
97
  executes do
99
98
  next unless delayed_job_version < Gem::Version.new('4.1.0')
99
+
100
100
  deprecation_msg = 'Instrumentation for DelayedJob versions below 4.1.0 is deprecated.' \
101
101
  'It will stop being monitored in version 9.0.0. ' \
102
102
  'Please upgrade your DelayedJob version to continue receiving full support. ' \
@@ -0,0 +1,29 @@
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
+
5
+ module NewRelic::Agent::Instrumentation
6
+ module Elasticsearch
7
+ def self.instrument!
8
+ to_instrument = if ::Gem::Version.create(::Elasticsearch::VERSION) <
9
+ ::Gem::Version.create("8.0.0")
10
+ ::Elasticsearch::Transport::Client
11
+ else
12
+ ::Elastic::Transport::Client
13
+ end
14
+
15
+ to_instrument.class_eval do
16
+ include NewRelic::Agent::Instrumentation::Elasticsearch
17
+
18
+ alias_method(:perform_request_without_tracing, :perform_request)
19
+ alias_method(:perform_request, :perform_request_with_tracing)
20
+
21
+ def perform_request(*args)
22
+ perform_request_with_tracing(*args) do
23
+ perform_request_without_tracing(*args)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,66 @@
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
+ require_relative '../../datastores/nosql_obfuscator'
5
+
6
+ module NewRelic::Agent::Instrumentation
7
+ module Elasticsearch
8
+ PRODUCT_NAME = 'Elasticsearch'
9
+ OPERATION = 'perform_request'
10
+
11
+ def perform_request_with_tracing(method, path, params = {}, body = nil, headers = nil)
12
+ return yield unless NewRelic::Agent::Tracer.tracing_enabled?
13
+
14
+ segment = NewRelic::Agent::Tracer.start_datastore_segment(
15
+ product: PRODUCT_NAME,
16
+ operation: nr_operation || OPERATION,
17
+ host: nr_hosts[:host],
18
+ port_path_or_id: path,
19
+ database_name: nr_cluster_name
20
+ )
21
+ begin
22
+ NewRelic::Agent::Tracer.capture_segment_error(segment) { yield }
23
+ ensure
24
+ if segment
25
+ segment.notice_nosql_statement(nr_reported_query(body || params))
26
+ segment.finish
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def nr_operation
34
+ operation_index = caller_locations.index do |line|
35
+ string = line.to_s
36
+ string.include?('lib/elasticsearch/api') && !string.include?(OPERATION)
37
+ end
38
+ return nil unless operation_index
39
+
40
+ caller_locations[operation_index].to_s.split('`')[-1].gsub(/\W/, "")
41
+ end
42
+
43
+ def nr_reported_query(query)
44
+ return unless NewRelic::Agent.config[:'elasticsearch.capture_queries']
45
+ return query unless NewRelic::Agent.config[:'elasticsearch.obfuscate_queries']
46
+
47
+ NewRelic::Agent::Datastores::NosqlObfuscator.obfuscate_statement(query)
48
+ end
49
+
50
+ def nr_cluster_name
51
+ return @nr_cluster_name if @nr_cluster_name
52
+ return if nr_hosts.empty?
53
+
54
+ NewRelic::Agent.disable_all_tracing do
55
+ @nr_cluster_name ||= perform_request('GET', '_cluster/health').body["cluster_name"]
56
+ end
57
+ rescue StandardError => e
58
+ NewRelic::Agent.logger.error("Failed to get cluster name for elasticsearch", e)
59
+ nil
60
+ end
61
+
62
+ def nr_hosts
63
+ @nr_hosts ||= (transport.hosts.first || NewRelic::EMPTY_HASH)
64
+ end
65
+ end
66
+ end
@@ -0,0 +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
+
5
+ module NewRelic::Agent::Instrumentation
6
+ module Elasticsearch::Prepend
7
+ include NewRelic::Agent::Instrumentation::Elasticsearch
8
+
9
+ def perform_request(*args)
10
+ perform_request_with_tracing(*args) { super }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,31 @@
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
+
5
+ require_relative 'elasticsearch/instrumentation'
6
+ require_relative 'elasticsearch/chain'
7
+ require_relative 'elasticsearch/prepend'
8
+
9
+ DependencyDetection.defer do
10
+ named :elasticsearch
11
+
12
+ depends_on do
13
+ defined?(::Elasticsearch)
14
+ end
15
+
16
+ executes do
17
+ ::NewRelic::Agent.logger.info('Installing Elasticsearch instrumentation')
18
+
19
+ to_instrument = if ::Gem::Version.create(::Elasticsearch::VERSION) < ::Gem::Version.create("8.0.0")
20
+ ::Elasticsearch::Transport::Client
21
+ else
22
+ ::Elastic::Transport::Client
23
+ end
24
+
25
+ if use_prepend?
26
+ prepend_instrument to_instrument, NewRelic::Agent::Instrumentation::Elasticsearch::Prepend
27
+ else
28
+ chain_instrument NewRelic::Agent::Instrumentation::Elasticsearch
29
+ end
30
+ end
31
+ end
@@ -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
@@ -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
@@ -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
@@ -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
@@ -46,6 +45,7 @@ module NewRelic::Agent::Instrumentation
46
45
 
47
46
  def handle_transaction(endpoint, class_name, version)
48
47
  return unless endpoint && route = endpoint.route
48
+
49
49
  name_transaction(route, class_name, version)
50
50
  capture_params(endpoint)
51
51
  end
@@ -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
@@ -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
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
  # This file is distributed under New Relic's license terms.
4
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
  # This file is distributed under New Relic's license terms.
4
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
  # This file is distributed under New Relic's license terms.
4
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
  # This file is distributed under New Relic's license terms.
4
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
@@ -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
@@ -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
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
  # This file is distributed under New Relic's license terms.
4
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
@@ -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
@@ -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
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
  # This file is distributed under New Relic's license terms.
4
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
  # This file is distributed under New Relic's license terms.
4
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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