newrelic_rpm 8.2.0 → 8.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (266) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1936 -0
  3. data/CHANGELOG.md +17 -2
  4. data/CONTRIBUTING.md +14 -2
  5. data/Guardfile +8 -8
  6. data/Rakefile +5 -7
  7. data/bin/mongrel_rpm +8 -9
  8. data/bin/newrelic +1 -1
  9. data/bin/nrdebug +14 -14
  10. data/init.rb +0 -2
  11. data/lefthook.yml +9 -0
  12. data/lib/new_relic/agent/adaptive_sampler.rb +7 -3
  13. data/lib/new_relic/agent/agent.rb +38 -40
  14. data/lib/new_relic/agent/agent_logger.rb +8 -9
  15. data/lib/new_relic/agent/attribute_filter.rb +31 -31
  16. data/lib/new_relic/agent/attributes.rb +2 -2
  17. data/lib/new_relic/agent/autostart.rb +6 -7
  18. data/lib/new_relic/agent/commands/agent_command.rb +2 -2
  19. data/lib/new_relic/agent/commands/agent_command_router.rb +6 -5
  20. data/lib/new_relic/agent/commands/thread_profiler_session.rb +0 -3
  21. data/lib/new_relic/agent/configuration/default_source.rb +318 -324
  22. data/lib/new_relic/agent/configuration/dotted_hash.rb +3 -3
  23. data/lib/new_relic/agent/configuration/environment_source.rb +3 -4
  24. data/lib/new_relic/agent/configuration/event_harvest_config.rb +2 -4
  25. data/lib/new_relic/agent/configuration/high_security_source.rb +7 -7
  26. data/lib/new_relic/agent/configuration/manager.rb +57 -57
  27. data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -1
  28. data/lib/new_relic/agent/configuration/security_policy_source.rb +73 -73
  29. data/lib/new_relic/agent/configuration/server_source.rb +10 -10
  30. data/lib/new_relic/agent/configuration/yaml_source.rb +9 -9
  31. data/lib/new_relic/agent/connect/request_builder.rb +13 -16
  32. data/lib/new_relic/agent/connect/response_handler.rb +0 -3
  33. data/lib/new_relic/agent/custom_event_aggregator.rb +9 -10
  34. data/lib/new_relic/agent/database/explain_plan_helpers.rb +3 -4
  35. data/lib/new_relic/agent/database/obfuscation_helpers.rb +12 -12
  36. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +2 -2
  37. data/lib/new_relic/agent/database.rb +20 -24
  38. data/lib/new_relic/agent/datastores/metric_helper.rb +10 -10
  39. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +2 -3
  40. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +3 -5
  41. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +1 -2
  42. data/lib/new_relic/agent/datastores/redis.rb +2 -4
  43. data/lib/new_relic/agent/datastores.rb +1 -3
  44. data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +5 -5
  45. data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +11 -10
  46. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +10 -11
  47. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +41 -42
  48. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +3 -3
  49. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +41 -43
  50. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +23 -23
  51. data/lib/new_relic/agent/distributed_tracing.rb +17 -18
  52. data/lib/new_relic/agent/encoding_normalizer.rb +1 -1
  53. data/lib/new_relic/agent/error_collector.rb +17 -17
  54. data/lib/new_relic/agent/error_event_aggregator.rb +1 -1
  55. data/lib/new_relic/agent/error_filter.rb +6 -8
  56. data/lib/new_relic/agent/error_trace_aggregator.rb +1 -1
  57. data/lib/new_relic/agent/event_aggregator.rb +1 -1
  58. data/lib/new_relic/agent/event_buffer.rb +6 -7
  59. data/lib/new_relic/agent/event_listener.rb +0 -1
  60. data/lib/new_relic/agent/event_loop.rb +10 -10
  61. data/lib/new_relic/agent/external.rb +1 -2
  62. data/lib/new_relic/agent/guid_generator.rb +1 -3
  63. data/lib/new_relic/agent/harvester.rb +3 -4
  64. data/lib/new_relic/agent/heap.rb +1 -3
  65. data/lib/new_relic/agent/hostname.rb +3 -3
  66. data/lib/new_relic/agent/http_clients/abstract.rb +5 -7
  67. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +1 -5
  68. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +4 -4
  69. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +3 -3
  70. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +1 -2
  71. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +2 -3
  72. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +2 -3
  73. data/lib/new_relic/agent/http_clients/uri_util.rb +0 -1
  74. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +2 -3
  75. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +9 -10
  76. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +5 -7
  77. data/lib/new_relic/agent/instrumentation/active_job.rb +4 -3
  78. data/lib/new_relic/agent/instrumentation/active_merchant.rb +2 -2
  79. data/lib/new_relic/agent/instrumentation/active_record.rb +20 -18
  80. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +36 -42
  81. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +28 -25
  82. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +3 -3
  83. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +5 -6
  84. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +8 -9
  85. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +1 -1
  86. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +7 -8
  87. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +41 -41
  88. data/lib/new_relic/agent/instrumentation/curb/chain.rb +19 -20
  89. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +34 -38
  90. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +9 -10
  91. data/lib/new_relic/agent/instrumentation/data_mapper.rb +10 -10
  92. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +5 -7
  93. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +2 -6
  94. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +4 -4
  95. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +2 -2
  96. data/lib/new_relic/agent/instrumentation/excon.rb +0 -1
  97. data/lib/new_relic/agent/instrumentation/grape/chain.rb +1 -2
  98. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +6 -7
  99. data/lib/new_relic/agent/instrumentation/grape.rb +2 -3
  100. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +2 -3
  101. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +0 -1
  102. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +0 -2
  103. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +2 -2
  104. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +6 -6
  105. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +1 -1
  106. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +2 -3
  107. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +0 -1
  108. data/lib/new_relic/agent/instrumentation/logger.rb +1 -1
  109. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +2 -1
  110. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +0 -1
  111. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +1 -0
  112. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +9 -10
  113. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +4 -5
  114. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +4 -4
  115. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +3 -4
  116. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +5 -5
  117. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +4 -4
  118. data/lib/new_relic/agent/instrumentation/net_http.rb +1 -1
  119. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +2 -3
  120. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +3 -2
  121. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +1 -1
  122. data/lib/new_relic/agent/instrumentation/padrino.rb +0 -5
  123. data/lib/new_relic/agent/instrumentation/queue_time.rb +5 -5
  124. data/lib/new_relic/agent/instrumentation/rack/chain.rb +5 -5
  125. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +0 -1
  126. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +4 -5
  127. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +0 -1
  128. data/lib/new_relic/agent/instrumentation/rack.rb +1 -1
  129. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +6 -6
  130. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +2 -2
  131. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +0 -1
  132. data/lib/new_relic/agent/instrumentation/rake/chain.rb +0 -5
  133. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +6 -6
  134. data/lib/new_relic/agent/instrumentation/rake.rb +1 -1
  135. data/lib/new_relic/agent/instrumentation/redis/chain.rb +6 -6
  136. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +2 -2
  137. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +1 -1
  138. data/lib/new_relic/agent/instrumentation/redis.rb +1 -1
  139. data/lib/new_relic/agent/instrumentation/resque/chain.rb +2 -3
  140. data/lib/new_relic/agent/instrumentation/resque/helper.rb +1 -1
  141. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +4 -4
  142. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +1 -2
  143. data/lib/new_relic/agent/instrumentation/resque.rb +7 -7
  144. data/lib/new_relic/agent/instrumentation/sequel.rb +7 -9
  145. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -1
  146. data/lib/new_relic/agent/instrumentation/sidekiq.rb +5 -4
  147. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +0 -1
  148. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +4 -3
  149. data/lib/new_relic/agent/instrumentation/sunspot.rb +1 -1
  150. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +0 -1
  151. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +4 -4
  152. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +3 -5
  153. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +1 -1
  154. data/lib/new_relic/agent/internal_agent_error.rb +1 -1
  155. data/lib/new_relic/agent/javascript_instrumentor.rb +28 -28
  156. data/lib/new_relic/agent/logging.rb +8 -4
  157. data/lib/new_relic/agent/memory_logger.rb +1 -1
  158. data/lib/new_relic/agent/messaging.rb +42 -43
  159. data/lib/new_relic/agent/method_tracer.rb +9 -12
  160. data/lib/new_relic/agent/method_tracer_helpers.rb +2 -2
  161. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +13 -12
  162. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +2 -2
  163. data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +0 -1
  164. data/lib/new_relic/agent/monitors/synthetics_monitor.rb +4 -7
  165. data/lib/new_relic/agent/monitors.rb +1 -2
  166. data/lib/new_relic/agent/new_relic_service/encoders.rb +4 -4
  167. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +1 -1
  168. data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -1
  169. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +4 -3
  170. data/lib/new_relic/agent/new_relic_service.rb +20 -20
  171. data/lib/new_relic/agent/noticible_error.rb +0 -2
  172. data/lib/new_relic/agent/null_logger.rb +6 -2
  173. data/lib/new_relic/agent/obfuscator.rb +6 -8
  174. data/lib/new_relic/agent/parameter_filtering.rb +3 -5
  175. data/lib/new_relic/agent/payload_metric_mapping.rb +8 -9
  176. data/lib/new_relic/agent/pipe_channel_manager.rb +5 -6
  177. data/lib/new_relic/agent/pipe_service.rb +1 -1
  178. data/lib/new_relic/agent/priority_sampled_buffer.rb +4 -7
  179. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +9 -9
  180. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +12 -12
  181. data/lib/new_relic/agent/rules_engine.rb +2 -2
  182. data/lib/new_relic/agent/sampler.rb +2 -3
  183. data/lib/new_relic/agent/sampler_collection.rb +2 -3
  184. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +3 -3
  185. data/lib/new_relic/agent/samplers/memory_sampler.rb +4 -3
  186. data/lib/new_relic/agent/samplers/vm_sampler.rb +18 -18
  187. data/lib/new_relic/agent/span_event_aggregator.rb +8 -8
  188. data/lib/new_relic/agent/span_event_primitive.rb +39 -39
  189. data/lib/new_relic/agent/sql_sampler.rb +9 -9
  190. data/lib/new_relic/agent/stats.rb +16 -16
  191. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +7 -9
  192. data/lib/new_relic/agent/stats_engine/stats_hash.rb +8 -9
  193. data/lib/new_relic/agent/stats_engine.rb +6 -6
  194. data/lib/new_relic/agent/synthetics_event_aggregator.rb +0 -1
  195. data/lib/new_relic/agent/system_info.rb +22 -20
  196. data/lib/new_relic/agent/threading/agent_thread.rb +4 -5
  197. data/lib/new_relic/agent/threading/backtrace_node.rb +6 -9
  198. data/lib/new_relic/agent/threading/backtrace_service.rb +8 -8
  199. data/lib/new_relic/agent/threading/thread_profile.rb +15 -18
  200. data/lib/new_relic/agent/tracer.rb +37 -43
  201. data/lib/new_relic/agent/transaction/abstract_segment.rb +6 -6
  202. data/lib/new_relic/agent/transaction/datastore_segment.rb +5 -7
  203. data/lib/new_relic/agent/transaction/distributed_tracer.rb +7 -9
  204. data/lib/new_relic/agent/transaction/distributed_tracing.rb +21 -22
  205. data/lib/new_relic/agent/transaction/external_request_segment.rb +3 -5
  206. data/lib/new_relic/agent/transaction/message_broker_segment.rb +23 -23
  207. data/lib/new_relic/agent/transaction/request_attributes.rb +7 -7
  208. data/lib/new_relic/agent/transaction/segment.rb +3 -3
  209. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +0 -2
  210. data/lib/new_relic/agent/transaction/trace.rb +8 -8
  211. data/lib/new_relic/agent/transaction/trace_context.rb +13 -15
  212. data/lib/new_relic/agent/transaction/trace_node.rb +16 -16
  213. data/lib/new_relic/agent/transaction/tracing.rb +1 -3
  214. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -2
  215. data/lib/new_relic/agent/transaction.rb +79 -81
  216. data/lib/new_relic/agent/transaction_error_primitive.rb +16 -16
  217. data/lib/new_relic/agent/transaction_event_aggregator.rb +5 -6
  218. data/lib/new_relic/agent/transaction_event_primitive.rb +29 -29
  219. data/lib/new_relic/agent/transaction_metrics.rb +3 -3
  220. data/lib/new_relic/agent/transaction_sampler.rb +0 -1
  221. data/lib/new_relic/agent/transaction_time_aggregator.rb +6 -6
  222. data/lib/new_relic/agent/utilization/azure.rb +1 -1
  223. data/lib/new_relic/agent/utilization_data.rb +3 -4
  224. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -1
  225. data/lib/new_relic/agent/vm/snapshot.rb +3 -3
  226. data/lib/new_relic/agent/worker_loop.rb +3 -5
  227. data/lib/new_relic/agent.rb +22 -22
  228. data/lib/new_relic/cli/command.rb +15 -17
  229. data/lib/new_relic/cli/commands/deployments.rb +20 -22
  230. data/lib/new_relic/cli/commands/install.rb +6 -10
  231. data/lib/new_relic/coerce.rb +5 -8
  232. data/lib/new_relic/collection_helper.rb +48 -47
  233. data/lib/new_relic/control/class_methods.rb +2 -2
  234. data/lib/new_relic/control/frameworks/external.rb +1 -1
  235. data/lib/new_relic/control/frameworks/rails.rb +5 -6
  236. data/lib/new_relic/control/frameworks/rails3.rb +2 -3
  237. data/lib/new_relic/control/frameworks/ruby.rb +2 -2
  238. data/lib/new_relic/control/instance_methods.rb +4 -5
  239. data/lib/new_relic/control/instrumentation.rb +4 -5
  240. data/lib/new_relic/control/server_methods.rb +2 -3
  241. data/lib/new_relic/control.rb +0 -1
  242. data/lib/new_relic/dependency_detection.rb +6 -8
  243. data/lib/new_relic/environment_report.rb +16 -18
  244. data/lib/new_relic/helper.rb +5 -5
  245. data/lib/new_relic/language_support.rb +1 -1
  246. data/lib/new_relic/latest_changes.rb +2 -2
  247. data/lib/new_relic/local_environment.rb +7 -7
  248. data/lib/new_relic/metric_data.rb +6 -7
  249. data/lib/new_relic/metric_spec.rb +3 -3
  250. data/lib/new_relic/noticed_error.rb +14 -15
  251. data/lib/new_relic/rack/agent_middleware.rb +2 -2
  252. data/lib/new_relic/rack/browser_monitoring.rb +9 -9
  253. data/lib/new_relic/recipes/capistrano3.rb +11 -13
  254. data/lib/new_relic/recipes/capistrano_legacy.rb +11 -14
  255. data/lib/new_relic/supportability_helper.rb +1 -2
  256. data/lib/new_relic/version.rb +3 -4
  257. data/lib/sequel/extensions/newrelic_instrumentation.rb +4 -7
  258. data/lib/sequel/plugins/newrelic_instrumentation.rb +3 -9
  259. data/lib/tasks/all.rb +1 -1
  260. data/lib/tasks/config.rake +21 -21
  261. data/lib/tasks/multiverse.rb +4 -6
  262. data/lib/tasks/tests.rake +3 -7
  263. data/newrelic_rpm.gemspec +13 -12
  264. data/recipes/newrelic.rb +1 -1
  265. data/test/agent_helper.rb +55 -55
  266. metadata +33 -4
