newrelic_rpm 8.9.0 → 8.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -6
  3. data/.simplecov +1 -0
  4. data/.snyk +11 -0
  5. data/Brewfile +1 -0
  6. data/CHANGELOG.md +56 -0
  7. data/Guardfile +1 -0
  8. data/Rakefile +5 -0
  9. data/bin/mongrel_rpm +7 -6
  10. data/bin/newrelic +2 -1
  11. data/bin/newrelic_cmd +1 -0
  12. data/bin/nrdebug +3 -2
  13. data/init.rb +3 -2
  14. data/install.rb +1 -0
  15. data/lib/new_relic/agent/adaptive_sampler.rb +4 -3
  16. data/lib/new_relic/agent/agent/shutdown.rb +3 -2
  17. data/lib/new_relic/agent/agent/special_startup.rb +3 -2
  18. data/lib/new_relic/agent/agent/start_worker_thread.rb +15 -14
  19. data/lib/new_relic/agent/agent/startup.rb +11 -10
  20. data/lib/new_relic/agent/agent.rb +35 -33
  21. data/lib/new_relic/agent/agent_logger.rb +2 -1
  22. data/lib/new_relic/agent/attribute_filter.rb +1 -0
  23. data/lib/new_relic/agent/attribute_processing.rb +4 -3
  24. data/lib/new_relic/agent/attributes.rb +2 -1
  25. data/lib/new_relic/agent/audit_logger.rb +1 -0
  26. data/lib/new_relic/agent/autostart.rb +1 -0
  27. data/lib/new_relic/agent/chained_call.rb +1 -0
  28. data/lib/new_relic/agent/commands/agent_command.rb +1 -0
  29. data/lib/new_relic/agent/commands/agent_command_router.rb +4 -3
  30. data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -0
  31. data/lib/new_relic/agent/configuration/default_source.rb +35 -7
  32. data/lib/new_relic/agent/configuration/dotted_hash.rb +1 -0
  33. data/lib/new_relic/agent/configuration/environment_source.rb +2 -1
  34. data/lib/new_relic/agent/configuration/event_harvest_config.rb +1 -0
  35. data/lib/new_relic/agent/configuration/high_security_source.rb +1 -0
  36. data/lib/new_relic/agent/configuration/manager.rb +2 -1
  37. data/lib/new_relic/agent/configuration/manual_source.rb +1 -0
  38. data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -0
  39. data/lib/new_relic/agent/configuration/security_policy_source.rb +7 -3
  40. data/lib/new_relic/agent/configuration/server_source.rb +7 -6
  41. data/lib/new_relic/agent/configuration/yaml_source.rb +4 -1
  42. data/lib/new_relic/agent/configuration.rb +1 -0
  43. data/lib/new_relic/agent/connect/request_builder.rb +1 -0
  44. data/lib/new_relic/agent/connect/response_handler.rb +4 -3
  45. data/lib/new_relic/agent/custom_event_aggregator.rb +5 -4
  46. data/lib/new_relic/agent/database/explain_plan_helpers.rb +1 -0
  47. data/lib/new_relic/agent/database/obfuscation_helpers.rb +1 -0
  48. data/lib/new_relic/agent/database/obfuscator.rb +2 -1
  49. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +1 -0
  50. data/lib/new_relic/agent/database.rb +3 -2
  51. data/lib/new_relic/agent/database_adapter.rb +1 -0
  52. data/lib/new_relic/agent/datastores/metric_helper.rb +9 -8
  53. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +2 -0
  54. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +1 -0
  55. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +2 -1
  56. data/lib/new_relic/agent/datastores/mongo.rb +1 -0
  57. data/lib/new_relic/agent/datastores/redis.rb +3 -2
  58. data/lib/new_relic/agent/datastores.rb +4 -3
  59. data/lib/new_relic/agent/deprecator.rb +1 -0
  60. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +1 -0
  61. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +16 -16
  62. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +9 -9
  63. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +18 -18
  64. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +8 -8
  65. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +2 -2
  66. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +40 -39
  67. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +16 -14
  68. data/lib/new_relic/agent/distributed_tracing.rb +17 -17
  69. data/lib/new_relic/agent/encoding_normalizer.rb +1 -0
  70. data/lib/new_relic/agent/error_collector.rb +6 -4
  71. data/lib/new_relic/agent/error_event_aggregator.rb +3 -3
  72. data/lib/new_relic/agent/error_filter.rb +1 -0
  73. data/lib/new_relic/agent/error_trace_aggregator.rb +2 -1
  74. data/lib/new_relic/agent/event_aggregator.rb +20 -19
  75. data/lib/new_relic/agent/event_buffer.rb +1 -0
  76. data/lib/new_relic/agent/event_listener.rb +1 -0
  77. data/lib/new_relic/agent/event_loop.rb +7 -6
  78. data/lib/new_relic/agent/external.rb +9 -8
  79. data/lib/new_relic/agent/guid_generator.rb +2 -1
  80. data/lib/new_relic/agent/harvester.rb +1 -0
  81. data/lib/new_relic/agent/heap.rb +3 -2
  82. data/lib/new_relic/agent/hostname.rb +4 -2
  83. data/lib/new_relic/agent/http_clients/abstract.rb +1 -1
  84. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +5 -5
  85. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +4 -4
  86. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +1 -1
  87. data/lib/new_relic/agent/http_clients/uri_util.rb +1 -1
  88. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +6 -4
  89. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +2 -0
  90. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +6 -4
  91. data/lib/new_relic/agent/instrumentation/active_job.rb +2 -1
  92. data/lib/new_relic/agent/instrumentation/active_merchant.rb +2 -1
  93. data/lib/new_relic/agent/instrumentation/active_record.rb +9 -8
  94. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +15 -14
  95. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +3 -2
  96. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +1 -0
  97. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +5 -3
  98. data/lib/new_relic/agent/instrumentation/active_storage.rb +2 -1
  99. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +16 -14
  100. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +1 -0
  101. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +1 -0
  102. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +1 -0
  103. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +2 -1
  104. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +2 -1
  105. data/lib/new_relic/agent/instrumentation/authlogic.rb +2 -1
  106. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +10 -9
  107. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +10 -10
  108. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +4 -3
  109. data/lib/new_relic/agent/instrumentation/bunny.rb +1 -1
  110. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +13 -9
  111. data/lib/new_relic/agent/instrumentation/curb/chain.rb +21 -21
  112. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +8 -8
  113. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +2 -2
  114. data/lib/new_relic/agent/instrumentation/curb.rb +2 -1
  115. data/lib/new_relic/agent/instrumentation/data_mapper.rb +43 -42
  116. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +1 -1
  117. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +2 -2
  118. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +1 -1
  119. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +3 -2
  120. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +3 -2
  121. data/lib/new_relic/agent/instrumentation/excon.rb +2 -1
  122. data/lib/new_relic/agent/instrumentation/grape/chain.rb +6 -5
  123. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +5 -4
  124. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +4 -3
  125. data/lib/new_relic/agent/instrumentation/grape.rb +1 -0
  126. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +106 -0
  127. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +88 -0
  128. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +117 -0
  129. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +31 -0
  130. data/lib/new_relic/agent/instrumentation/grpc/helper.rb +31 -0
  131. data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +70 -0
  132. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +135 -0
  133. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +36 -0
  134. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +27 -0
  135. data/lib/new_relic/agent/instrumentation/grpc_client.rb +24 -0
  136. data/lib/new_relic/agent/instrumentation/grpc_server.rb +26 -0
  137. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +1 -0
  138. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +6 -5
  139. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +1 -0
  140. data/lib/new_relic/agent/instrumentation/httpclient.rb +2 -1
  141. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +1 -0
  142. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +4 -3
  143. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +1 -0
  144. data/lib/new_relic/agent/instrumentation/httprb.rb +2 -1
  145. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +2 -1
  146. data/lib/new_relic/agent/instrumentation/logger/chain.rb +2 -1
  147. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +5 -0
  148. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +1 -0
  149. data/lib/new_relic/agent/instrumentation/logger.rb +2 -1
  150. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +2 -2
  151. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +19 -19
  152. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +8 -8
  153. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +17 -14
  154. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +14 -14
  155. data/lib/new_relic/agent/instrumentation/memcache.rb +1 -1
  156. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +1 -0
  157. data/lib/new_relic/agent/instrumentation/mongo.rb +2 -1
  158. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +14 -12
  159. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +1 -0
  160. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +5 -4
  161. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +1 -0
  162. data/lib/new_relic/agent/instrumentation/net_http.rb +2 -1
  163. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +5 -4
  164. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +1 -0
  165. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +1 -0
  166. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +1 -0
  167. data/lib/new_relic/agent/instrumentation/padrino.rb +2 -1
  168. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +3 -2
  169. data/lib/new_relic/agent/instrumentation/queue_time.rb +1 -0
  170. data/lib/new_relic/agent/instrumentation/rack/chain.rb +12 -11
  171. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +1 -0
  172. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +7 -6
  173. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +4 -3
  174. data/lib/new_relic/agent/instrumentation/rack.rb +1 -0
  175. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +6 -5
  176. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -0
  177. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +3 -1
  178. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +3 -1
  179. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +3 -1
  180. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +3 -2
  181. data/lib/new_relic/agent/instrumentation/rake/chain.rb +2 -1
  182. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +1 -1
  183. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +1 -0
  184. data/lib/new_relic/agent/instrumentation/rake.rb +3 -2
  185. data/lib/new_relic/agent/instrumentation/redis/chain.rb +3 -3
  186. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +5 -5
  187. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +3 -3
  188. data/lib/new_relic/agent/instrumentation/redis.rb +2 -1
  189. data/lib/new_relic/agent/instrumentation/resque/chain.rb +2 -1
  190. data/lib/new_relic/agent/instrumentation/resque/helper.rb +1 -0
  191. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +1 -0
  192. data/lib/new_relic/agent/instrumentation/resque.rb +3 -2
  193. data/lib/new_relic/agent/instrumentation/sequel.rb +8 -7
  194. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -0
  195. data/lib/new_relic/agent/instrumentation/sidekiq.rb +6 -4
  196. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +1 -0
  197. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +2 -1
  198. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +1 -0
  199. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +1 -0
  200. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +2 -1
  201. data/lib/new_relic/agent/instrumentation/sinatra.rb +2 -1
  202. data/lib/new_relic/agent/instrumentation/sunspot.rb +2 -1
  203. data/lib/new_relic/agent/instrumentation/thread/chain.rb +2 -1
  204. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +1 -0
  205. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +1 -0
  206. data/lib/new_relic/agent/instrumentation/thread.rb +2 -1
  207. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +1 -0
  208. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +1 -0
  209. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +1 -0
  210. data/lib/new_relic/agent/instrumentation/tilt.rb +1 -0
  211. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +1 -0
  212. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +6 -5
  213. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +1 -0
  214. data/lib/new_relic/agent/instrumentation/typhoeus.rb +2 -1
  215. data/lib/new_relic/agent/instrumentation.rb +1 -0
  216. data/lib/new_relic/agent/internal_agent_error.rb +1 -0
  217. data/lib/new_relic/agent/javascript_instrumentor.rb +7 -6
  218. data/lib/new_relic/agent/linking_metadata.rb +2 -2
  219. data/lib/new_relic/agent/log_event_aggregator.rb +6 -5
  220. data/lib/new_relic/agent/log_once.rb +1 -0
  221. data/lib/new_relic/agent/log_priority.rb +1 -0
  222. data/lib/new_relic/agent/logging.rb +13 -12
  223. data/lib/new_relic/agent/memory_logger.rb +1 -0
  224. data/lib/new_relic/agent/messaging.rb +18 -18
  225. data/lib/new_relic/agent/method_tracer.rb +6 -5
  226. data/lib/new_relic/agent/method_tracer_helpers.rb +8 -5
  227. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +3 -2
  228. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +3 -2
  229. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -0
  230. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +2 -1
  231. data/lib/new_relic/agent/monitors.rb +5 -4
  232. data/lib/new_relic/agent/new_relic_service/encoders.rb +2 -1
  233. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +4 -3
  234. data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -0
  235. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +1 -0
  236. data/lib/new_relic/agent/new_relic_service.rb +11 -11
  237. data/lib/new_relic/agent/noticible_error.rb +1 -1
  238. data/lib/new_relic/agent/null_logger.rb +1 -0
  239. data/lib/new_relic/agent/obfuscator.rb +2 -1
  240. data/lib/new_relic/agent/parameter_filtering.rb +1 -0
  241. data/lib/new_relic/agent/payload_metric_mapping.rb +1 -0
  242. data/lib/new_relic/agent/pipe_channel_manager.rb +6 -5
  243. data/lib/new_relic/agent/pipe_service.rb +1 -0
  244. data/lib/new_relic/agent/prepend_supportability.rb +2 -1
  245. data/lib/new_relic/agent/priority_sampled_buffer.rb +2 -1
  246. data/lib/new_relic/agent/range_extensions.rb +8 -27
  247. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +2 -1
  248. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +1 -0
  249. data/lib/new_relic/agent/rules_engine.rb +2 -1
  250. data/lib/new_relic/agent/sampler.rb +1 -0
  251. data/lib/new_relic/agent/sampler_collection.rb +1 -0
  252. data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -0
  253. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +1 -0
  254. data/lib/new_relic/agent/samplers/memory_sampler.rb +5 -4
  255. data/lib/new_relic/agent/samplers/object_sampler.rb +1 -0
  256. data/lib/new_relic/agent/samplers/vm_sampler.rb +1 -0
  257. data/lib/new_relic/agent/span_event_aggregator.rb +2 -1
  258. data/lib/new_relic/agent/span_event_primitive.rb +15 -11
  259. data/lib/new_relic/agent/sql_sampler.rb +7 -6
  260. data/lib/new_relic/agent/stats.rb +3 -1
  261. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -0
  262. data/lib/new_relic/agent/stats_engine/stats_hash.rb +3 -2
  263. data/lib/new_relic/agent/stats_engine.rb +1 -0
  264. data/lib/new_relic/agent/synthetics_event_aggregator.rb +6 -5
  265. data/lib/new_relic/agent/system_info.rb +8 -7
  266. data/lib/new_relic/agent/threading/agent_thread.rb +1 -0
  267. data/lib/new_relic/agent/threading/backtrace_node.rb +6 -3
  268. data/lib/new_relic/agent/threading/backtrace_service.rb +1 -0
  269. data/lib/new_relic/agent/threading/thread_profile.rb +1 -0
  270. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -0
  271. data/lib/new_relic/agent/tracer.rb +12 -11
  272. data/lib/new_relic/agent/transaction/abstract_segment.rb +64 -31
  273. data/lib/new_relic/agent/transaction/datastore_segment.rb +12 -11
  274. data/lib/new_relic/agent/transaction/distributed_tracer.rb +52 -47
  275. data/lib/new_relic/agent/transaction/distributed_tracing.rb +21 -21
  276. data/lib/new_relic/agent/transaction/external_request_segment.rb +36 -27
  277. data/lib/new_relic/agent/transaction/message_broker_segment.rb +6 -5
  278. data/lib/new_relic/agent/transaction/request_attributes.rb +29 -28
  279. data/lib/new_relic/agent/transaction/segment.rb +8 -7
  280. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -0
  281. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -0
  282. data/lib/new_relic/agent/transaction/trace.rb +3 -2
  283. data/lib/new_relic/agent/transaction/trace_builder.rb +10 -9
  284. data/lib/new_relic/agent/transaction/trace_context.rb +22 -19
  285. data/lib/new_relic/agent/transaction/trace_node.rb +9 -8
  286. data/lib/new_relic/agent/transaction/tracing.rb +7 -6
  287. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -0
  288. data/lib/new_relic/agent/transaction.rb +22 -21
  289. data/lib/new_relic/agent/transaction_error_primitive.rb +9 -8
  290. data/lib/new_relic/agent/transaction_event_aggregator.rb +5 -4
  291. data/lib/new_relic/agent/transaction_event_primitive.rb +3 -3
  292. data/lib/new_relic/agent/transaction_event_recorder.rb +14 -12
  293. data/lib/new_relic/agent/transaction_metrics.rb +3 -2
  294. data/lib/new_relic/agent/transaction_sampler.rb +4 -3
  295. data/lib/new_relic/agent/transaction_time_aggregator.rb +13 -12
  296. data/lib/new_relic/agent/utilization/aws.rb +4 -3
  297. data/lib/new_relic/agent/utilization/azure.rb +1 -0
  298. data/lib/new_relic/agent/utilization/gcp.rb +6 -5
  299. data/lib/new_relic/agent/utilization/pcf.rb +3 -2
  300. data/lib/new_relic/agent/utilization/vendor.rb +27 -26
  301. data/lib/new_relic/agent/utilization_data.rb +1 -0
  302. data/lib/new_relic/agent/vm/jruby_vm.rb +1 -0
  303. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -0
  304. data/lib/new_relic/agent/vm/mri_vm.rb +1 -0
  305. data/lib/new_relic/agent/vm/snapshot.rb +1 -0
  306. data/lib/new_relic/agent/vm.rb +1 -0
  307. data/lib/new_relic/agent/worker_loop.rb +2 -1
  308. data/lib/new_relic/agent.rb +11 -10
  309. data/lib/new_relic/cli/command.rb +5 -4
  310. data/lib/new_relic/cli/commands/deployments.rb +9 -8
  311. data/lib/new_relic/cli/commands/install.rb +6 -5
  312. data/lib/new_relic/coerce.rb +4 -4
  313. data/lib/new_relic/collection_helper.rb +2 -1
  314. data/lib/new_relic/control/class_methods.rb +1 -0
  315. data/lib/new_relic/control/frameworks/external.rb +1 -0
  316. data/lib/new_relic/control/frameworks/rails.rb +3 -2
  317. data/lib/new_relic/control/frameworks/rails3.rb +1 -0
  318. data/lib/new_relic/control/frameworks/rails4.rb +1 -0
  319. data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -0
  320. data/lib/new_relic/control/frameworks/ruby.rb +1 -0
  321. data/lib/new_relic/control/frameworks/sinatra.rb +1 -0
  322. data/lib/new_relic/control/frameworks.rb +1 -0
  323. data/lib/new_relic/control/instance_methods.rb +5 -4
  324. data/lib/new_relic/control/instrumentation.rb +7 -6
  325. data/lib/new_relic/control/server_methods.rb +2 -1
  326. data/lib/new_relic/control.rb +1 -0
  327. data/lib/new_relic/delayed_job_injection.rb +1 -0
  328. data/lib/new_relic/dependency_detection.rb +18 -16
  329. data/lib/new_relic/environment_report.rb +1 -0
  330. data/lib/new_relic/helper.rb +4 -3
  331. data/lib/new_relic/language_support.rb +1 -0
  332. data/lib/new_relic/latest_changes.rb +1 -0
  333. data/lib/new_relic/local_environment.rb +5 -6
  334. data/lib/new_relic/metric_data.rb +3 -2
  335. data/lib/new_relic/metric_spec.rb +2 -1
  336. data/lib/new_relic/noticed_error.rb +1 -1
  337. data/lib/new_relic/rack/agent_hooks.rb +1 -0
  338. data/lib/new_relic/rack/agent_middleware.rb +1 -0
  339. data/lib/new_relic/rack/browser_monitoring.rb +3 -2
  340. data/lib/new_relic/rack.rb +1 -0
  341. data/lib/new_relic/recipes/capistrano3.rb +7 -6
  342. data/lib/new_relic/recipes/capistrano_legacy.rb +12 -11
  343. data/lib/new_relic/recipes.rb +1 -0
  344. data/lib/new_relic/supportability_helper.rb +5 -4
  345. data/lib/new_relic/version.rb +2 -1
  346. data/lib/newrelic_rpm.rb +1 -0
  347. data/lib/sequel/extensions/newrelic_instrumentation.rb +6 -5
  348. data/lib/sequel/plugins/newrelic_instrumentation.rb +1 -0
  349. data/lib/tasks/all.rb +1 -0
  350. data/lib/tasks/config.rake +2 -1
  351. data/lib/tasks/coverage_report.rake +2 -1
  352. data/lib/tasks/install.rake +1 -0
  353. data/lib/tasks/multiverse.rake +1 -0
  354. data/lib/tasks/multiverse.rb +8 -7
  355. data/lib/tasks/newrelic.rb +1 -0
  356. data/lib/tasks/tests.rake +1 -0
  357. data/newrelic.yml +505 -486
  358. data/newrelic_rpm.gemspec +3 -1
  359. data/recipes/newrelic.rb +1 -0
  360. data/test/agent_helper.rb +113 -103
  361. metadata +28 -2
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'socket'
6
7
  require 'net/https'
