newrelic_rpm 8.9.0 → 8.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (377) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +23 -8
  4. data/.rubocop_todo.yml +243 -0
  5. data/.simplecov +10 -2
  6. data/.snyk +11 -0
  7. data/Brewfile +1 -0
  8. data/CHANGELOG.md +78 -0
  9. data/Guardfile +1 -0
  10. data/Rakefile +5 -0
  11. data/Thorfile +6 -0
  12. data/bin/newrelic +2 -1
  13. data/bin/newrelic_cmd +1 -0
  14. data/bin/nrdebug +3 -2
  15. data/init.rb +3 -2
  16. data/install.rb +1 -0
  17. data/lib/new_relic/agent/adaptive_sampler.rb +4 -3
  18. data/lib/new_relic/agent/agent/shutdown.rb +3 -2
  19. data/lib/new_relic/agent/agent/special_startup.rb +3 -2
  20. data/lib/new_relic/agent/agent/start_worker_thread.rb +15 -14
  21. data/lib/new_relic/agent/agent/startup.rb +11 -10
  22. data/lib/new_relic/agent/agent.rb +35 -33
  23. data/lib/new_relic/agent/agent_logger.rb +2 -1
  24. data/lib/new_relic/agent/attribute_filter.rb +1 -0
  25. data/lib/new_relic/agent/attribute_processing.rb +4 -3
  26. data/lib/new_relic/agent/attributes.rb +2 -1
  27. data/lib/new_relic/agent/audit_logger.rb +1 -0
  28. data/lib/new_relic/agent/autostart.rb +1 -0
  29. data/lib/new_relic/agent/chained_call.rb +1 -0
  30. data/lib/new_relic/agent/commands/agent_command.rb +1 -0
  31. data/lib/new_relic/agent/commands/agent_command_router.rb +4 -3
  32. data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -0
  33. data/lib/new_relic/agent/configuration/default_source.rb +35 -7
  34. data/lib/new_relic/agent/configuration/dotted_hash.rb +1 -0
  35. data/lib/new_relic/agent/configuration/environment_source.rb +2 -1
  36. data/lib/new_relic/agent/configuration/event_harvest_config.rb +1 -0
  37. data/lib/new_relic/agent/configuration/high_security_source.rb +1 -0
  38. data/lib/new_relic/agent/configuration/manager.rb +2 -1
  39. data/lib/new_relic/agent/configuration/manual_source.rb +1 -0
  40. data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -0
  41. data/lib/new_relic/agent/configuration/security_policy_source.rb +7 -3
  42. data/lib/new_relic/agent/configuration/server_source.rb +7 -6
  43. data/lib/new_relic/agent/configuration/yaml_source.rb +4 -1
  44. data/lib/new_relic/agent/configuration.rb +1 -0
  45. data/lib/new_relic/agent/connect/request_builder.rb +1 -0
  46. data/lib/new_relic/agent/connect/response_handler.rb +4 -3
  47. data/lib/new_relic/agent/custom_event_aggregator.rb +5 -4
  48. data/lib/new_relic/agent/database/explain_plan_helpers.rb +1 -0
  49. data/lib/new_relic/agent/database/obfuscation_helpers.rb +1 -0
  50. data/lib/new_relic/agent/database/obfuscator.rb +2 -1
  51. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +1 -0
  52. data/lib/new_relic/agent/database.rb +3 -2
  53. data/lib/new_relic/agent/database_adapter.rb +1 -0
  54. data/lib/new_relic/agent/datastores/metric_helper.rb +9 -8
  55. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +2 -0
  56. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +1 -0
  57. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +2 -1
  58. data/lib/new_relic/agent/datastores/mongo.rb +1 -0
  59. data/lib/new_relic/agent/datastores/redis.rb +3 -2
  60. data/lib/new_relic/agent/datastores.rb +4 -3
  61. data/lib/new_relic/agent/deprecator.rb +1 -0
  62. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +1 -0
  63. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +16 -16
  64. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +9 -9
  65. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +18 -18
  66. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +8 -8
  67. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +2 -2
  68. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +40 -39
  69. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +16 -14
  70. data/lib/new_relic/agent/distributed_tracing.rb +17 -17
  71. data/lib/new_relic/agent/encoding_normalizer.rb +1 -0
  72. data/lib/new_relic/agent/error_collector.rb +6 -4
  73. data/lib/new_relic/agent/error_event_aggregator.rb +3 -3
  74. data/lib/new_relic/agent/error_filter.rb +1 -0
  75. data/lib/new_relic/agent/error_trace_aggregator.rb +2 -1
  76. data/lib/new_relic/agent/event_aggregator.rb +20 -19
  77. data/lib/new_relic/agent/event_buffer.rb +1 -0
  78. data/lib/new_relic/agent/event_listener.rb +1 -0
  79. data/lib/new_relic/agent/event_loop.rb +7 -6
  80. data/lib/new_relic/agent/external.rb +9 -8
  81. data/lib/new_relic/agent/guid_generator.rb +2 -1
  82. data/lib/new_relic/agent/harvester.rb +1 -0
  83. data/lib/new_relic/agent/heap.rb +3 -2
  84. data/lib/new_relic/agent/hostname.rb +4 -2
  85. data/lib/new_relic/agent/http_clients/abstract.rb +1 -1
  86. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +5 -5
  87. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +4 -4
  88. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +1 -1
  89. data/lib/new_relic/agent/http_clients/uri_util.rb +1 -1
  90. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +6 -4
  91. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +10 -4
  92. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +6 -4
  93. data/lib/new_relic/agent/instrumentation/active_job.rb +2 -1
  94. data/lib/new_relic/agent/instrumentation/active_merchant.rb +2 -1
  95. data/lib/new_relic/agent/instrumentation/active_record.rb +9 -8
  96. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +15 -14
  97. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +3 -2
  98. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +1 -0
  99. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +5 -3
  100. data/lib/new_relic/agent/instrumentation/active_storage.rb +2 -1
  101. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +16 -14
  102. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +1 -0
  103. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +1 -0
  104. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +1 -0
  105. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +2 -1
  106. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +2 -1
  107. data/lib/new_relic/agent/instrumentation/authlogic.rb +2 -1
  108. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +10 -9
  109. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +10 -10
  110. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +4 -3
  111. data/lib/new_relic/agent/instrumentation/bunny.rb +1 -1
  112. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +13 -9
  113. data/lib/new_relic/agent/instrumentation/curb/chain.rb +21 -21
  114. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +8 -8
  115. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +2 -2
  116. data/lib/new_relic/agent/instrumentation/curb.rb +2 -1
  117. data/lib/new_relic/agent/instrumentation/data_mapper.rb +43 -42
  118. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +1 -1
  119. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +2 -2
  120. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +1 -1
  121. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +3 -2
  122. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +3 -2
  123. data/lib/new_relic/agent/instrumentation/excon.rb +2 -1
  124. data/lib/new_relic/agent/instrumentation/grape/chain.rb +6 -5
  125. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +5 -4
  126. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +4 -3
  127. data/lib/new_relic/agent/instrumentation/grape.rb +1 -0
  128. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +98 -0
  129. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +90 -0
  130. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +112 -0
  131. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +31 -0
  132. data/lib/new_relic/agent/instrumentation/grpc/helper.rb +33 -0
  133. data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +70 -0
  134. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +135 -0
  135. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +36 -0
  136. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +27 -0
  137. data/lib/new_relic/agent/instrumentation/grpc_client.rb +24 -0
  138. data/lib/new_relic/agent/instrumentation/grpc_server.rb +26 -0
  139. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +1 -0
  140. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +6 -5
  141. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +1 -0
  142. data/lib/new_relic/agent/instrumentation/httpclient.rb +2 -1
  143. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +1 -0
  144. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +4 -3
  145. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +1 -0
  146. data/lib/new_relic/agent/instrumentation/httprb.rb +2 -1
  147. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +2 -1
  148. data/lib/new_relic/agent/instrumentation/logger/chain.rb +2 -1
  149. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +5 -0
  150. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +1 -0
  151. data/lib/new_relic/agent/instrumentation/logger.rb +2 -1
  152. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +2 -2
  153. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +19 -19
  154. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +8 -8
  155. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +17 -14
  156. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +14 -14
  157. data/lib/new_relic/agent/instrumentation/memcache.rb +1 -1
  158. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +1 -0
  159. data/lib/new_relic/agent/instrumentation/mongo.rb +2 -1
  160. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +14 -12
  161. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +1 -0
  162. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +5 -4
  163. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +1 -0
  164. data/lib/new_relic/agent/instrumentation/net_http.rb +2 -1
  165. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +5 -4
  166. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +1 -0
  167. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +1 -0
  168. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +1 -0
  169. data/lib/new_relic/agent/instrumentation/padrino.rb +2 -1
  170. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +3 -2
  171. data/lib/new_relic/agent/instrumentation/queue_time.rb +1 -0
  172. data/lib/new_relic/agent/instrumentation/rack/chain.rb +12 -11
  173. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +1 -0
  174. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +7 -6
  175. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +4 -3
  176. data/lib/new_relic/agent/instrumentation/rack.rb +1 -0
  177. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +6 -5
  178. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -0
  179. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +3 -1
  180. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +3 -1
  181. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +3 -1
  182. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +3 -2
  183. data/lib/new_relic/agent/instrumentation/rake/chain.rb +2 -1
  184. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +1 -1
  185. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +1 -0
  186. data/lib/new_relic/agent/instrumentation/rake.rb +3 -2
  187. data/lib/new_relic/agent/instrumentation/redis/chain.rb +3 -3
  188. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +5 -5
  189. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +3 -3
  190. data/lib/new_relic/agent/instrumentation/redis.rb +2 -1
  191. data/lib/new_relic/agent/instrumentation/resque/chain.rb +2 -1
  192. data/lib/new_relic/agent/instrumentation/resque/helper.rb +1 -0
  193. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +1 -0
  194. data/lib/new_relic/agent/instrumentation/resque.rb +3 -2
  195. data/lib/new_relic/agent/instrumentation/sequel.rb +8 -7
  196. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -0
  197. data/lib/new_relic/agent/instrumentation/sidekiq.rb +6 -4
  198. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +1 -0
  199. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +2 -1
  200. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +1 -0
  201. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +1 -0
  202. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +2 -1
  203. data/lib/new_relic/agent/instrumentation/sinatra.rb +2 -1
  204. data/lib/new_relic/agent/instrumentation/sunspot.rb +2 -1
  205. data/lib/new_relic/agent/instrumentation/thread/chain.rb +2 -1
  206. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +1 -0
  207. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +1 -0
  208. data/lib/new_relic/agent/instrumentation/thread.rb +2 -1
  209. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +1 -0
  210. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +1 -0
  211. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +1 -0
  212. data/lib/new_relic/agent/instrumentation/tilt.rb +1 -0
  213. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +1 -0
  214. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +6 -5
  215. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +1 -0
  216. data/lib/new_relic/agent/instrumentation/typhoeus.rb +2 -1
  217. data/lib/new_relic/agent/instrumentation.rb +1 -0
  218. data/lib/new_relic/agent/internal_agent_error.rb +1 -0
  219. data/lib/new_relic/agent/javascript_instrumentor.rb +7 -6
  220. data/lib/new_relic/agent/linking_metadata.rb +2 -2
  221. data/lib/new_relic/agent/log_event_aggregator.rb +6 -5
  222. data/lib/new_relic/agent/log_once.rb +1 -0
  223. data/lib/new_relic/agent/log_priority.rb +1 -0
  224. data/lib/new_relic/agent/logging.rb +13 -12
  225. data/lib/new_relic/agent/memory_logger.rb +1 -0
  226. data/lib/new_relic/agent/messaging.rb +18 -18
  227. data/lib/new_relic/agent/method_tracer.rb +6 -5
  228. data/lib/new_relic/agent/method_tracer_helpers.rb +8 -5
  229. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +3 -2
  230. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +3 -2
  231. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -0
  232. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +2 -1
  233. data/lib/new_relic/agent/monitors.rb +5 -4
  234. data/lib/new_relic/agent/new_relic_service/encoders.rb +2 -1
  235. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +4 -3
  236. data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -0
  237. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +1 -0
  238. data/lib/new_relic/agent/new_relic_service.rb +11 -11
  239. data/lib/new_relic/agent/noticible_error.rb +1 -1
  240. data/lib/new_relic/agent/null_logger.rb +1 -0
  241. data/lib/new_relic/agent/obfuscator.rb +2 -1
  242. data/lib/new_relic/agent/parameter_filtering.rb +1 -0
  243. data/lib/new_relic/agent/payload_metric_mapping.rb +1 -0
  244. data/lib/new_relic/agent/pipe_channel_manager.rb +6 -5
  245. data/lib/new_relic/agent/pipe_service.rb +1 -0
  246. data/lib/new_relic/agent/prepend_supportability.rb +2 -1
  247. data/lib/new_relic/agent/priority_sampled_buffer.rb +2 -1
  248. data/lib/new_relic/agent/range_extensions.rb +8 -27
  249. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +2 -1
  250. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +1 -0
  251. data/lib/new_relic/agent/rules_engine.rb +2 -1
  252. data/lib/new_relic/agent/sampler.rb +1 -0
  253. data/lib/new_relic/agent/sampler_collection.rb +1 -0
  254. data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -0
  255. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +1 -0
  256. data/lib/new_relic/agent/samplers/memory_sampler.rb +5 -4
  257. data/lib/new_relic/agent/samplers/object_sampler.rb +1 -0
  258. data/lib/new_relic/agent/samplers/vm_sampler.rb +1 -0
  259. data/lib/new_relic/agent/span_event_aggregator.rb +2 -1
  260. data/lib/new_relic/agent/span_event_primitive.rb +15 -11
  261. data/lib/new_relic/agent/sql_sampler.rb +7 -6
  262. data/lib/new_relic/agent/stats.rb +3 -1
  263. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -0
  264. data/lib/new_relic/agent/stats_engine/stats_hash.rb +3 -2
  265. data/lib/new_relic/agent/stats_engine.rb +1 -0
  266. data/lib/new_relic/agent/synthetics_event_aggregator.rb +6 -5
  267. data/lib/new_relic/agent/system_info.rb +8 -7
  268. data/lib/new_relic/agent/threading/agent_thread.rb +11 -6
  269. data/lib/new_relic/agent/threading/backtrace_node.rb +6 -3
  270. data/lib/new_relic/agent/threading/backtrace_service.rb +1 -0
  271. data/lib/new_relic/agent/threading/thread_profile.rb +1 -0
  272. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -0
  273. data/lib/new_relic/agent/tracer.rb +17 -14
  274. data/lib/new_relic/agent/transaction/abstract_segment.rb +64 -31
  275. data/lib/new_relic/agent/transaction/datastore_segment.rb +12 -11
  276. data/lib/new_relic/agent/transaction/distributed_tracer.rb +52 -47
  277. data/lib/new_relic/agent/transaction/distributed_tracing.rb +21 -21
  278. data/lib/new_relic/agent/transaction/external_request_segment.rb +36 -27
  279. data/lib/new_relic/agent/transaction/message_broker_segment.rb +6 -5
  280. data/lib/new_relic/agent/transaction/request_attributes.rb +29 -28
  281. data/lib/new_relic/agent/transaction/segment.rb +8 -7
  282. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -0
  283. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -0
  284. data/lib/new_relic/agent/transaction/trace.rb +3 -2
  285. data/lib/new_relic/agent/transaction/trace_builder.rb +10 -9
  286. data/lib/new_relic/agent/transaction/trace_context.rb +22 -19
  287. data/lib/new_relic/agent/transaction/trace_node.rb +9 -8
  288. data/lib/new_relic/agent/transaction/tracing.rb +7 -6
  289. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -0
  290. data/lib/new_relic/agent/transaction.rb +22 -21
  291. data/lib/new_relic/agent/transaction_error_primitive.rb +9 -8
  292. data/lib/new_relic/agent/transaction_event_aggregator.rb +5 -4
  293. data/lib/new_relic/agent/transaction_event_primitive.rb +3 -3
  294. data/lib/new_relic/agent/transaction_event_recorder.rb +14 -12
  295. data/lib/new_relic/agent/transaction_metrics.rb +3 -2
  296. data/lib/new_relic/agent/transaction_sampler.rb +4 -3
  297. data/lib/new_relic/agent/transaction_time_aggregator.rb +13 -12
  298. data/lib/new_relic/agent/utilization/aws.rb +4 -3
  299. data/lib/new_relic/agent/utilization/azure.rb +1 -0
  300. data/lib/new_relic/agent/utilization/gcp.rb +6 -5
  301. data/lib/new_relic/agent/utilization/pcf.rb +3 -2
  302. data/lib/new_relic/agent/utilization/vendor.rb +27 -26
  303. data/lib/new_relic/agent/utilization_data.rb +1 -0
  304. data/lib/new_relic/agent/vm/jruby_vm.rb +1 -0
  305. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -0
  306. data/lib/new_relic/agent/vm/mri_vm.rb +1 -0
  307. data/lib/new_relic/agent/vm/snapshot.rb +1 -0
  308. data/lib/new_relic/agent/vm.rb +1 -0
  309. data/lib/new_relic/agent/worker_loop.rb +2 -1
  310. data/lib/new_relic/agent.rb +11 -10
  311. data/lib/new_relic/cli/command.rb +5 -4
  312. data/lib/new_relic/cli/commands/deployments.rb +9 -8
  313. data/lib/new_relic/cli/commands/install.rb +6 -5
  314. data/lib/new_relic/coerce.rb +4 -4
  315. data/lib/new_relic/collection_helper.rb +2 -1
  316. data/lib/new_relic/control/class_methods.rb +1 -0
  317. data/lib/new_relic/control/frameworks/external.rb +1 -0
  318. data/lib/new_relic/control/frameworks/rails.rb +3 -2
  319. data/lib/new_relic/control/frameworks/rails3.rb +1 -0
  320. data/lib/new_relic/control/frameworks/rails4.rb +1 -0
  321. data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -0
  322. data/lib/new_relic/control/frameworks/ruby.rb +1 -0
  323. data/lib/new_relic/control/frameworks/sinatra.rb +1 -0
  324. data/lib/new_relic/control/frameworks.rb +1 -0
  325. data/lib/new_relic/control/instance_methods.rb +5 -4
  326. data/lib/new_relic/control/instrumentation.rb +7 -6
  327. data/lib/new_relic/control/server_methods.rb +2 -1
  328. data/lib/new_relic/control.rb +1 -0
  329. data/lib/new_relic/delayed_job_injection.rb +1 -0
  330. data/lib/new_relic/dependency_detection.rb +18 -16
  331. data/lib/new_relic/environment_report.rb +1 -0
  332. data/lib/new_relic/helper.rb +4 -3
  333. data/lib/new_relic/language_support.rb +6 -0
  334. data/lib/new_relic/latest_changes.rb +1 -0
  335. data/lib/new_relic/local_environment.rb +5 -6
  336. data/lib/new_relic/metric_data.rb +3 -2
  337. data/lib/new_relic/metric_spec.rb +2 -1
  338. data/lib/new_relic/noticed_error.rb +1 -1
  339. data/lib/new_relic/rack/agent_hooks.rb +1 -0
  340. data/lib/new_relic/rack/agent_middleware.rb +1 -0
  341. data/lib/new_relic/rack/browser_monitoring.rb +3 -2
  342. data/lib/new_relic/rack.rb +1 -0
  343. data/lib/new_relic/recipes/capistrano3.rb +7 -6
  344. data/lib/new_relic/recipes/capistrano_legacy.rb +12 -11
  345. data/lib/new_relic/recipes.rb +1 -0
  346. data/lib/new_relic/supportability_helper.rb +5 -4
  347. data/lib/new_relic/version.rb +3 -2
  348. data/lib/newrelic_rpm.rb +1 -0
  349. data/lib/sequel/extensions/newrelic_instrumentation.rb +6 -5
  350. data/lib/sequel/plugins/newrelic_instrumentation.rb +1 -0
  351. data/lib/tasks/all.rb +1 -0
  352. data/lib/tasks/config.rake +2 -1
  353. data/lib/tasks/coverage_report.rake +22 -11
  354. data/lib/tasks/install.rake +1 -0
  355. data/lib/tasks/instrumentation_generator/README.md +63 -0
  356. data/lib/tasks/instrumentation_generator/TODO.md +33 -0
  357. data/lib/tasks/instrumentation_generator/instrumentation.thor +96 -0
  358. data/lib/tasks/instrumentation_generator/templates/Envfile.tt +10 -0
  359. data/lib/tasks/instrumentation_generator/templates/chain.tt +22 -0
  360. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +7 -0
  361. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +30 -0
  362. data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +13 -0
  363. data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +3 -0
  364. data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +19 -0
  365. data/lib/tasks/instrumentation_generator/templates/prepend.tt +14 -0
  366. data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +3 -0
  367. data/lib/tasks/instrumentation_generator/templates/test.tt +16 -0
  368. data/lib/tasks/multiverse.rake +1 -0
  369. data/lib/tasks/multiverse.rb +8 -7
  370. data/lib/tasks/newrelic.rb +1 -0
  371. data/lib/tasks/tests.rake +1 -0
  372. data/newrelic.yml +505 -486
  373. data/newrelic_rpm.gemspec +15 -17
  374. data/recipes/newrelic.rb +1 -0
  375. data/test/agent_helper.rb +114 -118
  376. metadata +58 -89
  377. data/bin/mongrel_rpm +0 -32