@@ -3,16 +3,15 @@
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
5
 
6
-
7
6
  module NewRelic
8
- module VERSION #:nodoc:
7
+ module VERSION # :nodoc:
9
8
  def self.build_version_string(*parts)
10
9
  parts.compact.join('.')
11
10
  end
12
11
 
13
12
  MAJOR = 8
14
- MINOR = 2
15
- TINY = 0
13
+ MINOR = 3
14
+ TINY = 0
16
15
 
17
16
  begin
18
17
  require File.join(File.dirname(__FILE__), 'build')
@@ -3,13 +3,12 @@
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
5
 
6
- require 'sequel' unless defined?( Sequel )
7
- require 'newrelic_rpm' unless defined?( NewRelic )
6
+ require 'sequel' unless defined?(Sequel)
7
+ require 'newrelic_rpm' unless defined?(NewRelic)
8
8
  require 'new_relic/agent/instrumentation/sequel_helper'
9
9
  require 'new_relic/agent/datastores/metric_helper'
10
10
 
11
11
  module Sequel
12
-
13
12
  # New Relic's Sequel instrumentation is implemented via a plugin for
14
13
  # Sequel::Models, and an extension for Sequel::Databases. Every database
15
14
  # handle that Sequel knows about when New Relic is loaded will automatically
