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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e16c313766a7d9c51bc1a1c3031f666747b4a3aefa773cf226d28510d90d6658
4
- data.tar.gz: cb464a40400ce3b4a41178f737fa804952bfe22de66dc88f73deccaa256520a6
3
+ metadata.gz: b9556e153e6ae6bb4ea2894bc62e6c0745a08f2347c25074a97316fe6818ca6d
4
+ data.tar.gz: 1e07fc83567ff8b0e83a1c502265076fca5409021ff724801455c6e4ee5086ff
5
5
  SHA512:
6
- metadata.gz: 93915783c6110bbc027d03d614b5ad582ba0bf73b93933d4a93f11a7e698fd82436c74b3b941c27846e6e1ae408b7d8929b9c1d7dcae0e6103ed3ded2836c9c2
7
- data.tar.gz: f7a5196e10ecd5dd88ed16b218cdcb760511d3747f1c821ccc7f4b6c5e22c28a1e08d581022513d04e6540d6d5cd62419cc587c05c8154d4a7abe6a574944a97
6
+ metadata.gz: 9bb9efe02ea356b8969d3466bde7c76e2f20cb8880d93628d707ee92c05338e91262d456c4b5e0b9943ad1ee50e8edf512cb82096a3f5f2ea166a6b5b1bfdb0b
7
+ data.tar.gz: 1e13ef2b0b0ab49ef8c08f5d54536a37a3b3f5812b8a0ef884f2b1df670842499edcef344297aae59822cc43d456b47f3164ba86daf678e62080c09912a871a7
data/.rubocop.yml CHANGED
@@ -1361,9 +1361,6 @@ Style/FormatString:
1361
1361
  Style/FormatStringToken:
1362
1362
  Enabled: false
1363
1363
 
1364
- Style/FrozenStringLiteralComment:
1365
- Enabled: false
1366
-
1367
1364
  # Disabling for now
1368
1365
  Style/GlobalStdStream:
1369
1366
  Enabled: false
@@ -1468,9 +1465,18 @@ Style/MapToHash:
1468
1465
  Enabled: false
1469
1466
 
1470
1467
  Style/MethodCallWithArgsParentheses:
1471
- Enabled: false
1468
+ Enabled: true
1469
+ IgnoredMethods:
1470
+ - puts
1471
+ - require
1472
+ - raise
1473
+ - include
1474
+ - fail
1475
+ - print
1476
+ - add_dependency
1477
+ - add_development_dependency
1478
+ AllowedPatterns: [^assert, ^refute]
1472
1479
 
1473
- # Disabling for now
1474
1480
  Style/MethodCallWithoutArgsParentheses:
1475
1481
  Enabled: false
1476
1482
  IgnoredMethods: []
@@ -1479,7 +1485,7 @@ Style/MethodCalledOnDoEndBlock:
1479
1485
  Enabled: false
1480
1486
 
1481
1487
  Style/MethodDefParentheses:
1482
- Enabled: false
1488
+ Enabled: true
1483
1489
 
1484
1490
  Style/MinMax:
1485
1491
  Enabled: false
data/.simplecov CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  SimpleCov.start do
2
3
  enable_coverage :branch
3
4
  SimpleCov.root(File.join(File.dirname(__FILE__), '/lib'))
data/.snyk ADDED
@@ -0,0 +1,11 @@
1
+ exclude:
2
+ global:
3
+ # The project Dockerfile is only used to orchestrate container usage for
4
+ # local development with containers that are not to be exposed to the
5
+ # outside world. We use vanilla "ruby" images and do not layer on any
6
+ # additional software dependencies or configurations ourselves that would
7
+ # change the original "ruby" images' security profile. We defer all
8
+ # security mitigation for the images to the "ruby" image maintainers (who
9
+ # themselves are periodically updating their base Ubuntu layers to mitigate
10
+ # issues).
11
+ - Dockerfile
data/Brewfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  brew 'imagemagick'
2
3
  brew 'memcached'
3
4
  tap 'mongodb/brew'
