newrelic_rpm 6.15.0 → 8.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +7 -1
- data/.rubocop.yml +1817 -0
- data/.rubocop_todo.yml +59 -0
- data/.simplecov +15 -0
- data/.snyk +11 -0
- data/.yardopts +1 -0
- data/Brewfile +12 -0
- data/CHANGELOG.md +754 -40
- data/CONTRIBUTING.md +32 -5
- data/DOCKER.md +167 -0
- data/Dockerfile +10 -0
- data/Gemfile +0 -1
- data/Guardfile +9 -8
- data/LICENSE +0 -6
- data/README.md +21 -20
- data/Rakefile +27 -29
- data/THIRD_PARTY_NOTICES.md +14 -199
- data/Thorfile +5 -0
- data/bin/newrelic +3 -2
- data/bin/newrelic_cmd +1 -0
- data/bin/nrdebug +76 -53
- data/config.dot +5 -5
- data/docker-compose.yml +107 -0
- data/init.rb +4 -6
- data/install.rb +2 -2
- data/lefthook.yml +9 -0
- data/lib/new_relic/agent/adaptive_sampler.rb +13 -9
- data/lib/new_relic/agent/agent/shutdown.rb +35 -0
- data/lib/new_relic/agent/agent/special_startup.rb +72 -0
- data/lib/new_relic/agent/agent/start_worker_thread.rb +163 -0
- data/lib/new_relic/agent/agent/startup.rb +197 -0
- data/lib/new_relic/agent/agent.rb +178 -555
- data/lib/new_relic/agent/agent_logger.rb +23 -19
- data/lib/new_relic/agent/attribute_filter.rb +66 -47
- data/lib/new_relic/agent/attribute_processing.rb +7 -7
- data/lib/new_relic/agent/attributes.rb +5 -4
- data/lib/new_relic/agent/audit_logger.rb +8 -3
- data/lib/new_relic/agent/autostart.rb +20 -19
- data/lib/new_relic/agent/chained_call.rb +1 -1
- data/lib/new_relic/agent/commands/agent_command.rb +3 -3
- data/lib/new_relic/agent/commands/agent_command_router.rb +12 -11
- data/lib/new_relic/agent/commands/thread_profiler_session.rb +9 -7
- data/lib/new_relic/agent/configuration/default_source.rb +1728 -1194
- data/lib/new_relic/agent/configuration/dotted_hash.rb +6 -5
- data/lib/new_relic/agent/configuration/environment_source.rb +11 -9
- data/lib/new_relic/agent/configuration/event_harvest_config.rb +40 -17
- data/lib/new_relic/agent/configuration/high_security_source.rb +9 -8
- data/lib/new_relic/agent/configuration/manager.rb +82 -69
- data/lib/new_relic/agent/configuration/manual_source.rb +1 -1
- data/lib/new_relic/agent/configuration/mask_defaults.rb +3 -3
- data/lib/new_relic/agent/configuration/security_policy_source.rb +90 -77
- data/lib/new_relic/agent/configuration/server_source.rb +21 -19
- data/lib/new_relic/agent/configuration/yaml_source.rb +31 -7
- data/lib/new_relic/agent/configuration.rb +1 -1
- data/lib/new_relic/agent/connect/request_builder.rb +18 -18
- data/lib/new_relic/agent/connect/response_handler.rb +5 -8
- data/lib/new_relic/agent/custom_event_aggregator.rb +14 -14
- data/lib/new_relic/agent/database/explain_plan_helpers.rb +4 -5
- data/lib/new_relic/agent/database/obfuscation_helpers.rb +14 -13
- data/lib/new_relic/agent/database/obfuscator.rb +2 -2
- data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +3 -3
- data/lib/new_relic/agent/database.rb +53 -47
- data/lib/new_relic/agent/database_adapter.rb +3 -1
- data/lib/new_relic/agent/datastores/metric_helper.rb +17 -18
- data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +7 -6
- data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +6 -10
- data/lib/new_relic/agent/datastores/mongo.rb +6 -11
- data/lib/new_relic/agent/datastores/nosql_obfuscator.rb +41 -0
- data/lib/new_relic/agent/datastores/redis.rb +5 -11
- data/lib/new_relic/agent/datastores.rb +11 -13
- data/lib/new_relic/agent/deprecator.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +10 -10
- data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +39 -32
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +22 -22
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +19 -19
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +50 -52
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +5 -6
- data/lib/new_relic/agent/distributed_tracing/trace_context.rb +76 -77
- data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +39 -38
- data/lib/new_relic/agent/distributed_tracing.rb +32 -100
- data/lib/new_relic/agent/encoding_normalizer.rb +4 -2
- data/lib/new_relic/agent/error_collector.rb +73 -54
- data/lib/new_relic/agent/error_event_aggregator.rb +4 -5
- data/lib/new_relic/agent/error_filter.rb +174 -0
- data/lib/new_relic/agent/error_trace_aggregator.rb +4 -3
- data/lib/new_relic/agent/event_aggregator.rb +22 -21
- data/lib/new_relic/agent/event_buffer.rb +7 -8
- data/lib/new_relic/agent/event_listener.rb +1 -2
- data/lib/new_relic/agent/event_loop.rb +25 -23
- data/lib/new_relic/agent/external.rb +11 -44
- data/lib/new_relic/agent/guid_generator.rb +4 -11
- data/lib/new_relic/agent/harvester.rb +4 -5
- data/lib/new_relic/agent/heap.rb +6 -8
- data/lib/new_relic/agent/hostname.rb +20 -13
- data/lib/new_relic/agent/http_clients/abstract.rb +10 -11
- data/lib/new_relic/agent/http_clients/curb_wrappers.rb +6 -11
- data/lib/new_relic/agent/http_clients/excon_wrappers.rb +8 -9
- data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +4 -5
- data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +2 -4
- data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +8 -4
- data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +4 -5
- data/lib/new_relic/agent/http_clients/uri_util.rb +1 -3
- data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +8 -8
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +38 -31
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +12 -13
- data/lib/new_relic/agent/instrumentation/active_job.rb +14 -7
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +20 -6
- data/lib/new_relic/agent/instrumentation/active_record.rb +29 -27
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +71 -61
- data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +31 -44
- data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +4 -4
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +27 -20
- data/lib/new_relic/agent/instrumentation/active_storage.rb +2 -2
- data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +18 -15
- 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/acts_as_solr.rb +18 -10
- data/lib/new_relic/agent/instrumentation/authlogic.rb +10 -2
- 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 +11 -154
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +68 -58
- 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 +11 -243
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +65 -54
- 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 +29 -53
- 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 +5 -5
- data/lib/new_relic/agent/instrumentation/excon.rb +22 -24
- 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 +11 -112
- 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 +10 -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 +4 -5
- 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 +57 -128
- 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 +56 -72
- data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +13 -12
- data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +5 -7
- data/lib/new_relic/agent/instrumentation/mongo.rb +5 -136
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +21 -18
- data/lib/new_relic/agent/instrumentation/net_http/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/{net_prepend.rb → net_http/instrumentation.rb} +13 -13
- 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 +10 -9
- 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 +20 -58
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +3 -3
- data/lib/new_relic/agent/instrumentation/queue_time.rb +8 -9
- 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 +30 -140
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +16 -52
- data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +5 -4
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +3 -3
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +3 -2
- data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +13 -3
- data/lib/new_relic/agent/instrumentation/rake/chain.rb +20 -0
- data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +149 -0
- data/lib/new_relic/agent/instrumentation/rake/prepend.rb +14 -0
- data/lib/new_relic/agent/instrumentation/rake.rb +16 -157
- 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 +72 -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 +18 -107
- 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 +28 -39
- data/lib/new_relic/agent/instrumentation/sequel.rb +14 -16
- data/lib/new_relic/agent/instrumentation/sequel_helper.rb +2 -2
- 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 +23 -64
- data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +55 -0
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +30 -36
- 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 +2 -2
- data/lib/new_relic/agent/instrumentation/sinatra.rb +34 -163
- data/lib/new_relic/agent/instrumentation/sunspot.rb +11 -3
- 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 +12 -91
- data/lib/new_relic/agent/instrumentation.rb +1 -1
- data/lib/new_relic/agent/internal_agent_error.rb +2 -2
- data/lib/new_relic/agent/javascript_instrumentor.rb +47 -41
- 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 +1 -1
- data/lib/new_relic/agent/log_priority.rb +20 -0
- data/lib/new_relic/agent/logging.rb +24 -21
- data/lib/new_relic/agent/memory_logger.rb +2 -2
- data/lib/new_relic/agent/messaging.rb +65 -81
- data/lib/new_relic/agent/method_tracer.rb +154 -149
- data/lib/new_relic/agent/method_tracer_helpers.rb +85 -3
- data/lib/new_relic/agent/monitors/cross_app_monitor.rb +25 -17
- data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +5 -4
- data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -2
- data/lib/new_relic/agent/monitors/synthetics_monitor.rb +6 -9
- data/lib/new_relic/agent/monitors.rb +6 -7
- data/lib/new_relic/agent/new_relic_service/encoders.rb +6 -6
- data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +5 -5
- data/lib/new_relic/agent/new_relic_service/marshaller.rb +2 -2
- data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +5 -4
- data/lib/new_relic/agent/new_relic_service.rb +248 -196
- data/lib/new_relic/agent/{noticible_error.rb → noticeable_error.rb} +2 -5
- data/lib/new_relic/agent/null_logger.rb +7 -3
- data/lib/new_relic/agent/obfuscator.rb +8 -10
- data/lib/new_relic/agent/parameter_filtering.rb +24 -10
- data/lib/new_relic/agent/payload_metric_mapping.rb +9 -10
- data/lib/new_relic/agent/pipe_channel_manager.rb +27 -17
- data/lib/new_relic/agent/pipe_service.rb +8 -5
- data/lib/new_relic/agent/prepend_supportability.rb +2 -2
- data/lib/new_relic/agent/priority_sampled_buffer.rb +8 -11
- data/lib/new_relic/agent/range_extensions.rb +8 -28
- data/lib/new_relic/agent/rules_engine/replacement_rule.rb +11 -11
- data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +13 -13
- data/lib/new_relic/agent/rules_engine.rb +5 -4
- data/lib/new_relic/agent/sampler.rb +3 -4
- data/lib/new_relic/agent/sampler_collection.rb +3 -4
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +3 -2
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +12 -9
- data/lib/new_relic/agent/samplers/memory_sampler.rb +24 -13
- data/lib/new_relic/agent/samplers/object_sampler.rb +1 -1
- data/lib/new_relic/agent/samplers/vm_sampler.rb +21 -19
- data/lib/new_relic/agent/span_event_aggregator.rb +12 -12
- data/lib/new_relic/agent/span_event_primitive.rb +62 -56
- data/lib/new_relic/agent/sql_sampler.rb +18 -18
- data/lib/new_relic/agent/stats.rb +78 -41
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +9 -11
- data/lib/new_relic/agent/stats_engine/stats_hash.rb +12 -13
- data/lib/new_relic/agent/stats_engine.rb +8 -8
- data/lib/new_relic/agent/synthetics_event_aggregator.rb +7 -8
- data/lib/new_relic/agent/system_info.rb +85 -65
- data/lib/new_relic/agent/threading/agent_thread.rb +18 -14
- data/lib/new_relic/agent/threading/backtrace_node.rb +12 -13
- data/lib/new_relic/agent/threading/backtrace_service.rb +14 -14
- data/lib/new_relic/agent/threading/thread_profile.rb +23 -23
- data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -1
- data/lib/new_relic/agent/tracer.rb +76 -85
- data/lib/new_relic/agent/transaction/abstract_segment.rb +103 -40
- data/lib/new_relic/agent/transaction/datastore_segment.rb +21 -17
- data/lib/new_relic/agent/transaction/distributed_tracer.rb +63 -56
- data/lib/new_relic/agent/transaction/distributed_tracing.rb +43 -44
- data/lib/new_relic/agent/transaction/external_request_segment.rb +44 -34
- data/lib/new_relic/agent/transaction/message_broker_segment.rb +31 -36
- data/lib/new_relic/agent/transaction/request_attributes.rb +35 -35
- data/lib/new_relic/agent/transaction/segment.rb +14 -10
- data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -3
- data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -1
- data/lib/new_relic/agent/transaction/trace.rb +15 -11
- data/lib/new_relic/agent/transaction/trace_builder.rb +10 -10
- data/lib/new_relic/agent/transaction/trace_context.rb +35 -35
- data/lib/new_relic/agent/transaction/trace_node.rb +25 -24
- data/lib/new_relic/agent/transaction/tracing.rb +14 -11
- data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +4 -4
- data/lib/new_relic/agent/transaction.rb +164 -145
- data/lib/new_relic/agent/transaction_error_primitive.rb +27 -25
- data/lib/new_relic/agent/transaction_event_aggregator.rb +12 -12
- data/lib/new_relic/agent/transaction_event_primitive.rb +32 -33
- data/lib/new_relic/agent/transaction_event_recorder.rb +16 -15
- data/lib/new_relic/agent/transaction_metrics.rb +10 -9
- data/lib/new_relic/agent/transaction_sampler.rb +5 -6
- data/lib/new_relic/agent/transaction_time_aggregator.rb +26 -25
- data/lib/new_relic/agent/utilization/aws.rb +33 -3
- data/lib/new_relic/agent/utilization/azure.rb +3 -3
- data/lib/new_relic/agent/utilization/gcp.rb +7 -7
- data/lib/new_relic/agent/utilization/pcf.rb +5 -4
- data/lib/new_relic/agent/utilization/vendor.rb +43 -28
- data/lib/new_relic/agent/utilization_data.rb +7 -5
- data/lib/new_relic/agent/vm/jruby_vm.rb +1 -1
- data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +2 -2
- data/lib/new_relic/agent/vm/mri_vm.rb +40 -15
- data/lib/new_relic/agent/vm/snapshot.rb +5 -5
- data/lib/new_relic/agent/vm.rb +1 -1
- data/lib/new_relic/agent/worker_loop.rb +10 -12
- data/lib/new_relic/agent.rb +64 -75
- data/lib/new_relic/cli/command.rb +20 -22
- data/lib/new_relic/cli/commands/deployments.rb +92 -42
- data/lib/new_relic/cli/commands/install.rb +12 -15
- data/lib/new_relic/coerce.rb +15 -13
- data/lib/new_relic/collection_helper.rb +50 -48
- data/lib/new_relic/constants.rb +1 -4
- data/lib/new_relic/control/class_methods.rb +3 -3
- data/lib/new_relic/control/frameworks/external.rb +2 -2
- data/lib/new_relic/control/frameworks/rails.rb +23 -17
- data/lib/new_relic/control/frameworks/rails3.rb +3 -4
- data/lib/new_relic/control/frameworks/rails4.rb +1 -1
- data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -1
- data/lib/new_relic/control/frameworks/ruby.rb +3 -3
- data/lib/new_relic/control/frameworks/sinatra.rb +7 -1
- data/lib/new_relic/control/frameworks.rb +1 -1
- data/lib/new_relic/control/instance_methods.rb +23 -45
- data/lib/new_relic/control/instrumentation.rb +39 -11
- data/lib/new_relic/control/private_instance_methods.rb +48 -0
- data/lib/new_relic/control/server_methods.rb +3 -4
- data/lib/new_relic/control.rb +1 -2
- data/lib/new_relic/delayed_job_injection.rb +1 -1
- data/lib/new_relic/dependency_detection.rb +126 -19
- data/lib/new_relic/environment_report.rb +40 -32
- data/lib/new_relic/helper.rb +48 -7
- data/lib/new_relic/language_support.rb +29 -5
- data/lib/new_relic/latest_changes.rb +7 -6
- data/lib/new_relic/local_environment.rb +24 -18
- data/lib/new_relic/metric_data.rb +31 -26
- data/lib/new_relic/metric_spec.rb +8 -6
- data/lib/new_relic/noticed_error.rb +22 -30
- data/lib/new_relic/rack/agent_hooks.rb +1 -1
- data/lib/new_relic/rack/agent_middleware.rb +5 -3
- data/lib/new_relic/rack/browser_monitoring.rb +133 -123
- data/lib/new_relic/rack.rb +1 -1
- data/lib/new_relic/recipes/capistrano3.rb +3 -61
- data/lib/new_relic/recipes/capistrano_legacy.rb +23 -26
- data/lib/new_relic/recipes/helpers/send_deployment.rb +69 -0
- data/lib/new_relic/recipes.rb +1 -1
- data/lib/new_relic/supportability_helper.rb +9 -10
- data/lib/new_relic/traced_thread.rb +35 -0
- data/lib/new_relic/version.rb +6 -17
- data/lib/newrelic_rpm.rb +11 -35
- data/lib/sequel/extensions/newrelic_instrumentation.rb +12 -15
- data/lib/sequel/plugins/newrelic_instrumentation.rb +4 -10
- data/lib/tasks/all.rb +3 -3
- data/lib/tasks/config.rake +22 -117
- data/lib/tasks/coverage_report.rake +28 -0
- data/lib/tasks/helpers/config.html.erb +21 -0
- data/lib/tasks/{config.text.erb → helpers/config.text.erb} +0 -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 +124 -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 +5 -32
- data/lib/tasks/newrelic.rb +1 -1
- data/lib/tasks/tests.rake +10 -15
- data/newrelic.yml +648 -3
- data/newrelic_rpm.gemspec +25 -25
- data/recipes/newrelic.rb +2 -2
- data/test/agent_helper.rb +219 -178
- metadata +164 -122
- data/ROADMAP.md +0 -24
- data/bin/mongrel_rpm +0 -33
- data/cert/cacert.pem +0 -1177
- 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/instrumentation/excon/connection.rb +0 -49
- data/lib/new_relic/agent/instrumentation/http.rb +0 -49
- 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 -70
- 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/supported_versions.rb +0 -275
- data/lib/new_relic/control/frameworks/merb.rb +0 -29
- data/lib/tasks/config.html.erb +0 -32
data/CONTRIBUTING.md
CHANGED
@@ -6,8 +6,7 @@ development team.
|
|
6
6
|
|
7
7
|
When contributing, keep in mind that the agent runs in a wide variety of Ruby
|
8
8
|
language implementations (e.g. 2.x.x, jruby, etc.) as well as a wide variety of
|
9
|
-
application environments (e.g. Rails, Sinatra, roll-your-own, etc.) See [Ruby agent requirements and supported frameworks]
|
10
|
-
(https://docs.newrelic.com/docs/agents/ruby-agent/getting-started/ruby-agent-requirements-supported-frameworks)
|
9
|
+
application environments (e.g. Rails, Sinatra, roll-your-own, etc.) See [Ruby agent requirements and supported frameworks](https://docs.newrelic.com/docs/agents/ruby-agent/getting-started/ruby-agent-requirements-supported-frameworks)
|
11
10
|
for the current full list.
|
12
11
|
|
13
12
|
Because of this, we need to be more defensive in our coding practices than most
|
@@ -32,7 +31,7 @@ incorrect.
|
|
32
31
|
|
33
32
|
If you are planning on contributing a new feature or an otherwise complex
|
34
33
|
contribution, we kindly ask you to start a conversation with the maintainer team
|
35
|
-
by opening up
|
34
|
+
by opening up a GitHub issue first.
|
36
35
|
|
37
36
|
|
38
37
|
### General Guidelines
|
@@ -67,7 +66,8 @@ issues](../../issues?q=is%3Aissue+is%3Aclosed).
|
|
67
66
|
### Pull Requests
|
68
67
|
|
69
68
|
We can only accept PRs for version v6.12.0 or greater due to open source
|
70
|
-
licensing restrictions.
|
69
|
+
licensing restrictions. Please set the merge branch to `dev` unless the issue
|
70
|
+
states otherwise.
|
71
71
|
|
72
72
|
### Code of Conduct
|
73
73
|
|
@@ -85,6 +85,29 @@ release from this repo, use the appropriate tag. New Relic usually pushes beta
|
|
85
85
|
versions of a release to a working branch before tagging them for General
|
86
86
|
Availability.
|
87
87
|
|
88
|
+
The `main` branch houses the code from the latest release. The `dev` branch
|
89
|
+
includes unreleased work. Please create all new branches off of `dev`.
|
90
|
+
|
91
|
+
## Development Environment Setup
|
92
|
+
|
93
|
+
1. Fork and clone the repo locally
|
94
|
+
- Fork the repository inside GitHub
|
95
|
+
- `git clone git@github.com:<gh username>/newrelic-ruby-agent.git`
|
96
|
+
1. Pick a Ruby version
|
97
|
+
- Use rbenv, rvm, chruby, asdf, etc. to install any version of Ruby between 2.2 up to the latest stable version
|
98
|
+
1. Install development dependencies
|
99
|
+
- `bundle install`
|
100
|
+
1. Check that your env is setup correctly
|
101
|
+
- `bundle exec rake`
|
102
|
+
|
103
|
+
**Optional:** Install [lefthook](https://github.com/evilmartians/lefthook) to
|
104
|
+
integrate our team's git hooks, such as [rubocop](https://github.com/rubocop/rubocop)
|
105
|
+
linting into your workflow.
|
106
|
+
|
107
|
+
**Note:** These setup instructions will not allow you to run the entire test
|
108
|
+
suite. Some of our suites require services such as MySQL, Postgres, Redis, and
|
109
|
+
others to run.
|
110
|
+
|
88
111
|
## Testing
|
89
112
|
|
90
113
|
The agent includes a suite of unit and functional tests which should be used to
|
@@ -105,7 +128,7 @@ This will run the unit tests in standalone mode. You can run against a specific
|
|
105
128
|
by passing the version name (which should match the name of a subdirectory in test/environments)
|
106
129
|
as an argument to the test:env rake task, like this:
|
107
130
|
|
108
|
-
bundle exec rake test:env[rails60]
|
131
|
+
bundle exec rake 'test:env[rails60]'
|
109
132
|
|
110
133
|
These tests are setup to run automatically in
|
111
134
|
[GitHub Actions](https://github.com/newrelic/newrelic-ruby-agent/actions) under several
|
@@ -141,6 +164,10 @@ These tests can be run by invoking:
|
|
141
164
|
More details are available in
|
142
165
|
[test/multiverse/README.md](https://github.com/newrelic/newrelic-ruby-agent/blob/main/test/multiverse/README.md).
|
143
166
|
|
167
|
+
### Leveraging Docker for Development and/or Testing
|
168
|
+
|
169
|
+
See [DOCKER.md](DOCKER.md).
|
170
|
+
|
144
171
|
## Contributor License Agreement
|
145
172
|
|
146
173
|
Keep in mind that when you submit your Pull Request, you'll need to sign the CLA
|
data/DOCKER.md
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
# Using Docker with the New Relic Ruby Agent
|
2
|
+
|
3
|
+
These instructions will guide you through the process of setting up Docker for
|
4
|
+
use with developing the New Relic Ruby Agent. The use of Docker containers can
|
5
|
+
provide for a consistent experience free from machine specific issues.
|
6
|
+
|
7
|
+
## Quick Start
|
8
|
+
|
9
|
+
```shell
|
10
|
+
# unit tests (Ruby only)
|
11
|
+
$ docker build -t newrelic_rpm .
|
12
|
+
$ docker run --rm newrelic_rpm
|
13
|
+
|
14
|
+
# or
|
15
|
+
|
16
|
+
# functional tests (MySQL, PostgreSQL, Redis, etc.)
|
17
|
+
$ docker-compose up
|
18
|
+
$ docker-compose exec app bundle exec rake test:all
|
19
|
+
```
|
20
|
+
|
21
|
+
|
22
|
+
## Install Docker
|
23
|
+
|
24
|
+
You will need to have [Docker Desktop](https://www.docker.com/) installed and
|
25
|
+
running on your machine.
|
26
|
+
|
27
|
+
If you are using on macOS and using [Homebrew](https://brew.sh/), Docker can be
|
28
|
+
installed as a cask via:
|
29
|
+
|
30
|
+
```shell
|
31
|
+
$ brew install --cask docker
|
32
|
+
```
|
33
|
+
|
34
|
+
and then launched via the `/Applications/Docker.app` launcher that is installed.
|
35
|
+
|
36
|
+
For alternatives to using macOS with Homebrew, see Docker's
|
37
|
+
[Get Started Guide](https://www.docker.com/get-started).
|
38
|
+
|
39
|
+
|
40
|
+
## Clone the project
|
41
|
+
|
42
|
+
Use git to clone the [newrelic/newrelic-ruby-agent](https://github.com/newrelic/newrelic-ruby-agent)
|
43
|
+
project.
|
44
|
+
|
45
|
+
The [Dockerfile](Dockerfile) and [docker-compose.yml](docker-compose.yml)
|
46
|
+
files are located in the root of the project, where this `DOCKER.md`
|
47
|
+
document resides.
|
48
|
+
|
49
|
+
|
50
|
+
## Using just the Dockerfile (unit tests and standalone dev only)
|
51
|
+
|
52
|
+
The project `Dockerfile` can be used by itself to run the project unit tests.
|
53
|
+
Docker Compose and the project `docker-compose.yml` file will be needed to
|
54
|
+
run functional tests which involve communicating with data systems such as
|
55
|
+
PostgreSQL and Redis.
|
56
|
+
|
57
|
+
To run the unit tests using `Dockerfile` by itself, first change
|
58
|
+
directories to the root of the project, then build an image, and
|
59
|
+
finally run a container from the image:
|
60
|
+
|
61
|
+
```shell
|
62
|
+
$ cd /path/to/project/git/clone
|
63
|
+
$ docker build -t newrelic_rpm .
|
64
|
+
$ docker run --rm newrelic_rpm
|
65
|
+
```
|
66
|
+
|
67
|
+
The `Dockerfile` specifies a default Ruby version to test with. To override this
|
68
|
+
version, pass the `ruby_version` build arg like so when building the image:
|
69
|
+
|
70
|
+
```shell
|
71
|
+
docker build --build-arg ruby_version=2.7 .
|
72
|
+
```
|
73
|
+
|
74
|
+
**Legend:**
|
75
|
+
* `build -t <TAG>` applies a tag to the image during building.
|
76
|
+
* `.` indicates "here" and tells Docker that the `Dockerfile` file can be found
|
77
|
+
in the current directory
|
78
|
+
* `run --rm` tells Docker to remove the container after the tests complete.
|
79
|
+
* `--build-arg ruby_version=<RUBY VERSION>` specifies that a given Ruby version should be used (use MAJOR.MINOR or optionally MAJOR.MINOR.PATCH)
|
80
|
+
|
81
|
+
|
82
|
+
## Using Docker Compose (for functional tests and developing with services)
|
83
|
+
|
84
|
+
Docker Compose launches multiple containers simultaneously to support the
|
85
|
+
running of the functional tests that require a variety of data handling
|
86
|
+
server applications such as PostgreSQL, Redis, memcached, etc. Each one of
|
87
|
+
these server applications uses its own container and then there's a Ruby
|
88
|
+
container (referred to as the "app" container) that runs the Minitest tests
|
89
|
+
while connecting to the other containers.
|
90
|
+
|
91
|
+
In one shell session, change to the root of the project and then bring up all
|
92
|
+
containers with Docker Compose:
|
93
|
+
|
94
|
+
```shell
|
95
|
+
$ docker-compose up
|
96
|
+
```
|
97
|
+
|
98
|
+
By default, `docker-compose` will use the default Ruby version specified in the
|
99
|
+
`Dockerfile` file. To override this version with a custom desired version, set
|
100
|
+
the `RUBY_VERSION` environment variable before calling `docker-compose`,
|
101
|
+
like so:
|
102
|
+
|
103
|
+
```shell
|
104
|
+
RUBY_VERSION=3.0 docker-compose up
|
105
|
+
```
|
106
|
+
|
107
|
+
In a separate shell session (probably in a separate terminal split, tab, or
|
108
|
+
window), execute the 'test:all' rake task to test all standard, environment,
|
109
|
+
and multiverse tests:
|
110
|
+
|
111
|
+
```shell
|
112
|
+
$ docker-compose exec app bundle exec rake test:all
|
113
|
+
```
|
114
|
+
|
115
|
+
In lieu of running the tests, an interactive Bash shell can be
|
116
|
+
launched against the running Ruby app container for development and/or
|
117
|
+
debugging. While the `docker-compose up` shell session is still running,
|
118
|
+
bring up an additional local shell session and run the following:
|
119
|
+
|
120
|
+
```shell
|
121
|
+
$ docker-compose exec app bash
|
122
|
+
```
|
123
|
+
|
124
|
+
You will be dropped at a Bash prompt as the "relic" user, with "ruby" and
|
125
|
+
"bundle" in your PATH.
|
126
|
+
|
127
|
+
|
128
|
+
## Output
|
129
|
+
|
130
|
+
When using Docker Compose, one shell session will produce STDOUT output that
|
131
|
+
pertains to all of the services (MySQL, MongoDB, etc.) and the other shell
|
132
|
+
session will produce STDOUT output related to the Ruby based functional tests.
|
133
|
+
Both streams of output may provide information about any errors or warnings
|
134
|
+
that take place.
|
135
|
+
|
136
|
+
|
137
|
+
## Cleanup
|
138
|
+
|
139
|
+
If the project `Dockerfile` is being used without Docker Compose, then use
|
140
|
+
`docker ps` to show information about containers and `docker images`
|
141
|
+
for information about images. The `docker stop`, `docker kill`, `docker rm`
|
142
|
+
and `docker rmi` commands can be used with the appropriate container and image
|
143
|
+
ids. Run `docker --help` or read through the hosted [CLI documentation](https://docs.docker.com/engine/reference/commandline/docker/).
|
144
|
+
|
145
|
+
When Docker Compose is used, invoking `ctrl-c` in the shell session that is
|
146
|
+
running the `docker-compose up` command should suffice to prompt Docker Compose
|
147
|
+
to shut down all running containers. Otherwise, `docker-compose down` can be
|
148
|
+
ran after the `docker-compose up` process has been stopped. All relevant
|
149
|
+
containers and images can then be optionally discarded using the `docker` CLI
|
150
|
+
commands described in the previous paragraph.
|
151
|
+
|
152
|
+
Use `docker ps -a` to show a list of all containers. Pass a container id to
|
153
|
+
`docker rm` (ex: `docker rm 5c15ee2f1c4f`) to remove it.
|
154
|
+
|
155
|
+
Use `docker images` to show a list of all images. Typically, you'll want to
|
156
|
+
keep these images if you plan on running Docker with them again in the future.
|
157
|
+
If you are done with them, you can pass an image id to `docker rmi` to remove
|
158
|
+
an image (ex: `docker rmi 4253856b2570`).
|
159
|
+
|
160
|
+
## Questions, Feature Requests, Contributions, etc.
|
161
|
+
|
162
|
+
The maintainers of New Relic's Ruby agent project are hopeful that the use of
|
163
|
+
containers and these instructions can provide consistency and a lowered barrier
|
164
|
+
of entry when it comes to providing contributions to the agent project itself.
|
165
|
+
|
166
|
+
For questions, feature requests, proposals to support Podman, PRs to improve
|
167
|
+
behavior or documentation, etc., please see [CONTRIBUTING.md](CONTRIBUTING.md).
|
data/Dockerfile
ADDED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -1,24 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require './test/multiverse/lib/multiverse/bundler_patch'
|
2
3
|
|
3
|
-
test_folders = Dir.glob("test/new_relic/*").select{|f| File.directory?(f)}
|
4
|
-
test_folders += Dir.glob("test/new_relic/**/*").select{|f| File.directory?(f)}
|
4
|
+
test_folders = Dir.glob("test/new_relic/*").select { |f| File.directory?(f) }
|
5
|
+
test_folders += Dir.glob("test/new_relic/**/*").select { |f| File.directory?(f) }
|
5
6
|
|
6
|
-
rake_lib_path = Bundler.with_unbundled_env{ `bundle exec gem which rake`.chomp.gsub("lib/rake.rb", "lib") }
|
7
|
-
ruby_options = %
|
7
|
+
rake_lib_path = Bundler.with_unbundled_env { `bundle exec gem which rake`.chomp.gsub("lib/rake.rb", "lib") }
|
8
|
+
ruby_options = %(-w -I"#{rake_lib_path}" "#{rake_lib_path}/rake/rake_test_loader.rb")
|
8
9
|
|
9
10
|
guard_options = {
|
10
11
|
spring: "bundle exec ruby #{ruby_options} ",
|
11
|
-
test_folders: ['test/new_relic'] + test_folders,
|
12
|
+
test_folders: ['test/new_relic'] + test_folders,
|
12
13
|
all_after_pass: false,
|
13
14
|
all_on_start: false
|
14
15
|
}
|
15
16
|
|
16
17
|
guard :minitest, guard_options do
|
17
|
-
watch(%r{^lib/(.+)\.rb$})
|
18
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
|
18
19
|
watch(%r{^test/.+_test\.rb$})
|
19
|
-
watch(%r{^test/rum/.*})
|
20
|
+
watch(%r{^test/rum/.*}) { "test/new_relic/rack/browser_monitoring_test.rb" }
|
20
21
|
watch(%r{^test/fixtures/cross_agent_tests/distributed_tracing/(.+).json}) { |m| "test/new_relic/agent/distributed_tracing/#{m[1]}_cross_agent_test.rb" }
|
21
|
-
watch('test/test_helper.rb')
|
22
|
+
watch('test/test_helper.rb') { "test/new_relic" }
|
22
23
|
watch('test/agent_helper.rb') { "test/new_relic" }
|
23
24
|
watch('lib/new_relic/agent/configuration/default_source.rb') { "test/new_relic/agent/configuration/orphan_configuration_test.rb" }
|
24
25
|
watch(%r{^lib/new_relic/agent/transaction/(.+).rb}) { |m| "test/new_relic/agent/distributed_tracing/#{m[1]}_cross_agent_test.rb" }
|
data/LICENSE
CHANGED
@@ -175,10 +175,6 @@
|
|
175
175
|
|
176
176
|
END OF TERMS AND CONDITIONS
|
177
177
|
|
178
|
-
Versions 6.12.0 and above for this project are licensed under
|
179
|
-
Apache 2.0. For prior versions of this project, please see the
|
180
|
-
LICENSE file in the root directory of that version for more information.
|
181
|
-
|
182
178
|
APPENDIX: How to apply the Apache License to your work.
|
183
179
|
|
184
180
|
To apply the Apache License to your work, attach the following
|
@@ -204,5 +200,3 @@
|
|
204
200
|
See the License for the specific language governing permissions and
|
205
201
|
limitations under the License.
|
206
202
|
|
207
|
-
|
208
|
-
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[![Community Plus
|
1
|
+
[![Blue banner - Community Plus: This code is currently maintained by New Relic engineering teams and delivered here in GitHub. See the README for troubleshooting and defect reporting instructions.](https://github.com/newrelic/opensource-website/raw/main/src/images/categories/Community_Plus.png)](https://opensource.newrelic.com/oss-category/#community-plus)
|
2
2
|
|
3
3
|
# New Relic Ruby Agent
|
4
4
|
|
@@ -8,9 +8,11 @@ You can also extend the agent's performance monitoring to
|
|
8
8
|
[collect and analyze business data](https://docs.newrelic.com/docs/agents/ruby-agent/getting-started/introduction-new-relic-ruby#business-data)
|
9
9
|
to help you improve the customer experience and make data-driven business decisions.
|
10
10
|
|
11
|
-
The New Relic Ruby
|
11
|
+
The New Relic Ruby agent is dual-purposed as either a Gem or a Rails plugin,
|
12
12
|
hosted on [github](https://github.com/newrelic/newrelic-ruby-agent).
|
13
13
|
|
14
|
+
[![Gem Version](https://badge.fury.io/rb/newrelic_rpm.svg)](https://badge.fury.io/rb/newrelic_rpm)
|
15
|
+
|
14
16
|
## Supported Environments
|
15
17
|
|
16
18
|
An up-to-date list of Ruby versions and frameworks for the latest agent
|
@@ -21,11 +23,13 @@ Environments" section below.
|
|
21
23
|
|
22
24
|
## Installing and Using
|
23
25
|
|
26
|
+
The latest released gem for the Ruby agent can be found at [Rubygems.org](https://rubygems.org/gems/newrelic_rpm)
|
27
|
+
|
24
28
|
### Quick Start
|
25
29
|
|
26
30
|
#### With Bundler
|
27
31
|
|
28
|
-
For using with Bundler, add the Ruby
|
32
|
+
For using with Bundler, add the Ruby agent to your project's Gemfile.
|
29
33
|
|
30
34
|
```ruby
|
31
35
|
gem 'newrelic_rpm'
|
@@ -47,7 +51,7 @@ and then require the New Relic Ruby agent in your Ruby start-up sequence:
|
|
47
51
|
require 'newrelic_rpm'
|
48
52
|
```
|
49
53
|
|
50
|
-
####
|
54
|
+
#### Other Environments
|
51
55
|
|
52
56
|
Assuming you have installed the agent per above, you may also need to tell the Ruby agent to start for some frameworks and non-framework environments. To do so, add the following to your Ruby start-up sequence start the agent:
|
53
57
|
|
@@ -67,16 +71,17 @@ For complete documentation on installing the New Relic Ruby agent, see the follo
|
|
67
71
|
* [GAE Flexible Environment](https://docs.newrelic.com/docs/agents/ruby-agent/installation/install-new-relic-ruby-agent-gae-flexible-environment)
|
68
72
|
* [Pure Rack Apps](http://docs.newrelic.com/docs/ruby/rack-middlewares)
|
69
73
|
* [Ruby agent and Heroku](https://docs.newrelic.com/docs/agents/ruby-agent/installation/ruby-agent-heroku)
|
70
|
-
* [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs)
|
74
|
+
* [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/monitor-ruby-background-processes)
|
71
75
|
* [Uninstall the Ruby agent](https://docs.newrelic.com/docs/agents/ruby-agent/installation/uninstall-ruby-agent)
|
72
76
|
|
73
77
|
### Recording Deploys
|
74
78
|
|
75
|
-
The Ruby
|
76
|
-
tool or Capistrano recipes. For more information on these features see
|
79
|
+
The Ruby agent supports recording deployments in New Relic via a command line
|
80
|
+
tool or Capistrano recipes. For more information on these features, see
|
77
81
|
[our deployment documentation](http://docs.newrelic.com/docs/ruby/recording-deployments-with-the-ruby-agent)
|
78
82
|
for more information.
|
79
83
|
|
84
|
+
|
80
85
|
## Support
|
81
86
|
|
82
87
|
Should you need assistance with New Relic products, you are in good hands with several support diagnostic tools and support channels.
|
@@ -85,7 +90,7 @@ This [troubleshooting framework](https://discuss.newrelic.com/t/ruby-troubleshoo
|
|
85
90
|
|
86
91
|
New Relic offers NRDiag, [a client-side diagnostic utility](https://docs.newrelic.com/docs/using-new-relic/cross-product-functions/troubleshooting/new-relic-diagnostics) that automatically detects common problems with New Relic agents. If NRDiag detects a problem, it suggests troubleshooting steps. NRDiag can also automatically attach troubleshooting data to a New Relic Support ticket.
|
87
92
|
|
88
|
-
If the issue has been confirmed as a bug or is a Feature request, please file a
|
93
|
+
If the issue has been confirmed as a bug or is a Feature request, please file a GitHub issue.
|
89
94
|
|
90
95
|
**Support Channels**
|
91
96
|
|
@@ -99,17 +104,14 @@ If the issue has been confirmed as a bug or is a Feature request, please file a
|
|
99
104
|
|
100
105
|
At New Relic we take your privacy and the security of your information seriously, and are committed to protecting your information. We must emphasize the importance of not sharing personal data in public forums, and ask all users to scrub logs and diagnostic information for sensitive information, whether personal, proprietary, or otherwise.
|
101
106
|
|
102
|
-
We define “Personal Data” as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address and email address.
|
107
|
+
We define “Personal Data” as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address, and email address.
|
103
108
|
|
104
109
|
Please review [New Relic’s General Data Privacy Notice](https://newrelic.com/termsandconditions/privacy) for more information.
|
105
110
|
|
106
|
-
## Roadmap
|
107
|
-
See our [roadmap](https://github.com/newrelic/newrelic-ruby-agent/blob/main/ROADMAP.md), to learn more about our product vision, understand our plans, and provide us valuable feedback.
|
108
|
-
|
109
111
|
## Contributing
|
110
112
|
|
111
|
-
We encourage contributions to improve the New Relic Ruby agent! Keep in mind when you submit your pull request, you'll need to sign the CLA via the click-through using CLA-Assistant. You only have to sign the CLA one time per project.
|
112
|
-
If you have any questions, or to execute our corporate CLA
|
113
|
+
We encourage contributions to improve the New Relic Ruby agent! Keep in mind when you submit your pull request, you'll need to sign the Contributor License Agreement (CLA) via the click-through using CLA-Assistant. You only have to sign the CLA one time per project.
|
114
|
+
If you have any questions, or to execute our corporate CLA (required if your contribution is on behalf of a company), please drop us an email at opensource@newrelic.com.
|
113
115
|
|
114
116
|
**A note about vulnerabilities**
|
115
117
|
|
@@ -124,13 +126,12 @@ the [New Relic Ruby agent](https://opensource.newrelic.com/projects/newrelic/new
|
|
124
126
|
|
125
127
|
## License
|
126
128
|
|
127
|
-
|
128
|
-
The New Relic Ruby agent also uses source code from third-party libraries. Full details on which libraries are used and the terms under which they are licensed can be found in the [THIRD_PARTY_NOTICES.md](https://github.com/newrelic/newrelic-ruby-agent/blob/main/THIRD_PARTY_NOTICES.md).
|
129
|
+
As of version 6.12 (released July 16, 2020), the New Relic Ruby agent is licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for a copy of the license. For older agent versions, check the LICENSE file included with the source code.
|
129
130
|
|
130
|
-
|
131
|
+
The New Relic Ruby agent may use source code from third-party libraries. When used, these libraries will be outlined in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
131
132
|
|
132
|
-
Thank
|
133
|
+
## Thank You
|
133
134
|
|
134
|
-
|
135
|
+
Thank you,
|
135
136
|
|
136
|
-
New Relic
|
137
|
+
New Relic Ruby agent team
|
data/Rakefile
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
+
# This file is distributed under New Relic's license terms.
|
2
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
1
5
|
require 'rubygems'
|
2
6
|
require 'rake/testtask'
|
3
7
|
require 'yard'
|
4
8
|
require "#{File.dirname(__FILE__)}/lib/tasks/all.rb"
|
9
|
+
require_relative 'lib/tasks/helpers/prompt'
|
10
|
+
include Prompt
|
5
11
|
|
6
12
|
YARD::Rake::YardocTask.new
|
7
13
|
|
@@ -10,16 +16,7 @@ task :test => ['test:newrelic']
|
|
10
16
|
|
11
17
|
namespace :test do
|
12
18
|
desc "Run all tests"
|
13
|
-
task :all => %w
|
14
|
-
|
15
|
-
begin
|
16
|
-
require 'test_bisect'
|
17
|
-
TestBisect::BisectTask.new do |t|
|
18
|
-
t.test_task_name = 'test:newrelic'
|
19
|
-
end
|
20
|
-
rescue LoadError
|
21
|
-
end
|
22
|
-
|
19
|
+
task :all => %w[newrelic multiverse all_compatible_envs]
|
23
20
|
agent_home = File.expand_path(File.dirname(__FILE__))
|
24
21
|
|
25
22
|
desc "Run agent performance tests"
|
@@ -27,14 +24,21 @@ namespace :test do
|
|
27
24
|
require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'performance', 'lib', 'performance'))
|
28
25
|
options = {}
|
29
26
|
options[:suite] = args[:suite] if args[:suite]
|
30
|
-
options[:name]
|
27
|
+
options[:name] = args[:name] if args[:name]
|
31
28
|
Performance::Runner.new(options).run_and_report
|
32
29
|
end
|
33
30
|
|
34
|
-
desc "Run agent within existing mini
|
35
|
-
task :env
|
31
|
+
desc "Run agent within existing mini environment(s): env[name1,name2,name3,etc.]"
|
32
|
+
task :env do |t, args|
|
36
33
|
require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'environments', 'lib', 'environments', 'runner'))
|
37
|
-
Environments::Runner.new(args.
|
34
|
+
Environments::Runner.new(args.to_a).run_and_report
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Run all mini environment tests known to work with the current Ruby version"
|
38
|
+
task :all_compatible_envs do |t, args|
|
39
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'helpers', 'ruby_rails_mappings'))
|
40
|
+
rails_versions = rails_versions_for_ruby_version(RUBY_VERSION)
|
41
|
+
Rake::Task['test:env'].invoke(*rails_versions)
|
38
42
|
end
|
39
43
|
|
40
44
|
Rake::TestTask.new(:intentional_fail) do |t|
|
@@ -51,15 +55,14 @@ namespace :test do
|
|
51
55
|
|
52
56
|
# Note unit testing task is defined in lib/tasks/tests.rake to facilitate
|
53
57
|
# running them in a rails application environment.
|
54
|
-
|
55
58
|
end
|
56
59
|
|
57
60
|
desc 'Record build number and stage'
|
58
|
-
task :record_build, [
|
61
|
+
task :record_build, [:build_number, :stage] do |t, args|
|
59
62
|
build_string = args.build_number
|
60
63
|
build_string << ".#{args.stage}" unless args.stage.nil? || args.stage.empty?
|
61
64
|
|
62
|
-
gitsha = File.
|
65
|
+
gitsha = File.exist?(".git") ? `git rev-parse HEAD` : "Unknown"
|
63
66
|
gitsha.chomp!
|
64
67
|
|
65
68
|
File.open("lib/new_relic/build.rb", "w") do |f|
|
@@ -110,31 +113,26 @@ task :update_ca_bundle do |t|
|
|
110
113
|
end
|
111
114
|
|
112
115
|
namespace :cross_agent_tests do
|
113
|
-
|
114
|
-
|
116
|
+
CROSS_AGENT_TESTS_UPSTREAM_PATH = File.expand_path(File.join('..', 'cross_agent_tests')).freeze
|
117
|
+
CROSS_AGENT_TESTS_LOCAL_PATH = File.expand_path(File.join('test', 'fixtures', 'cross_agent_tests')).freeze
|
115
118
|
|
116
|
-
# Note: before you pull, make sure your local repo is on the correct, synced branch!
|
117
119
|
desc 'Pull latest changes from cross_agent_tests repo'
|
118
120
|
task :pull do
|
119
|
-
|
120
|
-
|
121
|
-
puts cmd
|
122
|
-
system(cmd)
|
121
|
+
command = " rsync -av --exclude .git #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/ #{CROSS_AGENT_TESTS_LOCAL_PATH}/"
|
122
|
+
prompt_to_continue(command)
|
123
123
|
end
|
124
124
|
|
125
125
|
desc 'Copy changes from embedded cross_agent_tests to official repo working copy'
|
126
126
|
task :push do
|
127
|
-
|
128
|
-
|
129
|
-
puts cmd
|
130
|
-
system(cmd)
|
127
|
+
command = "rsync -av #{CROSS_AGENT_TESTS_LOCAL_PATH}/ #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/"
|
128
|
+
prompt_to_continue(command, 'remote (agent spec repo)')
|
131
129
|
end
|
132
130
|
end
|
133
131
|
|
132
|
+
desc 'Start an interactive console session'
|
134
133
|
task :console do
|
135
134
|
require 'pry'
|
136
135
|
require 'newrelic_rpm'
|
137
136
|
ARGV.clear
|
138
137
|
Pry.start
|
139
138
|
end
|
140
|
-
|