@@ -31,7 +30,6 @@ module Sequel
31
30
  # `disable_activerecord_instrumentation` setting.
32
31
  #
33
32
  module NewRelicInstrumentation
34
-
35
33
  module Naming
36
34
  def self.query_method_name
37
35
  if Sequel::VERSION >= "4.35.0"
@@ -42,7 +40,7 @@ module Sequel
42
40
  end
43
41
  end
44
42
 
45
- define_method Naming.query_method_name do |*args, &blk| #THREAD_LOCAL_ACCESS
43
+ define_method Naming.query_method_name do |*args, &blk| # THREAD_LOCAL_ACCESS
46
44
  sql = args.first
47
45
 
48
46
  product = NewRelic::Agent::Instrumentation::SequelHelper.product_name_from_adapter(self.class.adapter_scheme)
@@ -86,7 +84,7 @@ module Sequel
86
84
  def explainer_for sql
87
85
  Proc.new do |*|
88
86
  if THREAD_SAFE_CONNECTION_POOL_CLASSES.include?(self.pool.class)
89
- self[ sql ].explain
87
+ self[sql].explain
90
88
  else
91
89
  NewRelic::Agent.logger.log_once(:info, :sequel_explain_skipped, "Not running SQL explains because Sequel is not in recognized multi-threaded mode")
