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_relative 'monitors/inbound_request_monitor'
6
7
 
@@ -16,10 +17,10 @@ module NewRelic
16
17
  attr_reader :synthetics_monitor
17
18
  attr_reader :distributed_tracing_monitor
18
19
 
19
- def initialize events
20
- @synthetics_monitor = NewRelic::Agent::SyntheticsMonitor.new events
21
- @cross_app_monitor = NewRelic::Agent::DistributedTracing::CrossAppMonitor.new events
22
- @distributed_tracing_monitor = NewRelic::Agent::DistributedTracing::Monitor.new events
20
+ def initialize(events)
21
+ @synthetics_monitor = NewRelic::Agent::SyntheticsMonitor.new(events)
22
+ @cross_app_monitor = NewRelic::Agent::DistributedTracing::CrossAppMonitor.new(events)
23
+ @distributed_tracing_monitor = NewRelic::Agent::DistributedTracing::Monitor.new(events)
23
24
  end
24
25
  end
25
26
  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 'base64'
6
7
  require 'json'
@@ -29,7 +30,7 @@ module NewRelic
29
30
 
30
31
  def self.encode(data, opts = nil)
31
32
  output = StringIO.new
32
- output.set_encoding BINARY
33
+ output.set_encoding(BINARY)
33
34
  gz = Zlib::GzipWriter.new(output, Zlib::DEFAULT_COMPRESSION, Zlib::DEFAULT_STRATEGY)
34
35
  gz.write(data)
35
36
  gz.close
@@ -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 'json'
6
7
  require 'new_relic/agent/new_relic_service/marshaller'
@@ -20,11 +21,11 @@ module NewRelic
20
21
  if defined?(::Yajl)
21
22
  require 'yajl/version'
22
23
  if Gem::Version.new(::Yajl::VERSION) < OK_YAJL_VERSION
23
- ::NewRelic::Agent.logger.warn "Detected yajl-ruby version #{::Yajl::VERSION} which can cause segfaults with newrelic_rpm's thread profiling features. We strongly recommend you upgrade to the latest yajl-ruby version available."
24
+ ::NewRelic::Agent.logger.warn("Detected yajl-ruby version #{::Yajl::VERSION} which can cause segfaults with newrelic_rpm's thread profiling features. We strongly recommend you upgrade to the latest yajl-ruby version available.")
24
25
  end
25
26
  end
26
27
  rescue => err
27
- ::NewRelic::Agent.logger.warn "Failed trying to watch for problematic yajl-ruby version.", err
28
+ ::NewRelic::Agent.logger.warn("Failed trying to watch for problematic yajl-ruby version.", err)
28
29
  end
29
30
 
30
31
  def dump(ruby, opts = {})
@@ -44,7 +45,7 @@ module NewRelic
44
45
 
45
46
  return_value(::JSON.load(data))
46
47
  rescue => e
47
- ::NewRelic::Agent.logger.debug "#{e.class.name} : #{e.message} encountered loading collector response: #{data}"
48
+ ::NewRelic::Agent.logger.debug("#{e.class.name} : #{e.message} encountered loading collector response: #{data}")
48
49
  raise
49
50
  end
50
51
 
@@ -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
@@ -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 'zlib'
6
7
  require 'timeout'
@@ -351,7 +352,7 @@ module NewRelic
351
352
  start_connection(conn)
352
353
  conn
353
354
  rescue Timeout::Error
354
- ::NewRelic::Agent.logger.info ("Timeout while attempting to connect. You may need to install system-level CA Certificates, as the ruby agent no longer includes these.")
355
+ ::NewRelic::Agent.logger.info("Timeout while attempting to connect. You may need to install system-level CA Certificates, as the ruby agent no longer includes these.")
355
356
  raise
356
357
  end
357
358
 
@@ -359,7 +360,7 @@ module NewRelic
359
360
  # connection if verify_peer is enabled
360
361
  def cert_file_path
361
362
  if path_override = NewRelic::Agent.config[:ca_bundle_path]