@@ -69,23 +70,23 @@ module NewRelic
69
70
  @stats_engine = StatsEngine.new
70
71
  @transaction_sampler = TransactionSampler.new
71
72
  @sql_sampler = SqlSampler.new
72
- @agent_command_router = Commands::AgentCommandRouter.new @events
73
- @monitors = Monitors.new @events
74
- @error_collector = ErrorCollector.new @events
73
+ @agent_command_router = Commands::AgentCommandRouter.new(@events)
74
+ @monitors = Monitors.new(@events)
75
+ @error_collector = ErrorCollector.new(@events)
75
76
  @transaction_rules = RulesEngine.new
76
- @harvest_samplers = SamplerCollection.new @events
77
+ @harvest_samplers = SamplerCollection.new(@events)
77
78
  @monotonic_gc_profiler = VM::MonotonicGCProfiler.new
78
- @javascript_instrumentor = JavascriptInstrumentor.new @events
79
+ @javascript_instrumentor = JavascriptInstrumentor.new(@events)
79
80
  @adaptive_sampler = AdaptiveSampler.new(Agent.config[:sampling_target],
80
81
  Agent.config[:sampling_target_period_in_seconds])
81
82
 
82
- @harvester = Harvester.new @events
83
+ @harvester = Harvester.new(@events)
83
84
  @after_fork_lock = Mutex.new
