newrelic_rpm 8.10.1 → 8.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.rubocop.yml +20 -190
- data/.rubocop_todo.yml +11 -202
- data/.simplecov +6 -4
- data/Brewfile +1 -0
- data/CHANGELOG.md +113 -41
- data/Gemfile +0 -1
- data/README.md +1 -1
- data/Rakefile +3 -20
- data/Thorfile +0 -1
- data/bin/nrdebug +65 -43
- data/config.dot +5 -5
- data/docker-compose.yml +22 -0
- data/init.rb +1 -2
- data/install.rb +1 -2
- data/lib/new_relic/agent/adaptive_sampler.rb +0 -1
- data/lib/new_relic/agent/agent/shutdown.rb +1 -1
- data/lib/new_relic/agent/agent/special_startup.rb +2 -1
- data/lib/new_relic/agent/agent/start_worker_thread.rb +0 -1
- data/lib/new_relic/agent/agent/startup.rb +1 -1
- data/lib/new_relic/agent/agent.rb +100 -73
- data/lib/new_relic/agent/agent_logger.rb +4 -5
- data/lib/new_relic/agent/attribute_filter.rb +39 -21
- data/lib/new_relic/agent/attribute_processing.rb +3 -4
- data/lib/new_relic/agent/attributes.rb +1 -1
- data/lib/new_relic/agent/audit_logger.rb +3 -3
- data/lib/new_relic/agent/autostart.rb +0 -1
- data/lib/new_relic/agent/chained_call.rb +0 -1
- data/lib/new_relic/agent/commands/agent_command.rb +0 -1
- data/lib/new_relic/agent/commands/agent_command_router.rb +3 -4
- data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -1
- data/lib/new_relic/agent/configuration/default_source.rb +82 -31
- data/lib/new_relic/agent/configuration/dotted_hash.rb +2 -2
- data/lib/new_relic/agent/configuration/environment_source.rb +4 -4
- data/lib/new_relic/agent/configuration/event_harvest_config.rb +0 -1
- data/lib/new_relic/agent/configuration/high_security_source.rb +1 -1
- data/lib/new_relic/agent/configuration/manager.rb +4 -2
- data/lib/new_relic/agent/configuration/manual_source.rb +0 -1
- data/lib/new_relic/agent/configuration/mask_defaults.rb +2 -3
- data/lib/new_relic/agent/configuration/security_policy_source.rb +10 -1
- data/lib/new_relic/agent/configuration/server_source.rb +0 -1
- data/lib/new_relic/agent/configuration/yaml_source.rb +3 -3
- data/lib/new_relic/agent/configuration.rb +0 -1
- data/lib/new_relic/agent/connect/request_builder.rb +2 -2
- data/lib/new_relic/agent/connect/response_handler.rb +1 -2
- data/lib/new_relic/agent/custom_event_aggregator.rb +0 -1
- data/lib/new_relic/agent/database/explain_plan_helpers.rb +0 -1
- data/lib/new_relic/agent/database/obfuscation_helpers.rb +1 -1
- data/lib/new_relic/agent/database/obfuscator.rb +0 -1
- data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +0 -1
- data/lib/new_relic/agent/database.rb +20 -14
- data/lib/new_relic/agent/database_adapter.rb +2 -1
- data/lib/new_relic/agent/datastores/metric_helper.rb +0 -4
- data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +5 -5
- data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +2 -5
- data/lib/new_relic/agent/datastores/mongo.rb +0 -1
- data/lib/new_relic/agent/datastores/nosql_obfuscator.rb +41 -0
- data/lib/new_relic/agent/datastores/redis.rb +0 -1
- data/lib/new_relic/agent/datastores.rb +0 -1
- data/lib/new_relic/agent/deprecator.rb +0 -1
- data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +0 -1
- data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +3 -1
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +3 -1
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +1 -2
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +0 -1
- data/lib/new_relic/agent/distributed_tracing/trace_context.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +0 -1
- data/lib/new_relic/agent/distributed_tracing.rb +0 -1
- data/lib/new_relic/agent/encoding_normalizer.rb +2 -1
- data/lib/new_relic/agent/error_collector.rb +3 -1
- data/lib/new_relic/agent/error_event_aggregator.rb +0 -1
- data/lib/new_relic/agent/error_filter.rb +5 -5
- data/lib/new_relic/agent/error_trace_aggregator.rb +2 -2
- data/lib/new_relic/agent/event_aggregator.rb +1 -1
- data/lib/new_relic/agent/event_buffer.rb +0 -1
- data/lib/new_relic/agent/event_listener.rb +0 -1
- data/lib/new_relic/agent/event_loop.rb +4 -3
- data/lib/new_relic/agent/external.rb +1 -2
- data/lib/new_relic/agent/guid_generator.rb +0 -1
- data/lib/new_relic/agent/harvester.rb +0 -1
- data/lib/new_relic/agent/heap.rb +2 -3
- data/lib/new_relic/agent/hostname.rb +0 -1
- data/lib/new_relic/agent/http_clients/abstract.rb +2 -1
- data/lib/new_relic/agent/http_clients/curb_wrappers.rb +0 -1
- data/lib/new_relic/agent/http_clients/excon_wrappers.rb +0 -1
- data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +1 -2
- data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +1 -2
- data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +0 -1
- data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +2 -2
- data/lib/new_relic/agent/http_clients/uri_util.rb +0 -1
- data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +0 -1
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +0 -1
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +1 -2
- data/lib/new_relic/agent/instrumentation/active_job.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +3 -2
- data/lib/new_relic/agent/instrumentation/active_record.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_storage.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +2 -1
- data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/active_support_logger.rb +0 -1
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +1 -1
- data/lib/new_relic/agent/instrumentation/authlogic.rb +0 -1
- data/lib/new_relic/agent/instrumentation/bunny/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/bunny.rb +0 -1
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +3 -3
- data/lib/new_relic/agent/instrumentation/curb/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +14 -11
- data/lib/new_relic/agent/instrumentation/curb/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/curb.rb +0 -1
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +1 -2
- data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +1 -1
- 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 +0 -1
- data/lib/new_relic/agent/instrumentation/excon.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grape/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/grape/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grape.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/helper.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc_client.rb +0 -1
- data/lib/new_relic/agent/instrumentation/grpc_server.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httpclient.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httprb/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httprb.rb +0 -1
- data/lib/new_relic/agent/instrumentation/ignore_actions.rb +0 -1
- data/lib/new_relic/agent/instrumentation/logger/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +4 -1
- data/lib/new_relic/agent/instrumentation/logger/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/logger.rb +0 -1
- data/lib/new_relic/agent/instrumentation/memcache/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +1 -2
- data/lib/new_relic/agent/instrumentation/memcache/helper.rb +0 -1
- data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +1 -2
- data/lib/new_relic/agent/instrumentation/memcache.rb +4 -5
- data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +1 -2
- data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +0 -1
- data/lib/new_relic/agent/instrumentation/mongo.rb +0 -1
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +3 -2
- data/lib/new_relic/agent/instrumentation/net_http/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/net_http.rb +0 -1
- data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +4 -3
- data/lib/new_relic/agent/instrumentation/padrino/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/padrino.rb +0 -1
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/queue_time.rb +0 -2
- data/lib/new_relic/agent/instrumentation/rack/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rack/helpers.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +3 -1
- data/lib/new_relic/agent/instrumentation/rack/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rack.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rails_middleware.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rake/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +6 -1
- data/lib/new_relic/agent/instrumentation/rake/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rake.rb +0 -1
- data/lib/new_relic/agent/instrumentation/redis/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/redis/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/redis.rb +0 -1
- data/lib/new_relic/agent/instrumentation/resque/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/resque/helper.rb +0 -1
- data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/resque/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/resque.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sequel.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sequel_helper.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sidekiq.rb +2 -2
- data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sinatra.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sunspot.rb +0 -1
- data/lib/new_relic/agent/instrumentation/thread/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/thread/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/thread.rb +0 -1
- data/lib/new_relic/agent/instrumentation/tilt/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/tilt.rb +0 -1
- data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +0 -1
- data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +3 -4
- data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +0 -1
- data/lib/new_relic/agent/instrumentation/typhoeus.rb +0 -1
- data/lib/new_relic/agent/instrumentation.rb +0 -1
- data/lib/new_relic/agent/internal_agent_error.rb +0 -1
- data/lib/new_relic/agent/javascript_instrumentor.rb +2 -2
- data/lib/new_relic/agent/linking_metadata.rb +0 -1
- data/lib/new_relic/agent/local_log_decorator.rb +1 -1
- data/lib/new_relic/agent/log_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/log_once.rb +0 -1
- data/lib/new_relic/agent/log_priority.rb +0 -1
- data/lib/new_relic/agent/logging.rb +0 -1
- data/lib/new_relic/agent/memory_logger.rb +0 -1
- data/lib/new_relic/agent/messaging.rb +2 -2
- data/lib/new_relic/agent/method_tracer.rb +4 -1
- data/lib/new_relic/agent/method_tracer_helpers.rb +1 -2
- data/lib/new_relic/agent/monitors/cross_app_monitor.rb +0 -1
- data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +1 -1
- data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +0 -1
- data/lib/new_relic/agent/monitors/synthetics_monitor.rb +0 -1
- data/lib/new_relic/agent/monitors.rb +0 -1
- data/lib/new_relic/agent/new_relic_service/encoders.rb +0 -1
- data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +0 -1
- data/lib/new_relic/agent/new_relic_service/marshaller.rb +0 -1
- data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +0 -1
- data/lib/new_relic/agent/new_relic_service.rb +195 -142
- data/lib/new_relic/agent/{noticible_error.rb → noticeable_error.rb} +1 -2
- data/lib/new_relic/agent/null_logger.rb +0 -1
- data/lib/new_relic/agent/obfuscator.rb +1 -2
- data/lib/new_relic/agent/parameter_filtering.rb +0 -1
- data/lib/new_relic/agent/payload_metric_mapping.rb +0 -1
- data/lib/new_relic/agent/pipe_channel_manager.rb +2 -1
- data/lib/new_relic/agent/pipe_service.rb +0 -1
- data/lib/new_relic/agent/prepend_supportability.rb +0 -1
- data/lib/new_relic/agent/priority_sampled_buffer.rb +2 -3
- data/lib/new_relic/agent/range_extensions.rb +0 -1
- data/lib/new_relic/agent/rules_engine/replacement_rule.rb +0 -1
- data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +0 -1
- data/lib/new_relic/agent/rules_engine.rb +1 -1
- data/lib/new_relic/agent/sampler.rb +0 -1
- data/lib/new_relic/agent/sampler_collection.rb +0 -1
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -1
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +0 -1
- data/lib/new_relic/agent/samplers/memory_sampler.rb +10 -6
- data/lib/new_relic/agent/samplers/object_sampler.rb +0 -1
- data/lib/new_relic/agent/samplers/vm_sampler.rb +2 -1
- data/lib/new_relic/agent/span_event_aggregator.rb +0 -1
- data/lib/new_relic/agent/span_event_primitive.rb +1 -2
- data/lib/new_relic/agent/sql_sampler.rb +0 -1
- data/lib/new_relic/agent/stats.rb +13 -3
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -2
- data/lib/new_relic/agent/stats_engine/stats_hash.rb +1 -2
- data/lib/new_relic/agent/stats_engine.rb +0 -1
- data/lib/new_relic/agent/synthetics_event_aggregator.rb +0 -1
- data/lib/new_relic/agent/system_info.rb +4 -2
- data/lib/new_relic/agent/threading/agent_thread.rb +3 -3
- data/lib/new_relic/agent/threading/backtrace_node.rb +0 -1
- data/lib/new_relic/agent/threading/backtrace_service.rb +1 -1
- data/lib/new_relic/agent/threading/thread_profile.rb +4 -2
- data/lib/new_relic/agent/timestamp_sampled_buffer.rb +0 -1
- data/lib/new_relic/agent/tracer.rb +6 -3
- data/lib/new_relic/agent/transaction/abstract_segment.rb +5 -3
- data/lib/new_relic/agent/transaction/datastore_segment.rb +3 -1
- data/lib/new_relic/agent/transaction/distributed_tracer.rb +4 -1
- data/lib/new_relic/agent/transaction/distributed_tracing.rb +1 -1
- data/lib/new_relic/agent/transaction/external_request_segment.rb +2 -2
- data/lib/new_relic/agent/transaction/message_broker_segment.rb +1 -1
- data/lib/new_relic/agent/transaction/request_attributes.rb +0 -1
- data/lib/new_relic/agent/transaction/segment.rb +1 -1
- data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +0 -1
- data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +0 -1
- data/lib/new_relic/agent/transaction/trace.rb +4 -1
- data/lib/new_relic/agent/transaction/trace_builder.rb +0 -1
- data/lib/new_relic/agent/transaction/trace_context.rb +0 -1
- data/lib/new_relic/agent/transaction/trace_node.rb +3 -3
- data/lib/new_relic/agent/transaction/tracing.rb +0 -1
- data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +2 -2
- data/lib/new_relic/agent/transaction.rb +13 -5
- data/lib/new_relic/agent/transaction_error_primitive.rb +0 -1
- data/lib/new_relic/agent/transaction_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/transaction_event_primitive.rb +0 -1
- data/lib/new_relic/agent/transaction_event_recorder.rb +1 -2
- data/lib/new_relic/agent/transaction_metrics.rb +1 -2
- data/lib/new_relic/agent/transaction_sampler.rb +0 -1
- data/lib/new_relic/agent/transaction_time_aggregator.rb +2 -2
- data/lib/new_relic/agent/utilization/aws.rb +0 -1
- data/lib/new_relic/agent/utilization/azure.rb +1 -2
- data/lib/new_relic/agent/utilization/gcp.rb +1 -2
- data/lib/new_relic/agent/utilization/pcf.rb +2 -2
- data/lib/new_relic/agent/utilization/vendor.rb +3 -2
- data/lib/new_relic/agent/utilization_data.rb +3 -1
- data/lib/new_relic/agent/vm/jruby_vm.rb +0 -1
- data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +0 -1
- data/lib/new_relic/agent/vm/mri_vm.rb +35 -23
- data/lib/new_relic/agent/vm/snapshot.rb +1 -2
- data/lib/new_relic/agent/vm.rb +0 -1
- data/lib/new_relic/agent/worker_loop.rb +0 -1
- data/lib/new_relic/agent.rb +17 -18
- data/lib/new_relic/cli/command.rb +1 -2
- data/lib/new_relic/cli/commands/deployments.rb +72 -21
- data/lib/new_relic/cli/commands/install.rb +1 -1
- data/lib/new_relic/coerce.rb +6 -1
- data/lib/new_relic/collection_helper.rb +2 -2
- data/lib/new_relic/constants.rb +0 -1
- data/lib/new_relic/control/class_methods.rb +0 -1
- data/lib/new_relic/control/frameworks/external.rb +0 -1
- data/lib/new_relic/control/frameworks/rails.rb +5 -1
- data/lib/new_relic/control/frameworks/rails3.rb +0 -1
- data/lib/new_relic/control/frameworks/rails4.rb +0 -1
- data/lib/new_relic/control/frameworks/rails_notifications.rb +0 -1
- data/lib/new_relic/control/frameworks/ruby.rb +0 -1
- data/lib/new_relic/control/frameworks/sinatra.rb +0 -1
- data/lib/new_relic/control/frameworks.rb +0 -1
- data/lib/new_relic/control/instance_methods.rb +17 -40
- data/lib/new_relic/control/instrumentation.rb +2 -1
- data/lib/new_relic/control/private_instance_methods.rb +48 -0
- data/lib/new_relic/control/server_methods.rb +0 -1
- data/lib/new_relic/control.rb +0 -1
- data/lib/new_relic/delayed_job_injection.rb +0 -1
- data/lib/new_relic/dependency_detection.rb +5 -4
- data/lib/new_relic/environment_report.rb +23 -14
- data/lib/new_relic/helper.rb +2 -2
- data/lib/new_relic/language_support.rb +3 -3
- data/lib/new_relic/latest_changes.rb +4 -4
- data/lib/new_relic/local_environment.rb +9 -4
- data/lib/new_relic/metric_data.rb +27 -22
- data/lib/new_relic/metric_spec.rb +2 -1
- data/lib/new_relic/noticed_error.rb +3 -6
- data/lib/new_relic/rack/agent_hooks.rb +0 -1
- data/lib/new_relic/rack/agent_middleware.rb +2 -1
- data/lib/new_relic/rack/browser_monitoring.rb +131 -123
- data/lib/new_relic/rack.rb +0 -1
- data/lib/new_relic/recipes/capistrano3.rb +2 -59
- data/lib/new_relic/recipes/capistrano_legacy.rb +1 -2
- data/lib/new_relic/recipes/helpers/send_deployment.rb +69 -0
- data/lib/new_relic/recipes.rb +0 -1
- data/lib/new_relic/supportability_helper.rb +1 -2
- data/lib/new_relic/traced_thread.rb +1 -1
- data/lib/new_relic/version.rb +2 -3
- data/lib/newrelic_rpm.rb +0 -1
- data/lib/sequel/extensions/newrelic_instrumentation.rb +2 -3
- data/lib/sequel/plugins/newrelic_instrumentation.rb +0 -1
- data/lib/tasks/all.rb +0 -1
- data/lib/tasks/config.rake +4 -113
- data/lib/tasks/coverage_report.rake +14 -19
- data/lib/tasks/{config.html.erb → helpers/config.html.erb} +0 -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 +0 -1
- data/lib/tasks/instrumentation_generator/README.md +1 -1
- data/lib/tasks/instrumentation_generator/instrumentation.thor +45 -17
- data/lib/tasks/instrumentation_generator/templates/Envfile.tt +0 -1
- data/lib/tasks/instrumentation_generator/templates/chain.tt +2 -2
- data/lib/tasks/instrumentation_generator/templates/chain_method.tt +3 -2
- data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +0 -1
- data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +2 -2
- data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +1 -1
- data/lib/tasks/instrumentation_generator/templates/prepend.tt +1 -2
- data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +1 -1
- data/lib/tasks/instrumentation_generator/templates/test.tt +1 -2
- data/lib/tasks/multiverse.rake +0 -1
- data/lib/tasks/multiverse.rb +3 -29
- data/lib/tasks/newrelic.rb +0 -1
- data/lib/tasks/tests.rake +3 -8
- data/newrelic.yml +23 -4
- data/newrelic_rpm.gemspec +8 -9
- data/recipes/newrelic.rb +0 -1
- data/test/agent_helper.rb +23 -35
- metadata +20 -80
- data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +0 -44
data/docker-compose.yml
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
version: "3.9"
|
2
2
|
services:
|
3
|
+
elasticsearch7:
|
4
|
+
image: elasticsearch:7.16.2
|
5
|
+
ports:
|
6
|
+
- "9200:9200"
|
7
|
+
environment:
|
8
|
+
- discovery.type=single-node
|
9
|
+
- bootstrap.memory_lock=true
|
10
|
+
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
11
|
+
mem_limit: 1g
|
12
|
+
elasticsearch8:
|
13
|
+
image: elasticsearch:8.4.2
|
14
|
+
ports:
|
15
|
+
- "9250:9250"
|
16
|
+
environment:
|
17
|
+
- discovery.type=single-node
|
18
|
+
- xpack.security.enabled=false
|
19
|
+
- http.port=9250
|
20
|
+
- bootstrap.memory_lock=true
|
21
|
+
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
22
|
+
mem_limit: 1g
|
3
23
|
mysql:
|
4
24
|
image: mysql:5.7
|
5
25
|
restart: always
|
@@ -68,6 +88,8 @@ services:
|
|
68
88
|
volumes:
|
69
89
|
- ".:/usr/src/app"
|
70
90
|
depends_on:
|
91
|
+
- elasticsearch7
|
92
|
+
- elasticsearch8
|
71
93
|
- mysql
|
72
94
|
- memcached
|
73
95
|
- mongodb
|
data/init.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -15,7 +14,7 @@ require 'new_relic/control'
|
|
15
14
|
|
16
15
|
# Initializer for the NewRelic Ruby Agent
|
17
16
|
|
18
|
-
# After
|
17
|
+
# After version 2.0 of Rails we can access the configuration directly.
|
19
18
|
# We need it to add dev mode routes after initialization finished.
|
20
19
|
|
21
20
|
begin
|
data/install.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
5
4
|
|
6
|
-
if __FILE__ == $0 || $0
|
5
|
+
if __FILE__ == $0 || $0.include?('script/plugin') || File.basename($0) == 'rake'
|
7
6
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
|
8
7
|
require 'new_relic/cli/command'
|
9
8
|
begin
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -10,6 +9,7 @@ module NewRelic
|
|
10
9
|
# data.
|
11
10
|
def shutdown
|
12
11
|
return unless started?
|
12
|
+
|
13
13
|
::NewRelic::Agent.logger.info("Starting Agent shutdown")
|
14
14
|
|
15
15
|
stop_event_loop
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -58,11 +57,13 @@ module NewRelic
|
|
58
57
|
|
59
58
|
def should_install_exit_handler?
|
60
59
|
return false unless Agent.config[:send_data_on_exit]
|
60
|
+
|
61
61
|
!sinatra_classic_app? || Agent.config[:force_install_exit_handler]
|
62
62
|
end
|
63
63
|
|
64
64
|
def install_exit_handler
|
65
65
|
return unless should_install_exit_handler?
|
66
|
+
|
66
67
|
NewRelic::Agent.logger.debug("Installing at_exit handler")
|
67
68
|
at_exit { shutdown }
|
68
69
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -38,6 +37,7 @@ module NewRelic
|
|
38
37
|
def check_config_and_start_agent
|
39
38
|
return unless monitoring? && has_correct_license_key?
|
40
39
|
return if using_forking_dispatcher?
|
40
|
+
|
41
41
|
setup_and_start_agent
|
42
42
|
end
|
43
43
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -60,43 +59,50 @@ module NewRelic
|
|
60
59
|
include NewRelic::Agent::Shutdown
|
61
60
|
|
62
61
|
def initialize
|
62
|
+
init_basics
|
63
|
+
init_components
|
64
|
+
init_event_handlers
|
65
|
+
setup_attribute_filter
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def init_basics
|
63
71
|
@started = false
|
64
72
|
@event_loop = nil
|
65
73
|
@worker_thread = nil
|
74
|
+
@connect_state = :pending
|
75
|
+
@connect_attempts = 0
|
76
|
+
@waited_on_connect = nil
|
77
|
+
@connected_pid = nil
|
78
|
+
@wait_on_connect_mutex = Mutex.new
|
79
|
+
@after_fork_lock = Mutex.new
|
80
|
+
@wait_on_connect_condition = ConditionVariable.new
|
81
|
+
end
|
66
82
|
|
83
|
+
def init_components
|
67
84
|
@service = NewRelicService.new
|
68
|
-
|
69
85
|
@events = EventListener.new
|
70
86
|
@stats_engine = StatsEngine.new
|
71
87
|
@transaction_sampler = TransactionSampler.new
|
72
88
|
@sql_sampler = SqlSampler.new
|
73
|
-
@agent_command_router = Commands::AgentCommandRouter.new(@events)
|
74
|
-
@monitors = Monitors.new(@events)
|
75
|
-
@error_collector = ErrorCollector.new(@events)
|
76
89
|
@transaction_rules = RulesEngine.new
|
77
|
-
@harvest_samplers = SamplerCollection.new(@events)
|
78
90
|
@monotonic_gc_profiler = VM::MonotonicGCProfiler.new
|
79
|
-
@javascript_instrumentor = JavascriptInstrumentor.new(@events)
|
80
91
|
@adaptive_sampler = AdaptiveSampler.new(Agent.config[:sampling_target],
|
81
92
|
Agent.config[:sampling_target_period_in_seconds])
|
93
|
+
end
|
82
94
|
|
95
|
+
def init_event_handlers
|
96
|
+
@agent_command_router = Commands::AgentCommandRouter.new(@events)
|
97
|
+
@monitors = Monitors.new(@events)
|
98
|
+
@error_collector = ErrorCollector.new(@events)
|
99
|
+
@harvest_samplers = SamplerCollection.new(@events)
|
100
|
+
@javascript_instrumentor = JavaScriptInstrumentor.new(@events)
|
83
101
|
@harvester = Harvester.new(@events)
|
84
|
-
@after_fork_lock = Mutex.new
|
85
|
-
|
86
102
|
@transaction_event_recorder = TransactionEventRecorder.new(@events)
|
87
103
|
@custom_event_aggregator = CustomEventAggregator.new(@events)
|
88
104
|
@span_event_aggregator = SpanEventAggregator.new(@events)
|
89
105
|
@log_event_aggregator = LogEventAggregator.new(@events)
|
90
|
-
|
91
|
-
@connect_state = :pending
|
92
|
-
@connect_attempts = 0
|
93
|
-
@waited_on_connect = nil
|
94
|
-
@connected_pid = nil
|
95
|
-
|
96
|
-
@wait_on_connect_mutex = Mutex.new
|
97
|
-
@wait_on_connect_condition = ConditionVariable.new
|
98
|
-
|
99
|
-
setup_attribute_filter
|
100
106
|
end
|
101
107
|
|
102
108
|
def setup_attribute_filter
|
@@ -107,6 +113,8 @@ module NewRelic
|
|
107
113
|
end
|
108
114
|
end
|
109
115
|
|
116
|
+
public
|
117
|
+
|
110
118
|
def refresh_attribute_filter
|
111
119
|
@attribute_filter = AttributeFilter.new(Agent.config)
|
112
120
|
end
|
@@ -154,7 +162,7 @@ module NewRelic
|
|
154
162
|
# collector on connect. The former are applied during txns,
|
155
163
|
# the latter during harvest.
|
156
164
|
attr_accessor :transaction_rules
|
157
|
-
#
|
165
|
+
# Responsible for restarting the harvest thread
|
158
166
|
attr_reader :harvester
|
159
167
|
# GC::Profiler.total_time is not monotonic so we wrap it.
|
160
168
|
attr_reader :monotonic_gc_profiler
|
@@ -182,7 +190,7 @@ module NewRelic
|
|
182
190
|
# It assumes the parent process initialized the agent, but does
|
183
191
|
# not assume the agent started.
|
184
192
|
#
|
185
|
-
# The call is idempotent, but not
|
193
|
+
# The call is idempotent, but not reentrant.
|
186
194
|
#
|
187
195
|
# * It clears any metrics carried over from the parent process
|
188
196
|
# * Restarts the sampler thread if necessary
|
@@ -198,17 +206,7 @@ module NewRelic
|
|
198
206
|
# connection, this tells me to only try it once so this method returns
|
199
207
|
# quickly if there is some kind of latency with the server.
|
200
208
|
def after_fork(options = {})
|
201
|
-
|
202
|
-
@after_fork_lock.synchronize do
|
203
|
-
needs_restart = @harvester.needs_restart?
|
204
|
-
@harvester.mark_started
|
205
|
-
end
|
206
|
-
|
207
|
-
return if !needs_restart ||
|
208
|
-
!Agent.config[:agent_enabled] ||
|
209
|
-
!Agent.config[:monitor_mode] ||
|
210
|
-
disconnected? ||
|
211
|
-
!control.security_settings_valid?
|
209
|
+
return unless needs_after_fork_work?
|
212
210
|
|
213
211
|
::NewRelic::Agent.logger.debug("Starting the worker thread in #{Process.pid} (parent #{Process.ppid}) after forking.")
|
214
212
|
|
@@ -222,6 +220,22 @@ module NewRelic
|
|
222
220
|
setup_and_start_agent(options)
|
223
221
|
end
|
224
222
|
|
223
|
+
def needs_after_fork_work?
|
224
|
+
needs_restart = false
|
225
|
+
@after_fork_lock.synchronize do
|
226
|
+
needs_restart = @harvester.needs_restart?
|
227
|
+
@harvester.mark_started
|
228
|
+
end
|
229
|
+
|
230
|
+
return false if !needs_restart ||
|
231
|
+
!Agent.config[:agent_enabled] ||
|
232
|
+
!Agent.config[:monitor_mode] ||
|
233
|
+
disconnected? ||
|
234
|
+
!control.security_settings_valid?
|
235
|
+
|
236
|
+
true
|
237
|
+
end
|
238
|
+
|
225
239
|
def install_pipe_service(channel_id)
|
226
240
|
@service = PipeService.new(channel_id)
|
227
241
|
if connected?
|
@@ -296,12 +310,7 @@ module NewRelic
|
|
296
310
|
|
297
311
|
def flush_pipe_data
|
298
312
|
if connected? && @service.is_a?(PipeService)
|
299
|
-
|
300
|
-
transmit_analytic_event_data
|
301
|
-
transmit_custom_event_data
|
302
|
-
transmit_error_event_data
|
303
|
-
transmit_span_event_data
|
304
|
-
transmit_log_event_data
|
313
|
+
transmit_data_types
|
305
314
|
end
|
306
315
|
end
|
307
316
|
|
@@ -516,12 +525,7 @@ module NewRelic
|
|
516
525
|
# forking off from a parent process.
|
517
526
|
#
|
518
527
|
def connect(options = {})
|
519
|
-
|
520
|
-
:keep_retrying => Agent.config[:keep_retrying],
|
521
|
-
:force_reconnect => Agent.config[:force_reconnect]
|
522
|
-
}
|
523
|
-
opts = defaults.merge(options)
|
524
|
-
|
528
|
+
opts = connect_options(options)
|
525
529
|
return unless should_connect?(opts[:force_reconnect])
|
526
530
|
|
527
531
|
::NewRelic::Agent.logger.debug("Connecting Process to New Relic: #$0")
|
@@ -536,21 +540,32 @@ module NewRelic
|
|
536
540
|
rescue NewRelic::Agent::UnrecoverableAgentException => e
|
537
541
|
handle_unrecoverable_agent_error(e)
|
538
542
|
rescue StandardError, Timeout::Error, NewRelic::Agent::ServerConnectionException => e
|
543
|
+
retry if retry_from_error?(e, opts)
|
544
|
+
rescue Exception => e
|
545
|
+
::NewRelic::Agent.logger.error("Exception of unexpected type during Agent#connect():", e)
|
546
|
+
|
547
|
+
raise
|
548
|
+
end
|
549
|
+
|
550
|
+
def connect_options(options)
|
551
|
+
{
|
552
|
+
keep_retrying: Agent.config[:keep_retrying],
|
553
|
+
force_reconnect: Agent.config[:force_reconnect]
|
554
|
+
}.merge(options)
|
555
|
+
end
|
556
|
+
|
557
|
+
def retry_from_error?(e, opts)
|
539
558
|
# Allow a killed (aborting) thread to continue exiting during shutdown.
|
540
559
|
# See: https://github.com/newrelic/newrelic-ruby-agent/issues/340
|
541
560
|
raise if Thread.current.status == 'aborting'
|
542
561
|
|
543
562
|
log_error(e)
|
544
|
-
|
545
|
-
note_connect_failure
|
546
|
-
::NewRelic::Agent.logger.info("Will re-attempt in #{connect_retry_period} seconds")
|
547
|
-
sleep(connect_retry_period)
|
548
|
-
retry
|
549
|
-
end
|
550
|
-
rescue Exception => e
|
551
|
-
::NewRelic::Agent.logger.error("Exception of unexpected type during Agent#connect():", e)
|
563
|
+
return false unless opts[:keep_retrying]
|
552
564
|
|
553
|
-
|
565
|
+
note_connect_failure
|
566
|
+
::NewRelic::Agent.logger.info("Will re-attempt in #{connect_retry_period} seconds")
|
567
|
+
sleep(connect_retry_period)
|
568
|
+
true
|
554
569
|
end
|
555
570
|
|
556
571
|
# Delegates to the control class to determine the root
|
@@ -735,13 +750,7 @@ module NewRelic
|
|
735
750
|
|
736
751
|
@events.notify(:before_harvest)
|
737
752
|
@service.session do # use http keep-alive
|
738
|
-
|
739
|
-
harvest_and_send_error_event_data
|
740
|
-
harvest_and_send_transaction_traces
|
741
|
-
harvest_and_send_slowest_sql
|
742
|
-
harvest_and_send_timeslice_data
|
743
|
-
harvest_and_send_span_event_data
|
744
|
-
harvest_and_send_log_event_data
|
753
|
+
harvest_and_send_data_types
|
745
754
|
|
746
755
|
check_for_and_handle_agent_commands
|
747
756
|
harvest_and_send_for_agent_commands
|
@@ -765,19 +774,9 @@ module NewRelic
|
|
765
774
|
@service.request_timeout = 10
|
766
775
|
|
767
776
|
@events.notify(:before_shutdown)
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
transmit_error_event_data
|
772
|
-
transmit_span_event_data
|
773
|
-
transmit_log_event_data
|
774
|
-
|
775
|
-
if @connected_pid == $$ && !@service.kind_of?(NewRelic::Agent::NewRelicService)
|
776
|
-
::NewRelic::Agent.logger.debug("Sending New Relic service agent run shutdown message")
|
777
|
-
@service.shutdown
|
778
|
-
else
|
779
|
-
::NewRelic::Agent.logger.debug("This agent connected from parent process #{@connected_pid}--not sending shutdown")
|
780
|
-
end
|
777
|
+
transmit_data_types
|
778
|
+
shutdown_service
|
779
|
+
|
781
780
|
::NewRelic::Agent.logger.debug("Graceful disconnect complete")
|
782
781
|
rescue Timeout::Error, StandardError => e
|
783
782
|
::NewRelic::Agent.logger.debug("Error when disconnecting #{e.class.name}: #{e.message}")
|
@@ -788,6 +787,34 @@ module NewRelic
|
|
788
787
|
end
|
789
788
|
end
|
790
789
|
|
790
|
+
def shutdown_service
|
791
|
+
if @connected_pid == $$ && !@service.kind_of?(NewRelic::Agent::NewRelicService)
|
792
|
+
::NewRelic::Agent.logger.debug("Sending New Relic service agent run shutdown message")
|
793
|
+
@service.shutdown
|
794
|
+
else
|
795
|
+
::NewRelic::Agent.logger.debug("This agent connected from parent process #{@connected_pid}--not sending shutdown")
|
796
|
+
end
|
797
|
+
end
|
798
|
+
|
799
|
+
def transmit_data_types
|
800
|
+
transmit_data
|
801
|
+
transmit_analytic_event_data
|
802
|
+
transmit_custom_event_data
|
803
|
+
transmit_error_event_data
|
804
|
+
transmit_span_event_data
|
805
|
+
transmit_log_event_data
|
806
|
+
end
|
807
|
+
|
808
|
+
def harvest_and_send_data_types
|
809
|
+
harvest_and_send_errors
|
810
|
+
harvest_and_send_error_event_data
|
811
|
+
harvest_and_send_transaction_traces
|
812
|
+
harvest_and_send_slowest_sql
|
813
|
+
harvest_and_send_timeslice_data
|
814
|
+
harvest_and_send_span_event_data
|
815
|
+
harvest_and_send_log_event_data
|
816
|
+
end
|
817
|
+
|
791
818
|
extend ClassMethods
|
792
819
|
include InstanceMethods
|
793
820
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -75,7 +74,7 @@ module NewRelic
|
|
75
74
|
# We've seen that often the backtrace on a SystemStackError is bunk
|
76
75
|
# so massage the caller instead at a known depth.
|
77
76
|
#
|
78
|
-
# Tests keep us honest about
|
77
|
+
# Tests keep us honest about minimum method depth our log calls add.
|
79
78
|
return caller.drop(5) if e.is_a?(SystemStackError)
|
80
79
|
|
81
80
|
e.backtrace
|
@@ -86,7 +85,7 @@ module NewRelic
|
|
86
85
|
if block
|
87
86
|
return unless @log.send("#{level}?")
|
88
87
|
|
89
|
-
msgs = Array(
|
88
|
+
msgs = Array(yield)
|
90
89
|
end
|
91
90
|
|
92
91
|
msgs.flatten.each do |item|
|
@@ -133,7 +132,7 @@ module NewRelic
|
|
133
132
|
end
|
134
133
|
|
135
134
|
def wants_stdout?
|
136
|
-
::NewRelic::Agent.config[:log_file_path].
|
135
|
+
::NewRelic::Agent.config[:log_file_path].casecmp("STDOUT").zero?
|
137
136
|
end
|
138
137
|
|
139
138
|
def find_or_create_file_path(path_setting, root)
|
@@ -165,7 +164,7 @@ module NewRelic
|
|
165
164
|
def set_log_format!
|
166
165
|
@hostname = NewRelic::Agent::Hostname.get
|
167
166
|
@prefix = wants_stdout? ? '** [NewRelic]' : ''
|
168
|
-
@log.formatter =
|
167
|
+
@log.formatter = proc do |severity, timestamp, progname, msg|
|
169
168
|
"#{@prefix}[#{timestamp.strftime("%F %H:%M:%S %z")} #{@hostname} (#{$$})] #{severity} : #{msg}\n"
|
170
169
|
end
|
171
170
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -77,19 +76,43 @@ module NewRelic
|
|
77
76
|
attr_reader :rules
|
78
77
|
|
79
78
|
def initialize(config)
|
80
|
-
|
79
|
+
prep_enabled_destinations(config)
|
80
|
+
prep_rules(config)
|
81
81
|
|
82
|
-
|
83
|
-
|
84
|
-
@
|
85
|
-
|
86
|
-
|
87
|
-
|
82
|
+
# We're ok to cache high security for fast lookup because the attribute
|
83
|
+
# filter is re-generated on any significant config change.
|
84
|
+
@high_security = config[:high_security]
|
85
|
+
|
86
|
+
setup_key_cache
|
87
|
+
cache_prefix_denylist
|
88
|
+
end
|
88
89
|
|
89
|
-
|
90
|
+
def prep_enabled_destinations(config)
|
91
|
+
@enabled_destinations = config[:'attributes.enabled'] ? enabled_destinations_for_attributes(config) : DST_NONE
|
92
|
+
end
|
93
|
+
|
94
|
+
def enabled_destinations_for_attributes(config)
|
95
|
+
destinations = DST_NONE
|
96
|
+
destinations |= DST_TRANSACTION_TRACER if config[:'transaction_tracer.attributes.enabled']
|
97
|
+
destinations |= DST_TRANSACTION_EVENTS if config[:'transaction_events.attributes.enabled']
|
98
|
+
destinations |= DST_ERROR_COLLECTOR if config[:'error_collector.attributes.enabled']
|
99
|
+
destinations |= DST_BROWSER_MONITORING if config[:'browser_monitoring.attributes.enabled']
|
100
|
+
destinations |= DST_SPAN_EVENTS if config[:'span_events.attributes.enabled']
|
101
|
+
destinations |= DST_TRANSACTION_SEGMENTS if config[:'transaction_segments.attributes.enabled']
|
102
|
+
destinations
|
103
|
+
end
|
90
104
|
|
105
|
+
def prep_rules(config)
|
91
106
|
@rules = []
|
107
|
+
prep_attributes_exclude_rules(config)
|
108
|
+
prep_capture_params_rules(config)
|
109
|
+
prep_datastore_rules(config)
|
110
|
+
prep_attributes_include_rules(config)
|
111
|
+
build_uri_rule(config[:'attributes.exclude'])
|
112
|
+
@rules.sort!
|
113
|
+
end
|
92
114
|
|
115
|
+
def prep_attributes_exclude_rules(config)
|
93
116
|
build_rule(config[:'attributes.exclude'], DST_ALL, false)
|
94
117
|
build_rule(config[:'transaction_tracer.attributes.exclude'], DST_TRANSACTION_TRACER, false)
|
95
118
|
build_rule(config[:'transaction_events.attributes.exclude'], DST_TRANSACTION_EVENTS, false)
|
@@ -97,14 +120,20 @@ module NewRelic
|
|
97
120
|
build_rule(config[:'browser_monitoring.attributes.exclude'], DST_BROWSER_MONITORING, false)
|
98
121
|
build_rule(config[:'span_events.attributes.exclude'], DST_SPAN_EVENTS, false)
|
99
122
|
build_rule(config[:'transaction_segments.attributes.exclude'], DST_TRANSACTION_SEGMENTS, false)
|
123
|
+
end
|
100
124
|
|
125
|
+
def prep_capture_params_rules(config)
|
101
126
|
build_rule(['request.parameters.*'], include_destinations_for_capture_params(config[:capture_params]), true)
|
102
127
|
build_rule(['job.resque.args.*'], include_destinations_for_capture_params(config[:'resque.capture_params']), true)
|
103
128
|
build_rule(['job.sidekiq.args.*'], include_destinations_for_capture_params(config[:'sidekiq.capture_params']), true)
|
129
|
+
end
|
104
130
|
|
105
|
-
|
131
|
+
def prep_datastore_rules(config)
|
132
|
+
build_rule(%w[host port_path_or_id], DST_TRANSACTION_SEGMENTS, config[:'datastore_tracer.instance_reporting.enabled'])
|
106
133
|
build_rule(['database_name'], DST_TRANSACTION_SEGMENTS, config[:'datastore_tracer.database_name_reporting.enabled'])
|
134
|
+
end
|
107
135
|
|
136
|
+
def prep_attributes_include_rules(config)
|
108
137
|
build_rule(config[:'attributes.include'], DST_ALL, true)
|
109
138
|
build_rule(config[:'transaction_tracer.attributes.include'], DST_TRANSACTION_TRACER, true)
|
110
139
|
build_rule(config[:'transaction_events.attributes.include'], DST_TRANSACTION_EVENTS, true)
|
@@ -112,17 +141,6 @@ module NewRelic
|
|
112
141
|
build_rule(config[:'browser_monitoring.attributes.include'], DST_BROWSER_MONITORING, true)
|
113
142
|
build_rule(config[:'span_events.attributes.include'], DST_SPAN_EVENTS, true)
|
114
143
|
build_rule(config[:'transaction_segments.attributes.include'], DST_TRANSACTION_SEGMENTS, true)
|
115
|
-
|
116
|
-
build_uri_rule(config[:'attributes.exclude'])
|
117
|
-
|
118
|
-
@rules.sort!
|
119
|
-
|
120
|
-
# We're ok to cache high security for fast lookup because the attribute
|
121
|
-
# filter is re-generated on any significant config change.
|
122
|
-
@high_security = config[:high_security]
|
123
|
-
|
124
|
-
setup_key_cache
|
125
|
-
cache_prefix_denylist
|
126
144
|
end
|
127
145
|
|
128
146
|
# Note the key_cache is a global cache, accessible by multiple threads,
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -19,7 +18,7 @@ module NewRelic
|
|
19
18
|
elsif prefix
|
20
19
|
val = Coerce.scalar(object)
|
21
20
|
if blk
|
22
|
-
|
21
|
+
yield(prefix, val)
|
23
22
|
elsif !val.nil?
|
24
23
|
result[prefix] = val
|
25
24
|
end
|
@@ -32,7 +31,7 @@ module NewRelic
|
|
32
31
|
def flatten_and_coerce_hash(hash, prefix, result, &blk)
|
33
32
|
if hash.empty?
|
34
33
|
if blk
|
35
|
-
|
34
|
+
yield(prefix, EMPTY_HASH_STRING_LITERAL)
|
36
35
|
else
|
37
36
|
result[prefix] = EMPTY_HASH_STRING_LITERAL
|
38
37
|
end
|
@@ -47,7 +46,7 @@ module NewRelic
|
|
47
46
|
def flatten_and_coerce_array(array, prefix, result, &blk)
|
48
47
|
if array.empty?
|
49
48
|
if blk
|
50
|
-
|
49
|
+
yield(prefix, EMPTY_ARRAY_STRING_LITERAL)
|
51
50
|
else
|
52
51
|
result[prefix] = EMPTY_ARRAY_STRING_LITERAL
|
53
52
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -59,6 +58,7 @@ module NewRelic
|
|
59
58
|
def merge_custom_attributes(other)
|
60
59
|
return unless Agent.config[:'custom_attributes.enabled']
|
61
60
|
return if other.empty?
|
61
|
+
|
62
62
|
AttributeProcessing.flatten_and_coerce(other) do |k, v|
|
63
63
|
add_custom_attribute(k, v)
|
64
64
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -30,6 +29,7 @@ module NewRelic
|
|
30
29
|
|
31
30
|
def log_request_headers(uri, headers)
|
32
31
|
return unless enabled? && allowed_endpoint?(uri)
|
32
|
+
|
33
33
|
@log.info("REQUEST HEADERS: #{headers}")
|
34
34
|
rescue StandardError, SystemStackError, SystemCallError => e
|
35
35
|
::NewRelic::Agent.logger.warn("Failed writing request headers to audit log", e)
|
@@ -95,13 +95,13 @@ module NewRelic
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def wants_stdout?
|
98
|
-
::NewRelic::Agent.config[:'audit_log.path'].
|
98
|
+
::NewRelic::Agent.config[:'audit_log.path'].casecmp("STDOUT").zero?
|
99
99
|
end
|
100
100
|
|
101
101
|
def create_log_formatter
|
102
102
|
@hostname = NewRelic::Agent::Hostname.get
|
103
103
|
@prefix = wants_stdout? ? '** [NewRelic]' : ''
|
104
|
-
|
104
|
+
proc do |severity, time, progname, msg|
|
105
105
|
"#{@prefix}[#{time} #{@hostname} (#{$$})] : #{msg}\n"
|
106
106
|
end
|
107
107
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -21,14 +20,14 @@ module NewRelic
|
|
21
20
|
attr_accessor :thread_profiler_session, :backtrace_service
|
22
21
|
|
23
22
|
def initialize(event_listener = nil)
|
24
|
-
@handlers = Hash.new { |*|
|
23
|
+
@handlers = Hash.new { |*| proc { |cmd| self.unrecognized_agent_command(cmd) } }
|
25
24
|
|
26
25
|
@backtrace_service = Threading::BacktraceService.new(event_listener)
|
27
26
|
|
28
27
|
@thread_profiler_session = ThreadProfilerSession.new(@backtrace_service)
|
29
28
|
|
30
|
-
@handlers['start_profiler'] =
|
31
|
-
@handlers['stop_profiler'] =
|
29
|
+
@handlers['start_profiler'] = proc { |cmd| thread_profiler_session.handle_start_command(cmd) }
|
30
|
+
@handlers['stop_profiler'] = proc { |cmd| thread_profiler_session.handle_stop_command(cmd) }
|
32
31
|
|
33
32
|
if event_listener
|
34
33
|
event_listener.subscribe(:before_shutdown, &method(:on_before_shutdown))
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# This file is distributed under New Relic's license terms.
|
3
2
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
3
|
# frozen_string_literal: true
|
@@ -43,6 +42,7 @@ module NewRelic
|
|
43
42
|
|
44
43
|
def stop(report_data)
|
45
44
|
return unless running?
|
45
|
+
|
46
46
|
NewRelic::Agent.logger.debug("Stopping Thread Profiler.")
|
47
47
|
@finished_profile = @backtrace_service.harvest(NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS)
|
48
48
|
@backtrace_service.unsubscribe(NewRelic::Agent::Threading::BacktraceService::ALL_TRANSACTIONS)
|