362
- NewRelic::Agent.logger.warn("Couldn't find CA bundle from configured ca_bundle_path: #{path_override}") unless File.exist? path_override
363
+ NewRelic::Agent.logger.warn("Couldn't find CA bundle from configured ca_bundle_path: #{path_override}") unless File.exist?(path_override)
363
364
  path_override
364
365
  end
365
366
  end
@@ -399,7 +400,7 @@ module NewRelic
399
400
  # ruled out; see the initializer
400
401
  }
401
402
 
402
- uri = "/agent_listener/invoke_raw_method?"
403
+ uri = String.new('/agent_listener/invoke_raw_method?')
403
404
  uri << params.map do |k, v|
404
405
  next unless v
405
406
  "#{k}=#{v}"
@@ -498,7 +499,7 @@ module NewRelic
498
499
  # than the limit configured in the control object
499
500
  def check_post_size(post_string, endpoint)
500
501
  return if post_string.size < Agent.config[:max_payload_size_in_bytes]
501
- ::NewRelic::Agent.logger.debug "Tried to send too much data: #{post_string.size} bytes"
502
+ ::NewRelic::Agent.logger.debug("Tried to send too much data: #{post_string.size} bytes")
502
503
  NewRelic::Agent.increment_metric("Supportability/Agent/Collector/#{endpoint}/MaxPayloadSizeLimit")
503
504
  raise UnrecoverableServerException.new('413 Request Entity Too Large')
504
505
  end
@@ -538,7 +539,7 @@ module NewRelic
538
539
  begin
539
540
  attempts += 1
540
541
  conn = http_connection
541
- ::NewRelic::Agent.logger.debug "Sending request to #{opts[:collector]}#{opts[:uri]} with #{request.method}"
542
+ ::NewRelic::Agent.logger.debug("Sending request to #{opts[:collector]}#{opts[:uri]} with #{request.method}")
542
543
  Timeout.timeout(@request_timeout) do
543
544
  response = conn.request(request)
544
545
  end
@@ -597,7 +598,7 @@ module NewRelic
597
598
  end
598
599
 
599
600
  def log_response(response)
600
- ::NewRelic::Agent.logger.debug "Received response, status: #{response.code}, encoding: '#{response['content-encoding']}'"
601
+ ::NewRelic::Agent.logger.debug("Received response, status: #{response.code}, encoding: '#{response['content-encoding']}'")
601
602
  end
602
603
 
603
604
  # Per protocol 17, this metric should be recorded for all error response codes
@@ -625,11 +626,10 @@ module NewRelic
625
626
  # the ruby version and also zlib version if available since
626
627
  # that may cause corrupt compression if there is a problem.
627
628
  def user_agent
628
- ruby_description = ''
629
- # note the trailing space!
630
- ruby_description << "(ruby #{::RUBY_VERSION} #{::RUBY_PLATFORM}) " if defined?(::RUBY_VERSION) && defined?(::RUBY_PLATFORM)
631
- zlib_version = ''
632
- zlib_version << "zlib/#{Zlib.zlib_version}" if defined?(::Zlib) && Zlib.respond_to?(:zlib_version)
629
+ if defined?(::RUBY_VERSION) && defined?(::RUBY_PLATFORM)
630
+ ruby_description = "(ruby #{::RUBY_VERSION} #{::RUBY_PLATFORM}) " # note the trailing space!
631
+ end
632
+ zlib_version = "zlib/#{Zlib.zlib_version}" if defined?(::Zlib) && Zlib.respond_to?(:zlib_version)
633
633
  "NewRelic-RubyAgent/#{NewRelic::VERSION::STRING} #{ruby_description}#{zlib_version}"
634
634
  end
635
635
  end
@@ -11,7 +11,7 @@ module NewRelic
11
11
  class NoticibleError
12
12
  attr_reader :class_name, :message
13
13
 
14
- def initialize class_name, message
14
+ def initialize(class_name, message)
15
15
  @class_name = class_name
16
16
  @message = message
17
17
  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
  # A stub object that we can use in place of a real Logger instance when
6
7
  # the agent is disabled.
@@ -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 'base64'
6
7
 
@@ -33,7 +34,7 @@ module NewRelic
33
34
  def encode(text)
34
35
  return text unless key_bytes
35
36
 