data/CHANGELOG.md CHANGED
@@ -1,6 +1,62 @@
1
1
  # New Relic Ruby Agent Release Notes #
2
2
 
3
3
 
4
+ ## v8.10.0
5
+
6
+
7
+ * **New gRPC instrumentation**
8
+
9
+ The agent will now instrument [gRPC](https://grpc.io/) activity performed by clients and servers that use the [grpc](https://rubygems.org/gems/grpc) RubyGem. Instrumentation is automatic and enabled by default, so gRPC users should not need to modify any existing application code or agent configuration to benefit from the instrumentation. The instrumentation makes use of distributed tracing for a comprehensive overview of all gRPC traffic taking place across multiple monitored applications. This allows you to observe your client and server activity using any service that adheres to the W3C standard.
10
+
11
+ The following new configuration parameters have been added for gRPC. All are optional.
12
+
13
+ | Configuration name | Default | Behavior |
14
+ | ----------- | ----------- |----------- |
15
+ | `instrumentation.grpc_client` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
16
+ | `instrumentation.grpc_server` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
17
+ | `instrumentation.grpc.host_denylist` | "" | Provide a comma delimited list of host regex patterns (ex: "private.com$,exception.*") |
18
+
19
+
20
+ * **Performance: Rework timing range overlap calculations for multiple transaction segments**
21
+
22
+ Many thanks to GitHub community members @bmulholland and @hkdnet. @bmulholland alerted us to [rmosolgo/graphql-ruby#3945](https://github.com/rmosolgo/graphql-ruby/issues/3945). That Issue essentially notes that the New Relic Ruby agent incurs a significant perfomance hit when the `graphql` RubyGem (which ships with New Relic Ruby agent support) is used with DataLoader to generate a high number of transactions. Then @hkdnet diagnosed the root cause in the Ruby agent and put together both a proof of concept fix and a full blown PR to resolve the problem. The agent keeps track multiple segments that are concurrently in play for a given transaction in order to merge the ones whose start and stop times intersect. The logic for doing this find-and-merge operation has been reworked to a) be deferred entirely until the transaction is ready to be recorded, and b) made more performant when it is needed. GraphQL DataLoader users and other users who generate lots of activity for monitoring within a short amount of time will hopefully see some good performance gains from these changes.
23
+
24
+
25
+ * **Performance: Make frozen string literals the default for the agent
26
+
27
+ The Ruby `frozen_string_literal: true` magic source code comment has now been applied consistently across all Ruby files belonging to the agent. This can provide a performance boost, given that Ruby can rely on the strings remaining immutable. Previously only about a third of the agent's code was freezing string literals by default. Now that 100% of the code freezes string literals by default, we have internally observed some related performance gains through testing. We are hopeful that these will translate into some real world gains in production capacities.
28
+
29
+
30
+ * **Bugfix: Error when setting the yaml configuration with `transaction_tracer.transaction_threshold: apdex_f`**
31
+
32
+ Originally, the agent was only checking the `transaction_tracer.transaction_threshold` from the newrelic.yml correctly if it was on two lines.
33
+
34
+ Example:
35
+
36
+ ```
37
+ # newrelic.yml
38
+ transaction_tracer:
39
+ transaction_threshold: apdex_f
40
+ ```
41
+
42
+ When this was instead changed to be on one line, the agent was not able to correctly identify the value of apdex_f.
43
+
44
+ Example:
45
+ ```
46
+ # newrelic.yml
47
+ transaction_tracer.transaction_threshold: apdex_f
48
+ ```
49
+ This would cause prevent transactions from finishing due to the error `ArgumentError: comparison of Float with String failed`. This has now been corrected and the agent is able to process newrelic.yml with a one line `transaction_tracer.transaction_threshold: apdex_f` correctly now.
50
+
51
+ Thank you to @oboxodo for bringing this to our attention.
52
+
53
+
54
+ * **Bugfix: Don't modify frozen Logger**
55
+
56
+ Previously the agent would modify each instance of the Logger class by adding a unique instance variable as part of the instrumentation. This could cause the error `FrozenError: can't modify frozen Logger` to be thrown if the Logger instance had been frozen. The agent will now check if the object is frozen before attempting to modify the object. Thanks to @mkcosta for bringing this issue to our attention.
57
+
58
+
59
+
4
60
  ## v8.9.0
5
61
 
6
62
 
data/Guardfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require './test/multiverse/lib/multiverse/bundler_patch'
2
3
 
3
4
  test_folders = Dir.glob("test/new_relic/*").select { |f| File.directory?(f) }
data/Rakefile CHANGED
@@ -1,3 +1,8 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
1
6
  require 'rubygems'
2
7
  require 'rake/testtask'
3
8
  require 'yard'
data/bin/mongrel_rpm CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  require 'rubygems'
3
4
  require 'rack'
4
5
  require 'rack/handler/mongrel'
@@ -13,9 +14,9 @@ OptionParser.new do |opts|
13
14
  opts.on("--[no-]logging", "turn off request logging") { |l| options[:logging] = l }
14
15
  opts.on("--license=license_key", "override license key") { |l| options[:license_key] = l }
15
16
  opts.on("--install", "install a newrelic.yml template") { |l| options[:install] = true }
16
- opts.separator ""
17
- opts.separator "app_name is the name of the application where the metrics will be stored"
18
- opts.separator ""
17
+ opts.separator("")
18
+ opts.separator("app_name is the name of the application where the metrics will be stored")
19
+ opts.separator("")
19
20
  # The rackup file references this var
20
21
  appname = opts.parse!(ARGV.clone).first
21
22
  end
@@ -23,10 +24,10 @@ end
23
24
  options[:app_name] = appname if appname
24
25
 
25
26
  ru_file = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "new_relic", "rack", "mongrel_rpm.ru"))