84
85
 
85
- @transaction_event_recorder = TransactionEventRecorder.new @events
86
- @custom_event_aggregator = CustomEventAggregator.new @events
87
- @span_event_aggregator = SpanEventAggregator.new @events
88
- @log_event_aggregator = LogEventAggregator.new @events
86
+ @transaction_event_recorder = TransactionEventRecorder.new(@events)
87
+ @custom_event_aggregator = CustomEventAggregator.new(@events)
88
+ @span_event_aggregator = SpanEventAggregator.new(@events)
89
+ @log_event_aggregator = LogEventAggregator.new(@events)
89
90
 
90
91
  @connect_state = :pending
91
92
  @connect_attempts = 0
@@ -209,7 +210,7 @@ module NewRelic
209
210
  disconnected? ||
210
211
  !control.security_settings_valid?
211
212
 
212
- ::NewRelic::Agent.logger.debug "Starting the worker thread in #{Process.pid} (parent #{Process.ppid}) after forking."
213
+ ::NewRelic::Agent.logger.debug("Starting the worker thread in #{Process.pid} (parent #{Process.ppid}) after forking.")
213
214
 
214
215
  channel_id = options[:report_to_channel]
215
216
  install_pipe_service(channel_id) if channel_id
@@ -356,7 +357,7 @@ module NewRelic
356
357
  # to tell the user what happened, since this is not an error