36
- encoded = ""
37
+ encoded = String.new('')
37
38
  encoded.force_encoding('binary') if encoded.respond_to?(:force_encoding)
38
39
  index = 0
39
40
  text.each_byte do |byte|
@@ -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
@@ -2,6 +2,7 @@
2
2
  # encoding: utf-8
3
3
  # This file is distributed under New Relic's license terms.
4
4
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
5
+ # frozen_string_literal: true
5
6
 
6
7
  module NewRelic
7
8
  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 'base64'
6
7
 
@@ -188,15 +189,15 @@ module NewRelic
188
189
  begin
189
190
  wake.out.read_nonblock(1) if ready_pipes.include?(wake.out)
190
191
  rescue IO::WaitReadable
191
- NewRelic::Agent.logger.error 'Issue while reading from the ready pipe'
192
- NewRelic::Agent.logger.error "Ready pipes: #{ready_pipes.map(&:to_s)}, wake.out pipe: #{wake.out}"
192
+ NewRelic::Agent.logger.error('Issue while reading from the ready pipe')
193
+ NewRelic::Agent.logger.error("Ready pipes: #{ready_pipes.map(&:to_s)}, wake.out pipe: #{wake.out}")
193
194
  end
194
195
  end
195
196
 
196
197
  break unless should_keep_listening?
197
198
  end
198
199
  end
199
- sleep 0.001 # give time for the thread to spawn
200
+ sleep(0.001) # give time for the thread to spawn
200
201
  end
201
202
 
202
203
  def stop_listener_thread
@@ -253,8 +254,8 @@ module NewRelic
253
254
  def unmarshal(data)
254
255
  Marshal.load(data)
255
256
  rescue StandardError => e
256
- ::NewRelic::Agent.logger.error "Failure unmarshalling message from Resque child process", e
257
- ::NewRelic::Agent.logger.debug Base64.encode64(data)
257
+ ::NewRelic::Agent.logger.error("Failure unmarshalling message from Resque child process", e)
258
+ ::NewRelic::Agent.logger.debug(Base64.encode64(data))
258
259
  nil
259
260
  end
260
261
 
@@ -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,11 +1,12 @@
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
7
8
  module PrependSupportability
8
- def self.record_metrics_for *classes
9
+ def self.record_metrics_for(*classes)
9
10
  classes.each do |klass|
10
11
  count = klass.send(:ancestors).index(klass)
11
12
  ::NewRelic::Agent.record_metric("Supportability/PrependedModules/#{klass}", count) if count > 0
@@ -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/heap'
6
7
  require 'new_relic/agent/event_buffer'
@@ -61,7 +62,7 @@ module NewRelic
61
62
  @items.to_a.dup
62
63
  end
63
64
 
64
- def decrement_lifetime_counts_by n
65
+ def decrement_lifetime_counts_by(n)
65
66
  @captured_lifetime -= n
66
67
  @seen_lifetime -= n
67
68
  end
@@ -1,45 +1,26 @@
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
7
8
  module RangeExtensions
8
9
  module_function
9
10
 
10
- def intersects? r1, r2
11
- r1.include?(r2.begin) || r2.include?(r1.begin)
12
- end
13
-
14
- def merge r1, r2
15
- return unless intersects? r1, r2
16
- range_min = r1.begin < r2.begin ? r1.begin : r2.begin
17
- range_max = r1.end > r2.end ? r1.end : r2.end
18
- range_min..range_max
19
- end
20
-
21
- # Takes an array of ranges and a range which it will
22
- # merge into an existing range if they intersect, otherwise
23
- # it will append this range to the end the array.
24
- def merge_or_append range, ranges
25
- ranges.each_with_index do |r, i|
26
- if merged = merge(r, range)
27
- ranges[i] = merged
28
- return ranges
29
- end
30
- end
31
- ranges.push range
11
+ def intersects?(r1, r2)
12
+ r1.begin > r2.begin ? r2.cover?(r1.begin) : r1.cover?(r2.begin)
32
13
  end
33
14
 
34
15
  # Computes the amount of overlap between range and an array of ranges.
35
16
  # For efficiency, it assumes that range intersects with each of the
36
17
  # ranges in the ranges array.