@@ -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
@@ -26,10 +27,10 @@ module NewRelic
26
27
  @parent_node = parent
27
28
  end
28
29
 
29
- def select_allowed_params params
30
+ def select_allowed_params(params)
30
31
  return unless params
31
32
  params.select do |p|
32
- NewRelic::Agent.instance.attribute_filter.allows_key? p, AttributeFilter::DST_TRANSACTION_SEGMENTS
33
+ NewRelic::Agent.instance.attribute_filter.allows_key?(p, AttributeFilter::DST_TRANSACTION_SEGMENTS)
33
34
  end
34
35
  end
35
36
 
@@ -57,16 +58,16 @@ module NewRelic
57
58
  end
58
59
 
59
60
  def to_s_compact
60
- str = ""
61
+ str = String.new('')
61
62
  str << metric_name
62
63
  if children.any?
63
- str << "{#{children.map { |cs| cs.to_s_compact }.join(",")}}"
64
+ str << "{#{children.map { |cs| cs.to_s_compact }.join(',')}}"
64
65
  end
65
66
  str
66
67
  end
67
68
 
68
69
  def to_debug_str(depth)
69
- tab = " " * depth
70
+ tab = String.new(' ') * depth
70
71
  s = tab.clone
71
72
  s << ">> #{'%3i ms' % (@entry_timestamp * 1000)} [#{self.class.name.split("::").last}] #{metric_name} \n"
