newrelic_rpm 6.8.0.360 → 9.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +14 -1
  3. data/.rubocop.yml +1845 -0
  4. data/.rubocop_todo.yml +61 -0
  5. data/.simplecov +16 -0
  6. data/.snyk +11 -0
  7. data/.yardopts +1 -0
  8. data/Brewfile +13 -0
  9. data/CHANGELOG.md +4029 -2514
  10. data/CONTRIBUTING.md +132 -19
  11. data/DOCKER.md +167 -0
  12. data/Dockerfile +10 -0
  13. data/Gemfile +5 -2
  14. data/Guardfile +21 -8
  15. data/LICENSE +202 -38
  16. data/README.md +86 -87
  17. data/Rakefile +32 -32
  18. data/THIRD_PARTY_NOTICES.md +28 -0
  19. data/Thorfile +5 -0
  20. data/bin/newrelic +4 -2
  21. data/bin/newrelic_cmd +2 -0
  22. data/bin/nrdebug +86 -63
  23. data/config.dot +5 -5
  24. data/docker-compose.yml +107 -0
  25. data/init.rb +5 -7
  26. data/install.rb +3 -3
  27. data/lefthook.yml +9 -0
  28. data/lib/new_relic/agent/adaptive_sampler.rb +14 -10
  29. data/lib/new_relic/agent/agent.rb +114 -942
  30. data/lib/new_relic/agent/agent_helpers/connect.rb +222 -0
  31. data/lib/new_relic/agent/agent_helpers/harvest.rb +153 -0
  32. data/lib/new_relic/agent/agent_helpers/shutdown.rb +72 -0
  33. data/lib/new_relic/agent/agent_helpers/special_startup.rb +74 -0
  34. data/lib/new_relic/agent/agent_helpers/start_worker_thread.rb +175 -0
  35. data/lib/new_relic/agent/agent_helpers/startup.rb +202 -0
  36. data/lib/new_relic/agent/agent_helpers/transmit.rb +76 -0
  37. data/lib/new_relic/agent/agent_logger.rb +28 -24
  38. data/lib/new_relic/agent/attribute_filter.rb +66 -49
  39. data/lib/new_relic/agent/attribute_processing.rb +10 -10
  40. data/lib/new_relic/agent/attributes.rb +9 -8
  41. data/lib/new_relic/agent/audit_logger.rb +22 -7
  42. data/lib/new_relic/agent/autostart.rb +22 -21
  43. data/lib/new_relic/agent/chained_call.rb +2 -2
  44. data/lib/new_relic/agent/commands/agent_command.rb +5 -5
  45. data/lib/new_relic/agent/commands/agent_command_router.rb +16 -14
  46. data/lib/new_relic/agent/commands/thread_profiler_session.rb +17 -15
  47. data/lib/new_relic/agent/configuration/default_source.rb +1444 -1167
  48. data/lib/new_relic/agent/configuration/dotted_hash.rb +7 -6
  49. data/lib/new_relic/agent/configuration/environment_source.rb +14 -12
  50. data/lib/new_relic/agent/configuration/event_harvest_config.rb +41 -18
  51. data/lib/new_relic/agent/configuration/high_security_source.rb +12 -13
  52. data/lib/new_relic/agent/configuration/manager.rb +96 -70
  53. data/lib/new_relic/agent/configuration/manual_source.rb +2 -2
  54. data/lib/new_relic/agent/configuration/mask_defaults.rb +4 -4
  55. data/lib/new_relic/agent/configuration/security_policy_source.rb +93 -96
  56. data/lib/new_relic/agent/configuration/server_source.rb +44 -42
  57. data/lib/new_relic/agent/configuration/yaml_source.rb +36 -12
  58. data/lib/new_relic/agent/configuration.rb +2 -2
  59. data/lib/new_relic/agent/connect/request_builder.rb +19 -19
  60. data/lib/new_relic/agent/connect/response_handler.rb +6 -9
  61. data/lib/new_relic/agent/custom_event_aggregator.rb +16 -16
  62. data/lib/new_relic/agent/database/explain_plan_helpers.rb +6 -7
  63. data/lib/new_relic/agent/database/obfuscation_helpers.rb +18 -17
  64. data/lib/new_relic/agent/database/obfuscator.rb +5 -5
  65. data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +4 -4
  66. data/lib/new_relic/agent/database.rb +47 -56
  67. data/lib/new_relic/agent/database_adapter.rb +35 -0
  68. data/lib/new_relic/agent/datastores/metric_helper.rb +22 -23
  69. data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +8 -7
  70. data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +18 -22
  71. data/lib/new_relic/agent/datastores/mongo.rb +7 -12
  72. data/lib/new_relic/agent/datastores/nosql_obfuscator.rb +41 -0
  73. data/lib/new_relic/agent/datastores/redis.rb +10 -16
  74. data/lib/new_relic/agent/datastores.rb +14 -16
  75. data/lib/new_relic/agent/deprecator.rb +2 -2
  76. data/lib/new_relic/agent/{cross_app_payload.rb → distributed_tracing/cross_app_payload.rb} +13 -12
  77. data/lib/new_relic/agent/{cross_app_tracing.rb → distributed_tracing/cross_app_tracing.rb} +90 -70
  78. data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +84 -0
  79. data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +75 -0
  80. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +163 -0
  81. data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +38 -0
  82. data/lib/new_relic/agent/distributed_tracing/trace_context.rb +245 -0
  83. data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +127 -0
  84. data/lib/new_relic/agent/distributed_tracing.rb +113 -32
  85. data/lib/new_relic/agent/encoding_normalizer.rb +5 -3
  86. data/lib/new_relic/agent/error_collector.rb +129 -65
  87. data/lib/new_relic/agent/error_event_aggregator.rb +9 -8
  88. data/lib/new_relic/agent/error_filter.rb +174 -0
  89. data/lib/new_relic/agent/error_trace_aggregator.rb +10 -8
  90. data/lib/new_relic/agent/event_aggregator.rb +23 -22
  91. data/lib/new_relic/agent/event_buffer.rb +8 -9
  92. data/lib/new_relic/agent/event_listener.rb +2 -3
  93. data/lib/new_relic/agent/event_loop.rb +28 -26
  94. data/lib/new_relic/agent/external.rb +19 -52
  95. data/lib/new_relic/agent/guid_generator.rb +14 -12
  96. data/lib/new_relic/agent/harvester.rb +6 -9
  97. data/lib/new_relic/agent/heap.rb +9 -10
  98. data/lib/new_relic/agent/hostname.rb +22 -9
  99. data/lib/new_relic/agent/http_clients/abstract.rb +69 -0
  100. data/lib/new_relic/agent/http_clients/curb_wrappers.rb +30 -26
  101. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +37 -21
  102. data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +22 -23
  103. data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +18 -17
  104. data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +28 -8
  105. data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +17 -17
  106. data/lib/new_relic/agent/http_clients/uri_util.rb +13 -14
  107. data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +10 -25
  108. data/lib/new_relic/agent/instrumentation/action_controller_other_subscriber.rb +42 -0
  109. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +46 -34
  110. data/lib/new_relic/agent/instrumentation/action_dispatch.rb +31 -0
  111. data/lib/new_relic/agent/instrumentation/action_dispatch_subscriber.rb +64 -0
  112. data/lib/new_relic/agent/instrumentation/action_mailbox.rb +30 -0
  113. data/lib/new_relic/agent/instrumentation/action_mailbox_subscriber.rb +33 -0
  114. data/lib/new_relic/agent/instrumentation/action_mailer.rb +30 -0
  115. data/lib/new_relic/agent/instrumentation/action_mailer_subscriber.rb +85 -0
  116. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +28 -21
  117. data/lib/new_relic/agent/instrumentation/active_job.rb +34 -14
  118. data/lib/new_relic/agent/instrumentation/active_job_subscriber.rb +41 -0
  119. data/lib/new_relic/agent/instrumentation/active_merchant.rb +21 -7
  120. data/lib/new_relic/agent/instrumentation/active_record.rb +97 -47
  121. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +97 -73
  122. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +53 -66
  123. data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +36 -12
  124. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +37 -24
  125. data/lib/new_relic/agent/instrumentation/active_storage.rb +8 -4
  126. data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +9 -30
  127. data/lib/new_relic/agent/instrumentation/active_support.rb +27 -0
  128. data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +23 -0
  129. data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +20 -0
  130. data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +12 -0
  131. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +24 -0
  132. data/lib/new_relic/agent/instrumentation/active_support_subscriber.rb +41 -0
  133. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +45 -0
  134. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +150 -0
  135. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +35 -0
  136. data/lib/new_relic/agent/instrumentation/bunny.rb +14 -138
  137. data/lib/new_relic/agent/instrumentation/concurrent_ruby/chain.rb +36 -0
  138. data/lib/new_relic/agent/instrumentation/concurrent_ruby/instrumentation.rb +21 -0
  139. data/lib/new_relic/agent/instrumentation/concurrent_ruby/prepend.rb +27 -0
  140. data/lib/new_relic/agent/instrumentation/concurrent_ruby.rb +31 -0
  141. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +75 -63
  142. data/lib/new_relic/agent/instrumentation/curb/chain.rb +91 -0
  143. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +221 -0
  144. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +61 -0
  145. data/lib/new_relic/agent/instrumentation/curb.rb +16 -201
  146. data/lib/new_relic/agent/instrumentation/custom_events.rb +12 -0
  147. data/lib/new_relic/agent/instrumentation/custom_events_subscriber.rb +38 -0
  148. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +36 -0
  149. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +48 -0
  150. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +33 -0
  151. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +31 -52
  152. data/lib/new_relic/agent/instrumentation/elasticsearch/chain.rb +29 -0
  153. data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +67 -0
  154. data/lib/new_relic/agent/instrumentation/elasticsearch/prepend.rb +13 -0
  155. data/lib/new_relic/agent/instrumentation/elasticsearch.rb +31 -0
  156. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +10 -8
  157. data/lib/new_relic/agent/instrumentation/excon.rb +29 -31
  158. data/lib/new_relic/agent/instrumentation/fiber/chain.rb +20 -0
  159. data/lib/new_relic/agent/instrumentation/fiber/instrumentation.rb +24 -0
  160. data/lib/new_relic/agent/instrumentation/fiber/prepend.rb +18 -0
  161. data/lib/new_relic/agent/instrumentation/fiber.rb +25 -0
  162. data/lib/new_relic/agent/instrumentation/grape/chain.rb +24 -0
  163. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +100 -0
  164. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +17 -0
  165. data/lib/new_relic/agent/instrumentation/grape.rb +17 -123
  166. data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +97 -0
  167. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +90 -0
  168. data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +111 -0
  169. data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +30 -0
  170. data/lib/new_relic/agent/instrumentation/grpc/helper.rb +32 -0
  171. data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +69 -0
  172. data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +134 -0
  173. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +35 -0
  174. data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +26 -0
  175. data/lib/new_relic/agent/instrumentation/grpc_client.rb +23 -0
  176. data/lib/new_relic/agent/instrumentation/grpc_server.rb +25 -0
  177. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +24 -0
  178. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +37 -0
  179. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +15 -0
  180. data/lib/new_relic/agent/instrumentation/httpclient.rb +12 -32
  181. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +22 -0
  182. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +30 -0
  183. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +15 -0
  184. data/lib/new_relic/agent/instrumentation/httprb.rb +29 -0
  185. data/lib/new_relic/agent/instrumentation/ignore_actions.rb +6 -7
  186. data/lib/new_relic/agent/instrumentation/logger/chain.rb +21 -0
  187. data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +66 -0
  188. data/lib/new_relic/agent/instrumentation/logger/prepend.rb +13 -0
  189. data/lib/new_relic/agent/instrumentation/logger.rb +26 -0
  190. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +15 -0
  191. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +60 -125
  192. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +59 -0
  193. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +90 -0
  194. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +103 -0
  195. data/lib/new_relic/agent/instrumentation/memcache.rb +57 -71
  196. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +16 -15
  197. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +11 -11
  198. data/lib/new_relic/agent/instrumentation/mongo.rb +7 -132
  199. data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +53 -17
  200. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +24 -0
  201. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +40 -0
  202. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +21 -0
  203. data/lib/new_relic/agent/instrumentation/net_http.rb +44 -0
  204. data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +75 -9
  205. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +38 -0
  206. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +28 -0
  207. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +20 -0
  208. data/lib/new_relic/agent/instrumentation/padrino.rb +22 -58
  209. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +7 -7
  210. data/lib/new_relic/agent/instrumentation/queue_time.rb +9 -10
  211. data/lib/new_relic/agent/instrumentation/rack/chain.rb +66 -0
  212. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +33 -0
  213. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +75 -0
  214. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +43 -0
  215. data/lib/new_relic/agent/instrumentation/rack.rb +33 -141
  216. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +22 -57
  217. data/lib/new_relic/agent/instrumentation/rails_middleware.rb +5 -5
  218. data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +10 -9
  219. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +18 -6
  220. data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +9 -6
  221. data/lib/new_relic/agent/instrumentation/rails_notifications/custom_events.rb +30 -0
  222. data/lib/new_relic/agent/instrumentation/rake/chain.rb +20 -0
  223. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +142 -0
  224. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +14 -0
  225. data/lib/new_relic/agent/instrumentation/rake.rb +18 -158
  226. data/lib/new_relic/agent/instrumentation/redis/chain.rb +45 -0
  227. data/lib/new_relic/agent/instrumentation/redis/constants.rb +17 -0
  228. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +94 -0
  229. data/lib/new_relic/agent/instrumentation/redis/middleware.rb +16 -0
  230. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +29 -0
  231. data/lib/new_relic/agent/instrumentation/redis.rb +20 -103
  232. data/lib/new_relic/agent/instrumentation/resque/chain.rb +21 -0
  233. data/lib/new_relic/agent/instrumentation/resque/helper.rb +19 -0
  234. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +34 -0
  235. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +15 -0
  236. data/lib/new_relic/agent/instrumentation/resque.rb +33 -41
  237. data/lib/new_relic/agent/instrumentation/sequel.rb +17 -20
  238. data/lib/new_relic/agent/instrumentation/sequel_helper.rb +13 -13
  239. data/lib/new_relic/agent/instrumentation/sidekiq/client.rb +20 -0
  240. data/lib/new_relic/agent/instrumentation/sidekiq/extensions/delayed_class.rb +30 -0
  241. data/lib/new_relic/agent/instrumentation/sidekiq/server.rb +37 -0
  242. data/lib/new_relic/agent/instrumentation/sidekiq.rb +30 -46
  243. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +55 -0
  244. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +31 -37
  245. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +126 -0
  246. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +33 -0
  247. data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +4 -4
  248. data/lib/new_relic/agent/instrumentation/sinatra.rb +35 -165
  249. data/lib/new_relic/agent/instrumentation/thread/chain.rb +24 -0
  250. data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +28 -0
  251. data/lib/new_relic/agent/instrumentation/thread/prepend.rb +22 -0
  252. data/lib/new_relic/agent/instrumentation/thread.rb +20 -0
  253. data/lib/new_relic/agent/instrumentation/tilt/chain.rb +24 -0
  254. data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +42 -0
  255. data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +13 -0
  256. data/lib/new_relic/agent/instrumentation/tilt.rb +25 -0
  257. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +22 -0
  258. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +80 -0
  259. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +14 -0
  260. data/lib/new_relic/agent/instrumentation/typhoeus.rb +14 -76
  261. data/lib/new_relic/agent/instrumentation.rb +2 -2
  262. data/lib/new_relic/agent/internal_agent_error.rb +3 -3
  263. data/lib/new_relic/agent/javascript_instrumentor.rb +59 -48
  264. data/lib/new_relic/agent/linking_metadata.rb +44 -0
  265. data/lib/new_relic/agent/local_log_decorator.rb +37 -0
  266. data/lib/new_relic/agent/log_event_aggregator.rb +235 -0
  267. data/lib/new_relic/agent/log_once.rb +2 -2
  268. data/lib/new_relic/agent/log_priority.rb +20 -0
  269. data/lib/new_relic/agent/logging.rb +104 -51
  270. data/lib/new_relic/agent/memory_logger.rb +3 -3
  271. data/lib/new_relic/agent/messaging.rb +74 -156
  272. data/lib/new_relic/agent/method_tracer.rb +157 -150
  273. data/lib/new_relic/agent/method_tracer_helpers.rb +89 -12
  274. data/lib/new_relic/agent/monitors/cross_app_monitor.rb +117 -0
  275. data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +28 -0
  276. data/lib/new_relic/agent/{inbound_request_monitor.rb → monitors/inbound_request_monitor.rb} +3 -4
  277. data/lib/new_relic/agent/{synthetics_monitor.rb → monitors/synthetics_monitor.rb} +8 -13
  278. data/lib/new_relic/agent/monitors.rb +26 -0
  279. data/lib/new_relic/agent/new_relic_service/encoders.rb +8 -8
  280. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +7 -7
  281. data/lib/new_relic/agent/new_relic_service/marshaller.rb +3 -3
  282. data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +5 -5
  283. data/lib/new_relic/agent/new_relic_service.rb +266 -193
  284. data/lib/new_relic/agent/noticeable_error.rb +19 -0
  285. data/lib/new_relic/agent/null_logger.rb +8 -4
  286. data/lib/new_relic/agent/obfuscator.rb +9 -11
  287. data/lib/new_relic/agent/parameter_filtering.rb +30 -16
  288. data/lib/new_relic/agent/payload_metric_mapping.rb +10 -11
  289. data/lib/new_relic/agent/pipe_channel_manager.rb +34 -23
  290. data/lib/new_relic/agent/pipe_service.rb +14 -9
  291. data/lib/new_relic/agent/prepend_supportability.rb +3 -3
  292. data/lib/new_relic/agent/priority_sampled_buffer.rb +16 -16
  293. data/lib/new_relic/agent/rules_engine/replacement_rule.rb +12 -12
  294. data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +13 -14
  295. data/lib/new_relic/agent/rules_engine.rb +6 -5
  296. data/lib/new_relic/agent/sampler.rb +6 -6
  297. data/lib/new_relic/agent/sampler_collection.rb +5 -6
  298. data/lib/new_relic/agent/samplers/cpu_sampler.rb +9 -8
  299. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +21 -18
  300. data/lib/new_relic/agent/samplers/memory_sampler.rb +33 -22
  301. data/lib/new_relic/agent/samplers/object_sampler.rb +3 -3
  302. data/lib/new_relic/agent/samplers/vm_sampler.rb +22 -20
  303. data/lib/new_relic/agent/span_event_aggregator.rb +16 -16
  304. data/lib/new_relic/agent/span_event_primitive.rb +106 -68
  305. data/lib/new_relic/agent/sql_sampler.rb +23 -23
  306. data/lib/new_relic/agent/stats.rb +80 -43
  307. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +11 -13
  308. data/lib/new_relic/agent/stats_engine/stats_hash.rb +13 -14
  309. data/lib/new_relic/agent/stats_engine.rb +9 -9
  310. data/lib/new_relic/agent/synthetics_event_aggregator.rb +9 -10
  311. data/lib/new_relic/agent/system_info.rb +97 -68
  312. data/lib/new_relic/agent/threading/agent_thread.rb +19 -15
  313. data/lib/new_relic/agent/threading/backtrace_node.rb +13 -14
  314. data/lib/new_relic/agent/threading/backtrace_service.rb +18 -22
  315. data/lib/new_relic/agent/threading/thread_profile.rb +25 -25
  316. data/lib/new_relic/agent/timestamp_sampled_buffer.rb +3 -3
  317. data/lib/new_relic/agent/tracer.rb +127 -107
  318. data/lib/new_relic/agent/transaction/abstract_segment.rb +145 -49
  319. data/lib/new_relic/agent/transaction/datastore_segment.rb +23 -19
  320. data/lib/new_relic/agent/transaction/distributed_tracer.rb +185 -0
  321. data/lib/new_relic/agent/transaction/distributed_tracing.rb +76 -86
  322. data/lib/new_relic/agent/transaction/external_request_segment.rb +67 -77
  323. data/lib/new_relic/agent/transaction/message_broker_segment.rb +34 -46
  324. data/lib/new_relic/agent/transaction/request_attributes.rb +40 -40
  325. data/lib/new_relic/agent/transaction/segment.rb +41 -11
  326. data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +2 -4
  327. data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +3 -3
  328. data/lib/new_relic/agent/transaction/trace.rb +19 -17
  329. data/lib/new_relic/agent/transaction/trace_builder.rb +11 -11
  330. data/lib/new_relic/agent/transaction/trace_context.rb +102 -93
  331. data/lib/new_relic/agent/transaction/trace_node.rb +31 -32
  332. data/lib/new_relic/agent/transaction/tracing.rb +22 -13
  333. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +7 -7
  334. data/lib/new_relic/agent/transaction.rb +239 -198
  335. data/lib/new_relic/agent/transaction_error_primitive.rb +32 -28
  336. data/lib/new_relic/agent/transaction_event_aggregator.rb +17 -17
  337. data/lib/new_relic/agent/transaction_event_primitive.rb +43 -47
  338. data/lib/new_relic/agent/transaction_event_recorder.rb +17 -16
  339. data/lib/new_relic/agent/transaction_metrics.rb +11 -10
  340. data/lib/new_relic/agent/transaction_sampler.rb +8 -9
  341. data/lib/new_relic/agent/transaction_time_aggregator.rb +33 -28
  342. data/lib/new_relic/agent/utilization/aws.rb +35 -5
  343. data/lib/new_relic/agent/utilization/azure.rb +7 -7
  344. data/lib/new_relic/agent/utilization/gcp.rb +11 -11
  345. data/lib/new_relic/agent/utilization/pcf.rb +7 -6
  346. data/lib/new_relic/agent/utilization/vendor.rb +45 -30
  347. data/lib/new_relic/agent/utilization_data.rb +8 -6
  348. data/lib/new_relic/agent/vm/jruby_vm.rb +2 -2
  349. data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +4 -4
  350. data/lib/new_relic/agent/vm/mri_vm.rb +54 -26
  351. data/lib/new_relic/agent/vm/snapshot.rb +6 -6
  352. data/lib/new_relic/agent/vm.rb +2 -2
  353. data/lib/new_relic/agent/worker_loop.rb +11 -13
  354. data/lib/new_relic/agent.rb +159 -109
  355. data/lib/new_relic/cli/command.rb +22 -24
  356. data/lib/new_relic/cli/commands/deployments.rb +101 -51
  357. data/lib/new_relic/cli/commands/install.rb +33 -35
  358. data/lib/new_relic/coerce.rb +19 -15
  359. data/lib/new_relic/collection_helper.rb +51 -49
  360. data/lib/new_relic/constants.rb +38 -0
  361. data/lib/new_relic/control/class_methods.rb +6 -6
  362. data/lib/new_relic/control/frameworks/external.rb +3 -3
  363. data/lib/new_relic/control/frameworks/rails.rb +50 -32
  364. data/lib/new_relic/control/frameworks/rails3.rb +4 -5
  365. data/lib/new_relic/control/frameworks/rails4.rb +2 -2
  366. data/lib/new_relic/control/frameworks/rails_notifications.rb +2 -2
  367. data/lib/new_relic/control/frameworks/ruby.rb +4 -4
  368. data/lib/new_relic/control/frameworks/sinatra.rb +8 -2
  369. data/lib/new_relic/control/frameworks.rb +2 -2
  370. data/lib/new_relic/control/instance_methods.rb +28 -46
  371. data/lib/new_relic/control/instrumentation.rb +26 -12
  372. data/lib/new_relic/control/private_instance_methods.rb +48 -0
  373. data/lib/new_relic/control/server_methods.rb +4 -5
  374. data/lib/new_relic/control.rb +2 -3
  375. data/lib/new_relic/delayed_job_injection.rb +2 -2
  376. data/lib/new_relic/dependency_detection.rb +138 -31
  377. data/lib/new_relic/environment_report.rb +42 -36
  378. data/lib/new_relic/helper.rb +50 -8
  379. data/lib/new_relic/language_support.rb +31 -7
  380. data/lib/new_relic/latest_changes.rb +11 -10
  381. data/lib/new_relic/local_environment.rb +23 -27
  382. data/lib/new_relic/metric_data.rb +32 -27
  383. data/lib/new_relic/metric_spec.rb +9 -7
  384. data/lib/new_relic/noticed_error.rb +58 -47
  385. data/lib/new_relic/rack/agent_hooks.rb +2 -2
  386. data/lib/new_relic/rack/agent_middleware.rb +6 -4
  387. data/lib/new_relic/rack/browser_monitoring.rb +136 -117
  388. data/lib/new_relic/rack.rb +2 -2
  389. data/lib/new_relic/recipes/capistrano3.rb +5 -63
  390. data/lib/new_relic/recipes/capistrano_legacy.rb +25 -28
  391. data/lib/new_relic/recipes/helpers/send_deployment.rb +70 -0
  392. data/lib/new_relic/recipes.rb +2 -2
  393. data/lib/new_relic/supportability_helper.rb +23 -7
  394. data/lib/new_relic/traced_thread.rb +39 -0
  395. data/lib/new_relic/version.rb +7 -18
  396. data/lib/newrelic_rpm.rb +21 -34
  397. data/lib/sequel/extensions/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +18 -21
  398. data/lib/sequel/plugins/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +10 -16
  399. data/lib/tasks/all.rb +4 -4
  400. data/lib/tasks/config.rake +24 -119
  401. data/lib/tasks/coverage_report.rake +28 -0
  402. data/lib/tasks/helpers/config.html.erb +21 -0
  403. data/lib/tasks/helpers/format.rb +123 -0
  404. data/lib/tasks/helpers/matches.rb +12 -0
  405. data/lib/tasks/helpers/prompt.rb +24 -0
  406. data/lib/tasks/helpers/removers.rb +33 -0
  407. data/lib/tasks/install.rake +8 -4
  408. data/lib/tasks/instrumentation_generator/README.md +63 -0
  409. data/lib/tasks/instrumentation_generator/TODO.md +33 -0
  410. data/lib/tasks/instrumentation_generator/instrumentation.thor +121 -0
  411. data/lib/tasks/instrumentation_generator/templates/Envfile.tt +9 -0
  412. data/lib/tasks/instrumentation_generator/templates/chain.tt +22 -0
  413. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +8 -0
  414. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +29 -0
  415. data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +13 -0
  416. data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +3 -0
  417. data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +19 -0
  418. data/lib/tasks/instrumentation_generator/templates/prepend.tt +13 -0
  419. data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +3 -0
  420. data/lib/tasks/instrumentation_generator/templates/test.tt +15 -0
  421. data/lib/tasks/multiverse.rake +4 -0
  422. data/lib/tasks/multiverse.rb +23 -9
  423. data/lib/tasks/newrelic.rb +3 -2
  424. data/lib/tasks/tests.rake +17 -17
  425. data/newrelic.yml +672 -3
  426. data/newrelic_rpm.gemspec +46 -39
  427. data/recipes/newrelic.rb +3 -3
  428. data/test/agent_helper.rb +340 -110
  429. metadata +272 -97
  430. data/.travis.yml +0 -210
  431. data/bin/mongrel_rpm +0 -33
  432. data/cert/cacert.pem +0 -1177
  433. data/lib/new_relic/agent/cross_app_monitor.rb +0 -110
  434. data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +0 -44
  435. data/lib/new_relic/agent/datastores/mongo/statement_formatter.rb +0 -53
  436. data/lib/new_relic/agent/distributed_trace_intrinsics.rb +0 -90
  437. data/lib/new_relic/agent/distributed_trace_metrics.rb +0 -74
  438. data/lib/new_relic/agent/distributed_trace_monitor.rb +0 -30
  439. data/lib/new_relic/agent/distributed_trace_payload.rb +0 -175
  440. data/lib/new_relic/agent/distributed_trace_transport_type.rb +0 -43
  441. data/lib/new_relic/agent/http_clients/abstract_request.rb +0 -31
  442. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +0 -74
  443. data/lib/new_relic/agent/instrumentation/authlogic.rb +0 -25
  444. data/lib/new_relic/agent/instrumentation/data_mapper.rb +0 -202
  445. data/lib/new_relic/agent/instrumentation/excon/connection.rb +0 -46
  446. data/lib/new_relic/agent/instrumentation/http.rb +0 -46
  447. data/lib/new_relic/agent/instrumentation/merb/controller.rb +0 -44
  448. data/lib/new_relic/agent/instrumentation/merb/errors.rb +0 -33
  449. data/lib/new_relic/agent/instrumentation/net.rb +0 -50
  450. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +0 -125
  451. data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +0 -46
  452. data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +0 -26
  453. data/lib/new_relic/agent/instrumentation/sunspot.rb +0 -33
  454. data/lib/new_relic/agent/range_extensions.rb +0 -47
  455. data/lib/new_relic/agent/supported_versions.rb +0 -275
  456. data/lib/new_relic/agent/trace_context.rb +0 -244
  457. data/lib/new_relic/agent/trace_context_payload.rb +0 -134
  458. data/lib/new_relic/agent/trace_context_request_monitor.rb +0 -42
  459. data/lib/new_relic/build.rb +0 -2
  460. data/lib/new_relic/control/frameworks/merb.rb +0 -29
  461. data/lib/new_relic/metrics.rb +0 -13
  462. data/lib/tasks/config.html.erb +0 -32
  463. data/true +0 -0
  464. /data/lib/tasks/{config.text.erb → helpers/config.text.erb} +0 -0
