newrelic_rpm 8.9.0 → 8.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +23 -8
- data/.rubocop_todo.yml +243 -0
- data/.simplecov +10 -2
- data/.snyk +11 -0
- data/Brewfile +1 -0
- data/CHANGELOG.md +78 -0
- data/Guardfile +1 -0
- data/Rakefile +5 -0
- data/Thorfile +6 -0
- 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 +10 -4
- 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 +98 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +90 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +112 -0
- data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +31 -0
- data/lib/new_relic/agent/instrumentation/grpc/helper.rb +33 -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 +11 -6
- 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 +17 -14
- 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 +6 -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 +3 -2
- 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 +22 -11
- data/lib/tasks/install.rake +1 -0
- data/lib/tasks/instrumentation_generator/README.md +63 -0
- data/lib/tasks/instrumentation_generator/TODO.md +33 -0
- data/lib/tasks/instrumentation_generator/instrumentation.thor +96 -0
- data/lib/tasks/instrumentation_generator/templates/Envfile.tt +10 -0
- data/lib/tasks/instrumentation_generator/templates/chain.tt +22 -0
- data/lib/tasks/instrumentation_generator/templates/chain_method.tt +7 -0
- data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +30 -0
- data/lib/tasks/instrumentation_generator/templates/instrumentation.tt +13 -0
- data/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt +3 -0
- data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +19 -0
- data/lib/tasks/instrumentation_generator/templates/prepend.tt +14 -0
- data/lib/tasks/instrumentation_generator/templates/prepend_method.tt +3 -0
- data/lib/tasks/instrumentation_generator/templates/test.tt +16 -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 +15 -17
- data/recipes/newrelic.rb +1 -0
- data/test/agent_helper.rb +114 -118
- metadata +58 -89
- data/bin/mongrel_rpm +0 -32
@@ -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
|
@@ -18,11 +19,11 @@ module NewRelic
|
|
18
19
|
# See #connect for a description of connection_options.
|
19
20
|
def start_worker_thread(connection_options = {})
|
20
21
|
if disable = NewRelic::Agent.config[:disable_harvest_thread]
|
21
|
-
NewRelic::Agent.logger.info
|
22
|
+
NewRelic::Agent.logger.info("Not starting Ruby Agent worker thread because :disable_harvest_thread is #{disable}")
|
22
23
|
return
|
23
24
|
end
|
24
25
|
|
25
|
-
::NewRelic::Agent.logger.debug
|
26
|
+
::NewRelic::Agent.logger.debug("Creating Ruby Agent worker thread.")
|
26
27
|
@worker_thread = Threading::AgentThread.create('Worker Loop') do
|
27
28
|
deferred_work!(connection_options)
|
28
29
|
end
|
@@ -44,7 +45,7 @@ module NewRelic
|
|
44
45
|
# Wait the end of the event loop thread.
|
45
46
|
if @worker_thread
|
46
47
|
unless @worker_thread.join(3)
|
47
|
-
::NewRelic::Agent.logger.debug
|
48
|
+
::NewRelic::Agent.logger.debug("Event loop thread did not stop within 3 seconds")
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
@@ -52,7 +53,7 @@ module NewRelic
|
|
52
53
|
# Certain event types may sometimes need to be on the same interval as metrics,
|
53
54
|
# so we will check config assigned in EventHarvestConfig to determine the interval
|
54
55
|
# on which to report them
|
55
|
-
def interval_for
|
56
|
+
def interval_for(event_type)
|
56
57
|
interval = Agent.config[:"event_report_period.#{event_type}"]
|
57
58
|
:"#{interval}_second_harvest"
|
58
59
|
end
|
@@ -66,19 +67,19 @@ module NewRelic
|
|
66
67
|
transmit_data
|
67
68
|
end
|
68
69
|
|
69
|
-
@event_loop.on(interval_for
|
70
|
+
@event_loop.on(interval_for(TRANSACTION_EVENT_DATA)) do
|
70
71
|
transmit_analytic_event_data
|
71
72
|
end
|
72
|
-
@event_loop.on(interval_for
|
73
|
+
@event_loop.on(interval_for(CUSTOM_EVENT_DATA)) do
|
73
74
|
transmit_custom_event_data
|
74
75
|
end
|
75
|
-
@event_loop.on(interval_for
|
76
|
+
@event_loop.on(interval_for(ERROR_EVENT_DATA)) do
|
76
77
|
transmit_error_event_data
|
77
78
|
end
|
78
|
-
@event_loop.on(interval_for
|
79
|
+
@event_loop.on(interval_for(SPAN_EVENT_DATA)) do
|
79
80
|
transmit_span_event_data
|
80
81
|
end
|
81
|
-
@event_loop.on(interval_for
|
82
|
+
@event_loop.on(interval_for(LOG_EVENT_DATA)) do
|
82
83
|
transmit_log_event_data
|
83
84
|
end
|
84
85
|
|
@@ -96,18 +97,18 @@ module NewRelic
|
|
96
97
|
# this clears the data, clears connection attempts, and
|
97
98
|
# waits a while to reconnect.
|
98
99
|
def handle_force_restart(error)
|
99
|
-
::NewRelic::Agent.logger.debug
|
100
|
+
::NewRelic::Agent.logger.debug(error.message)
|
100
101
|
drop_buffered_data
|
101
102
|
@service.force_restart if @service
|
102
103
|
@connect_state = :pending
|
103
|
-
sleep
|
104
|
+
sleep(30)
|
104
105
|
end
|
105
106
|
|
106
107
|
# when a disconnect is requested, stop the current thread, which
|
107
108
|
# is the worker thread that gathers data and talks to the
|
108
109
|
# server.
|
109
110
|
def handle_force_disconnect(error)
|
110
|
-
::NewRelic::Agent.logger.warn
|
111
|
+
::NewRelic::Agent.logger.warn("Agent received a ForceDisconnectException from the server, disconnecting. (#{error.message})")
|
111
112
|
disconnect
|
112
113
|
end
|
113
114
|
|
@@ -115,7 +116,7 @@ module NewRelic
|
|
115
116
|
# it and disconnecting the agent, since we are now in an
|
116
117
|
# unknown state.
|
117
118
|
def handle_other_error(error)
|
118
|
-
::NewRelic::Agent.logger.error
|
119
|
+
::NewRelic::Agent.logger.error("Unhandled error in worker thread, disconnecting.")
|
119
120
|
# These errors are fatal (that is, they will prevent the agent from
|
120
121
|
# reporting entirely), so we really want backtraces when they happen
|
121
122
|
::NewRelic::Agent.logger.log_exception(:error, error)
|
@@ -153,7 +154,7 @@ module NewRelic
|
|
153
154
|
# never reaches here unless there is a problem or
|
154
155
|
# the agent is exiting
|
155
156
|
else
|
156
|
-
::NewRelic::Agent.logger.debug
|
157
|
+
::NewRelic::Agent.logger.debug("No connection. Worker thread ending.")
|
157
158
|
end
|
158
159
|
end
|
159
160
|
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
|
module NewRelic
|
6
7
|
module Agent
|
@@ -68,7 +69,7 @@ module NewRelic
|
|
68
69
|
# Log the environment the app thinks it's running in.
|
69
70
|
# Useful in debugging, as this is the key for config YAML lookups.
|
70
71
|
def log_environment
|
71
|
-
::NewRelic::Agent.logger.info
|
72
|
+
::NewRelic::Agent.logger.info("Environment: #{NewRelic::Control.instance.env}")
|
72
73
|
end
|
73
74
|
|
74
75
|
# Logs the dispatcher to the log file to assist with
|
@@ -78,21 +79,21 @@ module NewRelic
|
|
78
79
|
dispatcher_name = Agent.config[:dispatcher].to_s
|
79
80
|
|
80
81
|
if dispatcher_name.empty?
|
81
|
-
::NewRelic::Agent.logger.info
|
82
|
+
::NewRelic::Agent.logger.info('No known dispatcher detected.')
|
82
83
|
else
|
83
|
-
::NewRelic::Agent.logger.info
|
84
|
+
::NewRelic::Agent.logger.info("Dispatcher: #{dispatcher_name}")
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
87
88
|
def log_app_name
|
88
|
-
::NewRelic::Agent.logger.info
|
89
|
+
::NewRelic::Agent.logger.info("Application: #{Agent.config[:app_name].join(", ")}")
|
89
90
|
end
|
90
91
|
|
91
92
|
def log_ignore_url_regexes
|
92
93
|
regexes = NewRelic::Agent.config[:'rules.ignore_url_regexes']
|
93
94
|
|
94
95
|
unless regexes.empty?
|
95
|
-
::NewRelic::Agent.logger.info
|
96
|
+
::NewRelic::Agent.logger.info("Ignoring URLs that match the following regexes: #{regexes.map(&:inspect).join(", ")}.")
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
@@ -100,7 +101,7 @@ module NewRelic
|
|
100
101
|
# so we can disambiguate processes in the log file and make
|
101
102
|
# sure they're running a reasonable version
|
102
103
|
def log_version_and_pid
|
103
|
-
::NewRelic::Agent.logger.debug
|
104
|
+
::NewRelic::Agent.logger.debug("New Relic Ruby Agent #{NewRelic::VERSION::STRING} Initialized: pid = #{$$}")
|
104
105
|
end
|
105
106
|
|
106
107
|
# Logs the configured application names
|
@@ -164,21 +165,21 @@ module NewRelic
|
|
164
165
|
return false if already_started? || disabled?
|
165
166
|
|
166
167
|
if defer_for_delayed_job?
|
167
|
-
::NewRelic::Agent.logger.debug
|
168
|
+
::NewRelic::Agent.logger.debug("Deferring startup for DelayedJob")
|
168
169
|
return false
|
169
170
|
end
|
170
171
|
|
171
172
|
if defer_for_resque?
|
172
|
-
::NewRelic::Agent.logger.debug
|
173
|
+
::NewRelic::Agent.logger.debug("Deferring startup for Resque in case it daemonizes")
|
173
174
|
return false
|
174
175
|
end
|
175
176
|
|
176
177
|
unless app_name_configured?
|
177
|
-
NewRelic::Agent.logger.error
|
178
|
+
NewRelic::Agent.logger.error("No application name configured.",
|
178
179
|
"The Agent cannot start without at least one. Please check your ",
|
179
180
|
"newrelic.yml and ensure that it is valid and has at least one ",
|
180
181
|
"value set for app_name in the #{NewRelic::Control.instance.env} ",
|
181
|
-
"environment."
|
182
|
+
"environment.")
|
182
183
|
return false
|
183
184
|
end
|
184
185
|
|
@@ -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
|