72
73
  unless params.empty?
@@ -77,7 +78,7 @@ module NewRelic
77
78
  children.each do |cs|
78
79
  s << cs.to_debug_str(depth + 1)
79
80
  end
80
- s << tab + "<< "
81
+ s << tab + '<< '
81
82
  s << case @exit_timestamp
82
83
  when nil then ' n/a'
83
84
  when Numeric then '%3i ms' % (@exit_timestamp * 1000)
@@ -133,7 +134,7 @@ module NewRelic
133
134
  # call the provided block for this node and each
134
135
  # of the called nodes
135
136
  def each_node(&block)
136
- block.call self
137
+ block.call(self)
137
138
 
138
139
  if @children
139
140
  @children.each do |node|
@@ -145,7 +146,7 @@ module NewRelic
145
146
  # call the provided block for this node and each
146
147
  # of the called nodes while keeping track of nested nodes
147
148
  def each_node_with_nest_tracking(&block)
148
- summary = block.call self
149
+ summary = block.call(self)
149
150
  summary.current_nest_count += 1 if summary
150
151
 
151
152
  if @children
@@ -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
@@ -20,10 +21,10 @@ module NewRelic
20
21
 
21
22
  attr_writer :total_time
22
23
 
23
- def add_segment segment, parent = nil
24
+ def add_segment(segment, parent = nil)
24
25
  segment.transaction = self
