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
@@ -10,7 +9,7 @@ module NewRelic
10
9
  module Configuration
11
10
  # Helper since default Procs are evaluated in the context of this module
12
11
  def self.value_of(key)
13
- Proc.new do
12
+ proc do
14
13
  NewRelic::Agent.config[key]
15
14
  end
16
15
  end
@@ -28,7 +27,7 @@ module NewRelic
28
27
  # - auto, when returned means, try to use prepend unless conflicting gems discovered
29
28
  #
30
29
  def self.instrumentation_value_of(disable_key, prepend_key = nil)
31
- Proc.new do
30
+ proc do
32
31
  if NewRelic::Agent.config[disable_key]
33
32
  "disabled"
34
33
  elsif prepend_key && !NewRelic::Agent.config[prepend_key]
@@ -40,7 +39,7 @@ module NewRelic
40
39
  end
41
40
 
42
41
  def self.instrumentation_value_from_boolean(key)
43
- Proc.new do
42
+ proc do
44
43
  NewRelic::Agent.config[key] ? 'auto' : 'disabled'
45
44
  end
46
45
  end
@@ -48,7 +47,7 @@ module NewRelic
48
47
  # Marks the config option as deprecated in the documentation once generated.
49
48
  # Does not appear in logs.
50
49
  def self.deprecated_description(new_setting, description)