26
- rackup_code = File.read ru_file
27
- builder = Rack::Builder.new { eval rackup_code, binding, ru_file }
27
+ rackup_code = File.read(ru_file)
28
+ builder = Rack::Builder.new { eval(rackup_code, binding, ru_file) }
28
29
 
29
30
  options = {:Host => '127.0.0.1', :Port => port}
30
31
  Rack::Handler::Mongrel.run(builder.to_app, options) do |server|
31
- NewRelic::Agent.logger.info "Started Mongrel listening for '#{NewRelic::Control.instance.app_names.join(" and ")}' data at #{server.host}:#{server.port}"
32
+ NewRelic::Agent.logger.info("Started Mongrel listening for '#{NewRelic::Control.instance.app_names.join(" and ")}' data at #{server.host}:#{server.port}")
32
33
  end
data/bin/newrelic CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  # executes one of the commands in the new_relic/commands directory
3
4
  # pass the name of the command as an argument
4
5
 
@@ -9,5 +10,5 @@ begin
9
10
  rescue NewRelic::Cli::Command::CommandFailure => failure
10
11
  STDERR.puts failure.message
11
12
  STDERR.puts failure.options if failure.options
12
- exit 1
13
+ exit(1)
13
14
  end
data/bin/newrelic_cmd CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  # This command has been renamed "newrelic"
3
4
  # executes one of the commands in the new_relic/commands directory
4
5
  # pass the name of the command as an argument
data/bin/nrdebug CHANGED
@@ -3,6 +3,7 @@
3
3
  # encoding: utf-8
4
4
  # This file is distributed under New Relic's license terms.
5
5
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
6
+ # frozen_string_literal: true
6
7
 
7
8
  require 'tempfile'
8
9
  require 'rbconfig'
@@ -178,10 +179,10 @@ class ProcessReport
178
179
  def open
179
180
  if @path
180
181
  File.open(@path, "w") do |f|
181
- yield f
182
+ yield(f)
182
183
  end
183
184
  else
184
- yield $stdout
185
+ yield($stdout)
185
186
  end
186
187
  end
187
188
 
data/init.rb CHANGED
@@ -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 is the initialization for the New Relic Ruby Agent when used as
6
7
  # a plugin