@@ -1,46 +0,0 @@
1
- # encoding: utf-8
2
- # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
-
5
- DependencyDetection.defer do
6
- @name = :rails_action_web_service
7
-
8
- depends_on do
9
- defined?(ActionWebService)
10
- end
11
-
12
- executes do
13
- ::NewRelic::Agent.logger.info 'Installing Rails ActionWebService instrumentation'
14
- end
15
-
16
- executes do
17
- # NewRelic Agent instrumentation for WebServices
18
-
19
- # Note Action Web Service is removed from default package in rails
20
- # 2.0, this is purely here as a service to our legacy customers.
21
-
22
- # instrumentation for Web Service martialing - XML RPC
23
- ActionWebService::Protocol::XmlRpc::XmlRpcProtocol.class_eval do
24
- add_method_tracer :decode_request, "WebService/Xml Rpc/XML Decode"
25
- add_method_tracer :encode_request, "WebService/Xml Rpc/XML Encode"
26
- add_method_tracer :decode_response, "WebService/Xml Rpc/XML Decode"
27
- add_method_tracer :encode_response, "WebService/Xml Rpc/XML Encode"
28
- end
29
-
30
- # instrumentation for Web Service martialing - Soap
31
- ActionWebService::Protocol::Soap::SoapProtocol.class_eval do
32
- add_method_tracer :decode_request, "WebService/Soap/XML Decode"
33
- add_method_tracer :encode_request, "WebService/Soap/XML Encode"
34
- add_method_tracer :decode_response, "WebService/Soap/XML Decode"
35
- add_method_tracer :encode_response, "WebService/Soap/XML Encode"
36
- end
37
-
38
- if defined?(ActionController) && defined?(ActionController::Base)
39
- ActionController::Base.class_eval do
40
- if method_defined? :perform_invocation
41
- add_method_tracer :perform_invocation, 'WebService/#{controller_name}/#{args.first}'
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
-
5
- DependencyDetection.defer do
6
- @name = :rainbows
7
-
8
- depends_on do
9
- defined?(::Rainbows) && defined?(::Rainbows::HttpServer)
10
- end
11
-
12
- executes do
13
- ::NewRelic::Agent.logger.info 'Installing Rainbows instrumentation'
14
- ::NewRelic::Agent.logger.info 'Detected Rainbows, please see additional documentation: https://newrelic.com/docs/troubleshooting/im-using-unicorn-and-i-dont-see-any-data'
15
- end
16
-
17
- executes do
18
- Rainbows::HttpServer.class_eval do
19
- old_worker_loop = instance_method(:worker_loop)
20
- define_method(:worker_loop) do |worker|
21
- NewRelic::Agent.after_fork(:force_reconnect => true)
22
- old_worker_loop.bind(self).call(worker)
23
- end
24
- end
25
- end
26
- end
@@ -1,33 +0,0 @@
1
- # encoding: utf-8
2
- # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
-
5
- DependencyDetection.defer do
6
- @name = :sunspot
7
-
8
- depends_on do
9
- defined?(::Sunspot)
10
- end
11
-
12
- executes do
13
- ::NewRelic::Agent.logger.info 'Installing Rails Sunspot instrumentation'
14
- end
15
-
16
- executes do
17
- ::Sunspot.module_eval do
18
- class << self
19
- %w(index index!).each do |method|
20
- add_method_tracer method, 'SolrClient/Sunspot/index'
21
- end
22
- add_method_tracer :commit, 'SolrClient/Sunspot/commit'
23
-
24
- %w[search more_like_this].each do |method|
25
- add_method_tracer method, 'SolrClient/Sunspot/query'
26
- end
27
- %w[remove remove! remove_by_id remove_by_id! remove_all remove_all!].each do |method|
28
- add_method_tracer method, 'SolrClient/Sunspot/delete'
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,47 +0,0 @@
1
- # encoding: utf-8
2
- # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
-
5
- module NewRelic
6
- module Agent
7
- module RangeExtensions
8
- module_function
9
-
10
- def intersects? r1, r2
11
- r1.include?(r2.begin) || r2.include?(r1.begin)
12
- end
13
-
14
- def merge r1, r2
15
- return unless intersects? r1, r2
16
- range_min = r1.begin < r2.begin ? r1.begin : r2.begin
17
- range_max = r1.end > r2.end ? r1.end : r2.end
18
- range_min..range_max
19
- end
20
-
21
- # Takes an array of ranges and a range which it will
22
- # merge into an existing range if they intersect, otherwise
23
- # it will append this range to the end the array.
24
- def merge_or_append range, ranges
25
- ranges.each_with_index do |r, i|
26
- if merged = merge(r, range)
27
- ranges[i] = merged
28
- return ranges
29
- end
30
- end
31
- ranges.push range
32
- end
33
-
34
- # Computes the amount of overlap between range and an array of ranges.
35
- # For efficiency, it assumes that range intersects with each of the
36
- # ranges in the ranges array.
37
- def compute_overlap range, ranges
38
- ranges.inject(0) do |memo, other|
39
- next memo unless intersects? range, other
40
- lower_bound = range.begin > other.begin ? range.begin : other.begin
41
- upper_bound = range.end < other.end ? range.end : other.end
42
- memo += upper_bound - lower_bound
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,275 +0,0 @@
1
- # encoding: utf-8
2
- # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
-
5
- module NewRelic
6
- module Agent
7
- SUPPORTED_VERSIONS =
8
- {
9
- # Rubies
10
- :mri =>
11
- {
12
- :type => :ruby,
13
- :name => "MRI",
14
- :supported => ["2.0.0", "~>2.1.0", "~>2.2.0", "~>2.3.0", "~>2.4.0", "~>2.5.0"],
15
- :deprecated => ["1.8.6", "1.8.7", "1.9.2", "1.9.3"],
16
- :url => "https://www.ruby-lang.org",
17
- :feed => "https://www.ruby-lang.org/en/feeds/news.rss",
18
- :notes => ["Last supported agent for 1.8.7, 1.9.2, and 1.9.3 was 3.18.1.330.",
19
- "Last supported agent on 1.8.6 was 3.6.8.168."]
20
- },
21
- :jruby =>
22
- {
23
- :type => :ruby,
24
- :name => "JRuby",
25
- :supported => ["~>9.0", "~>9.1"],
26
- :deprecated => ["~>1.7.0"],
27
- :url => "http://jruby.org",
28
- :feed => "http://jruby.org/atom.xml",
29
- :notes => ["Last supported agent for ~>1.7.0 was 3.18.1.330."]
30
- },
31
-
32
- # App servers
33
- :passenger =>
34
- {
35
- :type => :app_server,
36
- :supported => ["~>2.2", "~>3.0", "~>4.0"],
37
- :url => "http://www.phusionpassenger.com/",
38
- :feed => "http://rubygems.org/gems/passenger/versions.atom"
39
- },
40
- :thin =>
41
- {
42
- :type => :app_server,
43
- :supported => ["~>1.0"],
44
- :url => "http://code.macournoyer.com/thin/",
45
- :feed => "http://rubygems.org/gems/thin/versions.atom"
46
- },
47
- :unicorn =>
48
- {
49
- :type => :app_server,
50
- :supported => ["~>4.0"],
51
- :deprecated => ["~>1.0", "~>2.0", "~>3.0"],
52
- :url => "http://unicorn.bogomips.org/",
53
- :feed => "http://rubygems.org/gems/unicorn/versions.atom"
54
- },
55
- :puma =>
56
- {
57
- :type => :app_server,
58
- :supported => ["~>2.0"],
59
- :deprecated => ["~>1.0"],
60
- :url => "http://puma.io/",
61
- :feed => "http://rubygems.org/gems/puma/versions.atom"
62
- },
63
- :rainbows =>
64
- {
65
- :type => :app_server,
66
- :name => "rainbows!",
67
- :experimental=> ["4.5.0"],
68
- :url => "http://rainbows.rubyforge.org/",
69
- :feed => "http://rubygems.org/gems/rainbows/versions.atom"
70
- },
71
- :webrick =>
72
- {
73
- :type => :app_server,
74
- :notes => [ "Supported for all agent-supported versions of Ruby" ]
75
- },
76
-
77
- # Web frameworks
78
- :rails =>
79
- {
80
- :type => :web,
81
- :supported => ["~3.0.0", "~>3.1.0", "~>3.2.0", "~>4.0.0", "~>4.1.0", "~>4.2.0", "~>5.0.0", "~>5.1.0"],
82
- :deprecated => ["~>2.0.0", "~>2.1.0", "~>2.2.0", "~>2.3.0"],
83
- :url => "https://rubygems.org/gems/rails",
84
- :feed => "https://rubygems.org/gems/rails/versions.atom",
85
- :notes => ["Last supported agent for ~>2.1.0, ~>2.2.0, and ~>2.3.0 was 3.18.1.330.",
86
- "Last supported agent for 2.0.x was 3.6.8.168."]
87
- },
88
- :sinatra =>
89
- {
90
- :type => :web,
91
- :supported => ["~>1.2.0", "~>1.3.0", "~>1.4.0", "~>2.0.0"],
92
- :url => "https://rubygems.org/gems/sinatra",
93
- :feed => "https://rubygems.org/gems/sinatra/versions.atom"
94
- },
95
- :padrino =>
96
- {
97
- :type => :web,
98
- :supported => ["~>0.10"],
99
- :url => "https://rubygems.org/gems/padrino",
100
- :feed => "https://rubygems.org/gems/padrino/versions.atom"
101
- },
102
- :rack =>
103
- {
104
- :type => :web,
105
- :supported => [">= 1.1.0"],
106
- :deprecated => ["~>1.0.0"],
107
- :url => "https://rubygems.org/gems/rack",
108
- :feed => "https://rubygems.org/gems/rack/versions.atom"
109
- },
110
- :grape =>
111
- {
112
- :type => :web,
113
- :supported => [">= 0.2.0"],
114
- :url => "https://rubygems.org/gems/grape",
115
- :feed => "https://rubygems.org/gems/grape/versions.atom"
116
- },
117
-
118
- # Database
119
- :activerecord =>
120
- {
121
- :type => :database,
122
- :supported => ["~>3.0.0", "~>3.1.0", "~>3.2.0", "~>4.0.0", "~>4.1.0", "~>4.2.0", "~>5.0.0", "~>5.1.0"],
123
- :deprecated => ["~>2.0.0", "~>2.1.0", "~>2.2.0", "~>2.3.0",],
124
- :url => "https://rubygems.org/gems/activerecord",
125
- :feed => "https://rubygems.org/gems/activerecord/versions.atom",
126
- :notes => ["Last supported agent for ~>2.1.0, ~>2.2.0, and ~>2.3.0 was 3.18.1.330.",
127
- "Last supported agent for 2.0.x was 3.6.8.168."]
128
- },
129
- :datamapper =>
130
- {
131
- :type => :database,
132
- :supported => ["~>1.0"],
133
- :url => "https://rubygems.org/gems/datamapper",
134
- :feed => "https://rubygems.org/gems/datamapper/versions.atom"
135
- },
136
- :sequel =>
137
- {
138
- :type => :database,
139
- :supported => ["~>3.37", "~>4.0"],
140
- :url => "https://rubygems.org/gems/sequel",
141
- :feed => "https://rubygems.org/gems/sequel/versions.atom"
142
- },
143
- :mongo =>
144
- {
145
- :type => :database,
146
- :supported => ["~>1.8", "~>2.1"],
147
- :url => "https://rubygems.org/gems/mongo",
148
- :feed => "https://rubygems.org/gems/mongo/versions.atom"
149
- },
150
- :redis =>
151
- {
152
- :type => :database,
153
- :supported => ["~>3.0"],
154
- :url => "https://rubygems.org/gems/redis",
155
- :feed => "https://rubygems.org/gems/redis/versions.atom"
156
- },
157
-
158
- # Background Jobs
159
- :rake =>
160
- {
161
- :type => :background,
162
- :supported => ["~>10.0"],
163
- :url => "https://rubygems.org/gems/rake",
164
- :feed => "https://rubygems.org/gems/rake/versions.atom"
165
- },
166
- :resque =>
167
- {
168
- :type => :background,
169
- :supported => ["~>1.23.0"],
170
- :deprecated => ["~>1.22.0"],
171
- :experimental=> [">= 2.0"],
172
- :url => "https://rubygems.org/gems/resque",
173
- :feed => "https://rubygems.org/gems/resque/versions.atom"
174
- },
175
- :sidekiq =>
176
- {
177
- :type => :background,
178
- :supported => ["~>2.8", "~>3.4.2", "~>4.0"],
179
- :url => "https://rubygems.org/gems/sidekiq",
180
- :feed => "https://rubygems.org/gems/sidekiq/versions.atom"
181
- },
182
- :delayed_job =>
183
- {
184
- :type => :background,
185
- :supported => ["~>2.0", "~>3.0", "~>4.0"],
186
- :url => "https://rubygems.org/gems/delayed_job",
187
- :feed => "https://rubygems.org/gems/delayed_job/versions.atom"
188
- },
189
-
190
- # HTTP Clients
191
- :curb =>
192
- {
193
- :type => :http,
194
- :supported => [ ">= 0.8.1" ],
195
- :url => "https://rubygems.org/gems/curb",
196
- :feed => "https://rubygems.org/gems/curb/versions.atom"
197
- },
198
- :excon =>
199
- {
200
- :type => :http,
201
- :supported => [ ">= 0.10.1" ],
202
- :url => "https://rubygems.org/gems/excon",
203
- :feed => "https://rubygems.org/gems/excon/versions.atom"
204
- },
205
- :httpclient =>
206
- {
207
- :type => :http,
208
- :supported => [ ">= 2.2.0"],
209
- :url => "https://rubygems.org/gems/httpclient",
210
- :feed => "https://rubygems.org/gems/httpclient/versions.atom"
211
- },
212
- :typhoeus =>
213
- {
214
- :type => :http,
215
- :supported => [ ">= 0.5.3"],
216
- :url => "https://rubygems.org/gems/typhoeus",
217
- :feed => "https://rubygems.org/gems/typhoeus/versions.atom"
218
- },
219
- :net_http =>
220
- {
221
- :type => :http,
222
- :name => "Net::HTTP",
223
- :notes => [
224
- "Supported for all agent-supported versions of Ruby.",
225
- "For more information on supported HTTP clients see http://docs.newrelic.com/docs/ruby/ruby-http-clients."]
226
- },
227
- :httprb =>
228
- {
229
- :type => :http,
230
- :supported => [ ">= 0.9.9"],
231
- :url => "https://rubygems.org/gems/http",
232
- :feed => "https://rubygems.org/gems/http/versions.atom"
233
- },
234
-
235
- # Other
236
- :sunspot =>
237
- {
238
- :type => :other,
239
- :url => "https://rubygems.org/gems/sunspot",
240
- :feed => "https://rubygems.org/gems/sunspot/versions.atom"
241
- },
242
- :acts_as_solr =>
243
- {
244
- :type => :other,
245
- :url => "https://rubygems.org/gems/acts_as_solr",
246
- :feed => "https://rubygems.org/gems/acts_as_solr/versions.atom"
247
- },
248
- :dalli =>
249
- {
250
- :type => :other,
251
- :url => "https://rubygems.org/gems/dalli",
252
- :feed => "https://rubygems.org/gems/dalli/versions.atom"
253
- },
254
- :'memcache-client' =>
255
- {
256
- :type => :other,
257
- :url => "https://rubygems.org/gems/memcache-client",
258
- :feed => "https://rubygems.org/gems/memcache-client/versions.atom"
259
- },
260
- :authlogic =>
261
- {
262
- :type => :other,
263
- :url => "https://rubygems.org/gems/authlogic",
264
- :feed => "https://rubygems.org/gems/authlogic/versions.atom"
265
- },
266
- :activemerchant =>
267
- {
268
- :type => :other,
269
- :supported => [ ">= 1.25.0"],
270
- :url => "https://rubygems.org/gems/activemerchant",
271
- :feed => "https://rubygems.org/gems/activemerchant/versions.atom"
272
- },
273
- }
274
- end
275
- end
@@ -1,244 +0,0 @@
1
- # encoding: utf-8
2
- # This file is distributed under New Relic's license terms.
3
- # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
-
5
- require 'new_relic/agent/trace_context_payload'
6
-
7
- module NewRelic
8
- module Agent
9
- class TraceContext
10
- VERSION = 0x0
11
- TRACE_PARENT = 'traceparent'.freeze
12
- TRACE_STATE = 'tracestate'.freeze
13
-
14
- TRACE_PARENT_RACK = 'HTTP_TRACEPARENT'.freeze
15
- TRACE_STATE_RACK = 'HTTP_TRACESTATE'.freeze
16
-
17
- FORMAT_HTTP = 0
18
- FORMAT_RACK = 1
19
-
20
- TRACE_PARENT_REGEX = /\A(?<version>[a-f\d]{2})-(?<trace_id>[a-f\d]{32})-(?<parent_id>[a-f\d]{16})-(?<trace_flags>\d{2})(?<undefined_fields>-[a-zA-Z\d-]*)?\z/.freeze
21
-
22
- COMMA = ','.freeze
23
- EMPTY_STRING = ''.freeze
24
- EQUALS = '='.freeze
25
- TRACE_ID_KEY = 'trace_id'.freeze
26
- PARENT_ID_KEY = 'parent_id'.freeze
27
- VERSION_KEY = 'version'.freeze
28
- UNDEFINED_FIELDS_KEY = 'undefined_fields'.freeze
29
- INVALID_TRACE_ID = ('0' * 32).freeze
30
- INVALID_PARENT_ID = ('0' * 16).freeze
31
- INVALID_VERSION = 'ff'.freeze
32
-
33
- MAX_TRACE_STATE_SIZE = 512 # bytes
34
- MAX_TRACE_STATE_ENTRY_SIZE = 128 # bytes
35
-
36
- SUPPORTABILITY_TRACE_PARENT_PARSE_EXCEPTION = "Supportability/TraceContext/TraceParent/Parse/Exception".freeze
37
- SUPPORTABILITY_TRACE_STATE_PARSE_EXCEPTION = "Supportability/TraceContext/TraceState/Parse/Exception".freeze
38
-
39
- class << self
40
- def insert format: FORMAT_HTTP,
41
- carrier: nil,
42
- parent_id: nil,
43
- trace_id: nil,
44
- trace_flags: nil,
45
- trace_state: nil
46
-
47
- trace_parent_header = trace_parent_header_for_format format
48
- carrier[trace_parent_header] = format_trace_parent \
49
- trace_id: trace_id,
50
- parent_id: parent_id,
51
- trace_flags: trace_flags
52
-
53
- trace_state_header = trace_state_header_for_format format
54
- carrier[trace_state_header] = trace_state if trace_state && !trace_state.empty?
55
- end
56
-
57
- def parse format: FORMAT_HTTP,
58
- carrier: nil,
59
- trace_state_entry_key: nil
60
- trace_parent = extract_traceparent(format, carrier)
61
- unless trace_parent_valid? trace_parent
62
- NewRelic::Agent.increment_metric SUPPORTABILITY_TRACE_PARENT_PARSE_EXCEPTION
63
- return
64
- end
65
-
66
- begin
67
- if header_data = extract_tracestate(format, carrier, trace_state_entry_key)
68
- header_data.trace_parent = trace_parent
69
- header_data
70
- end
71
- rescue Exception
72
- NewRelic::Agent.increment_metric SUPPORTABILITY_TRACE_STATE_PARSE_EXCEPTION
73
- end
74
- end
75
-
76
- def create_trace_state_entry entry_key, payload
77
- "#{entry_key}=#{payload}"
78
- end
79
-
80
- private
81
-
82
- TRACE_PARENT_FORMAT_STRING = "%02x-%s-%s-%02x".freeze
83
-
84
- def format_trace_parent trace_id: nil,
85
- parent_id: nil,
86
- trace_flags: nil
87
- sprintf TRACE_PARENT_FORMAT_STRING,
88
- VERSION,
89
- trace_id,
90
- parent_id,
91
- trace_flags
92
- end
93
-
94
- def extract_traceparent format, carrier
95
- header_name = trace_parent_header_for_format format
96
- return unless header = carrier[header_name]
97
- if matchdata = header.match(TRACE_PARENT_REGEX)
98
- TRACE_PARENT_REGEX.named_captures.inject({}) do |hash, (name, (index))|
99
- hash[name] = matchdata[index]
100
- hash
101
- end
102
- end
103
- end
104
-
105
- def trace_parent_valid? trace_parent
106
- return false if trace_parent.nil?
107
- return false if trace_parent[TRACE_ID_KEY] == INVALID_TRACE_ID
108
- return false if trace_parent[PARENT_ID_KEY] == INVALID_PARENT_ID
109
- return false if trace_parent[VERSION_KEY] == INVALID_VERSION
110
- return false if trace_parent[VERSION_KEY].to_i(16) == VERSION && !trace_parent[UNDEFINED_FIELDS_KEY].nil?
111
-
112
- true
113
- end
114
-
115
- def trace_parent_header_for_format format
116
- if format == FORMAT_RACK
117
- TRACE_PARENT_RACK
118
- else
119
- TRACE_PARENT
120
- end
121
- end
122
-
123
- def trace_state_header_for_format format
124
- if format == FORMAT_RACK
125
- TRACE_STATE_RACK
126
- else
127
- TRACE_STATE
128
- end
129
- end
130
-
131
- def extract_tracestate format, carrier, trace_state_entry_key
132
- header_name = trace_state_header_for_format format
133
- header = carrier[header_name]
134
- return HeaderData.create if header.nil? || header.empty?
135
-
136
- payload = nil
137
- trace_state_size = 0
138
- trace_state_vendors = ''
139
- trace_state = header.split(COMMA).map(&:strip)
140
- trace_state.reject! do |entry|
141
- vendor_id = entry.slice 0, entry.index(EQUALS)
142
- if vendor_id == trace_state_entry_key
143
- payload = entry.slice! trace_state_entry_key.size + 1, entry.size
144
- true
145
- else
146
- trace_state_size += entry.size
147
- trace_state_vendors << vendor_id << COMMA
148
- false
149
- end
150
- end
151
-
152
- trace_state_vendors.chomp! COMMA unless trace_state_vendors.empty?
153
-
154
- HeaderData.create trace_state_payload: payload ? decode_payload(payload) : nil,
155
- trace_state_entries: trace_state,
156
- trace_state_size: trace_state_size,
157
- trace_state_vendors: trace_state_vendors
158
- end
159
-
160
- def decode_payload payload
161
- TraceContextPayload.from_s payload
162
- end
163
- end
164
-
165
- class HeaderData
166
- class << self
167
- def create trace_parent: nil,
168
- trace_state_payload: nil,
169
- trace_state_entries: nil,
170
- trace_state_size: 0,
171
- trace_state_vendors: nil
172
- new trace_parent, \
173
- trace_state_payload, \
174
- trace_state_entries, \
175
- trace_state_size, \
176
- trace_state_vendors
177
- end
178
- end
179
-
180
- def initialize trace_parent, trace_state_payload, trace_state_entries, trace_state_size, trace_state_vendors
181
- @trace_parent = trace_parent
182
- @trace_state_entries = trace_state_entries
183
- @trace_state_payload = trace_state_payload
184
- @trace_state_size = trace_state_size
185
- @trace_state_vendors = trace_state_vendors
186
- end
187
-
188
- attr_accessor :trace_parent, :trace_state_payload, :trace_state_vendors
189
-
190
- def trace_state trace_state_entry
191
- @trace_state ||= join_trace_state trace_state_entry.size
192
- @trace_state_entries = nil
193
-
194
- trace_state_entry << @trace_state
195
- end
196
-
197
- def trace_id
198
- @trace_parent[TRACE_ID_KEY]
199
- end
200
-
201
- def parent_id
202
- @trace_parent[PARENT_ID_KEY]
203
- end
204
-
205
- private
206
-
207
- def join_trace_state trace_state_entry_size
208
- return @trace_state || EMPTY_STRING if @trace_state_entries.nil? || @trace_state_entries.empty?
209
-
210
- max_size = MAX_TRACE_STATE_SIZE - trace_state_entry_size
211
- return @trace_state_entries.join(COMMA).prepend(COMMA) if @trace_state_size < max_size
212
-
213
- joined_trace_state = ''
214
-
215
- used_size = 0
216
-
217
- @trace_state_entries.each do |entry|
218
- entry_size = entry.size + 1
219
- break if used_size + entry_size > max_size
220
- next if entry_size > MAX_TRACE_STATE_ENTRY_SIZE
221
-
222
- joined_trace_state << COMMA << entry
223
- used_size += entry_size
224
- end
225
-
226
- joined_trace_state
227
- end
228
-
229
- end
230
-
231
- module AccountHelpers
232
- extend self
233
-
234
- def trace_state_entry_key
235
- @trace_state_entry_key ||= if Agent.config[:trusted_account_key]
236
- "#{Agent.config[:trusted_account_key]}@nr".freeze
237
- elsif Agent.config[:account_id]
238
- "#{Agent.config[:account_id]}@nr".freeze
239
- end
240
- end
241
- end
242
- end
243
- end
244
- end