25
26
  segment.parent = parent || current_segment
26
- set_current_segment segment
27
+ set_current_segment(segment)
27
28
  if @segments.length < segment_limit
28
29
  @segments << segment
29
30
  else
@@ -33,12 +34,12 @@ module NewRelic
33
34
  segment.transaction_assigned
34
35
  end
35
36
 
36
- def segment_complete segment
37
+ def segment_complete(segment)
37
38
  # if parent was in another thread, remove the current_segment entry for this thread
38
39
  if segment.parent && segment.parent.starting_thread_id != ::Thread.current.object_id
39
40
  remove_current_segment_by_thread_id(::Thread.current.object_id)
40
41
  else
41
- set_current_segment segment.parent
42
+ set_current_segment(segment.parent)
42
43
  end
43
44
  end
44
45
 
@@ -62,8 +63,8 @@ module NewRelic
62
63
  OTHER_TRANSACTION_TOTAL_TIME
63
64
  end
64
65
 
65
- @metrics.record_unscoped total_time_metric, total_time
66
- @metrics.record_unscoped "#{total_time_metric}/#{@frozen_name}", total_time
66
+ @metrics.record_unscoped(total_time_metric, total_time)
67
+ @metrics.record_unscoped("#{total_time_metric}/#{@frozen_name}", total_time)
67
68
  end