37
- def compute_overlap range, ranges
18
+ def compute_overlap(range, ranges)
38
19
  ranges.inject(0) do |memo, other|
39
- next memo unless intersects? range, other
40
- lower_bound = range.begin > other.begin ? range.begin : other.begin
41
- upper_bound = range.end < other.end ? range.end : other.end
42
- memo += upper_bound - lower_bound
20
+ next memo unless intersects?(range, other)
21
+
22
+ memo += (range.end < other.end ? range.end : other.end) -
23
+ (range.begin > other.begin ? range.begin : other.begin)
43
24
  end
44
25
  end
45
26
  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
@@ -36,7 +37,7 @@ module NewRelic
36
37
  segment.match(@match_expression)
37
38
  end
38
39
  else
39
- string.match @match_expression
40
+ string.match(@match_expression)
40
41
  end
41
42
  end
42
43
 
@@ -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/rules_engine/replacement_rule'
6
7
  require 'new_relic/agent/rules_engine/segment_terms_rule'
@@ -36,7 +37,7 @@ module NewRelic
36
37
  # Build segment_rules in reverse order from which they're provided,
37
38
  # so that when we eliminate duplicates with #uniq!, we retain the last
38
39
  # instances of repeated rules.
39
- segment_rules.unshift SegmentTermsRule.new(spec)
40
+ segment_rules.unshift(SegmentTermsRule.new(spec))
40
41
  end
41
42
  end
42
43
 
@@ -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
  # A Sampler is used to capture meaningful metrics in a background thread
6
7
  # periodically. They will be invoked about once a minute, each time the 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
@@ -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/sampler'
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 'new_relic/agent/sampler'
6
7
  require 'new_relic/delayed_job_injection'
@@ -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/sampler'
6
7
  require 'new_relic/helper'
@@ -22,10 +23,10 @@ module NewRelic
22
23
  elsif platform =~ /linux/
23
24
  @sampler = ProcStatus.new
24
25
  if !@sampler.can_run?
25
- ::NewRelic::Agent.logger.debug "Error attempting to use /proc/#{$$}/status file for reading memory. Using ps command instead."
26
+ ::NewRelic::Agent.logger.debug("Error attempting to use /proc/#{$$}/status file for reading memory. Using ps command instead.")
26
27
  @sampler = ShellPS.new("ps -o rsz")
27
28
  else
28
- ::NewRelic::Agent.logger.debug "Using /proc/#{$$}/status for reading process memory."
29
+ ::NewRelic::Agent.logger.debug("Using /proc/#{$$}/status for reading process memory.")
29
30
  end
30
31
  elsif platform =~ /darwin9/ # 10.5
31
32
  @sampler = ShellPS.new("ps -o rsz")
@@ -84,12 +85,12 @@ module NewRelic
84
85
  begin
85
86
  m = get_memory
86
87
  if m.nil?
87
- ::NewRelic::Agent.logger.warn "Unable to get the resident memory for process #{$$}. Disabling memory sampler."
88
+ ::NewRelic::Agent.logger.warn("Unable to get the resident memory for process #{$$}. Disabling memory sampler.")
88
89
  @broken = true
89
90
  end
90
91
  return m
91
92
  rescue => e
92
- ::NewRelic::Agent.logger.warn "Unable to get the resident memory for process #{$$}. Disabling memory sampler.", e
93
+ ::NewRelic::Agent.logger.warn("Unable to get the resident memory for process #{$$}. Disabling memory sampler.", e)
93
94
  @broken = true
94
95
  return nil
95
96
  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/sampler'
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 'new_relic/agent/sampler'
6
7
  require 'new_relic/agent/vm'
@@ -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 'newrelic_rpm' unless defined?(NewRelic)
6
7
  require 'new_relic/agent' unless defined?(NewRelic::Agent)
@@ -24,7 +25,7 @@ module NewRelic
24
25
  return unless enabled?
25
26
 
26
27
  @lock.synchronize do
27
- @buffer.append priority: priority, event: event, &blk
28
+ @buffer.append(priority: priority, event: event, &blk)
28
29
  notify_if_full
29
30
  end
30
31
  end