357
358
  # we can handle gracefully.
358
359
  def log_error(error)
359
- ::NewRelic::Agent.logger.error "Error establishing connection with New Relic Service at #{control.server}:", error
360
+ ::NewRelic::Agent.logger.error("Error establishing connection with New Relic Service at #{control.server}:", error)
360
361
  end
361
362
 
362
363
  # When the server sends us an error with the license key, we
@@ -399,26 +400,27 @@ module NewRelic
399
400
  # connects, then configures the agent using the response from
400
401
  # the connect service
401
402
  def connect_to_server
402
- request_builder = ::NewRelic::Agent::Connect::RequestBuilder.new \
403
+ request_builder = ::NewRelic::Agent::Connect::RequestBuilder.new( \
403
404
  @service,
404
405
  Agent.config,
405
406
  event_harvest_config,
406
407
  environment_for_connect
407
- connect_response = @service.connect request_builder.connect_payload
408
+ )
409
+ connect_response = @service.connect(request_builder.connect_payload)
408
410
 
409
411
  response_handler = ::NewRelic::Agent::Connect::ResponseHandler.new(self, Agent.config)
410
412
  response_handler.configure_agent(connect_response)
411
413
 
412
- log_connection connect_response if connect_response
414
+ log_connection(connect_response) if connect_response
413
415
  connect_response