92
90
  nil
@@ -97,5 +95,4 @@ module Sequel
97
95
 
98
96
  NewRelic::Agent.logger.debug "Registering the :newrelic_instrumentation extension."
99
97
  Database.register_extension(:newrelic_instrumentation, NewRelicInstrumentation)
100
-
101
98
  end # module Sequel
@@ -3,23 +3,21 @@
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
5
 
6
- require 'sequel' unless defined?( Sequel )
7
- require 'newrelic_rpm' unless defined?( NewRelic )
6
+ require 'sequel' unless defined?(Sequel)
7
+ require 'newrelic_rpm' unless defined?(NewRelic)
8
8
  require 'new_relic/agent/instrumentation/sequel_helper'
9
9
  require 'new_relic/agent/datastores/metric_helper'
10
10
 
11
11
  module Sequel
12
12
  module Plugins
13
-
14
13
  # Sequel::Model instrumentation for the New Relic agent.
15
14
  module NewrelicInstrumentation
16
-
17
15
  # Meta-programming for creating method tracers for the Sequel::Model plugin.
18
16
  module MethodWrapping
19
17
  # Install a method named +method_name+ that will trace execution
20
18
  # with a metric name derived from +operation_name+ (or +method_name+ if +operation_name+
21
19
  # isn't specified).
