newrelic_rpm 5.7.0.350 → 9.0.0
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.
- checksums.yaml +4 -4
- data/.gitignore +15 -1
- data/.rubocop.yml +1919 -0
- data/.rubocop_todo.yml +100 -0
- data/.simplecov +15 -0
- data/.snyk +11 -0
- data/.yardopts +2 -0
- data/Brewfile +12 -0
- data/CHANGELOG.md +4056 -2339
- data/CONTRIBUTING.md +132 -19
- data/DOCKER.md +167 -0
- data/Dockerfile +10 -0
- data/Gemfile +5 -2
- data/Guardfile +22 -4
- data/LICENSE +202 -38
- data/README.md +87 -87
- data/Rakefile +27 -27
- data/THIRD_PARTY_NOTICES.md +28 -0
- data/Thorfile +5 -0
- data/bin/newrelic +3 -2
- data/bin/newrelic_cmd +1 -0
- data/bin/nrdebug +77 -54
- data/config.dot +5 -5
- data/docker-compose.yml +107 -0
- data/init.rb +5 -7
- data/install.rb +3 -3
- data/lefthook.yml +9 -0
- data/lib/new_relic/agent/adaptive_sampler.rb +14 -10
- data/lib/new_relic/agent/agent.rb +125 -969
- data/lib/new_relic/agent/agent_helpers/connect.rb +227 -0
- data/lib/new_relic/agent/agent_helpers/harvest.rb +153 -0
- data/lib/new_relic/agent/agent_helpers/shutdown.rb +72 -0
- data/lib/new_relic/agent/agent_helpers/special_startup.rb +74 -0
- data/lib/new_relic/agent/agent_helpers/start_worker_thread.rb +167 -0
- data/lib/new_relic/agent/agent_helpers/startup.rb +202 -0
- data/lib/new_relic/agent/agent_helpers/transmit.rb +76 -0
- data/lib/new_relic/agent/agent_logger.rb +26 -18
- data/lib/new_relic/agent/attribute_filter.rb +69 -52
- data/lib/new_relic/agent/attribute_processing.rb +8 -8
- data/lib/new_relic/agent/attributes.rb +153 -0
- data/lib/new_relic/agent/audit_logger.rb +19 -4
- data/lib/new_relic/agent/autostart.rb +34 -28
- data/lib/new_relic/agent/chained_call.rb +2 -2
- data/lib/new_relic/agent/commands/agent_command.rb +4 -4
- data/lib/new_relic/agent/commands/agent_command_router.rb +15 -33
- data/lib/new_relic/agent/commands/thread_profiler_session.rb +13 -11
- data/lib/new_relic/agent/configuration/default_source.rb +1480 -1053
- data/lib/new_relic/agent/configuration/dotted_hash.rb +7 -6
- data/lib/new_relic/agent/configuration/environment_source.rb +15 -11
- data/lib/new_relic/agent/configuration/event_harvest_config.rb +68 -0
- data/lib/new_relic/agent/configuration/high_security_source.rb +9 -9
- data/lib/new_relic/agent/configuration/manager.rb +96 -79
- data/lib/new_relic/agent/configuration/manual_source.rb +2 -2
- data/lib/new_relic/agent/configuration/mask_defaults.rb +4 -4
- data/lib/new_relic/agent/configuration/security_policy_source.rb +83 -86
- data/lib/new_relic/agent/configuration/server_source.rb +49 -12
- data/lib/new_relic/agent/configuration/yaml_source.rb +42 -13
- data/lib/new_relic/agent/configuration.rb +2 -2
- data/lib/new_relic/agent/connect/request_builder.rb +61 -0
- data/lib/new_relic/agent/connect/response_handler.rb +58 -0
- data/lib/new_relic/agent/custom_event_aggregator.rb +15 -15
- data/lib/new_relic/agent/database/explain_plan_helpers.rb +5 -6
- data/lib/new_relic/agent/database/obfuscation_helpers.rb +16 -15
- data/lib/new_relic/agent/database/obfuscator.rb +3 -3
- data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +4 -4
- data/lib/new_relic/agent/database.rb +44 -53
- data/lib/new_relic/agent/database_adapter.rb +35 -0
- data/lib/new_relic/agent/datastores/metric_helper.rb +18 -20
- data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +9 -8
- data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +7 -11
- data/lib/new_relic/agent/datastores/mongo.rb +7 -12
- data/lib/new_relic/agent/datastores/nosql_obfuscator.rb +41 -0
- data/lib/new_relic/agent/datastores/redis.rb +6 -12
- data/lib/new_relic/agent/datastores.rb +19 -23
- data/lib/new_relic/agent/deprecator.rb +2 -2
- data/lib/new_relic/agent/{cross_app_payload.rb → distributed_tracing/cross_app_payload.rb} +13 -12
- data/lib/new_relic/agent/{cross_app_tracing.rb → distributed_tracing/cross_app_tracing.rb} +87 -66
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +84 -0
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +75 -0
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +163 -0
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +38 -0
- data/lib/new_relic/agent/distributed_tracing/trace_context.rb +245 -0
- data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +127 -0
- data/lib/new_relic/agent/distributed_tracing.rb +113 -32
- data/lib/new_relic/agent/encoding_normalizer.rb +5 -3
- data/lib/new_relic/agent/error_collector.rb +99 -63
- data/lib/new_relic/agent/error_event_aggregator.rb +10 -8
- data/lib/new_relic/agent/error_filter.rb +174 -0
- data/lib/new_relic/agent/error_trace_aggregator.rb +6 -4
- data/lib/new_relic/agent/event_aggregator.rb +43 -48
- data/lib/new_relic/agent/event_buffer.rb +8 -9
- data/lib/new_relic/agent/event_listener.rb +2 -3
- data/lib/new_relic/agent/event_loop.rb +27 -25
- data/lib/new_relic/agent/external.rb +20 -51
- data/lib/new_relic/agent/guid_generator.rb +30 -0
- data/lib/new_relic/agent/harvester.rb +5 -6
- data/lib/new_relic/agent/heap.rb +8 -10
- data/lib/new_relic/agent/hostname.rb +26 -5
- data/lib/new_relic/agent/http_clients/abstract.rb +81 -0
- data/lib/new_relic/agent/http_clients/curb_wrappers.rb +26 -26
- data/lib/new_relic/agent/http_clients/excon_wrappers.rb +31 -17
- data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +18 -23
- data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +12 -15
- data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +24 -8
- data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +9 -12
- data/lib/new_relic/agent/http_clients/uri_util.rb +12 -13
- data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +22 -52
- data/lib/new_relic/agent/instrumentation/action_controller_other_subscriber.rb +39 -0
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +59 -72
- data/lib/new_relic/agent/instrumentation/action_dispatch.rb +31 -0
- data/lib/new_relic/agent/instrumentation/action_dispatch_subscriber.rb +64 -0
- data/lib/new_relic/agent/instrumentation/action_mailbox.rb +30 -0
- data/lib/new_relic/agent/instrumentation/action_mailbox_subscriber.rb +33 -0
- data/lib/new_relic/agent/instrumentation/action_mailer.rb +30 -0
- data/lib/new_relic/agent/instrumentation/action_mailer_subscriber.rb +85 -0
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +86 -62
- data/lib/new_relic/agent/instrumentation/active_job.rb +38 -19
- data/lib/new_relic/agent/instrumentation/active_job_subscriber.rb +41 -0
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +21 -7
- data/lib/new_relic/agent/instrumentation/active_record.rb +95 -46
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +82 -61
- data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +155 -0
- data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +36 -12
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +69 -64
- data/lib/new_relic/agent/instrumentation/active_storage.rb +8 -4
- data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +11 -32
- data/lib/new_relic/agent/instrumentation/active_support.rb +27 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +23 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +20 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +12 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger.rb +24 -0
- data/lib/new_relic/agent/instrumentation/active_support_subscriber.rb +41 -0
- data/lib/new_relic/agent/instrumentation/bunny/chain.rb +45 -0
- data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +150 -0
- data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +35 -0
- data/lib/new_relic/agent/instrumentation/bunny.rb +14 -134
- data/lib/new_relic/agent/instrumentation/concurrent_ruby/chain.rb +36 -0
- data/lib/new_relic/agent/instrumentation/concurrent_ruby/instrumentation.rb +21 -0
- data/lib/new_relic/agent/instrumentation/concurrent_ruby/prepend.rb +27 -0
- data/lib/new_relic/agent/instrumentation/concurrent_ruby.rb +31 -0
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +77 -61
- data/lib/new_relic/agent/instrumentation/curb/chain.rb +91 -0
- data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +221 -0
- data/lib/new_relic/agent/instrumentation/curb/prepend.rb +61 -0
- data/lib/new_relic/agent/instrumentation/curb.rb +15 -187
- data/lib/new_relic/agent/instrumentation/custom_events.rb +12 -0
- data/lib/new_relic/agent/instrumentation/custom_events_subscriber.rb +37 -0
- data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +35 -0
- data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +48 -0
- data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +33 -0
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +30 -52
- data/lib/new_relic/agent/instrumentation/elasticsearch/chain.rb +29 -0
- data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +66 -0
- data/lib/new_relic/agent/instrumentation/elasticsearch/prepend.rb +13 -0
- data/lib/new_relic/agent/instrumentation/elasticsearch.rb +31 -0
- data/lib/new_relic/agent/instrumentation/excon/middleware.rb +8 -7
- data/lib/new_relic/agent/instrumentation/excon.rb +29 -31
- data/lib/new_relic/agent/instrumentation/fiber/chain.rb +20 -0
- data/lib/new_relic/agent/instrumentation/fiber/instrumentation.rb +24 -0
- data/lib/new_relic/agent/instrumentation/fiber/prepend.rb +18 -0
- data/lib/new_relic/agent/instrumentation/fiber.rb +25 -0
- data/lib/new_relic/agent/instrumentation/grape/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +100 -0
- data/lib/new_relic/agent/instrumentation/grape/prepend.rb +17 -0
- data/lib/new_relic/agent/instrumentation/grape.rb +16 -121
- data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +97 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +89 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +111 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +30 -0
- data/lib/new_relic/agent/instrumentation/grpc/helper.rb +32 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +69 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +134 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +35 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +26 -0
- data/lib/new_relic/agent/instrumentation/grpc_client.rb +23 -0
- data/lib/new_relic/agent/instrumentation/grpc_server.rb +25 -0
- data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +37 -0
- data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +15 -0
- data/lib/new_relic/agent/instrumentation/httpclient.rb +12 -32
- data/lib/new_relic/agent/instrumentation/httprb/chain.rb +22 -0
- data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +30 -0
- data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +15 -0
- data/lib/new_relic/agent/instrumentation/httprb.rb +29 -0
- data/lib/new_relic/agent/instrumentation/ignore_actions.rb +5 -6
- data/lib/new_relic/agent/instrumentation/logger/chain.rb +21 -0
- data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +66 -0
- data/lib/new_relic/agent/instrumentation/logger/prepend.rb +13 -0
- data/lib/new_relic/agent/instrumentation/logger.rb +26 -0
- data/lib/new_relic/agent/instrumentation/memcache/chain.rb +15 -0
- data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +58 -125
- data/lib/new_relic/agent/instrumentation/memcache/helper.rb +59 -0
- data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +90 -0
- data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +101 -0
- data/lib/new_relic/agent/instrumentation/memcache.rb +57 -71
- data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +15 -14
- data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +21 -14
- data/lib/new_relic/agent/instrumentation/mongo.rb +7 -132
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +49 -13
- data/lib/new_relic/agent/instrumentation/net_http/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +40 -0
- data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +21 -0
- data/lib/new_relic/agent/instrumentation/net_http.rb +44 -0
- data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +142 -0
- data/lib/new_relic/agent/instrumentation/padrino/chain.rb +38 -0
- data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +28 -0
- data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +20 -0
- data/lib/new_relic/agent/instrumentation/padrino.rb +22 -58
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +7 -7
- data/lib/new_relic/agent/instrumentation/queue_time.rb +9 -10
- data/lib/new_relic/agent/instrumentation/rack/chain.rb +66 -0
- data/lib/new_relic/agent/instrumentation/rack/helpers.rb +33 -0
- data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +75 -0
- data/lib/new_relic/agent/instrumentation/rack/prepend.rb +43 -0
- data/lib/new_relic/agent/instrumentation/rack.rb +33 -141
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +19 -55
- data/lib/new_relic/agent/instrumentation/rails_middleware.rb +5 -5
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +36 -0
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +45 -0
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +30 -0
- data/lib/new_relic/agent/instrumentation/rails_notifications/custom_events.rb +30 -0
- data/lib/new_relic/agent/instrumentation/rake/chain.rb +20 -0
- data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +142 -0
- data/lib/new_relic/agent/instrumentation/rake/prepend.rb +14 -0
- data/lib/new_relic/agent/instrumentation/rake.rb +18 -159
- data/lib/new_relic/agent/instrumentation/redis/chain.rb +45 -0
- data/lib/new_relic/agent/instrumentation/redis/constants.rb +17 -0
- data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +93 -0
- data/lib/new_relic/agent/instrumentation/redis/middleware.rb +16 -0
- data/lib/new_relic/agent/instrumentation/redis/prepend.rb +29 -0
- data/lib/new_relic/agent/instrumentation/redis.rb +20 -103
- data/lib/new_relic/agent/instrumentation/resque/chain.rb +21 -0
- data/lib/new_relic/agent/instrumentation/resque/helper.rb +19 -0
- data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +34 -0
- data/lib/new_relic/agent/instrumentation/resque/prepend.rb +15 -0
- data/lib/new_relic/agent/instrumentation/resque.rb +33 -41
- data/lib/new_relic/agent/instrumentation/sequel.rb +17 -20
- data/lib/new_relic/agent/instrumentation/sequel_helper.rb +3 -3
- data/lib/new_relic/agent/instrumentation/sidekiq/client.rb +20 -0
- data/lib/new_relic/agent/instrumentation/sidekiq/extensions/delayed_class.rb +30 -0
- data/lib/new_relic/agent/instrumentation/sidekiq/server.rb +37 -0
- data/lib/new_relic/agent/instrumentation/sidekiq.rb +29 -46
- data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +55 -0
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +31 -37
- data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +125 -0
- data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +33 -0
- data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +3 -3
- data/lib/new_relic/agent/instrumentation/sinatra.rb +35 -165
- data/lib/new_relic/agent/instrumentation/thread/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +28 -0
- data/lib/new_relic/agent/instrumentation/thread/prepend.rb +22 -0
- data/lib/new_relic/agent/instrumentation/thread.rb +20 -0
- data/lib/new_relic/agent/instrumentation/tilt/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +41 -0
- data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +13 -0
- data/lib/new_relic/agent/instrumentation/tilt.rb +25 -0
- data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +22 -0
- data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +80 -0
- data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +14 -0
- data/lib/new_relic/agent/instrumentation/typhoeus.rb +14 -76
- data/lib/new_relic/agent/instrumentation.rb +2 -2
- data/lib/new_relic/agent/internal_agent_error.rb +3 -3
- data/lib/new_relic/agent/javascript_instrumentor.rb +51 -45
- data/lib/new_relic/agent/linking_metadata.rb +44 -0
- data/lib/new_relic/agent/local_log_decorator.rb +37 -0
- data/lib/new_relic/agent/log_event_aggregator.rb +235 -0
- data/lib/new_relic/agent/log_once.rb +2 -2
- data/lib/new_relic/agent/log_priority.rb +20 -0
- data/lib/new_relic/agent/logging.rb +142 -0
- data/lib/new_relic/agent/memory_logger.rb +3 -3
- data/lib/new_relic/agent/messaging.rb +81 -164
- data/lib/new_relic/agent/method_tracer.rb +152 -145
- data/lib/new_relic/agent/method_tracer_helpers.rb +90 -13
- data/lib/new_relic/agent/monitors/cross_app_monitor.rb +117 -0
- data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +28 -0
- data/lib/new_relic/agent/{inbound_request_monitor.rb → monitors/inbound_request_monitor.rb} +5 -6
- data/lib/new_relic/agent/{synthetics_monitor.rb → monitors/synthetics_monitor.rb} +9 -15
- data/lib/new_relic/agent/monitors.rb +26 -0
- data/lib/new_relic/agent/new_relic_service/encoders.rb +7 -7
- data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +6 -7
- data/lib/new_relic/agent/new_relic_service/marshaller.rb +8 -29
- data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +5 -5
- data/lib/new_relic/agent/new_relic_service.rb +282 -166
- data/lib/new_relic/agent/noticeable_error.rb +19 -0
- data/lib/new_relic/agent/null_logger.rb +8 -4
- data/lib/new_relic/agent/obfuscator.rb +9 -11
- data/lib/new_relic/agent/parameter_filtering.rb +35 -8
- data/lib/new_relic/agent/payload_metric_mapping.rb +10 -11
- data/lib/new_relic/agent/pipe_channel_manager.rb +28 -18
- data/lib/new_relic/agent/pipe_service.rb +9 -6
- data/lib/new_relic/agent/prepend_supportability.rb +3 -3
- data/lib/new_relic/agent/priority_sampled_buffer.rb +16 -14
- data/lib/new_relic/agent/range_extensions.rb +9 -29
- data/lib/new_relic/agent/rules_engine/replacement_rule.rb +12 -12
- data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +13 -14
- data/lib/new_relic/agent/rules_engine.rb +6 -5
- data/lib/new_relic/agent/sampler.rb +4 -5
- data/lib/new_relic/agent/sampler_collection.rb +4 -5
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +4 -3
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +14 -11
- data/lib/new_relic/agent/samplers/memory_sampler.rb +26 -15
- data/lib/new_relic/agent/samplers/object_sampler.rb +2 -2
- data/lib/new_relic/agent/samplers/vm_sampler.rb +22 -20
- data/lib/new_relic/agent/span_event_aggregator.rb +14 -16
- data/lib/new_relic/agent/span_event_primitive.rb +118 -58
- data/lib/new_relic/agent/sql_sampler.rb +25 -25
- data/lib/new_relic/agent/stats.rb +79 -42
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +11 -13
- data/lib/new_relic/agent/stats_engine/stats_hash.rb +13 -14
- data/lib/new_relic/agent/stats_engine.rb +11 -11
- data/lib/new_relic/agent/synthetics_event_aggregator.rb +8 -9
- data/lib/new_relic/agent/system_info.rb +100 -66
- data/lib/new_relic/agent/threading/agent_thread.rb +20 -16
- data/lib/new_relic/agent/threading/backtrace_node.rb +13 -14
- data/lib/new_relic/agent/threading/backtrace_service.rb +18 -18
- data/lib/new_relic/agent/threading/thread_profile.rb +31 -45
- data/lib/new_relic/agent/timestamp_sampled_buffer.rb +2 -2
- data/lib/new_relic/agent/tracer.rb +513 -0
- data/lib/new_relic/agent/transaction/abstract_segment.rb +131 -41
- data/lib/new_relic/agent/transaction/datastore_segment.rb +22 -18
- data/lib/new_relic/agent/transaction/distributed_tracer.rb +184 -0
- data/lib/new_relic/agent/transaction/distributed_tracing.rb +72 -163
- data/lib/new_relic/agent/transaction/external_request_segment.rb +66 -63
- data/lib/new_relic/agent/transaction/message_broker_segment.rb +34 -46
- data/lib/new_relic/agent/transaction/request_attributes.rb +36 -36
- data/lib/new_relic/agent/transaction/segment.rb +46 -10
- data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +2 -4
- data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +2 -2
- data/lib/new_relic/agent/transaction/trace.rb +21 -24
- data/lib/new_relic/agent/transaction/trace_builder.rb +11 -12
- data/lib/new_relic/agent/transaction/trace_context.rb +168 -0
- data/lib/new_relic/agent/transaction/trace_node.rb +31 -28
- data/lib/new_relic/agent/transaction/tracing.rb +15 -111
- data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +6 -6
- data/lib/new_relic/agent/transaction.rb +252 -259
- data/lib/new_relic/agent/transaction_error_primitive.rb +34 -37
- data/lib/new_relic/agent/transaction_event_aggregator.rb +13 -13
- data/lib/new_relic/agent/transaction_event_primitive.rb +44 -56
- data/lib/new_relic/agent/transaction_event_recorder.rb +17 -16
- data/lib/new_relic/agent/transaction_metrics.rb +11 -10
- data/lib/new_relic/agent/transaction_sampler.rb +7 -12
- data/lib/new_relic/agent/transaction_time_aggregator.rb +41 -26
- data/lib/new_relic/agent/utilization/aws.rb +34 -4
- data/lib/new_relic/agent/utilization/azure.rb +4 -4
- data/lib/new_relic/agent/utilization/gcp.rb +8 -8
- data/lib/new_relic/agent/utilization/pcf.rb +6 -5
- data/lib/new_relic/agent/utilization/vendor.rb +44 -29
- data/lib/new_relic/agent/utilization_data.rb +43 -6
- data/lib/new_relic/agent/vm/jruby_vm.rb +2 -2
- data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +3 -3
- data/lib/new_relic/agent/vm/mri_vm.rb +46 -19
- data/lib/new_relic/agent/vm/snapshot.rb +6 -6
- data/lib/new_relic/agent/vm.rb +2 -2
- data/lib/new_relic/agent/worker_loop.rb +11 -13
- data/lib/new_relic/agent.rb +151 -79
- data/lib/new_relic/cli/command.rb +21 -23
- data/lib/new_relic/cli/commands/deployments.rb +94 -45
- data/lib/new_relic/cli/commands/install.rb +24 -26
- data/lib/new_relic/coerce.rb +42 -15
- data/lib/new_relic/collection_helper.rb +51 -49
- data/lib/new_relic/constants.rb +39 -0
- data/lib/new_relic/control/class_methods.rb +11 -5
- data/lib/new_relic/control/frameworks/external.rb +3 -3
- data/lib/new_relic/control/frameworks/rails.rb +24 -18
- data/lib/new_relic/control/frameworks/rails3.rb +4 -5
- data/lib/new_relic/control/frameworks/rails4.rb +2 -2
- data/lib/new_relic/control/frameworks/rails_notifications.rb +14 -0
- data/lib/new_relic/control/frameworks/ruby.rb +4 -4
- data/lib/new_relic/control/frameworks/sinatra.rb +8 -2
- data/lib/new_relic/control/frameworks.rb +2 -2
- data/lib/new_relic/control/instance_methods.rb +33 -42
- data/lib/new_relic/control/instrumentation.rb +40 -12
- data/lib/new_relic/control/private_instance_methods.rb +48 -0
- data/lib/new_relic/control/server_methods.rb +4 -5
- data/lib/new_relic/control.rb +2 -3
- data/lib/new_relic/delayed_job_injection.rb +2 -2
- data/lib/new_relic/dependency_detection.rb +129 -18
- data/lib/new_relic/environment_report.rb +41 -35
- data/lib/new_relic/helper.rb +49 -8
- data/lib/new_relic/language_support.rb +30 -6
- data/lib/new_relic/latest_changes.rb +9 -8
- data/lib/new_relic/local_environment.rb +23 -27
- data/lib/new_relic/metric_data.rb +32 -27
- data/lib/new_relic/metric_spec.rb +9 -7
- data/lib/new_relic/noticed_error.rb +46 -33
- data/lib/new_relic/rack/agent_hooks.rb +2 -2
- data/lib/new_relic/rack/agent_middleware.rb +7 -5
- data/lib/new_relic/rack/browser_monitoring.rb +134 -117
- data/lib/new_relic/rack.rb +2 -2
- data/lib/new_relic/recipes/capistrano3.rb +4 -62
- data/lib/new_relic/recipes/capistrano_legacy.rb +24 -27
- data/lib/new_relic/recipes/helpers/send_deployment.rb +70 -0
- data/lib/new_relic/recipes.rb +2 -2
- data/lib/new_relic/supportability_helper.rb +21 -7
- data/lib/new_relic/traced_thread.rb +39 -0
- data/lib/new_relic/version.rb +7 -18
- data/lib/newrelic_rpm.rb +20 -33
- data/lib/sequel/extensions/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +16 -19
- data/lib/sequel/plugins/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +9 -15
- data/lib/tasks/all.rb +4 -4
- data/lib/tasks/config.rake +22 -118
- data/lib/tasks/coverage_report.rake +28 -0
- data/lib/tasks/helpers/config.html.erb +21 -0
- data/lib/tasks/helpers/format.rb +123 -0
- data/lib/tasks/helpers/matches.rb +12 -0
- data/lib/tasks/helpers/prompt.rb +24 -0
- data/lib/tasks/helpers/removers.rb +33 -0
- data/lib/tasks/install.rake +4 -0
- data/lib/tasks/instrumentation_generator/README.md +63 -0
- data/lib/tasks/instrumentation_generator/TODO.md +33 -0
- data/lib/tasks/instrumentation_generator/instrumentation.thor +121 -0
- data/lib/tasks/instrumentation_generator/templates/Envfile.tt +9 -0
- data/lib/tasks/instrumentation_generator/templates/chain.tt +22 -0
- data/lib/tasks/instrumentation_generator/templates/chain_method.tt +8 -0
- data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +29 -0
- data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +13 -0
- data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +3 -0
- data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +19 -0
- data/lib/tasks/instrumentation_generator/templates/prepend.tt +13 -0
- data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +3 -0
- data/lib/tasks/instrumentation_generator/templates/test.tt +15 -0
- data/lib/tasks/multiverse.rake +4 -0
- data/lib/tasks/multiverse.rb +12 -5
- data/lib/tasks/newrelic.rb +2 -2
- data/lib/tasks/tests.rake +14 -14
- data/newrelic.yml +672 -3
- data/newrelic_rpm.gemspec +40 -31
- data/recipes/newrelic.rb +3 -3
- data/test/agent_helper.rb +419 -98
- metadata +238 -127
- data/.travis.yml +0 -228
- data/bin/mongrel_rpm +0 -33
- data/cert/cacert.pem +0 -1177
- data/lib/new_relic/agent/commands/xray_session.rb +0 -55
- data/lib/new_relic/agent/commands/xray_session_collection.rb +0 -161
- data/lib/new_relic/agent/cross_app_monitor.rb +0 -110
- data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +0 -44
- data/lib/new_relic/agent/datastores/mongo/statement_formatter.rb +0 -53
- data/lib/new_relic/agent/distributed_trace_monitor.rb +0 -41
- data/lib/new_relic/agent/distributed_trace_payload.rb +0 -246
- data/lib/new_relic/agent/http_clients/abstract_request.rb +0 -31
- data/lib/new_relic/agent/instrumentation/active_record_4.rb +0 -42
- data/lib/new_relic/agent/instrumentation/active_record_5.rb +0 -41
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +0 -74
- data/lib/new_relic/agent/instrumentation/authlogic.rb +0 -25
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +0 -202
- data/lib/new_relic/agent/instrumentation/evented_subscriber.rb +0 -104
- data/lib/new_relic/agent/instrumentation/excon/connection.rb +0 -46
- data/lib/new_relic/agent/instrumentation/http.rb +0 -46
- data/lib/new_relic/agent/instrumentation/merb/controller.rb +0 -44
- data/lib/new_relic/agent/instrumentation/merb/errors.rb +0 -33
- data/lib/new_relic/agent/instrumentation/net.rb +0 -50
- data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +0 -125
- data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +0 -46
- data/lib/new_relic/agent/instrumentation/rails4/action_controller.rb +0 -32
- data/lib/new_relic/agent/instrumentation/rails4/action_view.rb +0 -27
- data/lib/new_relic/agent/instrumentation/rails5/action_cable.rb +0 -36
- data/lib/new_relic/agent/instrumentation/rails5/action_controller.rb +0 -33
- data/lib/new_relic/agent/instrumentation/rails5/action_view.rb +0 -27
- data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +0 -26
- data/lib/new_relic/agent/instrumentation/sunspot.rb +0 -33
- data/lib/new_relic/agent/supported_versions.rb +0 -275
- data/lib/new_relic/agent/transaction/attributes.rb +0 -154
- data/lib/new_relic/agent/transaction/xray_sample_buffer.rb +0 -64
- data/lib/new_relic/agent/transaction_state.rb +0 -186
- data/lib/new_relic/build.rb +0 -2
- data/lib/new_relic/control/frameworks/merb.rb +0 -29
- data/lib/new_relic/control/frameworks/rails5.rb +0 -14
- data/lib/new_relic/metrics.rb +0 -13
- data/lib/tasks/config.html.erb +0 -32
- data/lib/tasks/versions.html.erb +0 -28
- data/lib/tasks/versions.postface.html +0 -8
- data/lib/tasks/versions.preface.html +0 -9
- data/lib/tasks/versions.rake +0 -65
- data/lib/tasks/versions.txt.erb +0 -14
- /data/lib/tasks/{config.text.erb → helpers/config.text.erb} +0 -0
@@ -1,104 +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 Instrumentation
|
8
|
-
class EventedSubscriber
|
9
|
-
def initialize
|
10
|
-
@queue_key = ['NewRelic', self.class.name, object_id].join('-')
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.subscribed?
|
14
|
-
# TODO: need to talk to Rails core about an API for this,
|
15
|
-
# rather than digging through Listener ivars
|
16
|
-
ActiveSupport::Notifications.notifier.instance_variable_get(:@subscribers) \
|
17
|
-
.find{|s| s.instance_variable_get(:@delegate).class == self }
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.subscribe(pattern)
|
21
|
-
if !subscribed?
|
22
|
-
ActiveSupport::Notifications.subscribe(pattern, new)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def start(name, id, payload)
|
27
|
-
event = ActiveSupport::Notifications::Event.new(name, Time.now, nil, id, payload)
|
28
|
-
push_event(event)
|
29
|
-
return event
|
30
|
-
end
|
31
|
-
|
32
|
-
def finish(name, id, payload)
|
33
|
-
pop_event(id)
|
34
|
-
end
|
35
|
-
|
36
|
-
def log_notification_error(error, name, event_type)
|
37
|
-
# These are important enough failures that we want the backtraces
|
38
|
-
# logged at error level, hence the explicit log_exception call.
|
39
|
-
NewRelic::Agent.logger.error("Error during #{event_type} callback for event '#{name}':")
|
40
|
-
NewRelic::Agent.logger.log_exception(:error, error)
|
41
|
-
end
|
42
|
-
|
43
|
-
def push_event(event)
|
44
|
-
parent = event_stack[event.transaction_id].last
|
45
|
-
if parent && event.respond_to?(:parent=)
|
46
|
-
event.parent = parent
|
47
|
-
parent << event
|
48
|
-
end
|
49
|
-
event_stack[event.transaction_id].push event
|
50
|
-
end
|
51
|
-
|
52
|
-
def pop_event(transaction_id)
|
53
|
-
event = event_stack[transaction_id].pop
|
54
|
-
event.end = Time.now
|
55
|
-
return event
|
56
|
-
end
|
57
|
-
|
58
|
-
def event_stack
|
59
|
-
Thread.current[@queue_key] ||= Hash.new {|h,id| h[id] = [] }
|
60
|
-
end
|
61
|
-
|
62
|
-
def state
|
63
|
-
NewRelic::Agent::TransactionState.tl_get
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
# Taken from ActiveSupport::Notifications::Event, pasted here
|
68
|
-
# with a couple minor additions so we don't have a hard
|
69
|
-
# dependency on ActiveSupport::Notifications.
|
70
|
-
#
|
71
|
-
# Represents an instrumentation event, provides timing and metric
|
72
|
-
# name information useful when recording metrics.
|
73
|
-
class Event
|
74
|
-
attr_reader :name, :time, :transaction_id, :payload, :children
|
75
|
-
attr_accessor :end, :parent, :frame
|
76
|
-
|
77
|
-
def initialize(name, start, ending, transaction_id, payload)
|
78
|
-
@name = name
|
79
|
-
@payload = payload.dup
|
80
|
-
@time = start
|
81
|
-
@transaction_id = transaction_id
|
82
|
-
@end = ending
|
83
|
-
@children = []
|
84
|
-
end
|
85
|
-
|
86
|
-
def metric_name
|
87
|
-
raise NotImplementedError
|
88
|
-
end
|
89
|
-
|
90
|
-
def duration
|
91
|
-
self.end - time
|
92
|
-
end
|
93
|
-
|
94
|
-
def <<(event)
|
95
|
-
@children << event
|
96
|
-
end
|
97
|
-
|
98
|
-
def parent_of?(event)
|
99
|
-
@children.include? event
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
@@ -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
|
-
module ::Excon
|
6
|
-
class Connection
|
7
|
-
def newrelic_connection_params
|
8
|
-
(@connection || @data)
|
9
|
-
end
|
10
|
-
|
11
|
-
def newrelic_resolved_request_params(request_params)
|
12
|
-
resolved = newrelic_connection_params.merge(request_params)
|
13
|
-
resolved[:headers] = resolved[:headers].merge(request_params[:headers] || {})
|
14
|
-
resolved
|
15
|
-
end
|
16
|
-
|
17
|
-
def request_with_newrelic_trace(params, &block)
|
18
|
-
resolved_params = newrelic_resolved_request_params(params)
|
19
|
-
wrapped_request = ::NewRelic::Agent::HTTPClients::ExconHTTPRequest.new(resolved_params)
|
20
|
-
segment = NewRelic::Agent::Transaction.start_external_request_segment(
|
21
|
-
library: wrapped_request.type,
|
22
|
-
uri: wrapped_request.uri,
|
23
|
-
procedure: wrapped_request.method
|
24
|
-
)
|
25
|
-
|
26
|
-
begin
|
27
|
-
response = nil
|
28
|
-
segment.add_request_headers wrapped_request
|
29
|
-
|
30
|
-
response = request_without_newrelic_trace(resolved_params, &block)
|
31
|
-
|
32
|
-
wrapped_response = ::NewRelic::Agent::HTTPClients::ExconHTTPResponse.new(response)
|
33
|
-
segment.read_response_headers wrapped_response
|
34
|
-
|
35
|
-
response
|
36
|
-
ensure
|
37
|
-
segment.finish if segment
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.install_newrelic_instrumentation
|
42
|
-
alias request_without_newrelic_trace request
|
43
|
-
alias request request_with_newrelic_trace
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -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
|
-
named :httprb
|
7
|
-
|
8
|
-
depends_on do
|
9
|
-
defined?(HTTP) && defined?(HTTP::Client)
|
10
|
-
end
|
11
|
-
|
12
|
-
executes do
|
13
|
-
::NewRelic::Agent.logger.info 'Installing http.rb instrumentation'
|
14
|
-
require 'new_relic/agent/cross_app_tracing'
|
15
|
-
require 'new_relic/agent/http_clients/http_rb_wrappers'
|
16
|
-
end
|
17
|
-
|
18
|
-
executes do
|
19
|
-
class HTTP::Client
|
20
|
-
def perform_with_newrelic_trace(request, options)
|
21
|
-
wrapped_request = ::NewRelic::Agent::HTTPClients::HTTPRequest.new(request)
|
22
|
-
|
23
|
-
begin
|
24
|
-
segment = NewRelic::Agent::Tracer.start_external_request_segment(
|
25
|
-
library: wrapped_request.type,
|
26
|
-
uri: wrapped_request.uri,
|
27
|
-
procedure: wrapped_request.method
|
28
|
-
)
|
29
|
-
|
30
|
-
segment.add_request_headers wrapped_request
|
31
|
-
|
32
|
-
response = perform_without_newrelic_trace(request, options)
|
33
|
-
wrapped_response = ::NewRelic::Agent::HTTPClients::HTTPResponse.new response
|
34
|
-
segment.read_response_headers wrapped_response
|
35
|
-
|
36
|
-
response
|
37
|
-
ensure
|
38
|
-
segment.finish if segment
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
alias perform_without_newrelic_trace perform
|
43
|
-
alias perform perform_with_newrelic_trace
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,44 +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 'set'
|
6
|
-
|
7
|
-
DependencyDetection.defer do
|
8
|
-
@name = :merb_controller
|
9
|
-
|
10
|
-
depends_on do
|
11
|
-
defined?(Merb) && defined?(Merb::Controller)
|
12
|
-
end
|
13
|
-
|
14
|
-
executes do
|
15
|
-
::NewRelic::Agent.logger.info 'Installing Merb Controller instrumentation'
|
16
|
-
end
|
17
|
-
|
18
|
-
executes do
|
19
|
-
require 'merb-core/controller/merb_controller'
|
20
|
-
|
21
|
-
Merb::Controller.class_eval do
|
22
|
-
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
23
|
-
|
24
|
-
# determine the path that is used in the metric name for
|
25
|
-
# the called controller action
|
26
|
-
def newrelic_metric_path
|
27
|
-
"#{controller_name}/#{action_name}"
|
28
|
-
end
|
29
|
-
|
30
|
-
protected
|
31
|
-
|
32
|
-
def _dispatch_with_newrelic_trace(*args)
|
33
|
-
options = {}
|
34
|
-
options[:params] = params
|
35
|
-
perform_action_with_newrelic_trace(options) do
|
36
|
-
_dispatch_without_newrelic_trace(*args)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
alias_method :_dispatch_without_newrelic_trace, :_dispatch
|
41
|
-
alias_method :_dispatch, :_dispatch_with_newrelic_trace
|
42
|
-
end
|
43
|
-
end
|
44
|
-
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 = :merb_error
|
7
|
-
|
8
|
-
depends_on do
|
9
|
-
defined?(Merb) && defined?(Merb::Dispatcher) && defined?(Merb::Dispatcher::DefaultException)
|
10
|
-
end
|
11
|
-
|
12
|
-
depends_on do
|
13
|
-
Merb::Dispatcher::DefaultException.respond_to?(:before)
|
14
|
-
end
|
15
|
-
|
16
|
-
executes do
|
17
|
-
::NewRelic::Agent.logger.info 'Installing Merb Errors instrumentation'
|
18
|
-
end
|
19
|
-
|
20
|
-
executes do
|
21
|
-
|
22
|
-
# Hook in the notification to merb
|
23
|
-
error_notifier = Proc.new {
|
24
|
-
if request.exceptions #check that there's actually an exception
|
25
|
-
# Note, this assumes we have already captured the other information such as uri and params in the Transaction.
|
26
|
-
NewRelic::Agent::Transaction.notice_error(request.exceptions.first)
|
27
|
-
end
|
28
|
-
}
|
29
|
-
Merb::Dispatcher::DefaultException.before error_notifier
|
30
|
-
Exceptions.before error_notifier
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
@@ -1,50 +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
|
-
named :net_http
|
7
|
-
|
8
|
-
depends_on do
|
9
|
-
defined?(Net) && defined?(Net::HTTP)
|
10
|
-
end
|
11
|
-
|
12
|
-
executes do
|
13
|
-
::NewRelic::Agent.logger.info 'Installing Net instrumentation'
|
14
|
-
require 'new_relic/agent/cross_app_tracing'
|
15
|
-
require 'new_relic/agent/http_clients/net_http_wrappers'
|
16
|
-
end
|
17
|
-
|
18
|
-
executes do
|
19
|
-
class Net::HTTP
|
20
|
-
def request_with_newrelic_trace(request, *args, &block)
|
21
|
-
wrapped_request = NewRelic::Agent::HTTPClients::NetHTTPRequest.new(self, request)
|
22
|
-
|
23
|
-
segment = NewRelic::Agent::Transaction.start_external_request_segment(
|
24
|
-
library: wrapped_request.type,
|
25
|
-
uri: wrapped_request.uri,
|
26
|
-
procedure: wrapped_request.method
|
27
|
-
)
|
28
|
-
|
29
|
-
begin
|
30
|
-
response = nil
|
31
|
-
segment.add_request_headers wrapped_request
|
32
|
-
|
33
|
-
# RUBY-1244 Disable further tracing in request to avoid double
|
34
|
-
# counting if connection wasn't started (which calls request again).
|
35
|
-
NewRelic::Agent.disable_all_tracing do
|
36
|
-
response = request_without_newrelic_trace( request, *args, &block )
|
37
|
-
end
|
38
|
-
|
39
|
-
segment.read_response_headers response
|
40
|
-
response
|
41
|
-
ensure
|
42
|
-
segment.finish
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
alias request_without_newrelic_trace request
|
47
|
-
alias request request_with_newrelic_trace
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,125 +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/parameter_filtering'
|
6
|
-
|
7
|
-
DependencyDetection.defer do
|
8
|
-
@name = :rails21_view
|
9
|
-
|
10
|
-
depends_on do
|
11
|
-
!NewRelic::Agent.config[:disable_view_instrumentation] &&
|
12
|
-
defined?(ActionController) && defined?(ActionController::Base) && defined?(ActionView::PartialTemplate) && defined?(ActionView::Template) &&
|
13
|
-
defined?(Rails::VERSION::STRING) && Rails::VERSION::STRING =~ /^2\.1\./ # Rails 2.1 &&
|
14
|
-
end
|
15
|
-
|
16
|
-
executes do
|
17
|
-
::NewRelic::Agent.logger.info 'Installing Rails 2.1 View instrumentation'
|
18
|
-
end
|
19
|
-
|
20
|
-
executes do
|
21
|
-
ActionView::PartialTemplate.class_eval do
|
22
|
-
include NewRelic::Agent::MethodTracer
|
23
|
-
add_method_tracer :render, 'View/#{path_without_extension[%r{^(/.*/)?(.*)$},2]}.#{@view.template_format}.#{extension}/Partial'
|
24
|
-
end
|
25
|
-
|
26
|
-
# this is for template rendering, as opposed to partial rendering.
|
27
|
-
ActionView::Template.class_eval do
|
28
|
-
include NewRelic::Agent::MethodTracer
|
29
|
-
add_method_tracer :render, 'View/#{(path_without_extension || @view.controller.newrelic_metric_path)[%r{^(/.*/)?(.*)$},2]}.#{@view.template_format}.#{extension}/Rendering'
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
DependencyDetection.defer do
|
35
|
-
@name = :old_rails_view
|
36
|
-
|
37
|
-
depends_on do
|
38
|
-
!NewRelic::Agent.config[:disable_view_instrumentation] &&
|
39
|
-
defined?(ActionController) && defined?(ActionController::Base) &&
|
40
|
-
defined?(Rails::VERSION::STRING) && Rails::VERSION::STRING =~ /^(1\.|2\.0)/ # Rails 1.* - 2.0
|
41
|
-
end
|
42
|
-
|
43
|
-
executes do
|
44
|
-
::NewRelic::Agent.logger.info 'Installing Rails 1.* - 2.0 View instrumentation'
|
45
|
-
end
|
46
|
-
|
47
|
-
executes do
|
48
|
-
ActionController::Base.class_eval do
|
49
|
-
include NewRelic::Agent::MethodTracer
|
50
|
-
add_method_tracer :render, 'View/#{newrelic_metric_path}/Rendering'
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
DependencyDetection.defer do
|
56
|
-
@name = :rails23_view
|
57
|
-
|
58
|
-
depends_on do
|
59
|
-
!NewRelic::Agent.config[:disable_view_instrumentation] &&
|
60
|
-
defined?(ActionView) && defined?(ActionView::Template) && defined?(ActionView::RenderablePartial) &&
|
61
|
-
defined?(Rails::VERSION::STRING) && Rails::VERSION::STRING =~ /^2\.[23]/
|
62
|
-
end
|
63
|
-
|
64
|
-
executes do
|
65
|
-
::NewRelic::Agent.logger.info 'Installing Rails 2.2 - 2.3 View instrumentation'
|
66
|
-
end
|
67
|
-
|
68
|
-
executes do
|
69
|
-
ActionView::RenderablePartial.module_eval do
|
70
|
-
include NewRelic::Agent::MethodTracer
|
71
|
-
add_method_tracer :render_partial, 'View/#{path[%r{^(/.*/)?(.*)$},2]}/Partial'
|
72
|
-
end
|
73
|
-
|
74
|
-
ActionView::Template.class_eval do
|
75
|
-
include NewRelic::Agent::MethodTracer
|
76
|
-
add_method_tracer :render, 'View/#{path[%r{^(/.*/)?(.*)$},2]}/Rendering'
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
DependencyDetection.defer do
|
82
|
-
@name = :rails2_controller
|
83
|
-
|
84
|
-
depends_on do
|
85
|
-
defined?(ActionController) && defined?(ActionController::Base)
|
86
|
-
end
|
87
|
-
|
88
|
-
depends_on do
|
89
|
-
defined?(Rails::VERSION::MAJOR) && Rails::VERSION::MAJOR.to_i == 2
|
90
|
-
end
|
91
|
-
|
92
|
-
executes do
|
93
|
-
::NewRelic::Agent.logger.info 'Installing Rails 2 Controller instrumentation'
|
94
|
-
end
|
95
|
-
|
96
|
-
executes do
|
97
|
-
ActionController::Base.class_eval do
|
98
|
-
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
99
|
-
|
100
|
-
def perform_action_with_newrelic_trace_wrapper
|
101
|
-
munged_params = (respond_to?(:filter_parameters)) ? filter_parameters(params) : params
|
102
|
-
munged_params = NewRelic::Agent::ParameterFiltering.filter_rails_request_parameters(munged_params)
|
103
|
-
|
104
|
-
perform_action_with_newrelic_trace(:params => munged_params) do
|
105
|
-
perform_action_without_newrelic_trace
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
alias_method :perform_action_without_newrelic_trace, :perform_action
|
110
|
-
alias_method :perform_action, :perform_action_with_newrelic_trace_wrapper
|
111
|
-
private :perform_action
|
112
|
-
|
113
|
-
# determine the path that is used in the metric name for
|
114
|
-
# the called controller action
|
115
|
-
def newrelic_metric_path(action_name_override = nil)
|
116
|
-
action_part = action_name_override || action_name
|
117
|
-
if action_name_override || self.class.action_methods.include?(action_part)
|
118
|
-
"#{self.class.controller_path}/#{action_part}"
|
119
|
-
else
|
120
|
-
"#{self.class.controller_path}/(other)"
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -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,32 +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
|
-
require 'new_relic/agent/instrumentation/action_controller_subscriber'
|
5
|
-
require 'new_relic/agent/prepend_supportability'
|
6
|
-
|
7
|
-
|
8
|
-
DependencyDetection.defer do
|
9
|
-
@name = :rails4_controller
|
10
|
-
|
11
|
-
depends_on do
|
12
|
-
defined?(::Rails::VERSION::MAJOR) && ::Rails::VERSION::MAJOR.to_i == 4
|
13
|
-
end
|
14
|
-
|
15
|
-
depends_on do
|
16
|
-
defined?(ActionController) && defined?(ActionController::Base)
|
17
|
-
end
|
18
|
-
|
19
|
-
executes do
|
20
|
-
::NewRelic::Agent.logger.info 'Installing Rails 4 Controller instrumentation'
|
21
|
-
end
|
22
|
-
|
23
|
-
executes do
|
24
|
-
class ActionController::Base
|
25
|
-
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
26
|
-
end
|
27
|
-
NewRelic::Agent::Instrumentation::ActionControllerSubscriber \
|
28
|
-
.subscribe(/^process_action.action_controller$/)
|
29
|
-
|
30
|
-
::NewRelic::Agent::PrependSupportability.record_metrics_for(::ActionController::Base)
|
31
|
-
end
|
32
|
-
end
|
@@ -1,27 +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
|
-
require 'new_relic/agent/instrumentation/action_view_subscriber'
|
5
|
-
require 'new_relic/agent/prepend_supportability'
|
6
|
-
|
7
|
-
DependencyDetection.defer do
|
8
|
-
@name = :rails4_view
|
9
|
-
|
10
|
-
depends_on do
|
11
|
-
defined?(::Rails::VERSION::MAJOR) && ::Rails::VERSION::MAJOR.to_i == 4
|
12
|
-
end
|
13
|
-
|
14
|
-
depends_on do
|
15
|
-
!NewRelic::Agent.config[:disable_view_instrumentation] &&
|
16
|
-
!NewRelic::Agent::Instrumentation::ActionViewSubscriber.subscribed?
|
17
|
-
end
|
18
|
-
|
19
|
-
executes do
|
20
|
-
::NewRelic::Agent.logger.info 'Installing Rails 4 view instrumentation'
|
21
|
-
end
|
22
|
-
|
23
|
-
executes do
|
24
|
-
NewRelic::Agent::Instrumentation::ActionViewSubscriber.subscribe(/render_.+\.action_view$/)
|
25
|
-
NewRelic::Agent::PrependSupportability.record_metrics_for(::ActionView::Base, ::ActionView::Template, ::ActionView::Renderer)
|
26
|
-
end
|
27
|
-
end
|
@@ -1,36 +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
|
-
require 'new_relic/agent/instrumentation/action_cable_subscriber'
|
5
|
-
require 'new_relic/agent/prepend_supportability'
|
6
|
-
|
7
|
-
DependencyDetection.defer do
|
8
|
-
@name = :rails5_action_cable
|
9
|
-
|
10
|
-
depends_on do
|
11
|
-
defined?(::Rails::VERSION::MAJOR) &&
|
12
|
-
::Rails::VERSION::MAJOR.to_i == 5 &&
|
13
|
-
defined?(::ActionCable)
|
14
|
-
end
|
15
|
-
|
16
|
-
depends_on do
|
17
|
-
!NewRelic::Agent.config[:disable_action_cable_instrumentation] &&
|
18
|
-
!NewRelic::Agent::Instrumentation::ActionCableSubscriber.subscribed?
|
19
|
-
end
|
20
|
-
|
21
|
-
executes do
|
22
|
-
::NewRelic::Agent.logger.info 'Installing Rails 5 Action Cable instrumentation'
|
23
|
-
end
|
24
|
-
|
25
|
-
executes do
|
26
|
-
# enumerate the specific events we want so that we do not get unexpected additions in the future
|
27
|
-
ActiveSupport::Notifications.subscribe(/(perform_action|transmit)\.action_cable/,
|
28
|
-
NewRelic::Agent::Instrumentation::ActionCableSubscriber.new)
|
29
|
-
|
30
|
-
ActiveSupport.on_load(:action_cable) do
|
31
|
-
::NewRelic::Agent::PrependSupportability.record_metrics_for(
|
32
|
-
::ActionCable::Engine,
|
33
|
-
::ActionCable::RemoteConnections)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
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
|
-
require 'new_relic/agent/instrumentation/action_controller_subscriber'
|
5
|
-
require 'new_relic/agent/prepend_supportability'
|
6
|
-
|
7
|
-
|
8
|
-
DependencyDetection.defer do
|
9
|
-
@name = :rails5_controller
|
10
|
-
|
11
|
-
depends_on do
|
12
|
-
defined?(::Rails::VERSION::MAJOR) && ::Rails::VERSION::MAJOR.to_i == 5
|
13
|
-
end
|
14
|
-
|
15
|
-
depends_on do
|
16
|
-
defined?(ActionController) && (defined?(ActionController::Base) || defined?(ActionController::API))
|
17
|
-
end
|
18
|
-
|
19
|
-
executes do
|
20
|
-
::NewRelic::Agent.logger.info 'Installing Rails 5 Controller instrumentation'
|
21
|
-
end
|
22
|
-
|
23
|
-
executes do
|
24
|
-
ActiveSupport.on_load(:action_controller) do
|
25
|
-
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
26
|
-
|
27
|
-
NewRelic::Agent::PrependSupportability.record_metrics_for(self)
|
28
|
-
end
|
29
|
-
|
30
|
-
NewRelic::Agent::Instrumentation::ActionControllerSubscriber \
|
31
|
-
.subscribe(/^process_action.action_controller$/)
|
32
|
-
end
|
33
|
-
end
|
@@ -1,27 +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
|
-
require 'new_relic/agent/instrumentation/action_view_subscriber'
|
5
|
-
require 'new_relic/agent/prepend_supportability'
|
6
|
-
|
7
|
-
DependencyDetection.defer do
|
8
|
-
@name = :rails5_view
|
9
|
-
|
10
|
-
depends_on do
|
11
|
-
defined?(::Rails::VERSION::MAJOR) && ::Rails::VERSION::MAJOR.to_i == 5
|
12
|
-
end
|
13
|
-
|
14
|
-
depends_on do
|
15
|
-
!NewRelic::Agent.config[:disable_view_instrumentation] &&
|
16
|
-
!NewRelic::Agent::Instrumentation::ActionViewSubscriber.subscribed?
|
17
|
-
end
|
18
|
-
|
19
|
-
executes do
|
20
|
-
NewRelic::Agent.logger.info 'Installing Rails 5 view instrumentation'
|
21
|
-
end
|
22
|
-
|
23
|
-
executes do
|
24
|
-
NewRelic::Agent::Instrumentation::ActionViewSubscriber.subscribe(/render_.+\.action_view$/)
|
25
|
-
NewRelic::Agent::PrependSupportability.record_metrics_for(::ActionView::Base, ::ActionView::Template, ::ActionView::Renderer)
|
26
|
-
end
|
27
|
-
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
|