@@ -24,7 +25,7 @@ begin
24
25
  Rails.configuration
25
26
  end
26
27
 
27
- NewRelic::Control.instance.init_plugin :config => current_config
28
+ NewRelic::Control.instance.init_plugin(:config => current_config)
28
29
  rescue => e
29
- ::NewRelic::Agent.logger.error "Error initializing New Relic plugin. Agent is disabled.", e
30
+ ::NewRelic::Agent.logger.error("Error initializing New Relic plugin. Agent is disabled.", e)
30
31
  end
data/install.rb CHANGED
@@ -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
  if __FILE__ == $0 || $0 =~ /script\/plugin/ || File.basename($0) == 'rake'
6
7
  $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
@@ -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
  class AdaptiveSampler
8
- def initialize target_samples = 10, period_duration = 60
9
+ def initialize(target_samples = 10, period_duration = 60)
9
10
  @target = target_samples
10
11
  @seen = 0
11
12
  @seen_last = 0
@@ -84,7 +85,7 @@ module NewRelic
84
85
  end
85
86
  end
86
87
  if target_changed
87
- NewRelic::Agent.logger.debug "Sampling target set to: #{target}"
88
+ NewRelic::Agent.logger.debug("Sampling target set to: #{target}")
88
89
  end
89
90
  end
90
91
  end
@@ -99,7 +100,7 @@ module NewRelic
99
100
  end
100
101
  end
101
102
  if period_changed
102
- NewRelic::Agent.logger.debug "Sampling period set to: #{period_duration}"
103
+ NewRelic::Agent.logger.debug("Sampling period set to: #{period_duration}")
103
104
  end
104
105
  end
105
106
  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
@@ -9,7 +10,7 @@ module NewRelic
9
10
  # data.
10
11
  def shutdown
11
12
  return unless started?
12
- ::NewRelic::Agent.logger.info "Starting Agent shutdown"
13
+ ::NewRelic::Agent.logger.info("Starting Agent shutdown")
13
14
 
14
15
  stop_event_loop
15
16
  trap_signals_for_litespeed
@@ -26,7 +27,7 @@ module NewRelic
26
27
  graceful_disconnect
27
28
  end
28
29
  rescue => e
29
- ::NewRelic::Agent.logger.error e
30
+ ::NewRelic::Agent.logger.error(e)
30
31
  end
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
  module NewRelic
6
7
  module Agent
@@ -10,8 +11,8 @@ module NewRelic
10
11
  # before connecting, otherwise the parent process sends useless data
11
12
  def using_forking_dispatcher?
12
13
  # TODO: MAJOR VERSION - remove :rainbows
13
- if [:puma, :passenger, :rainbows, :unicorn].include? Agent.config[:dispatcher]
14
- ::NewRelic::Agent.logger.info "Deferring startup of agent reporting thread because #{Agent.config[:dispatcher]} may fork."
14
+ if [:puma, :passenger, :rainbows, :unicorn].include?(Agent.config[:dispatcher])
15
+ ::NewRelic::Agent.logger.info("Deferring startup of agent reporting thread because #{Agent.config[:dispatcher]} may fork.")
15
16
  true
16
17
  else
17
18
  false
@@ -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
@@ -18,11 +19,11 @@ module NewRelic
18
19
  # See #connect for a description of connection_options.
19
20
  def start_worker_thread(connection_options = {})
20
21
  if disable = NewRelic::Agent.config[:disable_harvest_thread]
21
- NewRelic::Agent.logger.info "Not starting Ruby Agent worker thread because :disable_harvest_thread is #{disable}"
22
+ NewRelic::Agent.logger.info("Not starting Ruby Agent worker thread because :disable_harvest_thread is #{disable}")
22
23
  return
23
24
  end
24
25
 
25
- ::NewRelic::Agent.logger.debug "Creating Ruby Agent worker thread."
26
+ ::NewRelic::Agent.logger.debug("Creating Ruby Agent worker thread.")
26
27
  @worker_thread = Threading::AgentThread.create('Worker Loop') do