22
- def wrap_sequel_method(method_name, operation_name=method_name)
20
+ def wrap_sequel_method(method_name, operation_name = method_name)
23
21
  define_method(method_name) do |*args, &block|
24
22
  klass = self.is_a?(Class) ? self : self.class
25
23
  product = NewRelic::Agent::Instrumentation::SequelHelper.product_name_from_adapter(db.adapter_scheme)
@@ -36,7 +34,6 @@ module Sequel
36
34
  end
37
35
  end
38
36
  end
39
-
40
37
  end # module MethodTracer
41
38
 
42
39
  # Methods to be added to Sequel::Model instances.
@@ -51,10 +48,8 @@ module Sequel
51
48
  wrap_sequel_method :update_fields
52
49
  wrap_sequel_method :update_only
53
50
  wrap_sequel_method :save
54
-
55
51
  end # module InstanceMethods
56
52
 
57
-
58
53
  # Methods to be added to Sequel::Model classes.
59
54
  module ClassMethods
60
55
  extend Sequel::Plugins::NewrelicInstrumentation::MethodWrapping
@@ -64,7 +59,6 @@ module Sequel
64
59
  wrap_sequel_method :first
65
60
  wrap_sequel_method :create
66
61
  end # module ClassMethods
67
-
68
62
  end # module NewRelicInstrumentation
69
63
  end # module Plugins
70
64
  end # module Sequel
data/lib/tasks/all.rb CHANGED
@@ -3,6 +3,6 @@
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
4
 
5
5
  # This is required to load in task definitions
6
- Dir.glob(File.join(File.dirname(__FILE__),'*.rake')) do |file|
6
+ Dir.glob(File.join(File.dirname(__FILE__), '*.rake')) do |file|
7
7
  load file
8
8
  end
@@ -2,22 +2,22 @@ namespace :newrelic do
2
2
  namespace :config do
3
3
  desc "Describe available New Relic configuration settings."
4
4
 
5
- GENERAL = "general"
6
- DISABLING = "disabling"
5
+ GENERAL = "general"
6
+ DISABLING = "disabling"
7
7
  ATTRIBUTES = "attributes"
8
8
 