68
69
  end
69
70
  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
@@ -181,7 +181,7 @@ module NewRelic
181
181
  if txn = tl_current
182
182
  txn.add_agent_attribute(key, value, default_destinations)
183
183
  else
184
- NewRelic::Agent.logger.debug "Attempted to add agent attribute: #{key} without transaction"
184
+ NewRelic::Agent.logger.debug("Attempted to add agent attribute: #{key} without transaction")
185
185
  end
186
186
  end
187
187
 
@@ -194,7 +194,7 @@ module NewRelic
194
194
  if txn = tl_current
195
195
  txn.merge_untrusted_agent_attributes(attributes, prefix, default_destinations)
196
196
  else
197
- NewRelic::Agent.logger.debug "Attempted to merge untrusted attributes without transaction"
197
+ NewRelic::Agent.logger.debug("Attempted to merge untrusted attributes without transaction")
198
198
  end
199
199
  end
200
200
 
@@ -208,8 +208,8 @@ module NewRelic
208
208
  if defined? JRuby
209
209
  begin
210
210
  require 'java'
211
- java_import 'java.lang.management.ManagementFactory'
212
- java_import 'com.sun.management.OperatingSystemMXBean'
211
+ java_import('java.lang.management.ManagementFactory')
212
+ java_import('com.sun.management.OperatingSystemMXBean')
213
213
  @@java_classes_loaded = true
214
214
  rescue
215
215
  end
@@ -256,7 +256,7 @@ module NewRelic
256
256
  merge_request_parameters(@filtered_params)
257
257
 
258
258
  if request = options[:request]
259
- @request_attributes = RequestAttributes.new request
259
+ @request_attributes = RequestAttributes.new(request)
260
260
  else
261
261
  @request_attributes = nil
262
262
  end
@@ -294,7 +294,7 @@ module NewRelic
294
294
  end
295
295
 
296
296
  def trace_id
297
- @trace_id ||= NewRelic::Agent::GuidGenerator.generate_guid 32
297
+ @trace_id ||= NewRelic::Agent::GuidGenerator.generate_guid(32)
298
298
  end
299
299
 
300
300
  def trace_id=(value)
@@ -424,10 +424,11 @@ module NewRelic
424
424
  ignore! if user_defined_rules_ignore?
425
425
 
426
426
  create_initial_segment(options)
427
- Segment.merge_untrusted_agent_attributes \
427
+ Segment.merge_untrusted_agent_attributes( \
428
428
  @filtered_params,
429
429
  :'request.parameters',
430
430
  AttributeFilter::DST_SPAN_EVENTS
431
+ )
431
432
  end
432
433
 
433
434
  def initial_segment
@@ -435,7 +436,7 @@ module NewRelic
435
436
  end
436
437
 
437
438
  def create_initial_segment(options = {})
438
- segment = create_segment @default_name, options
439
+ segment = create_segment(@default_name, options)
439
440
  segment.record_scoped_metric = false
440
441
  end
441
442
 
@@ -466,19 +467,19 @@ module NewRelic
466
467
  merge_request_parameters(options[:filtered_params])
467
468
  end
468
469
 
469
- @ignore_apdex = options[:ignore_apdex] if options.key? :ignore_apdex
470
- @ignore_enduser = options[:ignore_enduser] if options.key? :ignore_enduser
470
+ @ignore_apdex = options[:ignore_apdex] if options.key?(:ignore_apdex)
471
+ @ignore_enduser = options[:ignore_enduser] if options.key?(:ignore_enduser)
471
472
 
472
473
  nest_initial_segment if segments.length == 1
473
- nested_name = self.class.nested_transaction_name options[:transaction_name]
474
+ nested_name = self.class.nested_transaction_name(options[:transaction_name])
474
475
 
475
- segment = create_segment nested_name, options
476
+ segment = create_segment(nested_name, options)
476
477
  set_default_transaction_name(options[:transaction_name], category)
477
478
  segment
478
479
  end
479
480
 
480
481
  def nest_initial_segment
481
- self.initial_segment.name = self.class.nested_transaction_name initial_segment.name
482
+ self.initial_segment.name = self.class.nested_transaction_name(initial_segment.name)
482
483
  initial_segment.record_scoped_metric = true
483
484
  end
484
485
 
@@ -568,8 +569,8 @@ module NewRelic
568
569
  def assign_segment_dt_attributes