27
28
  deferred_work!(connection_options)
28
29
  end
@@ -44,7 +45,7 @@ module NewRelic
44
45
  # Wait the end of the event loop thread.
45
46
  if @worker_thread
46
47
  unless @worker_thread.join(3)
47
- ::NewRelic::Agent.logger.debug "Event loop thread did not stop within 3 seconds"
48
+ ::NewRelic::Agent.logger.debug("Event loop thread did not stop within 3 seconds")
48
49
  end
49
50
  end
50
51
  end
@@ -52,7 +53,7 @@ module NewRelic
52
53
  # Certain event types may sometimes need to be on the same interval as metrics,
53
54
  # so we will check config assigned in EventHarvestConfig to determine the interval
54
55
  # on which to report them
55
- def interval_for event_type
56
+ def interval_for(event_type)
56
57
  interval = Agent.config[:"event_report_period.#{event_type}"]
57
58
  :"#{interval}_second_harvest"
58
59
  end
@@ -66,19 +67,19 @@ module NewRelic
66
67
  transmit_data
67
68
  end
68
69
 
69
- @event_loop.on(interval_for TRANSACTION_EVENT_DATA) do
70
+ @event_loop.on(interval_for(TRANSACTION_EVENT_DATA)) do
70
71
  transmit_analytic_event_data
71
72
  end
72
- @event_loop.on(interval_for CUSTOM_EVENT_DATA) do
73
+ @event_loop.on(interval_for(CUSTOM_EVENT_DATA)) do
73
74
  transmit_custom_event_data
74
75
  end
75
- @event_loop.on(interval_for ERROR_EVENT_DATA) do
76
+ @event_loop.on(interval_for(ERROR_EVENT_DATA)) do
76
77
  transmit_error_event_data
77
78
  end
78
- @event_loop.on(interval_for SPAN_EVENT_DATA) do
79
+ @event_loop.on(interval_for(SPAN_EVENT_DATA)) do
79
80
  transmit_span_event_data
80
81
  end
81
- @event_loop.on(interval_for LOG_EVENT_DATA) do
82
+ @event_loop.on(interval_for(LOG_EVENT_DATA)) do
82
83
  transmit_log_event_data
83
84
  end
84
85
 
@@ -96,18 +97,18 @@ module NewRelic
96
97
  # this clears the data, clears connection attempts, and
97
98
  # waits a while to reconnect.
98
99
  def handle_force_restart(error)
99
- ::NewRelic::Agent.logger.debug error.message
100
+ ::NewRelic::Agent.logger.debug(error.message)
100
101
  drop_buffered_data
101
102
  @service.force_restart if @service
102
103
  @connect_state = :pending
103
- sleep 30
104
+ sleep(30)
104
105
  end
105
106
 
106
107
  # when a disconnect is requested, stop the current thread, which
107
108
  # is the worker thread that gathers data and talks to the
108
109
  # server.
109
110
  def handle_force_disconnect(error)
110
- ::NewRelic::Agent.logger.warn "Agent received a ForceDisconnectException from the server, disconnecting. (#{error.message})"
111
+ ::NewRelic::Agent.logger.warn("Agent received a ForceDisconnectException from the server, disconnecting. (#{error.message})")
111
112
  disconnect
112
113
  end
113
114
 
@@ -115,7 +116,7 @@ module NewRelic
115
116
  # it and disconnecting the agent, since we are now in an
116
117
  # unknown state.
117
118
  def handle_other_error(error)
118
- ::NewRelic::Agent.logger.error "Unhandled error in worker thread, disconnecting."
119
+ ::NewRelic::Agent.logger.error("Unhandled error in worker thread, disconnecting.")
119
120
  # These errors are fatal (that is, they will prevent the agent from
120
121
  # reporting entirely), so we really want backtraces when they happen
121
122
  ::NewRelic::Agent.logger.log_exception(:error, error)
@@ -153,7 +154,7 @@ module NewRelic
153
154
  # never reaches here unless there is a problem or
154
155
  # the agent is exiting
