newrelic_rpm 8.9.0 → 8.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +12 -6
- data/.simplecov +1 -0
- data/.snyk +11 -0
- data/Brewfile +1 -0
- data/CHANGELOG.md +56 -0
- data/Guardfile +1 -0
- data/Rakefile +5 -0
- data/bin/mongrel_rpm +7 -6
- data/bin/newrelic +2 -1
- data/bin/newrelic_cmd +1 -0
- data/bin/nrdebug +3 -2
- data/init.rb +3 -2
- data/install.rb +1 -0
- data/lib/new_relic/agent/adaptive_sampler.rb +4 -3
- data/lib/new_relic/agent/agent/shutdown.rb +3 -2
- data/lib/new_relic/agent/agent/special_startup.rb +3 -2
- data/lib/new_relic/agent/agent/start_worker_thread.rb +15 -14
- data/lib/new_relic/agent/agent/startup.rb +11 -10
- data/lib/new_relic/agent/agent.rb +35 -33
- data/lib/new_relic/agent/agent_logger.rb +2 -1
- data/lib/new_relic/agent/attribute_filter.rb +1 -0
- data/lib/new_relic/agent/attribute_processing.rb +4 -3
- data/lib/new_relic/agent/attributes.rb +2 -1
- data/lib/new_relic/agent/audit_logger.rb +1 -0
- data/lib/new_relic/agent/autostart.rb +1 -0
- data/lib/new_relic/agent/chained_call.rb +1 -0
- data/lib/new_relic/agent/commands/agent_command.rb +1 -0
- data/lib/new_relic/agent/commands/agent_command_router.rb +4 -3
- data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -0
- data/lib/new_relic/agent/configuration/default_source.rb +35 -7
- data/lib/new_relic/agent/configuration/dotted_hash.rb +1 -0
- data/lib/new_relic/agent/configuration/environment_source.rb +2 -1
- data/lib/new_relic/agent/configuration/event_harvest_config.rb +1 -0
- data/lib/new_relic/agent/configuration/high_security_source.rb +1 -0
- data/lib/new_relic/agent/configuration/manager.rb +2 -1
- data/lib/new_relic/agent/configuration/manual_source.rb +1 -0
- data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -0
- data/lib/new_relic/agent/configuration/security_policy_source.rb +7 -3
- data/lib/new_relic/agent/configuration/server_source.rb +7 -6
- data/lib/new_relic/agent/configuration/yaml_source.rb +4 -1
- data/lib/new_relic/agent/configuration.rb +1 -0
- data/lib/new_relic/agent/connect/request_builder.rb +1 -0
- data/lib/new_relic/agent/connect/response_handler.rb +4 -3
- data/lib/new_relic/agent/custom_event_aggregator.rb +5 -4
- data/lib/new_relic/agent/database/explain_plan_helpers.rb +1 -0
- data/lib/new_relic/agent/database/obfuscation_helpers.rb +1 -0
- data/lib/new_relic/agent/database/obfuscator.rb +2 -1
- data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +1 -0
- data/lib/new_relic/agent/database.rb +3 -2
- data/lib/new_relic/agent/database_adapter.rb +1 -0
- data/lib/new_relic/agent/datastores/metric_helper.rb +9 -8
- data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +2 -0
- data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +1 -0
- data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +2 -1
- data/lib/new_relic/agent/datastores/mongo.rb +1 -0
- data/lib/new_relic/agent/datastores/redis.rb +3 -2
- data/lib/new_relic/agent/datastores.rb +4 -3
- data/lib/new_relic/agent/deprecator.rb +1 -0
- data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +1 -0
- data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +16 -16
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +9 -9
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +18 -18
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +8 -8
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +2 -2
- data/lib/new_relic/agent/distributed_tracing/trace_context.rb +40 -39
- data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +16 -14
- data/lib/new_relic/agent/distributed_tracing.rb +17 -17
- data/lib/new_relic/agent/encoding_normalizer.rb +1 -0
- data/lib/new_relic/agent/error_collector.rb +6 -4
- data/lib/new_relic/agent/error_event_aggregator.rb +3 -3
- data/lib/new_relic/agent/error_filter.rb +1 -0
- data/lib/new_relic/agent/error_trace_aggregator.rb +2 -1
- data/lib/new_relic/agent/event_aggregator.rb +20 -19
- data/lib/new_relic/agent/event_buffer.rb +1 -0
- data/lib/new_relic/agent/event_listener.rb +1 -0
- data/lib/new_relic/agent/event_loop.rb +7 -6
- data/lib/new_relic/agent/external.rb +9 -8
- data/lib/new_relic/agent/guid_generator.rb +2 -1
- data/lib/new_relic/agent/harvester.rb +1 -0
- data/lib/new_relic/agent/heap.rb +3 -2
- data/lib/new_relic/agent/hostname.rb +4 -2
- data/lib/new_relic/agent/http_clients/abstract.rb +1 -1
- data/lib/new_relic/agent/http_clients/curb_wrappers.rb +5 -5
- data/lib/new_relic/agent/http_clients/excon_wrappers.rb +4 -4
- data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +1 -1
- data/lib/new_relic/agent/http_clients/uri_util.rb +1 -1
- data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +6 -4
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +2 -0
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +6 -4
- data/lib/new_relic/agent/instrumentation/active_job.rb +2 -1
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +2 -1
- data/lib/new_relic/agent/instrumentation/active_record.rb +9 -8
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +15 -14
- data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +3 -2
- data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +5 -3
- data/lib/new_relic/agent/instrumentation/active_storage.rb +2 -1
- data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +16 -14
- data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +1 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger.rb +2 -1
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +2 -1
- data/lib/new_relic/agent/instrumentation/authlogic.rb +2 -1
- data/lib/new_relic/agent/instrumentation/bunny/chain.rb +10 -9
- data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +10 -10
- data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +4 -3
- data/lib/new_relic/agent/instrumentation/bunny.rb +1 -1
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +13 -9
- data/lib/new_relic/agent/instrumentation/curb/chain.rb +21 -21
- data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +8 -8
- data/lib/new_relic/agent/instrumentation/curb/prepend.rb +2 -2
- data/lib/new_relic/agent/instrumentation/curb.rb +2 -1
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +43 -42
- data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +1 -1
- data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +2 -2
- data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +1 -1
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +3 -2
- data/lib/new_relic/agent/instrumentation/excon/middleware.rb +3 -2
- data/lib/new_relic/agent/instrumentation/excon.rb +2 -1
- data/lib/new_relic/agent/instrumentation/grape/chain.rb +6 -5
- data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +5 -4
- data/lib/new_relic/agent/instrumentation/grape/prepend.rb +4 -3
- data/lib/new_relic/agent/instrumentation/grape.rb +1 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +106 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +88 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +117 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +31 -0
- data/lib/new_relic/agent/instrumentation/grpc/helper.rb +31 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/chain.rb +70 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +135 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb +36 -0
- data/lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb +27 -0
- data/lib/new_relic/agent/instrumentation/grpc_client.rb +24 -0
- data/lib/new_relic/agent/instrumentation/grpc_server.rb +26 -0
- data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +6 -5
- data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/httpclient.rb +2 -1
- data/lib/new_relic/agent/instrumentation/httprb/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +4 -3
- data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/httprb.rb +2 -1
- data/lib/new_relic/agent/instrumentation/ignore_actions.rb +2 -1
- data/lib/new_relic/agent/instrumentation/logger/chain.rb +2 -1
- data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +5 -0
- data/lib/new_relic/agent/instrumentation/logger/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/logger.rb +2 -1
- data/lib/new_relic/agent/instrumentation/memcache/chain.rb +2 -2
- data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +19 -19
- data/lib/new_relic/agent/instrumentation/memcache/helper.rb +8 -8
- data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +17 -14
- data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +14 -14
- data/lib/new_relic/agent/instrumentation/memcache.rb +1 -1
- data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +1 -0
- data/lib/new_relic/agent/instrumentation/mongo.rb +2 -1
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +14 -12
- data/lib/new_relic/agent/instrumentation/net_http/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +5 -4
- data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/net_http.rb +2 -1
- data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +5 -4
- data/lib/new_relic/agent/instrumentation/padrino/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +1 -0
- data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/padrino.rb +2 -1
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +3 -2
- data/lib/new_relic/agent/instrumentation/queue_time.rb +1 -0
- data/lib/new_relic/agent/instrumentation/rack/chain.rb +12 -11
- data/lib/new_relic/agent/instrumentation/rack/helpers.rb +1 -0
- data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +7 -6
- data/lib/new_relic/agent/instrumentation/rack/prepend.rb +4 -3
- data/lib/new_relic/agent/instrumentation/rack.rb +1 -0
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +6 -5
- data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -0
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +3 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +3 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +3 -1
- data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +3 -2
- data/lib/new_relic/agent/instrumentation/rake/chain.rb +2 -1
- data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rake/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/rake.rb +3 -2
- data/lib/new_relic/agent/instrumentation/redis/chain.rb +3 -3
- data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +5 -5
- data/lib/new_relic/agent/instrumentation/redis/prepend.rb +3 -3
- data/lib/new_relic/agent/instrumentation/redis.rb +2 -1
- data/lib/new_relic/agent/instrumentation/resque/chain.rb +2 -1
- data/lib/new_relic/agent/instrumentation/resque/helper.rb +1 -0
- data/lib/new_relic/agent/instrumentation/resque/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/resque.rb +3 -2
- data/lib/new_relic/agent/instrumentation/sequel.rb +8 -7
- data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -0
- data/lib/new_relic/agent/instrumentation/sidekiq.rb +6 -4
- data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +2 -1
- data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +1 -0
- data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +2 -1
- data/lib/new_relic/agent/instrumentation/sinatra.rb +2 -1
- data/lib/new_relic/agent/instrumentation/sunspot.rb +2 -1
- data/lib/new_relic/agent/instrumentation/thread/chain.rb +2 -1
- data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +1 -0
- data/lib/new_relic/agent/instrumentation/thread/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/thread.rb +2 -1
- data/lib/new_relic/agent/instrumentation/tilt/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +1 -0
- data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/tilt.rb +1 -0
- data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +6 -5
- data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +1 -0
- data/lib/new_relic/agent/instrumentation/typhoeus.rb +2 -1
- data/lib/new_relic/agent/instrumentation.rb +1 -0
- data/lib/new_relic/agent/internal_agent_error.rb +1 -0
- data/lib/new_relic/agent/javascript_instrumentor.rb +7 -6
- data/lib/new_relic/agent/linking_metadata.rb +2 -2
- data/lib/new_relic/agent/log_event_aggregator.rb +6 -5
- data/lib/new_relic/agent/log_once.rb +1 -0
- data/lib/new_relic/agent/log_priority.rb +1 -0
- data/lib/new_relic/agent/logging.rb +13 -12
- data/lib/new_relic/agent/memory_logger.rb +1 -0
- data/lib/new_relic/agent/messaging.rb +18 -18
- data/lib/new_relic/agent/method_tracer.rb +6 -5
- data/lib/new_relic/agent/method_tracer_helpers.rb +8 -5
- data/lib/new_relic/agent/monitors/cross_app_monitor.rb +3 -2
- data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +3 -2
- data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -0
- data/lib/new_relic/agent/monitors/synthetics_monitor.rb +2 -1
- data/lib/new_relic/agent/monitors.rb +5 -4
- data/lib/new_relic/agent/new_relic_service/encoders.rb +2 -1
- data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +4 -3
- data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -0
- data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +1 -0
- data/lib/new_relic/agent/new_relic_service.rb +11 -11
- data/lib/new_relic/agent/noticible_error.rb +1 -1
- data/lib/new_relic/agent/null_logger.rb +1 -0
- data/lib/new_relic/agent/obfuscator.rb +2 -1
- data/lib/new_relic/agent/parameter_filtering.rb +1 -0
- data/lib/new_relic/agent/payload_metric_mapping.rb +1 -0
- data/lib/new_relic/agent/pipe_channel_manager.rb +6 -5
- data/lib/new_relic/agent/pipe_service.rb +1 -0
- data/lib/new_relic/agent/prepend_supportability.rb +2 -1
- data/lib/new_relic/agent/priority_sampled_buffer.rb +2 -1
- data/lib/new_relic/agent/range_extensions.rb +8 -27
- data/lib/new_relic/agent/rules_engine/replacement_rule.rb +2 -1
- data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +1 -0
- data/lib/new_relic/agent/rules_engine.rb +2 -1
- data/lib/new_relic/agent/sampler.rb +1 -0
- data/lib/new_relic/agent/sampler_collection.rb +1 -0
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -0
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +1 -0
- data/lib/new_relic/agent/samplers/memory_sampler.rb +5 -4
- data/lib/new_relic/agent/samplers/object_sampler.rb +1 -0
- data/lib/new_relic/agent/samplers/vm_sampler.rb +1 -0
- data/lib/new_relic/agent/span_event_aggregator.rb +2 -1
- data/lib/new_relic/agent/span_event_primitive.rb +15 -11
- data/lib/new_relic/agent/sql_sampler.rb +7 -6
- data/lib/new_relic/agent/stats.rb +3 -1
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -0
- data/lib/new_relic/agent/stats_engine/stats_hash.rb +3 -2
- data/lib/new_relic/agent/stats_engine.rb +1 -0
- data/lib/new_relic/agent/synthetics_event_aggregator.rb +6 -5
- data/lib/new_relic/agent/system_info.rb +8 -7
- data/lib/new_relic/agent/threading/agent_thread.rb +1 -0
- data/lib/new_relic/agent/threading/backtrace_node.rb +6 -3
- data/lib/new_relic/agent/threading/backtrace_service.rb +1 -0
- data/lib/new_relic/agent/threading/thread_profile.rb +1 -0
- data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -0
- data/lib/new_relic/agent/tracer.rb +12 -11
- data/lib/new_relic/agent/transaction/abstract_segment.rb +64 -31
- data/lib/new_relic/agent/transaction/datastore_segment.rb +12 -11
- data/lib/new_relic/agent/transaction/distributed_tracer.rb +52 -47
- data/lib/new_relic/agent/transaction/distributed_tracing.rb +21 -21
- data/lib/new_relic/agent/transaction/external_request_segment.rb +36 -27
- data/lib/new_relic/agent/transaction/message_broker_segment.rb +6 -5
- data/lib/new_relic/agent/transaction/request_attributes.rb +29 -28
- data/lib/new_relic/agent/transaction/segment.rb +8 -7
- data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -0
- data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -0
- data/lib/new_relic/agent/transaction/trace.rb +3 -2
- data/lib/new_relic/agent/transaction/trace_builder.rb +10 -9
- data/lib/new_relic/agent/transaction/trace_context.rb +22 -19
- data/lib/new_relic/agent/transaction/trace_node.rb +9 -8
- data/lib/new_relic/agent/transaction/tracing.rb +7 -6
- data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -0
- data/lib/new_relic/agent/transaction.rb +22 -21
- data/lib/new_relic/agent/transaction_error_primitive.rb +9 -8
- data/lib/new_relic/agent/transaction_event_aggregator.rb +5 -4
- data/lib/new_relic/agent/transaction_event_primitive.rb +3 -3
- data/lib/new_relic/agent/transaction_event_recorder.rb +14 -12
- data/lib/new_relic/agent/transaction_metrics.rb +3 -2
- data/lib/new_relic/agent/transaction_sampler.rb +4 -3
- data/lib/new_relic/agent/transaction_time_aggregator.rb +13 -12
- data/lib/new_relic/agent/utilization/aws.rb +4 -3
- data/lib/new_relic/agent/utilization/azure.rb +1 -0
- data/lib/new_relic/agent/utilization/gcp.rb +6 -5
- data/lib/new_relic/agent/utilization/pcf.rb +3 -2
- data/lib/new_relic/agent/utilization/vendor.rb +27 -26
- data/lib/new_relic/agent/utilization_data.rb +1 -0
- data/lib/new_relic/agent/vm/jruby_vm.rb +1 -0
- data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -0
- data/lib/new_relic/agent/vm/mri_vm.rb +1 -0
- data/lib/new_relic/agent/vm/snapshot.rb +1 -0
- data/lib/new_relic/agent/vm.rb +1 -0
- data/lib/new_relic/agent/worker_loop.rb +2 -1
- data/lib/new_relic/agent.rb +11 -10
- data/lib/new_relic/cli/command.rb +5 -4
- data/lib/new_relic/cli/commands/deployments.rb +9 -8
- data/lib/new_relic/cli/commands/install.rb +6 -5
- data/lib/new_relic/coerce.rb +4 -4
- data/lib/new_relic/collection_helper.rb +2 -1
- data/lib/new_relic/control/class_methods.rb +1 -0
- data/lib/new_relic/control/frameworks/external.rb +1 -0
- data/lib/new_relic/control/frameworks/rails.rb +3 -2
- data/lib/new_relic/control/frameworks/rails3.rb +1 -0
- data/lib/new_relic/control/frameworks/rails4.rb +1 -0
- data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -0
- data/lib/new_relic/control/frameworks/ruby.rb +1 -0
- data/lib/new_relic/control/frameworks/sinatra.rb +1 -0
- data/lib/new_relic/control/frameworks.rb +1 -0
- data/lib/new_relic/control/instance_methods.rb +5 -4
- data/lib/new_relic/control/instrumentation.rb +7 -6
- data/lib/new_relic/control/server_methods.rb +2 -1
- data/lib/new_relic/control.rb +1 -0
- data/lib/new_relic/delayed_job_injection.rb +1 -0
- data/lib/new_relic/dependency_detection.rb +18 -16
- data/lib/new_relic/environment_report.rb +1 -0
- data/lib/new_relic/helper.rb +4 -3
- data/lib/new_relic/language_support.rb +1 -0
- data/lib/new_relic/latest_changes.rb +1 -0
- data/lib/new_relic/local_environment.rb +5 -6
- data/lib/new_relic/metric_data.rb +3 -2
- data/lib/new_relic/metric_spec.rb +2 -1
- data/lib/new_relic/noticed_error.rb +1 -1
- data/lib/new_relic/rack/agent_hooks.rb +1 -0
- data/lib/new_relic/rack/agent_middleware.rb +1 -0
- data/lib/new_relic/rack/browser_monitoring.rb +3 -2
- data/lib/new_relic/rack.rb +1 -0
- data/lib/new_relic/recipes/capistrano3.rb +7 -6
- data/lib/new_relic/recipes/capistrano_legacy.rb +12 -11
- data/lib/new_relic/recipes.rb +1 -0
- data/lib/new_relic/supportability_helper.rb +5 -4
- data/lib/new_relic/version.rb +2 -1
- data/lib/newrelic_rpm.rb +1 -0
- data/lib/sequel/extensions/newrelic_instrumentation.rb +6 -5
- data/lib/sequel/plugins/newrelic_instrumentation.rb +1 -0
- data/lib/tasks/all.rb +1 -0
- data/lib/tasks/config.rake +2 -1
- data/lib/tasks/coverage_report.rake +2 -1
- data/lib/tasks/install.rake +1 -0
- data/lib/tasks/multiverse.rake +1 -0
- data/lib/tasks/multiverse.rb +8 -7
- data/lib/tasks/newrelic.rb +1 -0
- data/lib/tasks/tests.rake +1 -0
- data/newrelic.yml +505 -486
- data/newrelic_rpm.gemspec +3 -1
- data/recipes/newrelic.rb +1 -0
- data/test/agent_helper.rb +113 -103
- metadata +28 -2
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'socket'
|
6
7
|
require 'net/https'
|
@@ -69,23 +70,23 @@ module NewRelic
|
|
69
70
|
@stats_engine = StatsEngine.new
|
70
71
|
@transaction_sampler = TransactionSampler.new
|
71
72
|
@sql_sampler = SqlSampler.new
|
72
|
-
@agent_command_router = Commands::AgentCommandRouter.new
|
73
|
-
@monitors = Monitors.new
|
74
|
-
@error_collector = ErrorCollector.new
|
73
|
+
@agent_command_router = Commands::AgentCommandRouter.new(@events)
|
74
|
+
@monitors = Monitors.new(@events)
|
75
|
+
@error_collector = ErrorCollector.new(@events)
|
75
76
|
@transaction_rules = RulesEngine.new
|
76
|
-
@harvest_samplers = SamplerCollection.new
|
77
|
+
@harvest_samplers = SamplerCollection.new(@events)
|
77
78
|
@monotonic_gc_profiler = VM::MonotonicGCProfiler.new
|
78
|
-
@javascript_instrumentor = JavascriptInstrumentor.new
|
79
|
+
@javascript_instrumentor = JavascriptInstrumentor.new(@events)
|
79
80
|
@adaptive_sampler = AdaptiveSampler.new(Agent.config[:sampling_target],
|
80
81
|
Agent.config[:sampling_target_period_in_seconds])
|
81
82
|
|
82
|
-
@harvester = Harvester.new
|
83
|
+
@harvester = Harvester.new(@events)
|
83
84
|
@after_fork_lock = Mutex.new
|
84
85
|
|
85
|
-
@transaction_event_recorder = TransactionEventRecorder.new
|
86
|
-
@custom_event_aggregator = CustomEventAggregator.new
|
87
|
-
@span_event_aggregator = SpanEventAggregator.new
|
88
|
-
@log_event_aggregator = LogEventAggregator.new
|
86
|
+
@transaction_event_recorder = TransactionEventRecorder.new(@events)
|
87
|
+
@custom_event_aggregator = CustomEventAggregator.new(@events)
|
88
|
+
@span_event_aggregator = SpanEventAggregator.new(@events)
|
89
|
+
@log_event_aggregator = LogEventAggregator.new(@events)
|
89
90
|
|
90
91
|
@connect_state = :pending
|
91
92
|
@connect_attempts = 0
|
@@ -209,7 +210,7 @@ module NewRelic
|
|
209
210
|
disconnected? ||
|
210
211
|
!control.security_settings_valid?
|
211
212
|
|
212
|
-
::NewRelic::Agent.logger.debug
|
213
|
+
::NewRelic::Agent.logger.debug("Starting the worker thread in #{Process.pid} (parent #{Process.ppid}) after forking.")
|
213
214
|
|
214
215
|
channel_id = options[:report_to_channel]
|
215
216
|
install_pipe_service(channel_id) if channel_id
|
@@ -356,7 +357,7 @@ module NewRelic
|
|
356
357
|
# to tell the user what happened, since this is not an error
|
357
358
|
# we can handle gracefully.
|
358
359
|
def log_error(error)
|
359
|
-
::NewRelic::Agent.logger.error
|
360
|
+
::NewRelic::Agent.logger.error("Error establishing connection with New Relic Service at #{control.server}:", error)
|
360
361
|
end
|
361
362
|
|
362
363
|
# When the server sends us an error with the license key, we
|
@@ -399,26 +400,27 @@ module NewRelic
|
|
399
400
|
# connects, then configures the agent using the response from
|
400
401
|
# the connect service
|
401
402
|
def connect_to_server
|
402
|
-
request_builder = ::NewRelic::Agent::Connect::RequestBuilder.new \
|
403
|
+
request_builder = ::NewRelic::Agent::Connect::RequestBuilder.new( \
|
403
404
|
@service,
|
404
405
|
Agent.config,
|
405
406
|
event_harvest_config,
|
406
407
|
environment_for_connect
|
407
|
-
|
408
|
+
)
|
409
|
+
connect_response = @service.connect(request_builder.connect_payload)
|
408
410
|
|
409
411
|
response_handler = ::NewRelic::Agent::Connect::ResponseHandler.new(self, Agent.config)
|
410
412
|
response_handler.configure_agent(connect_response)
|
411
413
|
|
412
|
-
log_connection
|
414
|
+
log_connection(connect_response) if connect_response
|
413
415
|
connect_response
|
414
416
|
end
|
415
417
|
|
416
418
|
# Logs when we connect to the server, for debugging purposes
|
417
419
|
# - makes sure we know if an agent has not connected
|
418
420
|
def log_connection(config_data)
|
419
|
-
::NewRelic::Agent.logger.debug
|
420
|
-
::NewRelic::Agent.logger.debug
|
421
|
-
::NewRelic::Agent.logger.debug
|
421
|
+
::NewRelic::Agent.logger.debug("Connected to NewRelic Service at #{@service.collector.name}")
|
422
|
+
::NewRelic::Agent.logger.debug("Agent Run = #{@service.agent_id}.")
|
423
|
+
::NewRelic::Agent.logger.debug("Connection data = #{config_data.inspect}")
|
422
424
|
if config_data['messages'] && config_data['messages'].any?
|
423
425
|
log_collector_messages(config_data['messages'])
|
424
426
|
end
|
@@ -482,7 +484,7 @@ module NewRelic
|
|
482
484
|
|
483
485
|
def merge_data_for_endpoint(endpoint, data)
|
484
486
|
if data && !data.empty?
|
485
|
-
container = container_for_endpoint
|
487
|
+
container = container_for_endpoint(endpoint)
|
486
488
|
if container.respond_to?(:has_metadata?) && container.has_metadata?
|
487
489
|
container_for_endpoint(endpoint).merge!(data, false)
|
488
490
|
else
|
@@ -522,7 +524,7 @@ module NewRelic
|
|
522
524
|
|
523
525
|
return unless should_connect?(opts[:force_reconnect])
|
524
526
|
|
525
|
-
::NewRelic::Agent.logger.debug
|
527
|
+
::NewRelic::Agent.logger.debug("Connecting Process to New Relic: #$0")
|
526
528
|
connect_to_server
|
527
529
|
@connected_pid = $$
|
528
530
|
@connect_state = :connected
|
@@ -541,12 +543,12 @@ module NewRelic
|
|
541
543
|
log_error(e)
|
542
544
|
if opts[:keep_retrying]
|
543
545
|
note_connect_failure
|
544
|
-
::NewRelic::Agent.logger.info
|
545
|
-
sleep
|
546
|
+
::NewRelic::Agent.logger.info("Will re-attempt in #{connect_retry_period} seconds")
|
547
|
+
sleep(connect_retry_period)
|
546
548
|
retry
|
547
549
|
end
|
548
550
|
rescue Exception => e
|
549
|
-
::NewRelic::Agent.logger.error
|
551
|
+
::NewRelic::Agent.logger.error("Exception of unexpected type during Agent#connect():", e)
|
550
552
|
|
551
553
|
raise
|
552
554
|
end
|
@@ -576,14 +578,14 @@ module NewRelic
|
|
576
578
|
#
|
577
579
|
def harvest_and_send_from_container(container, endpoint)
|
578
580
|
payload = harvest_from_container(container, endpoint)
|
579
|
-
sample_count = harvest_size
|
581
|
+
sample_count = harvest_size(container, payload)
|
580
582
|
if sample_count > 0
|
581
583
|
NewRelic::Agent.logger.debug("Sending #{sample_count} items to #{endpoint}")
|
582
584
|
send_data_to_endpoint(endpoint, payload, container)
|
583
585
|
end
|
584
586
|
end
|
585
587
|
|
586
|
-
def harvest_size
|
588
|
+
def harvest_size(container, items)
|
587
589
|
if container.respond_to?(:has_metadata?) && container.has_metadata? && !items.empty?
|
588
590
|
items.last.size
|
589
591
|
else
|
@@ -657,7 +659,7 @@ module NewRelic
|
|
657
659
|
end
|
658
660
|
|
659
661
|
def harvest_and_send_error_event_data
|
660
|
-
harvest_and_send_from_container
|
662
|
+
harvest_and_send_from_container(@error_collector.error_event_aggregator, :error_event_data)
|
661
663
|
end
|
662
664
|
|
663
665
|
def harvest_and_send_span_event_data
|
@@ -717,7 +719,7 @@ module NewRelic
|
|
717
719
|
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
718
720
|
|
719
721
|
msg = "Sending #{supportability_name} data to New Relic Service"
|
720
|
-
::NewRelic::Agent.logger.debug
|
722
|
+
::NewRelic::Agent.logger.debug(msg)
|
721
723
|
|
722
724
|
@service.session do # use http keep-alive
|
723
725
|
self.send(harvest_method)
|
@@ -729,7 +731,7 @@ module NewRelic
|
|
729
731
|
|
730
732
|
def transmit_data
|
731
733
|
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
732
|
-
::NewRelic::Agent.logger.debug
|
734
|
+
::NewRelic::Agent.logger.debug("Sending data to New Relic Service")
|
733
735
|
|
734
736
|
@events.notify(:before_harvest)
|
735
737
|
@service.session do # use http keep-alive
|
@@ -771,17 +773,17 @@ module NewRelic
|
|
771
773
|
transmit_log_event_data
|
772
774
|
|
773
775
|
if @connected_pid == $$ && !@service.kind_of?(NewRelic::Agent::NewRelicService)
|
774
|
-
::NewRelic::Agent.logger.debug
|
776
|
+
::NewRelic::Agent.logger.debug("Sending New Relic service agent run shutdown message")
|
775
777
|
@service.shutdown
|
776
778
|
else
|
777
|
-
::NewRelic::Agent.logger.debug
|
779
|
+
::NewRelic::Agent.logger.debug("This agent connected from parent process #{@connected_pid}--not sending shutdown")
|
778
780
|
end
|
779
|
-
::NewRelic::Agent.logger.debug
|
781
|
+
::NewRelic::Agent.logger.debug("Graceful disconnect complete")
|
780
782
|
rescue Timeout::Error, StandardError => e
|
781
|
-
::NewRelic::Agent.logger.debug
|
783
|
+
::NewRelic::Agent.logger.debug("Error when disconnecting #{e.class.name}: #{e.message}")
|
782
784
|
end
|
783
785
|
else
|
784
|
-
::NewRelic::Agent.logger.debug
|
786
|
+
::NewRelic::Agent.logger.debug("Bypassing graceful disconnect - agent not connected")
|
785
787
|
end
|
786
788
|
end
|
787
789
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'thread'
|
6
7
|
require 'logger'
|
@@ -178,7 +179,7 @@ module NewRelic
|
|
178
179
|
StartupLogger.instance.dump(self)
|
179
180
|
end
|
180
181
|
|
181
|
-
def self.format_fatal_error
|
182
|
+
def self.format_fatal_error(message)
|
182
183
|
"** [NewRelic] FATAL : #{message}\n"
|
183
184
|
end
|
184
185
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
# This class applies filtering rules as specified in the Agent Attributes
|
6
7
|
# cross-agent spec.
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
module NewRelic
|
6
7
|
module Agent
|
@@ -11,9 +12,9 @@ module NewRelic
|
|
11
12
|
EMPTY_ARRAY_STRING_LITERAL = "[]".freeze
|
12
13
|
|
13
14
|
def flatten_and_coerce(object, prefix = nil, result = {}, &blk)
|
14
|
-
if object.is_a?
|
15
|
+
if object.is_a?(Hash)
|
15
16
|
flatten_and_coerce_hash(object, prefix, result, &blk)
|
16
|
-
elsif object.is_a?
|
17
|
+
elsif object.is_a?(Array)
|
17
18
|
flatten_and_coerce_array(object, prefix, result, &blk)
|
18
19
|
elsif prefix
|
19
20
|
val = Coerce.scalar(object)
|
@@ -23,7 +24,7 @@ module NewRelic
|
|
23
24
|
result[prefix] = val
|
24
25
|
end
|
25
26
|
else
|
26
|
-
NewRelic::Agent.logger.warn
|
27
|
+
NewRelic::Agent.logger.warn("Unexpected object: #{object.inspect} with nil prefix passed to NewRelic::Agent::AttributeProcessing.flatten_and_coerce")
|
27
28
|
end
|
28
29
|
result
|
29
30
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'new_relic/agent/attribute_processing'
|
6
7
|
|
@@ -34,7 +35,7 @@ module NewRelic
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def add_agent_attribute_with_key_check(key, value, default_destinations)
|
37
|
-
if exceeds_bytesize_limit?
|
38
|
+
if exceeds_bytesize_limit?(key, KEY_LIMIT)
|
38
39
|
NewRelic::Agent.logger.debug("Agent attribute #{key} was dropped for exceeding key length limit #{KEY_LIMIT}")
|
39
40
|
return
|
40
41
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
# This class is used by NewRelic::Agent.set_sql_obfuscator to chain multiple
|
6
7
|
# obfuscation blocks when not using the default :replace action
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
# This class is the central point for dispatching get_agent_commands messages
|
6
7
|
# to the various components that actually process them.
|
@@ -77,16 +78,16 @@ module NewRelic
|
|
77
78
|
|
78
79
|
def log_profiles(profiles)
|
79
80
|
if profiles.empty?
|
80
|
-
::NewRelic::Agent.logger.debug
|
81
|
+
::NewRelic::Agent.logger.debug("No thread profiles with data found to send.")
|
81
82
|
else
|
82
83
|
profile_descriptions = profiles.map { |p| p.to_log_description }
|
83
|
-
::NewRelic::Agent.logger.debug
|
84
|
+
::NewRelic::Agent.logger.debug("Sending thread profiles [#{profile_descriptions.join(", ")}]")
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
87
88
|
def get_agent_commands
|
88
89
|
commands = new_relic_service.get_agent_commands
|
89
|
-
NewRelic::Agent.logger.debug
|
90
|
+
NewRelic::Agent.logger.debug("Received get_agent_commands = #{commands.inspect}")
|
90
91
|
commands.map { |collector_command| AgentCommand.new(collector_command) }
|
91
92
|
end
|
92
93
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'new_relic/agent/threading/agent_thread'
|
6
7
|
require 'new_relic/agent/threading/backtrace_service'
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'forwardable'
|
6
7
|
|
@@ -46,7 +47,7 @@ module NewRelic
|
|
46
47
|
|
47
48
|
# Marks the config option as deprecated in the documentation once generated.
|
48
49
|
# Does not appear in logs.
|
49
|
-
def self.deprecated_description
|
50
|
+
def self.deprecated_description(new_setting, description)
|
50
51
|
link_ref = new_setting.to_s.gsub(".", "-")
|
51
52
|
%{Please see: [#{new_setting}](docs/agents/ruby-agent/configuration/ruby-agent-configuration##{link_ref}). \n\n#{description}}
|
52
53
|
end
|
@@ -117,7 +118,7 @@ module NewRelic
|
|
117
118
|
def self.config_path
|
118
119
|
Proc.new {
|
119
120
|
found_path = NewRelic::Agent.config[:config_search_paths].detect do |file|
|
120
|
-
File.expand_path(file) if File.exist?
|
121
|
+
File.expand_path(file) if File.exist?(file)
|
121
122
|
end
|
122
123
|
found_path || NewRelic::EMPTY_STR
|
123
124
|
}
|
@@ -134,7 +135,7 @@ module NewRelic
|
|
134
135
|
when 4..7
|
135
136
|
:rails_notifications
|
136
137
|
else
|
137
|
-
::NewRelic::Agent.logger.warn
|
138
|
+
::NewRelic::Agent.logger.warn("Detected untested Rails version #{Rails::VERSION::STRING}")
|
138
139
|
:rails_notifications
|
139
140
|
end
|
140
141
|
when defined?(::Sinatra) && defined?(::Sinatra::Base) then :sinatra
|
@@ -211,7 +212,7 @@ module NewRelic
|
|
211
212
|
|
212
213
|
def self.api_host
|
213
214
|
Proc.new do
|
214
|
-
if String(NewRelic::Agent.config[:license_key]).start_with?
|
215
|
+
if String(NewRelic::Agent.config[:license_key]).start_with?('eu')
|
215
216
|
'rpm.eu.newrelic.com'
|
216
217
|
else
|
217
218
|
'rpm.newrelic.com'
|
@@ -238,7 +239,7 @@ module NewRelic
|
|
238
239
|
end
|
239
240
|
|
240
241
|
SEMICOLON = ';'.freeze
|
241
|
-
def self.convert_to_list_on_semicolon
|
242
|
+
def self.convert_to_list_on_semicolon(value)
|
242
243
|
case value
|
243
244
|
when Array then value
|
244
245
|
when String then value.split(SEMICOLON)
|
@@ -1085,6 +1086,32 @@ If `true`, disables agent middleware for Sinatra. This middleware is responsible
|
|
1085
1086
|
:allowed_from_server => false,
|
1086
1087
|
:description => 'Controls auto-instrumentation of the Tilt template rendering library at start up. May be one of [auto|prepend|chain|disabled].'
|
1087
1088
|
},
|
1089
|
+
:'instrumentation.grpc_client' => {
|
1090
|
+
:default => instrumentation_value_of(:disable_grpc_client),
|
1091
|
+
:documentation_default => 'auto',
|
1092
|
+
:public => true,
|
1093
|
+
:type => String,
|
1094
|
+
:dynamic_name => true,
|
1095
|
+
:allowed_from_server => false,
|
1096
|
+
:description => 'Controls auto-instrumentation of gRPC clients at start up. May be one of [auto|prepend|chain|disabled].'
|
1097
|
+
},
|
1098
|
+
:'instrumentation.grpc.host_denylist' => {
|
1099
|
+
:default => [],
|
1100
|
+
:public => true,
|
1101
|
+
:type => Array,
|
1102
|
+
:allowed_from_server => false,
|
1103
|
+
:transform => DefaultSource.method(:convert_to_regexp_list),
|
1104
|
+
:description => %Q(Specifies a list of hostname patterns separated by commas that will match gRPC hostnames that traffic is to be ignored by New Relic for. New Relic's gRPC client instrumentation will ignore traffic streamed to a host matching any of these patterns, and New Relic's gRPC server instrumentation will ignore traffic for a server running on a host whose hostname matches any of these patterns. By default, no traffic is ignored when gRPC instrumentation is itself enabled. For example, "private.com$,exception.*")
|
1105
|
+
},
|
1106
|
+
:'instrumentation.grpc_server' => {
|
1107
|
+
:default => instrumentation_value_of(:disable_grpc_server),
|
1108
|
+
:documentation_default => 'auto',
|
1109
|
+
:public => true,
|
1110
|
+
:type => String,
|
1111
|
+
:dynamic_name => true,
|
1112
|
+
:allowed_from_server => false,
|
1113
|
+
:description => 'Controls auto-instrumentation of gRPC servers at start up. May be one of [auto|prepend|chain|disabled].'
|
1114
|
+
},
|
1088
1115
|
:disable_data_mapper => {
|
1089
1116
|
:default => false,
|
1090
1117
|
:public => true,
|
@@ -2011,11 +2038,12 @@ A map of error classes to a list of messages. When an error of one of the classe
|
|
2011
2038
|
:description => 'If `true`, the agent decorates logs with metadata to link to entities, hosts, traces, and spans.'
|
2012
2039
|
},
|
2013
2040
|
:'code_level_metrics.enabled' => {
|
2014
|
-
:default =>
|
2041
|
+
:default => true,
|
2015
2042
|
:public => true,
|
2016
2043
|
:type => Boolean,
|
2017
2044
|
:allowed_from_server => true,
|
2018
|
-
:description =>
|
2045
|
+
:description => "If `true`, the agent will report source code level metrics for traced methods.\nsee: " \
|
2046
|
+
'https://docs.newrelic.com/docs/apm/agents/ruby-agent/features/ruby-codestream-integration/'
|
2019
2047
|
},
|
2020
2048
|
:'instrumentation.active_support_logger' => {
|
2021
2049
|
:default => instrumentation_value_from_boolean(:'application_logging.enabled'),
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
module NewRelic
|
6
7
|
module Agent
|
@@ -42,7 +43,7 @@ module NewRelic
|
|
42
43
|
def set_dotted_alias(original_config_setting)
|
43
44
|
config_setting = original_config_setting.to_s
|
44
45
|
|
45
|
-
if config_setting.include?
|
46
|
+
if config_setting.include?('.')
|
46
47
|
config_alias = config_setting.gsub(/\./, '_').to_sym
|
47
48
|
self.alias_map[config_alias] = original_config_setting
|
48
49
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'forwardable'
|
6
7
|
require 'new_relic/agent/configuration/mask_defaults'
|
@@ -22,7 +23,7 @@ module NewRelic
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def has_key?(key)
|
25
|
-
@cache.has_key?
|
26
|
+
@cache.has_key?(key)
|
26
27
|
end
|
27
28
|
|
28
29
|
def keys
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'new_relic/agent/configuration/dotted_hash'
|
6
7
|
|
@@ -26,9 +27,10 @@ module NewRelic
|
|
26
27
|
def change_setting(policies, option, new_value)
|
27
28
|
current_value = Agent.config[option]
|
28
29
|
unless current_value == new_value
|
29
|
-
NewRelic::Agent.logger.info \
|
30
|
+
NewRelic::Agent.logger.info( \
|
30
31
|
"Setting changed: {#{option}: from #{current_value} " \
|
31
32
|
"to #{new_value}}. Source: SecurityPolicySource"
|
33
|
+
)
|
32
34
|
end
|
33
35
|
policies[option] = new_value
|
34
36
|
end
|
@@ -218,15 +220,17 @@ module NewRelic
|
|
218
220
|
end
|
219
221
|
else
|
220
222
|
config_source = Agent.config.source(policy[:option]).class.name.split(COLON_COLON).last
|
221
|
-
NewRelic::Agent.logger.info \
|
223
|
+
NewRelic::Agent.logger.info( \
|
222
224
|
"Setting applied: {#{policy[:option]}: #{policy[:disabled_value]}}. " \
|
223
225
|
"Source: #{config_source}"
|
226
|
+
)
|
224
227
|
end
|
225
228
|
else
|
226
229
|
settings[policy[:option]] = policy[:disabled_value]
|
227
|
-
NewRelic::Agent.logger.info \
|
230
|
+
NewRelic::Agent.logger.info( \
|
228
231
|
"Setting applied: {#{policy[:option]}: #{policy[:disabled_value]}}. " \
|
229
232
|
"Source: SecurityPolicySource"
|
233
|
+
)
|
230
234
|
end
|
231
235
|
end
|
232
236
|
settings
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
module NewRelic
|
6
7
|
module Agent
|
@@ -86,24 +87,24 @@ module NewRelic
|
|
86
87
|
}
|
87
88
|
|
88
89
|
def add_event_harvest_config(merged_settings, connect_reply)
|
89
|
-
return unless event_harvest_config_is_valid
|
90
|
+
return unless event_harvest_config_is_valid(connect_reply)
|
90
91
|
|
91
92
|
event_harvest_config = EventHarvestConfig.to_config_hash(connect_reply)
|
92
93
|
EVENT_HARVEST_CONFIG_SUPPORTABILITY_METRIC_NAMES.each do |config_key, metric_name|
|
93
|
-
NewRelic::Agent.record_metric
|
94
|
+
NewRelic::Agent.record_metric(metric_name, event_harvest_config[config_key])
|
94
95
|
end
|
95
96
|
|
96
|
-
merged_settings.merge!
|
97
|
+
merged_settings.merge!(event_harvest_config)
|
97
98
|
end
|
98
99
|
|
99
|
-
def event_harvest_config_is_valid
|
100
|
+
def event_harvest_config_is_valid(connect_reply)
|
100
101
|
event_harvest_config = connect_reply['event_harvest_config']
|
101
102
|
|
102
103
|
if event_harvest_config.nil? \
|
103
104
|
|| event_harvest_config['harvest_limits'].values.min < 0 \
|
104
105
|
|| (event_harvest_config['report_period_ms'] / 1000) <= 0
|
105
|
-
NewRelic::Agent.logger.warn
|
106
|
-
"in connect response; using default event report period."
|
106
|
+
NewRelic::Agent.logger.warn("Invalid event harvest config found " \
|
107
|
+
"in connect response; using default event report period.")
|
107
108
|
false
|
108
109
|
else
|
109
110
|
true
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'new_relic/agent/configuration/dotted_hash'
|
6
7
|
|
@@ -124,6 +125,8 @@ module NewRelic
|
|
124
125
|
config['transaction_tracer']['transaction_threshold'].to_s =~ /apdex_f/i
|
125
126
|
# when value is "apdex_f" remove the config and defer to default
|
126
127
|
config['transaction_tracer'].delete('transaction_threshold')
|
128
|
+
elsif config['transaction_tracer.transaction_threshold'].to_s =~ /apdex_f/i
|
129
|
+
config.delete('transaction_tracer.transaction_threshold')
|
127
130
|
end
|
128
131
|
end
|
129
132
|
|
@@ -135,7 +138,7 @@ module NewRelic
|
|
135
138
|
elsif !config[option].nil? && !is_boolean?(config[option])
|
136
139
|
coerced_value = !!(config[option].to_s =~ /yes|on|true/i)
|
137
140
|
if !coerced_value
|
138
|
-
log_failure
|
141
|
+
log_failure("Unexpected value (#{config[option]}) for '#{option}' in #{@path}")
|
139
142
|
end
|
140
143
|
config[option] = coerced_value
|
141
144
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'new_relic/agent/configuration/manager'
|
6
7
|
require 'new_relic/agent/configuration/dotted_hash'
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
3
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
4
5
|
|
5
6
|
require 'new_relic/environment_report'
|
6
7
|
require 'new_relic/agent/configuration/event_harvest_config'
|