414
416
  end
415
417
 
416
418
  # Logs when we connect to the server, for debugging purposes
417
419
  # - makes sure we know if an agent has not connected
418
420
  def log_connection(config_data)
419
- ::NewRelic::Agent.logger.debug "Connected to NewRelic Service at #{@service.collector.name}"
420
- ::NewRelic::Agent.logger.debug "Agent Run = #{@service.agent_id}."
421
- ::NewRelic::Agent.logger.debug "Connection data = #{config_data.inspect}"
421
+ ::NewRelic::Agent.logger.debug("Connected to NewRelic Service at #{@service.collector.name}")
422
+ ::NewRelic::Agent.logger.debug("Agent Run = #{@service.agent_id}.")
423
+ ::NewRelic::Agent.logger.debug("Connection data = #{config_data.inspect}")
422
424
  if config_data['messages'] && config_data['messages'].any?
423
425
  log_collector_messages(config_data['messages'])
424
426
  end
@@ -482,7 +484,7 @@ module NewRelic
482
484
 
483
485
  def merge_data_for_endpoint(endpoint, data)
484
486
  if data && !data.empty?
485
- container = container_for_endpoint endpoint
487
+ container = container_for_endpoint(endpoint)
486
488
  if container.respond_to?(:has_metadata?) && container.has_metadata?
487
489
  container_for_endpoint(endpoint).merge!(data, false)
488
490
  else
@@ -522,7 +524,7 @@ module NewRelic
522
524
 
523
525
  return unless should_connect?(opts[:force_reconnect])
524
526
 
525
- ::NewRelic::Agent.logger.debug "Connecting Process to New Relic: #$0"
527
+ ::NewRelic::Agent.logger.debug("Connecting Process to New Relic: #$0")
526
528
  connect_to_server
527
529
  @connected_pid = $$
528
530
  @connect_state = :connected
@@ -541,12 +543,12 @@ module NewRelic
541
543
  log_error(e)
542
544
  if opts[:keep_retrying]
543
545
  note_connect_failure
544
- ::NewRelic::Agent.logger.info "Will re-attempt in #{connect_retry_period} seconds"
545
- sleep connect_retry_period
546
+ ::NewRelic::Agent.logger.info("Will re-attempt in #{connect_retry_period} seconds")
547
+ sleep(connect_retry_period)
546
548
  retry
547
549
  end
548
550
  rescue Exception => e
549
- ::NewRelic::Agent.logger.error "Exception of unexpected type during Agent#connect():", e
551
+ ::NewRelic::Agent.logger.error("Exception of unexpected type during Agent#connect():", e)
550
552
 
551
553
  raise
552
554
  end
@@ -576,14 +578,14 @@ module NewRelic
576
578
  #
577
579
  def harvest_and_send_from_container(container, endpoint)
578
580
  payload = harvest_from_container(container, endpoint)
579
- sample_count = harvest_size container, payload
581
+ sample_count = harvest_size(container, payload)
580
582
  if sample_count > 0
581
583
  NewRelic::Agent.logger.debug("Sending #{sample_count} items to #{endpoint}")
582
584
  send_data_to_endpoint(endpoint, payload, container)
583
585
  end
584
586
  end
585
587
 