155
156
  else
156
- ::NewRelic::Agent.logger.debug "No connection. Worker thread ending."
157
+ ::NewRelic::Agent.logger.debug("No connection. Worker thread ending.")
157
158
  end
158
159
  end
159
160
  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
@@ -68,7 +69,7 @@ module NewRelic
68
69
  # Log the environment the app thinks it's running in.
69
70
  # Useful in debugging, as this is the key for config YAML lookups.
70
71
  def log_environment
71
- ::NewRelic::Agent.logger.info "Environment: #{NewRelic::Control.instance.env}"
72
+ ::NewRelic::Agent.logger.info("Environment: #{NewRelic::Control.instance.env}")
72
73
  end
73
74
 
74
75
  # Logs the dispatcher to the log file to assist with
@@ -78,21 +79,21 @@ module NewRelic
78
79
  dispatcher_name = Agent.config[:dispatcher].to_s
79
80
 
80
81
  if dispatcher_name.empty?
81
- ::NewRelic::Agent.logger.info 'No known dispatcher detected.'
82
+ ::NewRelic::Agent.logger.info('No known dispatcher detected.')
82
83
  else
83
- ::NewRelic::Agent.logger.info "Dispatcher: #{dispatcher_name}"
84
+ ::NewRelic::Agent.logger.info("Dispatcher: #{dispatcher_name}")
84
85
  end
85
86
  end
86
87
 
87
88
  def log_app_name
88
- ::NewRelic::Agent.logger.info "Application: #{Agent.config[:app_name].join(", ")}"
89
+ ::NewRelic::Agent.logger.info("Application: #{Agent.config[:app_name].join(", ")}")
89
90
  end
90
91
 
91
92
  def log_ignore_url_regexes
92
93
  regexes = NewRelic::Agent.config[:'rules.ignore_url_regexes']
93
94
 
94
95
  unless regexes.empty?
95
- ::NewRelic::Agent.logger.info "Ignoring URLs that match the following regexes: #{regexes.map(&:inspect).join(", ")}."
96
+ ::NewRelic::Agent.logger.info("Ignoring URLs that match the following regexes: #{regexes.map(&:inspect).join(", ")}.")
96
97
  end
97
98
  end
98
99
 
@@ -100,7 +101,7 @@ module NewRelic
100
101
  # so we can disambiguate processes in the log file and make
101
102
  # sure they're running a reasonable version
102
103
  def log_version_and_pid
103
- ::NewRelic::Agent.logger.debug "New Relic Ruby Agent #{NewRelic::VERSION::STRING} Initialized: pid = #{$$}"
104
+ ::NewRelic::Agent.logger.debug("New Relic Ruby Agent #{NewRelic::VERSION::STRING} Initialized: pid = #{$$}")
104
105
  end
105
106
 
106
107
  # Logs the configured application names
@@ -164,21 +165,21 @@ module NewRelic
164
165
  return false if already_started? || disabled?
165
166
 
166
167
  if defer_for_delayed_job?
167
- ::NewRelic::Agent.logger.debug "Deferring startup for DelayedJob"
168
+ ::NewRelic::Agent.logger.debug("Deferring startup for DelayedJob")
168
169
  return false
169
170
  end
170
171
 
171
172
  if defer_for_resque?
172
- ::NewRelic::Agent.logger.debug "Deferring startup for Resque in case it daemonizes"
173
+ ::NewRelic::Agent.logger.debug("Deferring startup for Resque in case it daemonizes")
173
174
  return false
174
175
  end
175
176
 
176
177
  unless app_name_configured?
177
- NewRelic::Agent.logger.error "No application name configured.",
178
+ NewRelic::Agent.logger.error("No application name configured.",
178
179
  "The Agent cannot start without at least one. Please check your ",
179
180
  "newrelic.yml and ensure that it is valid and has at least one ",
180
181
  "value set for app_name in the #{NewRelic::Control.instance.env} ",
181
- "environment."
182
+ "environment.")
182
183
  return false
183
184
  end
184
185