569
570
  dt_payload = distributed_tracer.trace_state_payload || distributed_tracer.distributed_trace_payload
570
571
  parent_attributes = {}
571
- DistributedTraceAttributes.copy_parent_attributes self, dt_payload, parent_attributes
572
- parent_attributes.each { |k, v| initial_segment.add_agent_attribute k, v }
572
+ DistributedTraceAttributes.copy_parent_attributes(self, dt_payload, parent_attributes)
573
+ parent_attributes.each { |k, v| initial_segment.add_agent_attribute(k, v) }
573
574
  end
574
575
 
575
576
  def assign_agent_attributes
@@ -590,7 +591,7 @@ module NewRelic
590
591
  end
591
592
 
592
593
  if @request_attributes
593
- @request_attributes.assign_agent_attributes self
594
+ @request_attributes.assign_agent_attributes(self)
594
595
  end
595
596
 
596
597
  display_host = Agent.config[:'process_host.display_name']
@@ -627,7 +628,7 @@ module NewRelic
627
628
  # This method returns transport_duration in seconds. Transport duration
628
629
  # is stored in milliseconds on the payload, but it's needed in seconds
629
630
  # for metrics and intrinsics.
630
- def calculate_transport_duration distributed_trace_payload
631
+ def calculate_transport_duration(distributed_trace_payload)
631
632
  return unless distributed_trace_payload
632
633
 
633
634
  duration = start_time - (distributed_trace_payload.timestamp / 1000.0)
@@ -735,7 +736,7 @@ module NewRelic
735
736
  options[:metric] = best_name
736
737
  options[:attributes] = @attributes
737
738
 
738
- span_id = options.delete :span_id
739
+ span_id = options.delete(:span_id)
739
740
  error_recorded = !!agent.error_collector.notice_error(exception, options, span_id) || error_recorded
740
741
  end
741
742
  payload[:error] = error_recorded if payload
@@ -750,18 +751,18 @@ module NewRelic
750
751
  end
751
752
 
752
753
  if @exceptions[error]
753
- @exceptions[error].merge! options
754
+ @exceptions[error].merge!(options)
754
755
  else
755
756
  @exceptions[error] = options
756
757
  end
757
758
  end
758
759
 
759
760
  def record_transaction_event
760
- agent.transaction_event_recorder.record payload
761
+ agent.transaction_event_recorder.record(payload)
761
762
  end
762
763
 
763
764
  def record_log_events
764
- agent.log_event_aggregator.record_batch self, @logs.to_a
765
+ agent.log_event_aggregator.record_batch(self, @logs.to_a)
765
766
  end
766
767
 
767
768
  def queue_time
@@ -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 module was introduced and largely extracted from the transaction event aggregator
6
7
  # when the synthetics container was extracted from it. Its purpose is to create the data
@@ -34,7 +35,7 @@ module NewRelic
34
35
  PRIORITY_KEY = "priority".freeze
35
36
  SPAN_ID_KEY = "spanId".freeze
36
37
 
37
- def create noticed_error, payload, span_id
38
+ def create(noticed_error, payload, span_id)
38
39
  [
39
40
  intrinsic_attributes_for(noticed_error, payload, span_id),
40
41
  noticed_error.custom_attributes,
@@ -42,7 +43,7 @@ module NewRelic
42
43
  ]
43
44
  end
44
45
 