9
9
  SECTION_DESCRIPTIONS = {
10
- GENERAL => 'These settings are available for agent configuration. Some settings depend on your New Relic subscription level.',
11
- DISABLING => 'Use these settings to toggle instrumentation types during agent startup.',
12
- ATTRIBUTES => '[Attributes](/docs/features/agent-attributes) are key-value pairs containing information that determines the properties of an event or transaction. These key-value pairs can be viewed within transaction traces in APM, traced errors in APM, transaction events in dashboards, and page views in dashboards. You can customize exactly which attributes will be sent to each of these destinations',
10
+ GENERAL => 'These settings are available for agent configuration. Some settings depend on your New Relic subscription level.',
11
+ DISABLING => 'Use these settings to toggle instrumentation types during agent startup.',
12
+ ATTRIBUTES => '[Attributes](/docs/features/agent-attributes) are key-value pairs containing information that determines the properties of an event or transaction. These key-value pairs can be viewed within transaction traces in APM, traced errors in APM, transaction events in dashboards, and page views in dashboards. You can customize exactly which attributes will be sent to each of these destinations',
13
13
  "transaction_tracer" => 'The [transaction traces](/docs/apm/traces/transaction-traces/transaction-traces) feature collects detailed information from a selection of transactions, including a summary of the calling sequence, a breakdown of time spent, and a list of SQL queries and their query plans (on mysql and postgresql). Available features depend on your New Relic subscription level.',
14
- "error_collector" => 'The agent collects and reports all uncaught exceptions by default. These configuration options allow you to customize the error collection.',
14
+ "error_collector" => 'The agent collects and reports all uncaught exceptions by default. These configuration options allow you to customize the error collection.',
15
15
  "browser_monitoring" => 'The Browser monitoring [page load timing](/docs/browser/new-relic-browser/page-load-timing/page-load-timing-process) feature (sometimes referred to as real user monitoring or RUM) gives you insight into the performance real users are experiencing with your website. This is accomplished by measuring the time it takes for your users\' browsers to download and render your web pages by injecting a small amount of JavaScript code into the header and footer of each page.',
16
- "analytics_events" => '[New Relic dashboards](/docs/query-your-data/explore-query-data/dashboards/introduction-new-relic-one-dashboards) is a resource to gather and visualize data about your software and what it says about your business. With it you can quickly and easily create real-time dashboards to get immediate answers about end-user experiences, clickstreams, mobile activities, and server transactions.'
16
+ "analytics_events" => '[New Relic dashboards](/docs/query-your-data/explore-query-data/dashboards/introduction-new-relic-one-dashboards) is a resource to gather and visualize data about your software and what it says about your business. With it you can quickly and easily create real-time dashboards to get immediate answers about end-user experiences, clickstreams, mobile activities, and server transactions.'
17
17
  }
18
18
 
19
19
  NAME_OVERRIDES = {
20
- "slow_sql" => "Slow SQL"
20
+ "slow_sql" => "Slow SQL"
21
21
  }
22
22
 
23
23
  def output(format)
@@ -29,7 +29,7 @@ namespace :newrelic do
29
29
  end
30
30
 
31
31
  def build_config_hash
32
- sections = Hash.new {|hash, key| hash[key] = []}
32
+ sections = Hash.new { |hash, key| hash[key] = [] }
33
33
  NewRelic::Agent::Configuration::DEFAULTS.each do |key, value|
34
34
  next unless value[:public]
35
35
 
@@ -37,20 +37,20 @@ namespace :newrelic do
37
37
  key = key.to_s
38
38
  components = key.split(".")
39
39
 
40
- if key.match(/^disable_/) # "disable_httpclient"
40
+ if key.match(/^disable_/) # "disable_httpclient"
41
41
  section_key = DISABLING
42
- elsif components.length == 2 # "analytics_events.enabled"
42
+ elsif components.length == 2 # "analytics_events.enabled"
43
43
  section_key = components.first
44
44
  elsif components[1] == "attributes" # "transaction_tracer.attributes.enabled"
45
45
  section_key = ATTRIBUTES
46
46
  end
47
47
 
48
48
  sections[section_key] << {
49
- :key => key,
50
- :type => format_type(value[:type]),
49
+ :key => key,
50
+ :type => format_type(value[:type]),
51
51
  :description => format_description(value),
52
- :default => format_default_value(value),
53
- :env_var => format_env_var(key)
52
+ :default => format_default_value(value),
53
+ :env_var => format_env_var(key)
54
54
  }
55
55
  end
56
56
  sections
@@ -60,10 +60,10 @@ namespace :newrelic do
60
60
  sections = []
61
61
  sections << pluck(GENERAL, config_hash)
62
62
  sections << pluck("transaction_tracer", config_hash)
63
- sections << pluck("error_collector", config_hash)
63
+ sections << pluck("error_collector", config_hash)
64
64
  sections << pluck("browser_monitoring", config_hash)