586
- def harvest_size container, items
588
+ def harvest_size(container, items)
587
589
  if container.respond_to?(:has_metadata?) && container.has_metadata? && !items.empty?
588
590
  items.last.size
589
591
  else
@@ -657,7 +659,7 @@ module NewRelic
657
659
  end
658
660
 
659
661
  def harvest_and_send_error_event_data
660
- harvest_and_send_from_container @error_collector.error_event_aggregator, :error_event_data
662
+ harvest_and_send_from_container(@error_collector.error_event_aggregator, :error_event_data)
661
663
  end
662
664
 
663
665
  def harvest_and_send_span_event_data
@@ -717,7 +719,7 @@ module NewRelic
717
719
  now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
718
720
 
719
721
  msg = "Sending #{supportability_name} data to New Relic Service"
720
- ::NewRelic::Agent.logger.debug msg
722
+ ::NewRelic::Agent.logger.debug(msg)
721
723
 
722
724
  @service.session do # use http keep-alive
723
725
  self.send(harvest_method)
@@ -729,7 +731,7 @@ module NewRelic
729
731
 
730
732
  def transmit_data
731
733
  now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
732
- ::NewRelic::Agent.logger.debug "Sending data to New Relic Service"
734
+ ::NewRelic::Agent.logger.debug("Sending data to New Relic Service")
733
735
 
734
736
  @events.notify(:before_harvest)
735
737
  @service.session do # use http keep-alive
@@ -771,17 +773,17 @@ module NewRelic
771
773
  transmit_log_event_data
772
774
 
773
775
  if @connected_pid == $$ && !@service.kind_of?(NewRelic::Agent::NewRelicService)
774
- ::NewRelic::Agent.logger.debug "Sending New Relic service agent run shutdown message"
776
+ ::NewRelic::Agent.logger.debug("Sending New Relic service agent run shutdown message")
775
777
  @service.shutdown
776
778
  else
777
- ::NewRelic::Agent.logger.debug "This agent connected from parent process #{@connected_pid}--not sending shutdown"
779
+ ::NewRelic::Agent.logger.debug("This agent connected from parent process #{@connected_pid}--not sending shutdown")
778
780
  end
779
- ::NewRelic::Agent.logger.debug "Graceful disconnect complete"
781
+ ::NewRelic::Agent.logger.debug("Graceful disconnect complete")
780
782
  rescue Timeout::Error, StandardError => e
781
- ::NewRelic::Agent.logger.debug "Error when disconnecting #{e.class.name}: #{e.message}"
783
+ ::NewRelic::Agent.logger.debug("Error when disconnecting #{e.class.name}: #{e.message}")
782
784
  end
783
785
  else
784
- ::NewRelic::Agent.logger.debug "Bypassing graceful disconnect - agent not connected"
786
+ ::NewRelic::Agent.logger.debug("Bypassing graceful disconnect - agent not connected")
785
787
  end
786
788
  end
787
789
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'thread'
6
7
  require 'logger'
@@ -178,7 +179,7 @@ module NewRelic
178
179
  StartupLogger.instance.dump(self)
179
180
  end
180
181
 
181
- def self.format_fatal_error message
182
+ def self.format_fatal_error(message)
182
183
  "** [NewRelic] FATAL : #{message}\n"
183
184
  end
184
185
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  # This class applies filtering rules as specified in the Agent Attributes
6
7
  # cross-agent spec.
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -11,9 +12,9 @@ module NewRelic
11
12
  EMPTY_ARRAY_STRING_LITERAL = "[]".freeze
12
13
 
13
14
  def flatten_and_coerce(object, prefix = nil, result = {}, &blk)
14
- if object.is_a? Hash
15
+ if object.is_a?(Hash)
15
16
  flatten_and_coerce_hash(object, prefix, result, &blk)
16
- elsif object.is_a? Array
17
+ elsif object.is_a?(Array)
17
18
  flatten_and_coerce_array(object, prefix, result, &blk)
18
19
  elsif prefix
19
20
  val = Coerce.scalar(object)
@@ -23,7 +24,7 @@ module NewRelic
23
24
  result[prefix] = val
24
25
  end
25
26
  else
26
- NewRelic::Agent.logger.warn "Unexpected object: #{object.inspect} with nil prefix passed to NewRelic::Agent::AttributeProcessing.flatten_and_coerce"
27
+ NewRelic::Agent.logger.warn("Unexpected object: #{object.inspect} with nil prefix passed to NewRelic::Agent::AttributeProcessing.flatten_and_coerce")
27
28
  end
28
29
  result
29
30
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/agent/attribute_processing'
6
7
 
@@ -34,7 +35,7 @@ module NewRelic
34
35
  end
35
36
 
36
37
  def add_agent_attribute_with_key_check(key, value, default_destinations)
37
- if exceeds_bytesize_limit? key, KEY_LIMIT
38
+ if exceeds_bytesize_limit?(key, KEY_LIMIT)
38
39
  NewRelic::Agent.logger.debug("Agent attribute #{key} was dropped for exceeding key length limit #{KEY_LIMIT}")
39
40
  return
40
41
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'logger'
6
7
  require 'fileutils'
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  # This class is used by NewRelic::Agent.set_sql_obfuscator to chain multiple
6
7
  # obfuscation blocks when not using the default :replace action
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  # This class is the central point for dispatching get_agent_commands messages
6
7
  # to the various components that actually process them.
@@ -77,16 +78,16 @@ module NewRelic
77
78
 
78
79
  def log_profiles(profiles)
79
80
  if profiles.empty?
80
- ::NewRelic::Agent.logger.debug "No thread profiles with data found to send."
81
+ ::NewRelic::Agent.logger.debug("No thread profiles with data found to send.")
81
82
  else