45
- def intrinsic_attributes_for noticed_error, payload, span_id
46
+ def intrinsic_attributes_for(noticed_error, payload, span_id)
46
47
  attrs = {
47
48
  TYPE_KEY => SAMPLE_TYPE,
48
49
  ERROR_CLASS_KEY => noticed_error.exception_class_name,
@@ -59,10 +60,10 @@ module NewRelic
59
60
  attrs[DURATION_KEY] = payload[:duration]
60
61
  attrs[SAMPLED_KEY] = payload[:sampled] if payload.key?(:sampled)
61
62
  attrs[PRIORITY_KEY] = payload[:priority]
62
- append_synthetics payload, attrs
63
- append_cat payload, attrs
64
- DistributedTraceAttributes.copy_to_hash payload, attrs
65
- PayloadMetricMapping.append_mapped_metrics payload[:metrics], attrs
63
+ append_synthetics(payload, attrs)
64
+ append_cat(payload, attrs)
65
+ DistributedTraceAttributes.copy_to_hash(payload, attrs)
66
+ PayloadMetricMapping.append_mapped_metrics(payload[:metrics], attrs)
66
67
  else
67
68
  attrs[PRIORITY_KEY] = rand.round(NewRelic::PRIORITY_PRECISION)
68
69
  end
@@ -70,13 +71,13 @@ module NewRelic
70
71
  attrs
71
72
  end
72
73
 
73
- def append_synthetics payload, sample
74
+ def append_synthetics(payload, sample)
74
75
  sample[SYNTHETICS_RESOURCE_ID_KEY] = payload[:synthetics_resource_id] if payload[:synthetics_resource_id]
75
76
  sample[SYNTHETICS_JOB_ID_KEY] = payload[:synthetics_job_id] if payload[:synthetics_job_id]
76
77
  sample[SYNTHETICS_MONITOR_ID_KEY] = payload[:synthetics_monitor_id] if payload[:synthetics_monitor_id]
77
78
  end
78
79
 
79
- def append_cat payload, sample
80
+ def append_cat(payload, sample)
80
81
  sample[GUID_KEY] = payload[:guid] if payload[:guid]
81
82
  sample[REFERRING_TRANSACTION_GUID_KEY] = payload[:referring_transaction_guid] if payload[:referring_transaction_guid]
82
83
  end
@@ -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
  require 'newrelic_rpm' unless defined?(NewRelic)
7
8
  require 'new_relic/agent' unless defined?(NewRelic::Agent)
@@ -16,7 +17,7 @@ module NewRelic
16
17
  enabled_key :'transaction_events.enabled'
17
18
  buffer_class PrioritySampledBuffer
18
19
 
19
- def record priority: nil, event: nil, &blk
20
+ def record(priority: nil, event: nil, &blk)
20
21
  unless event || priority && blk
21
22
  raise ArgumentError, "Expected priority and block, or event"
22
23
  end
@@ -24,16 +25,16 @@ 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
31
32
 
32
33
  private
33
34
 
34
- def after_harvest metadata
35
+ def after_harvest(metadata)
35
36
  return unless enabled?
36
- record_sampling_rate metadata
37
+ record_sampling_rate(metadata)
37
38
  end
38
39
 
39
40
  def record_sampling_rate(metadata) # THREAD_LOCAL_ACCESS
@@ -54,7 +54,7 @@ module NewRelic
54
54
 
55
55
  PayloadMetricMapping.append_mapped_metrics(payload[:metrics], intrinsics)
56
56
  append_optional_attributes(intrinsics, payload)
57
- DistributedTraceAttributes.copy_to_hash payload, intrinsics
57
+ DistributedTraceAttributes.copy_to_hash(payload, intrinsics)
58
58
 
59
59
  attributes = payload[:attributes]
60
60
 
@@ -87,7 +87,7 @@ module NewRelic
87
87
  end
88
88
  end
89
89
 
90
- def custom_attributes attributes
90
+ def custom_attributes(attributes)
91
91
  if attributes
92
92
  result = attributes.custom_attributes_for(AttributeFilter::DST_TRANSACTION_EVENTS)
93
93
  result.freeze
@@ -96,7 +96,7 @@ module NewRelic
96
96
  end
97
97
  end
98
98
 
99
- def agent_attributes attributes
99
+ def agent_attributes(attributes)
100
100
  if attributes
101
101
  result = attributes.agent_attributes_for(AttributeFilter::DST_TRANSACTION_EVENTS)
102
102
  result.freeze
@@ -1,6 +1,8 @@
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
5
+
4
6
  require 'new_relic/agent/transaction_event_aggregator'
5
7
  require 'new_relic/agent/synthetics_event_aggregator'
6
8
  require 'new_relic/agent/transaction_event_primitive'
@@ -14,29 +16,29 @@ module NewRelic
14
16
  attr_reader :transaction_event_aggregator
15
17
  attr_reader :synthetics_event_aggregator
16
18
 
17
- def initialize events
18
- @transaction_event_aggregator = NewRelic::Agent::TransactionEventAggregator.new events
19
- @synthetics_event_aggregator = NewRelic::Agent::SyntheticsEventAggregator.new events
19
+ def initialize(events)
20
+ @transaction_event_aggregator = NewRelic::Agent::TransactionEventAggregator.new(events)
21
+ @synthetics_event_aggregator = NewRelic::Agent::SyntheticsEventAggregator.new(events)
20
22
  end
21
23
 
22
- def record payload
24
+ def record(payload)
23
25
  return unless NewRelic::Agent.config[:'transaction_events.enabled']
24
26
 
25
- if synthetics_event? payload
26
- event = create_event payload
27
- result = synthetics_event_aggregator.record event
28
- transaction_event_aggregator.record event: event if result.nil?
27
+ if synthetics_event?(payload)
28
+ event = create_event(payload)
29
+ result = synthetics_event_aggregator.record(event)
30
+ transaction_event_aggregator.record(event: event) if result.nil?
29
31
  else
30
32
  transaction_event_aggregator.record(priority: payload[:priority]) { create_event(payload) }
31
33
  end
32
34
  end
33
35
 
34
- def create_event payload
35
- TransactionEventPrimitive.create payload
36
+ def create_event(payload)
37
+ TransactionEventPrimitive.create(payload)
36
38
  end
37
39
 
38
- def synthetics_event? payload
39
- payload.key? :synthetics_resource_id
40
+ def synthetics_event?(payload)
41
+ payload.key?(:synthetics_resource_id)
40
42
  end
41
43
 
42
44
  def drop_buffered_data
@@ -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 represents a set of metrics that were recorded during a single
6
7
  # transaction. Since the name of the transaction is not known until its end, we
@@ -43,11 +44,11 @@ module NewRelic
43
44
  end
44
45
 
45
46
  def each_unscoped
46
- @lock.synchronize { @unscoped.each { |name, stats| yield name, stats } }
47
+ @lock.synchronize { @unscoped.each { |name, stats| yield(name, stats) } }
47
48
  end
48
49
 
49
50
  def each_scoped
50
- @lock.synchronize { @scoped.each { |name, stats| yield name, stats } }
51
+ @lock.synchronize { @scoped.each { |name, stats| yield(name, stats) } }
51
52
  end
52
53
 
53
54
  def _record_metrics(names, value, aux, target, &blk)
@@ -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/transaction/slowest_sample_buffer'
6
7
  require 'new_relic/agent/transaction/synthetics_sample_buffer'
@@ -32,9 +33,9 @@ module NewRelic
32
33
  Agent.config.register_callback(:'transaction_tracer.enabled') do |enabled|
33
34
  if enabled
34
35
  threshold = Agent.config[:'transaction_tracer.transaction_threshold']
35
- ::NewRelic::Agent.logger.debug "Transaction tracing threshold is #{threshold} seconds."
36
+ ::NewRelic::Agent.logger.debug("Transaction tracing threshold is #{threshold} seconds.")
36
37
  else
37
- ::NewRelic::Agent.logger.debug "Transaction traces will not be sent to the New Relic service."
38
+ ::NewRelic::Agent.logger.debug("Transaction traces will not be sent to the New Relic service.")
38
39
  end
39
40
  end
40
41
 
@@ -113,7 +114,7 @@ module NewRelic
113
114
  result.uniq!
114
115
  result.map! do |sample|
115
116
  if Transaction === sample
116
- Transaction::TraceBuilder.build_trace sample
117
+ Transaction::TraceBuilder.build_trace(sample)
117
118
  else
118
119
  sample
119
120
  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 module powers the Busy calculation for the Capacity report in
6
7
  # APM (https://rpm.newrelic.com/accounts/.../applications/.../optimize/capacity_analysis).
@@ -12,13 +13,13 @@
12
13
  module NewRelic
13
14
  module Agent
14
15
  module TransactionTimeAggregator
15
- TransactionStats = Struct.new :transaction_started_at, :elapsed_transaction_time
16
+ TransactionStats = Struct.new(:transaction_started_at, :elapsed_transaction_time)
16
17
 
17
18
  @lock = Mutex.new
18
19
  @harvest_cycle_started_at = Process.clock_gettime(Process::CLOCK_REALTIME)
19
20
 
20
21
  @stats = Hash.new do |h, k|
21
- h[k] = TransactionStats.new nil, 0.0
22
+ h[k] = TransactionStats.new(nil, 0.0)
22
23
  end
23
24
 
24
25
  def reset!(timestamp = Process.clock_gettime(Process::CLOCK_REALTIME))
@@ -28,14 +29,14 @@ module NewRelic
28
29
 
29
30
  def transaction_start(timestamp = Process.clock_gettime(Process::CLOCK_REALTIME))
30
31
  @lock.synchronize do
31
- set_transaction_start_time timestamp
32
+ set_transaction_start_time(timestamp)
32
33
  end
33
34
  end
34
35
 
35
36
  def transaction_stop(timestamp = Process.clock_gettime(Process::CLOCK_REALTIME), starting_thread_id = current_thread)
36
37
  @lock.synchronize do
37
- record_elapsed_transaction_time_until timestamp, starting_thread_id
38
- set_transaction_start_time nil, starting_thread_id
38
+ record_elapsed_transaction_time_until(timestamp, starting_thread_id)
39
+ set_transaction_start_time(nil, starting_thread_id)
39
40
  end
40
41
  end
41
42
 
@@ -100,7 +101,7 @@ module NewRelic
100
101
  end
101
102
 
102
103
  def thread_is_alive?(thread_id)
103
- thread = thread_by_id thread_id
104
+ thread = thread_by_id(thread_id)
104
105
  thread && thread.alive?
105
106
  rescue StandardError
106
107
  false
@@ -110,13 +111,13 @@ module NewRelic
110
111
  # perfomance reasons. We have two implmentations of `thread_by_id`
111
112
  # based on ruby implementation.
112
113
  if RUBY_ENGINE == 'jruby'
113
- def thread_by_id thread_id
114
+ def thread_by_id(thread_id)
114
115
  Thread.list.detect { |t| t.object_id == thread_id }
115
116
  end
116
117
  else
117
118
  require 'objspace'
118
119
 
119
- def thread_by_id thread_id
120
+ def thread_by_id(thread_id)
120
121
  ObjectSpace._id2ref(thread_id)
121
122
  end
122
123
  end
@@ -131,14 +132,14 @@ module NewRelic
131
132
  @stats[thread_id].elapsed_transaction_time = 0.0
132
133
  end
133
134
 
134
- def transaction_time_in_thread timestamp, thread_id, entry
135
- return entry.elapsed_transaction_time unless in_transaction? thread_id
135
+ def transaction_time_in_thread(timestamp, thread_id, entry)
136
+ return entry.elapsed_transaction_time unless in_transaction?(thread_id)
136
137
 
137
138
  # Count the portion of the transaction that's elapsed so far,...
138
- elapsed = record_elapsed_transaction_time_until timestamp, thread_id
139
+ elapsed = record_elapsed_transaction_time_until(timestamp, thread_id)
139
140
 
140
141
  # ...then readjust the transaction start time to the next harvest
141
- split_transaction_at_harvest timestamp, thread_id
142
+ split_transaction_at_harvest(timestamp, thread_id)
142
143
 
143
144
  elapsed
144
145
  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/utilization/vendor'
6
7
 
@@ -25,15 +26,15 @@ module NewRelic
25
26
  '',
26
27
  {'X-aws-ec2-metadata-token-ttl-seconds' => IMDS_TOKEN_TTL_SECS})