65
- sections << pluck("analytics_events", config_hash)
66
- sections.concat(config_hash.to_a.sort_by { |a| a.first})
65
+ sections << pluck("analytics_events", config_hash)
66
+ sections.concat(config_hash.to_a.sort_by { |a| a.first })
67
67
 
68
68
  add_data_to_sections(sections)
69
69
 
@@ -82,9 +82,9 @@ namespace :newrelic do
82
82
  name = NAME_OVERRIDES[key]
83
83
  return name if name
84
84
 
85
- key.split("_").
86
- each { |fragment| fragment[0] = fragment[0].upcase }.
87
- join(" ")
85
+ key.split("_")
86
+ .each { |fragment| fragment[0] = fragment[0].upcase }
87
+ .join(" ")
88
88
  end
89
89
 
90
90
  def format_type(type)
@@ -42,10 +42,9 @@ namespace :test do
42
42
  end
43
43
 
44
44
  namespace :multiverse do
45
-
46
45
  def remove_local_multiverse_databases
47
- list_databases_command = %{echo "show databases" | mysql -u root}
48
- databases = `#{list_databases_command}`.chomp!.split("\n").select{|s| s =~ /multiverse/}
46
+ list_databases_command = %(echo "show databases" | mysql -u root)
47
+ databases = `#{list_databases_command}`.chomp!.split("\n").select { |s| s =~ /multiverse/ }
49
48
  databases.each do |database|
50
49
  puts "Dropping #{database}"
51
50
  `echo "drop database #{database}" | mysql -u root`
@@ -58,7 +57,7 @@ namespace :test do
58
57
  def remove_generated_gemfiles
59
58
  file_path = File.expand_path "test/multiverse/suites"
60
59
  Dir.glob(File.join file_path, "**", "Gemfile*").each do |fn|
61
- puts "Removing #{fn.gsub(file_path,'.../suites')}"
60
+ puts "Removing #{fn.gsub(file_path, '.../suites')}"
62
61
  FileUtils.rm fn
63
62
  end
64
63
  end
@@ -66,7 +65,7 @@ namespace :test do
66
65
  def remove_generated_gemfile_lockfiles
67
66
  file_path = File.expand_path "test/environments"
68
67
  Dir.glob(File.join file_path, "**", "Gemfile.lock").each do |fn|
69
- puts "Removing #{fn.gsub(file_path,'.../environments')}"
68
+ puts "Removing #{fn.gsub(file_path, '.../environments')}"
70
69
  FileUtils.rm fn
71
70
  end
72
71
  end
@@ -99,6 +98,5 @@ namespace :test do
99
98
  task :prime, [:suite] => [:env] do |_, args|
100
99
  Multiverse::Runner.prime(args.suite, Multiverse::Runner.parse_args(args))
101
100
  end
102
-
103
101
  end
104
102
  end
data/lib/tasks/tests.rake CHANGED
@@ -9,26 +9,23 @@ if defined? Rake::TestTask
9
9
  matches = tasks.map { |t| /(seed=.*?)[,\]]/.match(t) }.compact
10
10
  if matches.any?
11
11
  matches.first[1]
12
- else
13
- nil
14
12
  end
15
13
  end
16
14
 
17
15
  tasks = Rake.application.top_level_tasks
18
16
  ENV["TESTOPTS"] ||= ""
19
- if tasks.any? { |t| t.include?("verbose")}
17
+ if tasks.any? { |t| t.include?("verbose") }
20
18
  ENV["TESTOPTS"] += " -v"
21
19
  end
22
20
  if seed = look_for_seed(tasks)
23
21
  ENV["TESTOPTS"] += " --" + seed
24
22
  end
25
23
 
26
- agent_home = File.expand_path(File.join(File.dirname(__FILE__),'..','..'))
24
+ agent_home = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
27
25
 
28
26
  Rake::TestTask.new(:newrelic) do |t|
29
-
30
27
  file_pattern = ENV["file"]
31
- file_pattern = file_pattern.split(",").map{|f| "#{agent_home}/#{f}".gsub("//", "/")} if file_pattern
28
+ file_pattern = file_pattern.split(",").map { |f| "#{agent_home}/#{f}".gsub("//", "/") } if file_pattern
32
29
  file_pattern ||= "#{agent_home}/test/new_relic/**/*_test.rb"
33
30
 
34
31
  t.libs << "#{agent_home}/test"
@@ -36,6 +33,5 @@ if defined? Rake::TestTask
36
33
  t.pattern = Array(file_pattern)
37
34
  t.verbose = true
38
35
  end
39
-
40
36
  end