@@ -52,20 +52,20 @@ module NewRelic
52
52
 
53
53
  # Builds a Hash of error attributes as well as the Span ID when
54
54
  # an error is present. Otherwise, returns nil when no error present.
55
- def error_attributes segment
55
+ def error_attributes(segment)
56
56
  return if Agent.config[:high_security] || !segment.noticed_error
57
57
  segment.noticed_error.build_error_attributes
58
58
  segment.noticed_error_attributes
59
59
  end
60
60
 
61
- def for_segment segment
61
+ def for_segment(segment)
62
62
  intrinsics = intrinsics_for(segment)
63
63
  intrinsics[CATEGORY_KEY] = GENERIC_CATEGORY
64
64
 
65
65
  [intrinsics, custom_attributes(segment), agent_attributes(segment)]
66
66
  end
67
67
 
68
- def for_external_request_segment segment
68
+ def for_external_request_segment(segment)
69
69
  intrinsics = intrinsics_for(segment)
70
70
 
71
71
  intrinsics[COMPONENT_KEY] = segment.library
@@ -80,10 +80,14 @@ module NewRelic
80
80
  agent_attributes[HTTP_URL_KEY] = truncate(segment.uri)
81
81
  end
82
82
 
83
+ if segment.respond_to?(:record_agent_attributes?) && segment.record_agent_attributes?
84
+ agent_attributes.merge!(agent_attributes(segment))
85
+ end
86
+
83
87
  [intrinsics, custom_attributes(segment), agent_attributes]
84
88
  end
85
89
 
86
- def for_datastore_segment segment
90
+ def for_datastore_segment(segment)
87
91
  intrinsics = intrinsics_for(segment)
88
92
 
89
93
  intrinsics[COMPONENT_KEY] = segment.product
@@ -113,7 +117,7 @@ module NewRelic
113
117
 
114
118
  private
115
119
 
116
- def intrinsics_for segment
120
+ def intrinsics_for(segment)
117
121
  intrinsics = {
118
122
  TYPE_KEY => EVENT_TYPE,
119
123
  TRACE_ID_KEY => segment.transaction.trace_id,
@@ -155,7 +159,7 @@ module NewRelic
155
159
  intrinsics
156
160
  end
157
161
 
158
- def custom_attributes segment
162
+ def custom_attributes(segment)
159
163
  attributes = segment.attributes
160
164
  if attributes
161
165
  result = attributes.custom_attributes_for(NewRelic::Agent::AttributeFilter::DST_SPAN_EVENTS)
@@ -172,7 +176,7 @@ module NewRelic
172
176
  hash1.merge!(hash2)
173
177
  end
174
178
 
175
- def agent_attributes segment
179
+ def agent_attributes(segment)
176
180
  agent_attributes = segment.attributes
177
181
  .agent_attributes_for(NewRelic::Agent::AttributeFilter::DST_SPAN_EVENTS)
178
182
  error_attributes = error_attributes(segment)
@@ -182,7 +186,7 @@ module NewRelic
182
186
  agent_attributes.freeze
183
187
  end
184
188
 
185
- def parent_guid segment
189
+ def parent_guid(segment)
186
190
  if segment.parent
187
191
  segment.parent.guid
188
192
  elsif txn = segment.transaction
@@ -190,11 +194,11 @@ module NewRelic
190
194
  end
191
195
  end
192
196
 
193
- def milliseconds_since_epoch segment
197
+ def milliseconds_since_epoch(segment)
194
198
  Integer(segment.start_time.to_f * 1000.0)
195
199
  end
196
200
 
197
- def truncate value, max_size = 255
201
+ def truncate(value, max_size = 255)
198
202
  value = value.to_s
199
203
  if value.bytesize > max_size
200
204
  value.byteslice(0, max_size - 2).chop! << ELLIPSIS
@@ -203,7 +207,7 @@ module NewRelic
203
207
  end
204
208
  end
205
209
 
206
- def allowed? key
210
+ def allowed?(key)
207
211
  NewRelic::Agent.instance.attribute_filter.allows_key?(key, AttributeFilter::DST_SPAN_EVENTS)
208
212
  end
209
213
  end