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
@@ -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,7 +9,7 @@ module NewRelic
|
|
10
9
|
module Configuration
|
11
10
|
# Helper since default Procs are evaluated in the context of this module
|
12
11
|
def self.value_of(key)
|
13
|
-
|
12
|
+
proc do
|
14
13
|
NewRelic::Agent.config[key]
|
15
14
|
end
|
16
15
|
end
|
@@ -28,7 +27,7 @@ module NewRelic
|
|
28
27
|
# - auto, when returned means, try to use prepend unless conflicting gems discovered
|
29
28
|
#
|
30
29
|
def self.instrumentation_value_of(disable_key, prepend_key = nil)
|
31
|
-
|
30
|
+
proc do
|
32
31
|
if NewRelic::Agent.config[disable_key]
|
33
32
|
"disabled"
|
34
33
|
elsif prepend_key && !NewRelic::Agent.config[prepend_key]
|
@@ -40,7 +39,7 @@ module NewRelic
|
|
40
39
|
end
|
41
40
|
|
42
41
|
def self.instrumentation_value_from_boolean(key)
|
43
|
-
|
42
|
+
proc do
|
44
43
|
NewRelic::Agent.config[key] ? 'auto' : 'disabled'
|
45
44
|
end
|
46
45
|
end
|
@@ -48,7 +47,7 @@ module NewRelic
|
|
48
47
|
# Marks the config option as deprecated in the documentation once generated.
|
49
48
|
# Does not appear in logs.
|
50
49
|
def self.deprecated_description(new_setting, description)
|
51
|
-
link_ref = new_setting.to_s.
|
50
|
+
link_ref = new_setting.to_s.tr(".", "-")
|
52
51
|
%{Please see: [#{new_setting}](docs/agents/ruby-agent/configuration/ruby-agent-configuration##{link_ref}). \n\n#{description}}
|
53
52
|
end
|
54
53
|
|
@@ -82,7 +81,7 @@ module NewRelic
|
|
82
81
|
end
|
83
82
|
|
84
83
|
def self.config_search_paths
|
85
|
-
|
84
|
+
proc {
|
86
85
|
paths = [
|
87
86
|
File.join("config", "newrelic.yml"),
|
88
87
|
File.join("newrelic.yml"),
|
@@ -116,7 +115,7 @@ module NewRelic
|
|
116
115
|
end
|
117
116
|
|
118
117
|
def self.config_path
|
119
|
-
|
118
|
+
proc {
|
120
119
|
found_path = NewRelic::Agent.config[:config_search_paths].detect do |file|
|
121
120
|
File.expand_path(file) if File.exist?(file)
|
122
121
|
end
|
@@ -125,7 +124,7 @@ module NewRelic
|
|
125
124
|
end
|
126
125
|
|
127
126
|
def self.framework
|
128
|
-
|
127
|
+
proc {
|
129
128
|
case
|
130
129
|
when defined?(::NewRelic::TEST) then :test
|
131
130
|
when defined?(::Rails::VERSION)
|
@@ -146,7 +145,7 @@ module NewRelic
|
|
146
145
|
end
|
147
146
|
|
148
147
|
def self.agent_enabled
|
149
|
-
|
148
|
+
proc {
|
150
149
|
NewRelic::Agent.config[:enabled] &&
|
151
150
|
(NewRelic::Agent.config[:test_mode] || NewRelic::Agent.config[:monitor_mode]) &&
|
152
151
|
NewRelic::Agent::Autostart.agent_should_start?
|
@@ -156,9 +155,9 @@ module NewRelic
|
|
156
155
|
DEFAULT_LOG_DIR = 'log/'.freeze
|
157
156
|
|
158
157
|
def self.audit_log_path
|
159
|
-
|
158
|
+
proc {
|
160
159
|
log_file_path = NewRelic::Agent.config[:log_file_path]
|
161
|
-
wants_stdout = (log_file_path.
|
160
|
+
wants_stdout = (log_file_path.casecmp('STDOUT').zero?)
|
162
161
|
audit_log_dir = wants_stdout ? DEFAULT_LOG_DIR : log_file_path
|
163
162
|
|
164
163
|
File.join(audit_log_dir, 'newrelic_audit.log')
|
@@ -166,30 +165,30 @@ module NewRelic
|
|
166
165
|
end
|
167
166
|
|
168
167
|
def self.app_name
|
169
|
-
|
168
|
+
proc { NewRelic::Control.instance.env }
|
170
169
|
end
|
171
170
|
|
172
171
|
def self.dispatcher
|
173
|
-
|
172
|
+
proc { NewRelic::Control.instance.local_env.discovered_dispatcher }
|
174
173
|
end
|
175
174
|
|
176
175
|
def self.thread_profiler_enabled
|
177
|
-
|
176
|
+
proc { NewRelic::Agent::Threading::BacktraceService.is_supported? }
|
178
177
|
end
|
179
178
|
|
180
179
|
# This check supports the js_errors_beta key we've asked clients to
|
181
180
|
# set. Once JS errors are GA, browser_monitoring.loader can stop
|
182
181
|
# being dynamic.
|
183
182
|
def self.browser_monitoring_loader
|
184
|
-
|
183
|
+
proc { NewRelic::Agent.config[:js_errors_beta] ? "full" : "rum" }
|
185
184
|
end
|
186
185
|
|
187
186
|
def self.transaction_tracer_transaction_threshold
|
188
|
-
|
187
|
+
proc { NewRelic::Agent.config[:apdex_t] * 4 }
|
189
188
|
end
|
190
189
|
|
191
190
|
def self.profiling_available
|
192
|
-
|
191
|
+
proc {
|
193
192
|
begin
|
194
193
|
require 'ruby-prof'
|
195
194
|
true
|
@@ -200,7 +199,7 @@ module NewRelic
|
|
200
199
|
end
|
201
200
|
|
202
201
|
def self.host
|
203
|
-
|
202
|
+
proc do
|
204
203
|
regex = /\A(?<identifier>.+?)x/
|
205
204
|
if matches = regex.match(String(NewRelic::Agent.config[:license_key]))
|
206
205
|
"collector.#{matches['identifier']}.nr-data.net"
|
@@ -211,12 +210,16 @@ module NewRelic
|
|
211
210
|
end
|
212
211
|
|
213
212
|
def self.api_host
|
214
|
-
|
215
|
-
|
216
|
-
|
213
|
+
# only used for deployment task
|
214
|
+
proc do
|
215
|
+
api_version = if NewRelic::Agent.config[:api_key].nil? || NewRelic::Agent.config[:api_key].empty?
|
216
|
+
"rpm"
|
217
217
|
else
|
218
|
-
|
218
|
+
"api"
|
219
219
|
end
|
220
|
+
api_region = "eu." if String(NewRelic::Agent.config[:license_key]).start_with?('eu')
|
221
|
+
|
222
|
+
"#{api_version}.#{api_region}newrelic.com"
|
220
223
|
end
|
221
224
|
end
|
222
225
|
|
@@ -260,7 +263,7 @@ module NewRelic
|
|
260
263
|
end
|
261
264
|
|
262
265
|
def self.enforce_fallback(allowed_values: nil, fallback: nil)
|
263
|
-
|
266
|
+
proc do |configured_value|
|
264
267
|
if allowed_values.any? { |v| v =~ /#{configured_value}/i }
|
265
268
|
configured_value
|
266
269
|
else
|
@@ -330,6 +333,13 @@ module NewRelic
|
|
330
333
|
:allowed_from_server => false,
|
331
334
|
:description => 'Your New Relic [license key](/docs/apis/intro-apis/new-relic-api-keys/#ingest-license-key).'
|
332
335
|
},
|
336
|
+
:api_key => {
|
337
|
+
:default => '',
|
338
|
+
:public => true,
|
339
|
+
:type => String,
|
340
|
+
:allowed_from_server => false,
|
341
|
+
:description => 'Your New Relic API key. Required when using the New Relic REST API v2 to record deployments using the `newrelic deployments` command.'
|
342
|
+
},
|
333
343
|
:agent_enabled => {
|
334
344
|
:default => DefaultSource.agent_enabled,
|
335
345
|
:documentation_default => true,
|
@@ -457,7 +467,7 @@ When `true`, the agent captures HTTP request parameters and attaches them to tra
|
|
457
467
|
:public => false,
|
458
468
|
:type => Array,
|
459
469
|
:allowed_from_server => false,
|
460
|
-
:description => "An array of candidate locations for the agent
|
470
|
+
:description => "An array of candidate locations for the agent's configuration file."
|
461
471
|
},
|
462
472
|
:dispatcher => {
|
463
473
|
:default => DefaultSource.dispatcher,
|
@@ -906,6 +916,14 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
|
|
906
916
|
:allowed_from_server => false,
|
907
917
|
:description => 'Controls auto-instrumentation of bunny at start up. May be one of [auto|prepend|chain|disabled].'
|
908
918
|
},
|
919
|
+
:'instrumentation.elasticsearch' => {
|
920
|
+
:default => 'auto',
|
921
|
+
:public => true,
|
922
|
+
:type => String,
|
923
|
+
:dynamic_name => true,
|
924
|
+
:allowed_from_server => false,
|
925
|
+
:description => 'Controls auto-instrumentation of the elasticsearch library at start up. May be one of [auto|prepend|chain|disabled].'
|
926
|
+
},
|
909
927
|
:'instrumentation.httprb' => {
|
910
928
|
:default => instrumentation_value_of(:disable_httprb),
|
911
929
|
:documentation_default => 'auto',
|
@@ -930,7 +948,7 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
|
|
930
948
|
:type => String,
|
931
949
|
:dynamic_name => true,
|
932
950
|
:allowed_from_server => false,
|
933
|
-
:description => "Controls auto-instrumentation of the Thread class at start up to allow the agent to correctly nest spans inside of an
|
951
|
+
:description => "Controls auto-instrumentation of the Thread class at start up to allow the agent to correctly nest spans inside of an asynchronous transaction. This does not enable the agent to automatically trace all threads created (see `instrumentation.thread.tracing`). May be one of [auto|prepend|chain|disabled]."
|
934
952
|
},
|
935
953
|
:'instrumentation.thread.tracing' => {
|
936
954
|
:default => false,
|
@@ -1177,7 +1195,7 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
|
|
1177
1195
|
:type => Boolean,
|
1178
1196
|
:deprecated => true,
|
1179
1197
|
:allowed_from_server => false,
|
1180
|
-
:description => deprecated_description(:'instrumentation.memcache', "If `true`, disables instrumentation for the dalli gem
|
1198
|
+
:description => deprecated_description(:'instrumentation.memcache', "If `true`, disables instrumentation for the dalli gem's additional CAS client support.")
|
1181
1199
|
},
|
1182
1200
|
:disable_memcache_instrumentation => {
|
1183
1201
|
:default => false,
|
@@ -1397,6 +1415,20 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
|
|
1397
1415
|
:allowed_from_server => true,
|
1398
1416
|
:description => 'If `true`, the agent obfuscates Mongo queries in transaction traces.'
|
1399
1417
|
},
|
1418
|
+
:'elasticsearch.capture_queries' => {
|
1419
|
+
:default => true,
|
1420
|
+
:public => true,
|
1421
|
+
:type => Boolean,
|
1422
|
+
:allowed_from_server => true,
|
1423
|
+
:description => 'If `true`, the agent captures Elasticsearch queries in transaction traces.'
|
1424
|
+
},
|
1425
|
+
:'elasticsearch.obfuscate_queries' => {
|
1426
|
+
:default => true,
|
1427
|
+
:public => true,
|
1428
|
+
:type => Boolean,
|
1429
|
+
:allowed_from_server => true,
|
1430
|
+
:description => 'If `true`, the agent obfuscates Elasticsearch queries in transaction traces.'
|
1431
|
+
},
|
1400
1432
|
:'error_collector.enabled' => {
|
1401
1433
|
:default => true,
|
1402
1434
|
:public => true,
|
@@ -1562,7 +1594,7 @@ A map of error classes to a list of messages. When an error of one of the classe
|
|
1562
1594
|
:public => false,
|
1563
1595
|
:type => String,
|
1564
1596
|
:allowed_from_server => true,
|
1565
|
-
:description => '
|
1597
|
+
:description => 'JavaScript agent file for real user monitoring.'
|
1566
1598
|
},
|
1567
1599
|
:'browser_monitoring.auto_instrument' => {
|
1568
1600
|
:default => value_of(:'rum.enabled'),
|
@@ -1921,7 +1953,7 @@ A map of error classes to a list of messages. When an error of one of the classe
|
|
1921
1953
|
:description => 'If `true`, the agent uses Heroku dyno names as the hostname.'
|
1922
1954
|
},
|
1923
1955
|
:'heroku.dyno_name_prefixes_to_shorten' => {
|
1924
|
-
:default => [
|
1956
|
+
:default => %w[scheduler run],
|
1925
1957
|
:public => true,
|
1926
1958
|
:type => Array,
|
1927
1959
|
:allowed_from_server => false,
|
@@ -1929,7 +1961,7 @@ A map of error classes to a list of messages. When an error of one of the classe
|
|
1929
1961
|
:description => 'Ordinarily the agent reports dyno names with a trailing dot and process ID (for example, <b>worker.3</b>). You can remove this trailing data by specifying the prefixes you want to report without trailing data (for example, <b>worker</b>).'
|
1930
1962
|
},
|
1931
1963
|
:'process_host.display_name' => {
|
1932
|
-
:default =>
|
1964
|
+
:default => proc { NewRelic::Agent::Hostname.get },
|
1933
1965
|
:public => true,
|
1934
1966
|
:type => String,
|
1935
1967
|
:allowed_from_server => false,
|
@@ -1962,7 +1994,7 @@ A map of error classes to a list of messages. When an error of one of the classe
|
|
1962
1994
|
:public => true,
|
1963
1995
|
:type => String,
|
1964
1996
|
:allowed_from_server => false,
|
1965
|
-
:description => "Manual override for the path to your local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic
|
1997
|
+
:description => "Manual override for the path to your local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic's data collection service."
|
1966
1998
|
},
|
1967
1999
|
:'rules.ignore_url_regexes' => {
|
1968
2000
|
:default => [],
|
@@ -1994,7 +2026,7 @@ A map of error classes to a list of messages. When an error of one of the classe
|
|
1994
2026
|
:description => 'If `true`, the agent captures [custom events](/docs/insights/new-relic-insights/adding-querying-data/inserting-custom-events-new-relic-apm-agents).'
|
1995
2027
|
},
|
1996
2028
|
:'custom_insights_events.max_samples_stored' => {
|
1997
|
-
:default =>
|
2029
|
+
:default => 3000,
|
1998
2030
|
:public => true,
|
1999
2031
|
:type => Integer,
|
2000
2032
|
:allowed_from_server => true,
|
@@ -2436,6 +2468,25 @@ A map of error classes to a list of messages. When an error of one of the classe
|
|
2436
2468
|
:allowed_from_server => false,
|
2437
2469
|
:external => :infinite_tracing,
|
2438
2470
|
:description => "Configures the TCP/IP port for the Trace Observer Host"
|
2471
|
+
},
|
2472
|
+
:'infinite_tracing.compression_level' => {
|
2473
|
+
:default => :none,
|
2474
|
+
:public => false,
|
2475
|
+
:type => Symbol,
|
2476
|
+
:allowed_from_server => false,
|
2477
|
+
:external => :infinite_tracing,
|
2478
|
+
:description => "Configure the compression level for data sent to the Trace Observer\nMay be one of " \
|
2479
|
+
"[none|low|medium|high]\nBy default, compression is not used (level = none)"
|
2480
|
+
},
|
2481
|
+
:'infinite_tracing.batching' => {
|
2482
|
+
:default => false,
|
2483
|
+
:public => false,
|
2484
|
+
:type => Boolean,
|
2485
|
+
:allowed_from_server => false,
|
2486
|
+
:external => :infinite_tracing,
|
2487
|
+
:description => "If true, data sent to the Trace Observer will be batched instead of the default of each " \
|
2488
|
+
"span being sent individually"
|
2489
|
+
|
2439
2490
|
}
|
2440
2491
|
}.freeze
|
2441
2492
|
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
|
@@ -36,7 +35,8 @@ module NewRelic
|
|
36
35
|
# turns {'a' => {'b' => 'c'}} into {'a.b' => 'c'}
|
37
36
|
def dot_flattened(nested_hash, names = [], result = {})
|
38
37
|
nested_hash.each do |key, val|
|
39
|
-
next if val
|
38
|
+
next if val.nil?
|
39
|
+
|
40
40
|
if val.respond_to?(:has_key?)
|
41
41
|
dot_flattened(val, names + [key], result)
|
42
42
|
else
|
@@ -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
|
@@ -35,6 +34,7 @@ module NewRelic
|
|
35
34
|
set_dotted_alias(config_setting)
|
36
35
|
|
37
36
|
return unless value[:aliases]
|
37
|
+
|
38
38
|
value[:aliases].each do |config_alias|
|
39
39
|
self.alias_map[config_alias] = config_setting
|
40
40
|
end
|
@@ -44,14 +44,14 @@ module NewRelic
|
|
44
44
|
config_setting = original_config_setting.to_s
|
45
45
|
|
46
46
|
if config_setting.include?('.')
|
47
|
-
config_alias = config_setting.
|
47
|
+
config_alias = config_setting.tr('.', '_').to_sym
|
48
48
|
self.alias_map[config_alias] = original_config_setting
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
def set_log_file
|
53
53
|
if ENV['NEW_RELIC_LOG']
|
54
|
-
if ENV['NEW_RELIC_LOG'].
|
54
|
+
if ENV['NEW_RELIC_LOG'].casecmp('STDOUT').zero?
|
55
55
|
self[:log_file_path] = self[:log_file_name] = 'STDOUT'
|
56
56
|
else
|
57
57
|
self[:log_file_path] = File.dirname(ENV['NEW_RELIC_LOG'])
|
@@ -96,7 +96,7 @@ module NewRelic
|
|
96
96
|
elsif type == NewRelic::Agent::Configuration::Boolean
|
97
97
|
if value =~ /false|off|no/i
|
98
98
|
self[config_key] = false
|
99
|
-
elsif value
|
99
|
+
elsif !value.nil?
|
100
100
|
self[config_key] = true
|
101
101
|
end
|
102
102
|
else
|
@@ -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,6 +18,7 @@ module NewRelic
|
|
19
18
|
:'transaction_tracer.record_sql' => record_sql_setting(local_settings, :'transaction_tracer.record_sql'),
|
20
19
|
:'slow_sql.record_sql' => record_sql_setting(local_settings, :'slow_sql.record_sql'),
|
21
20
|
:'mongo.obfuscate_queries' => true,
|
21
|
+
:'elasticsearch.obfuscate_queries' => true,
|
22
22
|
:'transaction_tracer.record_redis_arguments' => false,
|
23
23
|
|
24
24
|
:'custom_insights_events.enabled' => false,
|
@@ -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
|
@@ -37,6 +36,7 @@ module NewRelic
|
|
37
36
|
|
38
37
|
def add_config_for_testing(source, level = 0)
|
39
38
|
raise 'Invalid config type for testing' unless [Hash, DottedHash].include?(source.class)
|
39
|
+
|
40
40
|
invoke_callbacks(:add, source)
|
41
41
|
@configs_for_testing << [source.freeze, level]
|
42
42
|
reset_cache
|
@@ -111,6 +111,7 @@ module NewRelic
|
|
111
111
|
def fetch(key)
|
112
112
|
config_stack.each do |config|
|
113
113
|
next unless config
|
114
|
+
|
114
115
|
accessor = key.to_sym
|
115
116
|
|
116
117
|
if config.has_key?(accessor)
|
@@ -156,11 +157,12 @@ module NewRelic
|
|
156
157
|
|
157
158
|
def register_callback(key, &proc)
|
158
159
|
@callbacks[key] << proc
|
159
|
-
|
160
|
+
yield(@cache[key])
|
160
161
|
end
|
161
162
|
|
162
163
|
def invoke_callbacks(direction, source)
|
163
164
|
return unless source
|
165
|
+
|
164
166
|
source.keys.each do |key|
|
165
167
|
begin
|
166
168
|
# we need to evaluate and apply transformations for the value to deal with procs as values
|
@@ -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
|
@@ -7,8 +6,8 @@ module NewRelic
|
|
7
6
|
module Agent
|
8
7
|
module Configuration
|
9
8
|
MASK_DEFAULTS = {
|
10
|
-
:'thread_profiler' =>
|
11
|
-
:'thread_profiler.enabled' =>
|
9
|
+
:'thread_profiler' => proc { !NewRelic::Agent::Threading::BacktraceService.is_supported? },
|
10
|
+
:'thread_profiler.enabled' => proc { !NewRelic::Agent::Threading::BacktraceService.is_supported? }
|
12
11
|
}
|
13
12
|
end
|
14
13
|
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
|
@@ -80,6 +79,15 @@ module NewRelic
|
|
80
79
|
change_setting(policies, :'mongo.obfuscate_queries', true)
|
81
80
|
}
|
82
81
|
},
|
82
|
+
{
|
83
|
+
option: :'elasticsearch.capture_queries',
|
84
|
+
supported: true,
|
85
|
+
enabled_fn: method(:enabled?),
|
86
|
+
disabled_value: false,
|
87
|
+
permitted_fn: proc { |policies|
|
88
|
+
change_setting(policies, :'elasticsearch.obfuscate_queries', true)
|
89
|
+
}
|
90
|
+
},
|
83
91
|
{
|
84
92
|
option: :'transaction_tracer.record_redis_arguments',
|
85
93
|
supported: true,
|
@@ -213,6 +221,7 @@ module NewRelic
|
|
213
221
|
security_policies.inject({}) do |settings, (policy_name, policy_settings)|
|
214
222
|
SECURITY_SETTINGS_MAP[policy_name].each do |policy|
|
215
223
|
next unless policy[:supported]
|
224
|
+
|
216
225
|
if policy_settings[ENABLED]
|
217
226
|
if policy[:enabled_fn].call(policy[:option])
|
218
227
|
if permitted_fn = policy[:permitted_fn]
|
@@ -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
|
@@ -14,7 +13,7 @@ module NewRelic
|
|
14
13
|
|
15
14
|
# These are configuration options that have a value of a Hash
|
16
15
|
# This is used in YamlSource#dot_flattened prevent flattening these values
|
17
|
-
CONFIG_WITH_HASH_VALUE = [
|
16
|
+
CONFIG_WITH_HASH_VALUE = %w[expected_messages ignore_messages]
|
18
17
|
|
19
18
|
def initialize(path, env)
|
20
19
|
@path = path
|
@@ -156,7 +155,8 @@ module NewRelic
|
|
156
155
|
|
157
156
|
def dot_flattened(nested_hash, names = [], result = {})
|
158
157
|
nested_hash.each do |key, val|
|
159
|
-
next if val
|
158
|
+
next if val.nil?
|
159
|
+
|
160
160
|
if val.respond_to?(:has_key?) && !CONFIG_WITH_HASH_VALUE.include?(key)
|
161
161
|
dot_flattened(val, names + [key], result)
|
162
162
|
else
|
@@ -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
|
@@ -39,10 +38,11 @@ module NewRelic
|
|
39
38
|
end
|
40
39
|
|
41
40
|
# We've seen objects in the environment report (Rails.env in
|
42
|
-
# particular) that can't
|
41
|
+
# particular) that can't serialize to JSON. Cope with that here and
|
43
42
|
# clear out so downstream code doesn't have to check again.
|
44
43
|
def sanitize_environment_report(environment_report)
|
45
44
|
return NewRelic::EMPTY_ARRAY unless @service.valid_to_marshal?(environment_report)
|
45
|
+
|
46
46
|
environment_report
|
47
47
|
end
|
48
48
|
|
@@ -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
|
@@ -20,7 +19,7 @@ module NewRelic
|
|
20
19
|
# Can accommodate most arbitrary data - anything extra is
|
21
20
|
# ignored unless we say to do something with it here.
|
22
21
|
def configure_agent(config_data)
|
23
|
-
return if config_data
|
22
|
+
return if config_data.nil?
|
24
23
|
|
25
24
|
@agent.agent_id = config_data['agent_run_id']
|
26
25
|
|
@@ -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
|
@@ -54,6 +53,7 @@ module NewRelic
|
|
54
53
|
|
55
54
|
def obfuscate_single_quote_literals(sql)
|
56
55
|
return sql unless sql =~ COMPONENTS_REGEX_MAP[:single_quotes]
|
56
|
+
|
57
57
|
sql.gsub(COMPONENTS_REGEX_MAP[:single_quotes], PLACEHOLDER)
|
58
58
|
end
|
59
59
|
|
@@ -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
|
@@ -33,6 +32,8 @@ module NewRelic
|
|
33
32
|
# Take care not to the dup the query more than once as
|
34
33
|
# correctly encoded may also dup the query.
|
35
34
|
def capture_query(query)
|
35
|
+
return unless query
|
36
|
+
|
36
37
|
id = query.object_id
|
37
38
|
query = Helper.correctly_encoded(truncate_query(query))
|
38
39
|
if query.object_id == id
|
@@ -43,6 +44,8 @@ module NewRelic
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def truncate_query(query)
|
47
|
+
return unless query
|
48
|
+
|
46
49
|
if query.length > (MAX_QUERY_LENGTH - 4)
|
47
50
|
query[0..MAX_QUERY_LENGTH - 4] << ELLIPSIS
|
48
51
|
else
|
@@ -115,22 +118,23 @@ module NewRelic
|
|
115
118
|
# in a report period, selected for shipment to New Relic
|
116
119
|
def explain_sql(statement)
|
117
120
|
return nil unless statement.sql && statement.explainer && statement.config
|
121
|
+
|
118
122
|
statement.sql = statement.sql.split(";\n")[0] # only explain the first
|
119
123
|
return statement.explain || []
|
120
124
|
end
|
121
125
|
|
122
|
-
KNOWN_OPERATIONS = [
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
126
|
+
KNOWN_OPERATIONS = %w[
|
127
|
+
alter
|
128
|
+
select
|
129
|
+
update
|
130
|
+
delete
|
131
|
+
insert
|
132
|
+
create
|
133
|
+
show
|
134
|
+
set
|
135
|
+
exec
|
136
|
+
execute
|
137
|
+
call
|
134
138
|
]
|
135
139
|
OTHER_OPERATION = 'other'.freeze
|
136
140
|
SQL_COMMENT_REGEX = Regexp.new('/\*.*?\*/', Regexp::MULTILINE).freeze
|
@@ -158,7 +162,7 @@ module NewRelic
|
|
158
162
|
return connection if connection
|
159
163
|
|
160
164
|
begin
|
161
|
-
@connections[config] =
|
165
|
+
@connections[config] = yield(config)
|
162
166
|
rescue => e
|
163
167
|
::NewRelic::Agent.logger.error("Caught exception trying to get connection to DB for explain.", e)
|
164
168
|
nil
|
@@ -224,6 +228,7 @@ module NewRelic
|
|
224
228
|
|
225
229
|
def explain
|
226
230
|
return unless explainable?
|
231
|
+
|
227
232
|
handle_exception_in_explain do
|
228
233
|
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
229
234
|
plan = @explainer.call(self)
|
@@ -239,6 +244,7 @@ module NewRelic
|
|
239
244
|
|
240
245
|
def append_sql(new_sql)
|
241
246
|
return if new_sql.empty?
|
247
|
+
|
242
248
|
@sql = Database.truncate_query(@sql << NEWLINE << new_sql)
|
243
249
|
end
|
244
250
|
|