41
37
  end
data/newrelic_rpm.gemspec CHANGED
@@ -8,11 +8,10 @@ require 'new_relic/latest_changes'
8
8
  Gem::Specification.new do |s|
9
9
  s.name = "newrelic_rpm"
10
10
  s.version = NewRelic::VERSION::STRING
11
- s.required_ruby_version = '>= 2.0.0'
11
+ s.required_ruby_version = '>= 2.2.0'
12
12
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
13
- s.authors = [ "Aaron Huntsman", "Tanna McClure", "Kayla Reopelle" ]
14
- s.date = Time.now.strftime('%Y-%m-%d')
15
- s.licenses = ['Apache-2.0']
13
+ s.authors = ["Tanna McClure", "Kayla Reopelle"]
14
+ s.licenses = ['Apache-2.0']
16
15
  s.description = <<-EOS
17
16
  New Relic is a performance management system, developed by New Relic,
18
17
  Inc (http://www.newrelic.com). New Relic provides you with deep
@@ -20,9 +19,9 @@ information about the performance of your web application as it runs
20
19
  in production. The New Relic Ruby agent is dual-purposed as a either a
21
20
  Gem or plugin, hosted on
22
21
  https://github.com/newrelic/newrelic-ruby-agent/
23
- EOS
22
+ EOS
24
23
  s.email = "support@newrelic.com"
25
- s.executables = [ "mongrel_rpm", "newrelic_cmd", "newrelic", "nrdebug" ]
24
+ s.executables = ["mongrel_rpm", "newrelic_cmd", "newrelic", "nrdebug"]
26
25
  s.extra_rdoc_files = [
27
26
  "CHANGELOG.md",
28
27
  "LICENSE",
@@ -32,11 +31,11 @@ EOS
32
31
  ]
33
32
 
34
33
  s.metadata = {
35
- 'bug_tracker_uri' => 'https://github.com/newrelic/newrelic-ruby-agent/issues',
36
- 'changelog_uri' => 'https://github.com/newrelic/newrelic-ruby-agent/blob/main/CHANGELOG.md',
34
+ 'bug_tracker_uri' => 'https://github.com/newrelic/newrelic-ruby-agent/issues',
35
+ 'changelog_uri' => 'https://github.com/newrelic/newrelic-ruby-agent/blob/main/CHANGELOG.md',
37
36
  'documentation_uri' => 'https://docs.newrelic.com/docs/agents/ruby-agent',
38
- 'source_code_uri' => 'https://github.com/newrelic/newrelic-ruby-agent',
39
- "homepage_uri" => "https://newrelic.com/ruby",
37
+ 'source_code_uri' => 'https://github.com/newrelic/newrelic-ruby-agent',
38
+ "homepage_uri" => "https://newrelic.com/ruby"
40
39
  }
41
40
 
42
41
  file_list = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|infinite_tracing|\.github)/(?!agent_helper.rb)}) }
@@ -50,8 +49,8 @@ EOS
50
49
  s.summary = "New Relic Ruby Agent"
51
50
 
52
51
  s.add_development_dependency 'rake', '12.3.3'
53
- s.add_development_dependency 'rb-inotify', '0.9.10' # locked to support < Ruby 2.3 (and listen 3.0.8)
54
- s.add_development_dependency 'listen', '3.0.8' # locked to support < Ruby 2.3
52
+ s.add_development_dependency 'rb-inotify', '0.9.10' # locked to support < Ruby 2.3 (and listen 3.0.8)
53
+ s.add_development_dependency 'listen', '3.0.8' # locked to support < Ruby 2.3
55
54
  s.add_development_dependency 'minitest', '4.7.5'
56
55
  s.add_development_dependency 'mocha', '~> 1.9.0'
57
56
  s.add_development_dependency 'yard'
@@ -61,4 +60,6 @@ EOS
61
60
  s.add_development_dependency 'guard-minitest', '~> 2.4.0'
62
61
  s.add_development_dependency 'hometown', '~> 0.2.5'
63
62
  s.add_development_dependency 'bundler'
63
+ s.add_development_dependency 'rubocop'
64
+ s.add_development_dependency 'rubocop-performance'
64
65
  end
data/recipes/newrelic.rb CHANGED
@@ -7,4 +7,4 @@
7
7
  # the lib directory. We have to make them available from
8
8
  # both locations
9
9
 
10
- require File.join(File.dirname(__FILE__),'..','lib','new_relic','recipes')
10
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'new_relic', 'recipes')