27
28
  unless response.code == Vendor::SUCCESS
28
- NewRelic::Agent.logger.debug 'Failed to obtain an AWS token for use with IMDS - encountered ' \
29
+ NewRelic::Agent.logger.debug('Failed to obtain an AWS token for use with IMDS - encountered ' \
29
30
  "#{response.class} with HTTP response code #{response.code} - " \
30
- 'assuming non AWS'
31
+ 'assuming non AWS')
31
32
  return
32
33
  end
33
34
 
34
35
  response.body
35
36
  rescue Net::OpenTimeout
36
- NewRelic::Agent.logger.debug 'Timed out waiting for AWS IMDS - assuming non AWS'
37
+ NewRelic::Agent.logger.debug('Timed out waiting for AWS IMDS - assuming non AWS')
37
38
  end
38
39
  end
39
40
 
@@ -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/utilization/vendor'
6
7
 
@@ -17,16 +18,16 @@ module NewRelic
17
18
  MACH_TYPE = 'machineType'.freeze
18
19
  ZONE = 'zone'.freeze
19
20
 
20
- def prepare_response response
21
- body = JSON.parse response.body
22
- body[MACH_TYPE] = trim_leading body[MACH_TYPE]
23
- body[ZONE] = trim_leading body[ZONE]
21
+ def prepare_response(response)
22
+ body = JSON.parse(response.body)
23
+ body[MACH_TYPE] = trim_leading(body[MACH_TYPE])
24
+ body[ZONE] = trim_leading(body[ZONE])
24
25
  body
25
26
  end
26
27
 
27
28
  SLASH = '/'.freeze
28
29
 
29
- def trim_leading value
30
+ def trim_leading(value)
30
31
  value.split(SLASH).last
31
32
  end
32
33
  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/utilization/vendor'
6
7
 
@@ -15,9 +16,9 @@ module NewRelic
15
16
  def detect
16
17
  begin
17
18
  return false unless pcf_keys_present?
18
- process_response ENV
19
+ process_response(ENV)
19
20
  rescue
20
- NewRelic::Agent.logger.error "Error occurred detecting: #{vendor_name}", e
21
+ NewRelic::Agent.logger.error("Error occurred detecting: #{vendor_name}", e)
21
22
  record_supportability_metric
22
23
  false
23
24
  end