51
- link_ref = new_setting.to_s.gsub(".", "-")
50
+ link_ref = new_setting.to_s.tr(".", "-")
52
51
  %{Please see: [#{new_setting}](docs/agents/ruby-agent/configuration/ruby-agent-configuration##{link_ref}). \n\n#{description}}
53
52
  end
54
53
 
@@ -82,7 +81,7 @@ module NewRelic
82
81
  end
83
82
 
84
83
  def self.config_search_paths
85
- Proc.new {
84
+ proc {
86
85
  paths = [
87
86
  File.join("config", "newrelic.yml"),
88
87
  File.join("newrelic.yml"),
@@ -116,7 +115,7 @@ module NewRelic
116
115
  end
117
116
 
118
117
  def self.config_path
119
- Proc.new {
118
+ proc {
120
119
  found_path = NewRelic::Agent.config[:config_search_paths].detect do |file|
121
120
  File.expand_path(file) if File.exist?(file)
122
121
  end
@@ -125,7 +124,7 @@ module NewRelic
125
124
  end
126
125
 
127
126
  def self.framework
128
- Proc.new {
127
+ proc {
129
128
  case
130
129
  when defined?(::NewRelic::TEST) then :test
131
130
  when defined?(::Rails::VERSION)
@@ -146,7 +145,7 @@ module NewRelic
146
145
  end
147
146
 
148
147
  def self.agent_enabled
149
- Proc.new {
148
+ proc {
150
149
  NewRelic::Agent.config[:enabled] &&
151
150
  (NewRelic::Agent.config[:test_mode] || NewRelic::Agent.config[:monitor_mode]) &&
152
151
  NewRelic::Agent::Autostart.agent_should_start?
@@ -156,9 +155,9 @@ module NewRelic
156
155
  DEFAULT_LOG_DIR = 'log/'.freeze
157
156
 
158
157
  def self.audit_log_path
159
- Proc.new {
158
+ proc {
160
159
  log_file_path = NewRelic::Agent.config[:log_file_path]
161
- wants_stdout = (log_file_path.upcase == 'STDOUT')
160
+ wants_stdout = (log_file_path.casecmp('STDOUT').zero?)
162
161
  audit_log_dir = wants_stdout ? DEFAULT_LOG_DIR : log_file_path
163
162
 
164
163
  File.join(audit_log_dir, 'newrelic_audit.log')
@@ -166,30 +165,30 @@ module NewRelic
166
165
  end
167
166
 
168
167
  def self.app_name
169
- Proc.new { NewRelic::Control.instance.env }
168
+ proc { NewRelic::Control.instance.env }
170
169
  end
171
170
 
172
171
  def self.dispatcher
173
- Proc.new { NewRelic::Control.instance.local_env.discovered_dispatcher }
172
+ proc { NewRelic::Control.instance.local_env.discovered_dispatcher }
174
173
  end
175
174
 
176
175
  def self.thread_profiler_enabled
177
- Proc.new { NewRelic::Agent::Threading::BacktraceService.is_supported? }
176
+ proc { NewRelic::Agent::Threading::BacktraceService.is_supported? }
178
177
  end
179
178
 
180
179
  # This check supports the js_errors_beta key we've asked clients to
181
180
  # set. Once JS errors are GA, browser_monitoring.loader can stop
182
181
  # being dynamic.
183
182
  def self.browser_monitoring_loader
184
- Proc.new { NewRelic::Agent.config[:js_errors_beta] ? "full" : "rum" }
183
+ proc { NewRelic::Agent.config[:js_errors_beta] ? "full" : "rum" }
185
184
  end
186
185
 
187
186
  def self.transaction_tracer_transaction_threshold
188
- Proc.new { NewRelic::Agent.config[:apdex_t] * 4 }
187
+ proc { NewRelic::Agent.config[:apdex_t] * 4 }
189
188
  end
190
189
 
191
190
  def self.profiling_available
192
- Proc.new {
191
+ proc {
193
192
  begin
194
193
  require 'ruby-prof'
195
194
  true
@@ -200,7 +199,7 @@ module NewRelic
200
199
  end
201
200
 
202
201
  def self.host
203
- Proc.new do
202
+ proc do
204
203
  regex = /\A(?<identifier>.+?)x/
205
204
  if matches = regex.match(String(NewRelic::Agent.config[:license_key]))
206
205
  "collector.#{matches['identifier']}.nr-data.net"
@@ -211,12 +210,16 @@ module NewRelic
211
210
  end
212
211
 
213
212
  def self.api_host
214
- Proc.new do
215
- if String(NewRelic::Agent.config[:license_key]).start_with?('eu')
216
- 'rpm.eu.newrelic.com'
213
+ # only used for deployment task
214
+ proc do
215
+ api_version = if NewRelic::Agent.config[:api_key].nil? || NewRelic::Agent.config[:api_key].empty?
216
+ "rpm"
217
217
  else
218
- 'rpm.newrelic.com'
218
+ "api"
219
219
  end
220
+ api_region = "eu." if String(NewRelic::Agent.config[:license_key]).start_with?('eu')
221
+
222
+ "#{api_version}.#{api_region}newrelic.com"
220
223
  end
221
224
  end
222
225
 
@@ -260,7 +263,7 @@ module NewRelic
260
263
  end
261
264
 
262
265
  def self.enforce_fallback(allowed_values: nil, fallback: nil)
263
- Proc.new do |configured_value|
266
+ proc do |configured_value|
264
267
  if allowed_values.any? { |v| v =~ /#{configured_value}/i }
265
268
  configured_value
266
269
  else
@@ -330,6 +333,13 @@ module NewRelic
330
333
  :allowed_from_server => false,
331
334
  :description => 'Your New Relic [license key](/docs/apis/intro-apis/new-relic-api-keys/#ingest-license-key).'
332
335
  },
336
+ :api_key => {
337
+ :default => '',
338
+ :public => true,
339
+ :type => String,
340
+ :allowed_from_server => false,
341
+ :description => 'Your New Relic API key. Required when using the New Relic REST API v2 to record deployments using the `newrelic deployments` command.'
342
+ },
333
343
  :agent_enabled => {
334
344
  :default => DefaultSource.agent_enabled,
335
345
  :documentation_default => true,
@@ -457,7 +467,7 @@ When `true`, the agent captures HTTP request parameters and attaches them to tra
457
467
  :public => false,
458
468
  :type => Array,
459
469
  :allowed_from_server => false,
460
- :description => "An array of candidate locations for the agent\'s configuration file."
470
+ :description => "An array of candidate locations for the agent's configuration file."
461
471
  },
462
472
  :dispatcher => {
463
473
  :default => DefaultSource.dispatcher,
@@ -906,6 +916,14 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
906
916
  :allowed_from_server => false,
907
917
  :description => 'Controls auto-instrumentation of bunny at start up. May be one of [auto|prepend|chain|disabled].'
908
918
  },
919
+ :'instrumentation.elasticsearch' => {
920
+ :default => 'auto',
921
+ :public => true,
922
+ :type => String,
923
+ :dynamic_name => true,
924
+ :allowed_from_server => false,
925
+ :description => 'Controls auto-instrumentation of the elasticsearch library at start up. May be one of [auto|prepend|chain|disabled].'
926
+ },
909
927
  :'instrumentation.httprb' => {
910
928
  :default => instrumentation_value_of(:disable_httprb),
911
929
  :documentation_default => 'auto',
@@ -930,7 +948,7 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
930
948
  :type => String,
931
949
  :dynamic_name => true,
932
950
  :allowed_from_server => false,
933
- :description => "Controls auto-instrumentation of the Thread class at start up to allow the agent to correctly nest spans inside of an asyncronous transaction. This does not enable the agent to automatically trace all threads created (see `instrumentation.thread.tracing`). May be one of [auto|prepend|chain|disabled]."
951
+ :description => "Controls auto-instrumentation of the Thread class at start up to allow the agent to correctly nest spans inside of an asynchronous transaction. This does not enable the agent to automatically trace all threads created (see `instrumentation.thread.tracing`). May be one of [auto|prepend|chain|disabled]."
934
952
  },
935
953
  :'instrumentation.thread.tracing' => {
936
954
  :default => false,
@@ -1177,7 +1195,7 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
1177
1195
  :type => Boolean,
1178
1196
  :deprecated => true,
1179
1197
  :allowed_from_server => false,
1180
- :description => deprecated_description(:'instrumentation.memcache', "If `true`, disables instrumentation for the dalli gem\'s additional CAS client support.")
1198
+ :description => deprecated_description(:'instrumentation.memcache', "If `true`, disables instrumentation for the dalli gem's additional CAS client support.")
1181
1199
  },
1182
1200
  :disable_memcache_instrumentation => {
1183
1201
  :default => false,
@@ -1397,6 +1415,20 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
1397
1415
  :allowed_from_server => true,
1398
1416
  :description => 'If `true`, the agent obfuscates Mongo queries in transaction traces.'
1399
1417
  },
1418
+ :'elasticsearch.capture_queries' => {
1419
+ :default => true,
1420
+ :public => true,
1421
+ :type => Boolean,
1422
+ :allowed_from_server => true,
1423
+ :description => 'If `true`, the agent captures Elasticsearch queries in transaction traces.'
1424
+ },
1425
+ :'elasticsearch.obfuscate_queries' => {
1426
+ :default => true,
1427
+ :public => true,
1428
+ :type => Boolean,
1429
+ :allowed_from_server => true,
1430
+ :description => 'If `true`, the agent obfuscates Elasticsearch queries in transaction traces.'
1431
+ },
1400
1432
  :'error_collector.enabled' => {
1401
1433
  :default => true,
1402
1434
  :public => true,
@@ -1562,7 +1594,7 @@ A map of error classes to a list of messages. When an error of one of the classe
1562
1594
  :public => false,
1563
1595
  :type => String,
1564
1596
  :allowed_from_server => true,
1565
- :description => 'Javascript agent file for real user monitoring.'
1597
+ :description => 'JavaScript agent file for real user monitoring.'
1566
1598
  },
1567
1599
  :'browser_monitoring.auto_instrument' => {
1568
1600
  :default => value_of(:'rum.enabled'),
@@ -1921,7 +1953,7 @@ A map of error classes to a list of messages. When an error of one of the classe
1921
1953
  :description => 'If `true`, the agent uses Heroku dyno names as the hostname.'
1922
1954
  },
1923
1955
  :'heroku.dyno_name_prefixes_to_shorten' => {
1924
- :default => ['scheduler', 'run'],
1956
+ :default => %w[scheduler run],
1925
1957
  :public => true,
1926
1958
  :type => Array,
1927
1959
  :allowed_from_server => false,
@@ -1929,7 +1961,7 @@ A map of error classes to a list of messages. When an error of one of the classe
1929
1961
  :description => 'Ordinarily the agent reports dyno names with a trailing dot and process ID (for example, <b>worker.3</b>). You can remove this trailing data by specifying the prefixes you want to report without trailing data (for example, <b>worker</b>).'
1930
1962
  },
1931
1963
  :'process_host.display_name' => {
1932
- :default => Proc.new { NewRelic::Agent::Hostname.get },
1964
+ :default => proc { NewRelic::Agent::Hostname.get },
1933
1965
  :public => true,
1934
1966
  :type => String,
1935
1967
  :allowed_from_server => false,
@@ -1962,7 +1994,7 @@ A map of error classes to a list of messages. When an error of one of the classe
1962
1994
  :public => true,
1963
1995
  :type => String,
1964
1996
  :allowed_from_server => false,
1965
- :description => "Manual override for the path to your local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic\'s data collection service."
1997
+ :description => "Manual override for the path to your local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic's data collection service."
1966
1998
  },
1967
1999
  :'rules.ignore_url_regexes' => {
1968
2000
  :default => [],
@@ -1994,7 +2026,7 @@ A map of error classes to a list of messages. When an error of one of the classe
1994
2026
  :description => 'If `true`, the agent captures [custom events](/docs/insights/new-relic-insights/adding-querying-data/inserting-custom-events-new-relic-apm-agents).'
1995
2027
  },
1996
2028
  :'custom_insights_events.max_samples_stored' => {
1997
- :default => 1000,
2029
+ :default => 3000,
1998
2030
  :public => true,
1999
2031
  :type => Integer,
2000
2032
  :allowed_from_server => true,
@@ -2436,6 +2468,25 @@ A map of error classes to a list of messages. When an error of one of the classe
2436
2468
  :allowed_from_server => false,
2437
2469
  :external => :infinite_tracing,
2438
2470
  :description => "Configures the TCP/IP port for the Trace Observer Host"
2471
+ },
2472
+ :'infinite_tracing.compression_level' => {
2473
+ :default => :none,
2474
+ :public => false,
2475
+ :type => Symbol,
2476
+ :allowed_from_server => false,
2477
+ :external => :infinite_tracing,
2478
+ :description => "Configure the compression level for data sent to the Trace Observer\nMay be one of " \
2479
+ "[none|low|medium|high]\nBy default, compression is not used (level = none)"
2480
+ },
2481
+ :'infinite_tracing.batching' => {
2482
+ :default => false,
2483
+ :public => false,
2484
+ :type => Boolean,
2485
+ :allowed_from_server => false,
2486
+ :external => :infinite_tracing,
2487
+ :description => "If true, data sent to the Trace Observer will be batched instead of the default of each " \
2488
+ "span being sent individually"
2489
+
2439
2490
  }
2440
2491
  }.freeze
2441
2492
  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
@@ -36,7 +35,8 @@ module NewRelic
36
35
  # turns {'a' => {'b' => 'c'}} into {'a.b' => 'c'}
37
36
  def dot_flattened(nested_hash, names = [], result = {})
38
37
  nested_hash.each do |key, val|
39
- next if val == nil
38
+ next if val.nil?
39
+
40
40
  if val.respond_to?(:has_key?)
41
41
  dot_flattened(val, names + [key], result)
42
42
  else
@@ -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
@@ -35,6 +34,7 @@ module NewRelic
35
34
  set_dotted_alias(config_setting)
36
35
 
37
36
  return unless value[:aliases]
37
+
38
38
  value[:aliases].each do |config_alias|
39
39
  self.alias_map[config_alias] = config_setting
40
40
  end
@@ -44,14 +44,14 @@ module NewRelic
44
44
  config_setting = original_config_setting.to_s
45
45
 
46
46
  if config_setting.include?('.')
47
- config_alias = config_setting.gsub(/\./, '_').to_sym
47
+ config_alias = config_setting.tr('.', '_').to_sym
48
48
  self.alias_map[config_alias] = original_config_setting
49
49
  end
50
50
  end
51
51
 
52
52
  def set_log_file
53
53
  if ENV['NEW_RELIC_LOG']
54
- if ENV['NEW_RELIC_LOG'].upcase == 'STDOUT'
54
+ if ENV['NEW_RELIC_LOG'].casecmp('STDOUT').zero?
55
55
  self[:log_file_path] = self[:log_file_name] = 'STDOUT'
56
56
  else
57
57
  self[:log_file_path] = File.dirname(ENV['NEW_RELIC_LOG'])
@@ -96,7 +96,7 @@ module NewRelic
96
96
  elsif type == NewRelic::Agent::Configuration::Boolean
97
97
  if value =~ /false|off|no/i
98
98
  self[config_key] = false
99
- elsif value != nil
99
+ elsif !value.nil?
100
100
  self[config_key] = true
101
101
  end
102
102
  else
@@ -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
@@ -19,6 +18,7 @@ module NewRelic
19
18
  :'transaction_tracer.record_sql' => record_sql_setting(local_settings, :'transaction_tracer.record_sql'),
20
19
  :'slow_sql.record_sql' => record_sql_setting(local_settings, :'slow_sql.record_sql'),
21
20
  :'mongo.obfuscate_queries' => true,
21
+ :'elasticsearch.obfuscate_queries' => true,
22
22
  :'transaction_tracer.record_redis_arguments' => false,
23
23
 
24
24
  :'custom_insights_events.enabled' => false,
@@ -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
@@ -37,6 +36,7 @@ module NewRelic
37
36
 
38
37
  def add_config_for_testing(source, level = 0)
39
38
  raise 'Invalid config type for testing' unless [Hash, DottedHash].include?(source.class)
39
+
40
40
  invoke_callbacks(:add, source)
41
41
  @configs_for_testing << [source.freeze, level]
42
42
  reset_cache
@@ -111,6 +111,7 @@ module NewRelic
111
111
  def fetch(key)
112
112
  config_stack.each do |config|
113
113
  next unless config
114
+
114
115
  accessor = key.to_sym
115
116
 
116
117
  if config.has_key?(accessor)
@@ -156,11 +157,12 @@ module NewRelic
156
157
 
157
158
  def register_callback(key, &proc)
158
159
  @callbacks[key] << proc
159
- proc.call(@cache[key])
160
+ yield(@cache[key])
160
161
  end
161
162
 
162
163
  def invoke_callbacks(direction, source)
163
164
  return unless source
165
+
164
166
  source.keys.each do |key|
165
167
  begin
166
168
  # we need to evaluate and apply transformations for the value to deal with procs as values
@@ -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
@@ -7,8 +6,8 @@ module NewRelic
7
6
  module Agent
8
7
  module Configuration
9
8
  MASK_DEFAULTS = {
10
- :'thread_profiler' => Proc.new { !NewRelic::Agent::Threading::BacktraceService.is_supported? },
11
- :'thread_profiler.enabled' => Proc.new { !NewRelic::Agent::Threading::BacktraceService.is_supported? }
9
+ :'thread_profiler' => proc { !NewRelic::Agent::Threading::BacktraceService.is_supported? },
10
+ :'thread_profiler.enabled' => proc { !NewRelic::Agent::Threading::BacktraceService.is_supported? }
12
11
  }
13
12
  end
14
13
  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
@@ -80,6 +79,15 @@ module NewRelic
80
79
  change_setting(policies, :'mongo.obfuscate_queries', true)
81
80
  }
82
81
  },
82
+ {
83
+ option: :'elasticsearch.capture_queries',
84
+ supported: true,
85
+ enabled_fn: method(:enabled?),
86
+ disabled_value: false,
87
+ permitted_fn: proc { |policies|
88
+ change_setting(policies, :'elasticsearch.obfuscate_queries', true)
89
+ }
90
+ },
83
91
  {
84
92
  option: :'transaction_tracer.record_redis_arguments',
85
93
  supported: true,
@@ -213,6 +221,7 @@ module NewRelic
213
221
  security_policies.inject({}) do |settings, (policy_name, policy_settings)|
214
222
  SECURITY_SETTINGS_MAP[policy_name].each do |policy|
215
223
  next unless policy[:supported]
224
+
216
225
  if policy_settings[ENABLED]
217
226
  if policy[:enabled_fn].call(policy[:option])
218
227
  if permitted_fn = policy[:permitted_fn]
@@ -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
@@ -14,7 +13,7 @@ module NewRelic
14
13
 
15
14
  # These are configuration options that have a value of a Hash
16
15
  # This is used in YamlSource#dot_flattened prevent flattening these values
17
- CONFIG_WITH_HASH_VALUE = ['expected_messages', 'ignore_messages']
16
+ CONFIG_WITH_HASH_VALUE = %w[expected_messages ignore_messages]
18
17
 
19
18
  def initialize(path, env)
20
19
  @path = path
@@ -156,7 +155,8 @@ module NewRelic
156
155
 
157
156
  def dot_flattened(nested_hash, names = [], result = {})
158
157
  nested_hash.each do |key, val|
159
- next if val == nil
158
+ next if val.nil?
159
+
160
160
  if val.respond_to?(:has_key?) && !CONFIG_WITH_HASH_VALUE.include?(key)
161
161
  dot_flattened(val, names + [key], result)
162
162
  else
@@ -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
@@ -39,10 +38,11 @@ module NewRelic
39
38
  end
40
39
 
41
40
  # We've seen objects in the environment report (Rails.env in
42
- # particular) that can't seralize to JSON. Cope with that here and
41
+ # particular) that can't serialize to JSON. Cope with that here and
43
42
  # clear out so downstream code doesn't have to check again.
44
43
  def sanitize_environment_report(environment_report)
45
44
  return NewRelic::EMPTY_ARRAY unless @service.valid_to_marshal?(environment_report)
45
+
46
46
  environment_report
47
47
  end
48
48
 
@@ -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
@@ -20,7 +19,7 @@ module NewRelic
20
19
  # Can accommodate most arbitrary data - anything extra is
21
20
  # ignored unless we say to do something with it here.
22
21
  def configure_agent(config_data)
23
- return if config_data == nil
22
+ return if config_data.nil?
24
23
 
25
24
  @agent.agent_id = config_data['agent_run_id']
26
25
 
@@ -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
@@ -54,6 +53,7 @@ module NewRelic
54
53
 
55
54
  def obfuscate_single_quote_literals(sql)
56
55
  return sql unless sql =~ COMPONENTS_REGEX_MAP[:single_quotes]
56
+
57
57
  sql.gsub(COMPONENTS_REGEX_MAP[:single_quotes], PLACEHOLDER)
58
58
  end
59
59
 
@@ -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
@@ -33,6 +32,8 @@ module NewRelic
33
32
  # Take care not to the dup the query more than once as
34
33
  # correctly encoded may also dup the query.
35
34
  def capture_query(query)
35
+ return unless query
36
+
36
37
  id = query.object_id
37
38
  query = Helper.correctly_encoded(truncate_query(query))
38
39
  if query.object_id == id
@@ -43,6 +44,8 @@ module NewRelic
43
44
  end
44
45
 
45
46
  def truncate_query(query)
47
+ return unless query
48
+
46
49
  if query.length > (MAX_QUERY_LENGTH - 4)
47
50
  query[0..MAX_QUERY_LENGTH - 4] << ELLIPSIS
48
51
  else
@@ -115,22 +118,23 @@ module NewRelic
115
118
  # in a report period, selected for shipment to New Relic
116
119
  def explain_sql(statement)
117
120
  return nil unless statement.sql && statement.explainer && statement.config
121
+
118
122
  statement.sql = statement.sql.split(";\n")[0] # only explain the first
119
123
  return statement.explain || []
120
124
  end
121
125
 
122
- KNOWN_OPERATIONS = [
123
- 'alter',
124
- 'select',
125
- 'update',
126
- 'delete',
127
- 'insert',
128
- 'create',
129
- 'show',
130
- 'set',
131
- 'exec',
132
- 'execute',
133
- 'call'
126
+ KNOWN_OPERATIONS = %w[
127
+ alter
128
+ select
129
+ update
130
+ delete
131
+ insert
132
+ create
133
+ show
134
+ set
135
+ exec
136
+ execute
137
+ call
134
138
  ]
135
139
  OTHER_OPERATION = 'other'.freeze
136
140
  SQL_COMMENT_REGEX = Regexp.new('/\*.*?\*/', Regexp::MULTILINE).freeze
@@ -158,7 +162,7 @@ module NewRelic
158
162
  return connection if connection
159
163
 
160
164
  begin
161
- @connections[config] = connector.call(config)
165
+ @connections[config] = yield(config)
162
166
  rescue => e
163
167
  ::NewRelic::Agent.logger.error("Caught exception trying to get connection to DB for explain.", e)
164
168
  nil
@@ -224,6 +228,7 @@ module NewRelic
224
228
 
225
229
  def explain
226
230
  return unless explainable?
231
+
227
232
  handle_exception_in_explain do
228
233
  start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
229
234
  plan = @explainer.call(self)
@@ -239,6 +244,7 @@ module NewRelic
239
244
 
240
245
  def append_sql(new_sql)
241
246
  return if new_sql.empty?
247
+
242
248
  @sql = Database.truncate_query(@sql << NEWLINE << new_sql)
243
249
  end
244
250