82
83
  profile_descriptions = profiles.map { |p| p.to_log_description }
83
- ::NewRelic::Agent.logger.debug "Sending thread profiles [#{profile_descriptions.join(", ")}]"
84
+ ::NewRelic::Agent.logger.debug("Sending thread profiles [#{profile_descriptions.join(", ")}]")
84
85
  end
85
86
  end
86
87
 
87
88
  def get_agent_commands
88
89
  commands = new_relic_service.get_agent_commands
89
- NewRelic::Agent.logger.debug "Received get_agent_commands = #{commands.inspect}"
90
+ NewRelic::Agent.logger.debug("Received get_agent_commands = #{commands.inspect}")
90
91
  commands.map { |collector_command| AgentCommand.new(collector_command) }
91
92
  end
92
93
 
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/agent/threading/agent_thread'
6
7
  require 'new_relic/agent/threading/backtrace_service'
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'forwardable'
6
7
 
@@ -46,7 +47,7 @@ module NewRelic
46
47
 
47
48
  # Marks the config option as deprecated in the documentation once generated.
48
49
  # Does not appear in logs.
49
- def self.deprecated_description new_setting, description
50
+ def self.deprecated_description(new_setting, description)
50
51
  link_ref = new_setting.to_s.gsub(".", "-")
51
52
  %{Please see: [#{new_setting}](docs/agents/ruby-agent/configuration/ruby-agent-configuration##{link_ref}). \n\n#{description}}
52
53
  end
@@ -117,7 +118,7 @@ module NewRelic
117
118
  def self.config_path
118
119
  Proc.new {
119
120
  found_path = NewRelic::Agent.config[:config_search_paths].detect do |file|
120
- File.expand_path(file) if File.exist? file
121
+ File.expand_path(file) if File.exist?(file)
121
122
  end
122
123
  found_path || NewRelic::EMPTY_STR
123
124
  }
@@ -134,7 +135,7 @@ module NewRelic
134
135
  when 4..7
135
136
  :rails_notifications
136
137
  else
137
- ::NewRelic::Agent.logger.warn "Detected untested Rails version #{Rails::VERSION::STRING}"
138
+ ::NewRelic::Agent.logger.warn("Detected untested Rails version #{Rails::VERSION::STRING}")
138
139
  :rails_notifications
139
140
  end
140
141
  when defined?(::Sinatra) && defined?(::Sinatra::Base) then :sinatra
@@ -211,7 +212,7 @@ module NewRelic
211
212
 
212
213
  def self.api_host
213
214
  Proc.new do
214
- if String(NewRelic::Agent.config[:license_key]).start_with? 'eu'
215
+ if String(NewRelic::Agent.config[:license_key]).start_with?('eu')
215
216
  'rpm.eu.newrelic.com'
216
217
  else
217
218
  'rpm.newrelic.com'
@@ -238,7 +239,7 @@ module NewRelic
238
239
  end
239
240
 
240
241
  SEMICOLON = ';'.freeze
241
- def self.convert_to_list_on_semicolon value
242
+ def self.convert_to_list_on_semicolon(value)
242
243
  case value
243
244
  when Array then value
244
245
  when String then value.split(SEMICOLON)
@@ -1085,6 +1086,32 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
1085
1086
  :allowed_from_server => false,
1086
1087
  :description => 'Controls auto-instrumentation of the Tilt template rendering library at start up. May be one of [auto|prepend|chain|disabled].'
1087
1088
  },
1089
+ :'instrumentation.grpc_client' => {
1090
+ :default => instrumentation_value_of(:disable_grpc_client),
1091
+ :documentation_default => 'auto',
1092
+ :public => true,
1093
+ :type => String,
1094
+ :dynamic_name => true,
1095
+ :allowed_from_server => false,
1096
+ :description => 'Controls auto-instrumentation of gRPC clients at start up. May be one of [auto|prepend|chain|disabled].'
1097
+ },
1098
+ :'instrumentation.grpc.host_denylist' => {
1099
+ :default => [],
1100
+ :public => true,
1101
+ :type => Array,
1102
+ :allowed_from_server => false,
1103
+ :transform => DefaultSource.method(:convert_to_regexp_list),
1104
+ :description => %Q(Specifies a list of hostname patterns separated by commas that will match gRPC hostnames that traffic is to be ignored by New Relic for. New Relic's gRPC client instrumentation will ignore traffic streamed to a host matching any of these patterns, and New Relic's gRPC server instrumentation will ignore traffic for a server running on a host whose hostname matches any of these patterns. By default, no traffic is ignored when gRPC instrumentation is itself enabled. For example, "private.com$,exception.*")
1105
+ },
1106
+ :'instrumentation.grpc_server' => {
1107
+ :default => instrumentation_value_of(:disable_grpc_server),
1108
+ :documentation_default => 'auto',
1109
+ :public => true,
1110
+ :type => String,
1111
+ :dynamic_name => true,
1112
+ :allowed_from_server => false,
1113
+ :description => 'Controls auto-instrumentation of gRPC servers at start up. May be one of [auto|prepend|chain|disabled].'
1114
+ },
1088
1115
  :disable_data_mapper => {
1089
1116
  :default => false,
1090
1117
  :public => true,
@@ -2011,11 +2038,12 @@ A map of error classes to a list of messages. When an error of one of the classe
2011
2038
  :description => 'If `true`, the agent decorates logs with metadata to link to entities, hosts, traces, and spans.'
2012
2039
  },
2013
2040
  :'code_level_metrics.enabled' => {
2014
- :default => false,
2041
+ :default => true,
2015
2042
  :public => true,
2016
2043
  :type => Boolean,
2017
2044
  :allowed_from_server => true,
2018
- :description => 'If `true`, the agent will report source code level metrics for traced methods.'
2045
+ :description => "If `true`, the agent will report source code level metrics for traced methods.\nsee: " \
2046
+ 'https://docs.newrelic.com/docs/apm/agents/ruby-agent/features/ruby-codestream-integration/'
2019
2047
  },
2020
2048
  :'instrumentation.active_support_logger' => {
2021
2049
  :default => instrumentation_value_from_boolean(:'application_logging.enabled'),
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -42,7 +43,7 @@ module NewRelic
42
43
  def set_dotted_alias(original_config_setting)
43
44
  config_setting = original_config_setting.to_s
44
45
 
45
- if config_setting.include? '.'
46
+ if config_setting.include?('.')
46
47
  config_alias = config_setting.gsub(/\./, '_').to_sym
47
48
  self.alias_map[config_alias] = original_config_setting
48
49
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/agent/configuration/dotted_hash'
6
7
 
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'forwardable'
6
7
  require 'new_relic/agent/configuration/mask_defaults'
@@ -22,7 +23,7 @@ module NewRelic
22
23
  end
23
24
 
24
25
  def has_key?(key)
25
- @cache.has_key? key
26
+ @cache.has_key?(key)
26
27
  end
27
28
 
28
29
  def keys
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/agent/configuration/dotted_hash'
6
7
 
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/agent/configuration/dotted_hash'
6
7
 
@@ -26,9 +27,10 @@ module NewRelic
26
27
  def change_setting(policies, option, new_value)
27
28
  current_value = Agent.config[option]
28
29
  unless current_value == new_value
29
- NewRelic::Agent.logger.info \
30
+ NewRelic::Agent.logger.info( \
30
31
  "Setting changed: {#{option}: from #{current_value} " \
31
32
  "to #{new_value}}. Source: SecurityPolicySource"
33
+ )
32
34
  end
33
35
  policies[option] = new_value
34
36
  end
@@ -218,15 +220,17 @@ module NewRelic
218
220
  end
219
221
  else
220
222
  config_source = Agent.config.source(policy[:option]).class.name.split(COLON_COLON).last
221
- NewRelic::Agent.logger.info \
223
+ NewRelic::Agent.logger.info( \
222
224
  "Setting applied: {#{policy[:option]}: #{policy[:disabled_value]}}. " \
223
225
  "Source: #{config_source}"
226
+ )
224
227
  end
225
228
  else
226
229
  settings[policy[:option]] = policy[:disabled_value]
227
- NewRelic::Agent.logger.info \
230
+ NewRelic::Agent.logger.info( \
228
231
  "Setting applied: {#{policy[:option]}: #{policy[:disabled_value]}}. " \
229
232
  "Source: SecurityPolicySource"
233
+ )
230
234
  end
231
235
  end
232
236
  settings
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
@@ -86,24 +87,24 @@ module NewRelic
86
87
  }
87
88
 
88
89
  def add_event_harvest_config(merged_settings, connect_reply)
89
- return unless event_harvest_config_is_valid connect_reply
90
+ return unless event_harvest_config_is_valid(connect_reply)
90
91
 
91
92
  event_harvest_config = EventHarvestConfig.to_config_hash(connect_reply)
92
93
  EVENT_HARVEST_CONFIG_SUPPORTABILITY_METRIC_NAMES.each do |config_key, metric_name|
93
- NewRelic::Agent.record_metric metric_name, event_harvest_config[config_key]
94
+ NewRelic::Agent.record_metric(metric_name, event_harvest_config[config_key])
94
95
  end
95
96
 
96
- merged_settings.merge! event_harvest_config
97
+ merged_settings.merge!(event_harvest_config)
97
98
  end
98
99
 
99
- def event_harvest_config_is_valid connect_reply
100
+ def event_harvest_config_is_valid(connect_reply)
100
101
  event_harvest_config = connect_reply['event_harvest_config']
101
102
 
102
103
  if event_harvest_config.nil? \
103
104
  || event_harvest_config['harvest_limits'].values.min < 0 \
104
105
  || (event_harvest_config['report_period_ms'] / 1000) <= 0
105
- NewRelic::Agent.logger.warn "Invalid event harvest config found " \
106
- "in connect response; using default event report period."
106
+ NewRelic::Agent.logger.warn("Invalid event harvest config found " \
107
+ "in connect response; using default event report period.")
107
108
  false
108
109
  else
109
110
  true
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/agent/configuration/dotted_hash'
6
7
 
@@ -124,6 +125,8 @@ module NewRelic
124
125
  config['transaction_tracer']['transaction_threshold'].to_s =~ /apdex_f/i
125
126
  # when value is "apdex_f" remove the config and defer to default
126
127
  config['transaction_tracer'].delete('transaction_threshold')
128
+ elsif config['transaction_tracer.transaction_threshold'].to_s =~ /apdex_f/i
129
+ config.delete('transaction_tracer.transaction_threshold')
127
130
  end
128
131
  end
129
132
 
@@ -135,7 +138,7 @@ module NewRelic
135
138
  elsif !config[option].nil? && !is_boolean?(config[option])
136
139
  coerced_value = !!(config[option].to_s =~ /yes|on|true/i)
137
140
  if !coerced_value
138
- log_failure "Unexpected value (#{config[option]}) for '#{option}' in #{@path}"
141
+ log_failure("Unexpected value (#{config[option]}) for '#{option}' in #{@path}")
139
142
  end
140
143
  config[option] = coerced_value
141
144
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/agent/configuration/manager'
6
7
  require 'new_relic/agent/configuration/dotted_hash'
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  require 'new_relic/environment_report'
6
7
  require 'new_relic/agent/configuration/event_harvest_config'