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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9556e153e6ae6bb4ea2894bc62e6c0745a08f2347c25074a97316fe6818ca6d
|
4
|
+
data.tar.gz: 1e07fc83567ff8b0e83a1c502265076fca5409021ff724801455c6e4ee5086ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bb9efe02ea356b8969d3466bde7c76e2f20cb8880d93628d707ee92c05338e91262d456c4b5e0b9943ad1ee50e8edf512cb82096a3f5f2ea166a6b5b1bfdb0b
|
7
|
+
data.tar.gz: 1e13ef2b0b0ab49ef8c08f5d54536a37a3b3f5812b8a0ef884f2b1df670842499edcef344297aae59822cc43d456b47f3164ba86daf678e62080c09912a871a7
|
data/.rubocop.yml
CHANGED
@@ -1361,9 +1361,6 @@ Style/FormatString:
|
|
1361
1361
|
Style/FormatStringToken:
|
1362
1362
|
Enabled: false
|
1363
1363
|
|
1364
|
-
Style/FrozenStringLiteralComment:
|
1365
|
-
Enabled: false
|
1366
|
-
|
1367
1364
|
# Disabling for now
|
1368
1365
|
Style/GlobalStdStream:
|
1369
1366
|
Enabled: false
|
@@ -1468,9 +1465,18 @@ Style/MapToHash:
|
|
1468
1465
|
Enabled: false
|
1469
1466
|
|
1470
1467
|
Style/MethodCallWithArgsParentheses:
|
1471
|
-
Enabled:
|
1468
|
+
Enabled: true
|
1469
|
+
IgnoredMethods:
|
1470
|
+
- puts
|
1471
|
+
- require
|
1472
|
+
- raise
|
1473
|
+
- include
|
1474
|
+
- fail
|
1475
|
+
- print
|
1476
|
+
- add_dependency
|
1477
|
+
- add_development_dependency
|
1478
|
+
AllowedPatterns: [^assert, ^refute]
|
1472
1479
|
|
1473
|
-
# Disabling for now
|
1474
1480
|
Style/MethodCallWithoutArgsParentheses:
|
1475
1481
|
Enabled: false
|
1476
1482
|
IgnoredMethods: []
|
@@ -1479,7 +1485,7 @@ Style/MethodCalledOnDoEndBlock:
|
|
1479
1485
|
Enabled: false
|
1480
1486
|
|
1481
1487
|
Style/MethodDefParentheses:
|
1482
|
-
Enabled:
|
1488
|
+
Enabled: true
|
1483
1489
|
|
1484
1490
|
Style/MinMax:
|
1485
1491
|
Enabled: false
|
data/.simplecov
CHANGED
data/.snyk
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
exclude:
|
2
|
+
global:
|
3
|
+
# The project Dockerfile is only used to orchestrate container usage for
|
4
|
+
# local development with containers that are not to be exposed to the
|
5
|
+
# outside world. We use vanilla "ruby" images and do not layer on any
|
6
|
+
# additional software dependencies or configurations ourselves that would
|
7
|
+
# change the original "ruby" images' security profile. We defer all
|
8
|
+
# security mitigation for the images to the "ruby" image maintainers (who
|
9
|
+
# themselves are periodically updating their base Ubuntu layers to mitigate
|
10
|
+
# issues).
|
11
|
+
- Dockerfile
|
data/Brewfile
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,62 @@
|
|
1
1
|
# New Relic Ruby Agent Release Notes #
|
2
2
|
|
3
3
|
|
4
|
+
## v8.10.0
|
5
|
+
|
6
|
+
|
7
|
+
* **New gRPC instrumentation**
|
8
|
+
|
9
|
+
The agent will now instrument [gRPC](https://grpc.io/) activity performed by clients and servers that use the [grpc](https://rubygems.org/gems/grpc) RubyGem. Instrumentation is automatic and enabled by default, so gRPC users should not need to modify any existing application code or agent configuration to benefit from the instrumentation. The instrumentation makes use of distributed tracing for a comprehensive overview of all gRPC traffic taking place across multiple monitored applications. This allows you to observe your client and server activity using any service that adheres to the W3C standard.
|
10
|
+
|
11
|
+
The following new configuration parameters have been added for gRPC. All are optional.
|
12
|
+
|
13
|
+
| Configuration name | Default | Behavior |
|
14
|
+
| ----------- | ----------- |----------- |
|
15
|
+
| `instrumentation.grpc_client` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
|
16
|
+
| `instrumentation.grpc_server` | auto | Set to 'disabled' to disable, set to 'chain' if there are module prepending conflicts |
|
17
|
+
| `instrumentation.grpc.host_denylist` | "" | Provide a comma delimited list of host regex patterns (ex: "private.com$,exception.*") |
|
18
|
+
|
19
|
+
|
20
|
+
* **Performance: Rework timing range overlap calculations for multiple transaction segments**
|
21
|
+
|
22
|
+
Many thanks to GitHub community members @bmulholland and @hkdnet. @bmulholland alerted us to [rmosolgo/graphql-ruby#3945](https://github.com/rmosolgo/graphql-ruby/issues/3945). That Issue essentially notes that the New Relic Ruby agent incurs a significant perfomance hit when the `graphql` RubyGem (which ships with New Relic Ruby agent support) is used with DataLoader to generate a high number of transactions. Then @hkdnet diagnosed the root cause in the Ruby agent and put together both a proof of concept fix and a full blown PR to resolve the problem. The agent keeps track multiple segments that are concurrently in play for a given transaction in order to merge the ones whose start and stop times intersect. The logic for doing this find-and-merge operation has been reworked to a) be deferred entirely until the transaction is ready to be recorded, and b) made more performant when it is needed. GraphQL DataLoader users and other users who generate lots of activity for monitoring within a short amount of time will hopefully see some good performance gains from these changes.
|
23
|
+
|
24
|
+
|
25
|
+
* **Performance: Make frozen string literals the default for the agent
|
26
|
+
|
27
|
+
The Ruby `frozen_string_literal: true` magic source code comment has now been applied consistently across all Ruby files belonging to the agent. This can provide a performance boost, given that Ruby can rely on the strings remaining immutable. Previously only about a third of the agent's code was freezing string literals by default. Now that 100% of the code freezes string literals by default, we have internally observed some related performance gains through testing. We are hopeful that these will translate into some real world gains in production capacities.
|
28
|
+
|
29
|
+
|
30
|
+
* **Bugfix: Error when setting the yaml configuration with `transaction_tracer.transaction_threshold: apdex_f`**
|
31
|
+
|
32
|
+
Originally, the agent was only checking the `transaction_tracer.transaction_threshold` from the newrelic.yml correctly if it was on two lines.
|
33
|
+
|
34
|
+
Example:
|
35
|
+
|
36
|
+
```
|
37
|
+
# newrelic.yml
|
38
|
+
transaction_tracer:
|
39
|
+
transaction_threshold: apdex_f
|
40
|
+
```
|
41
|
+
|
42
|
+
When this was instead changed to be on one line, the agent was not able to correctly identify the value of apdex_f.
|
43
|
+
|
44
|
+
Example:
|
45
|
+
```
|
46
|
+
# newrelic.yml
|
47
|
+
transaction_tracer.transaction_threshold: apdex_f
|
48
|
+
```
|
49
|
+
This would cause prevent transactions from finishing due to the error `ArgumentError: comparison of Float with String failed`. This has now been corrected and the agent is able to process newrelic.yml with a one line `transaction_tracer.transaction_threshold: apdex_f` correctly now.
|
50
|
+
|
51
|
+
Thank you to @oboxodo for bringing this to our attention.
|
52
|
+
|
53
|
+
|
54
|
+
* **Bugfix: Don't modify frozen Logger**
|
55
|
+
|
56
|
+
Previously the agent would modify each instance of the Logger class by adding a unique instance variable as part of the instrumentation. This could cause the error `FrozenError: can't modify frozen Logger` to be thrown if the Logger instance had been frozen. The agent will now check if the object is frozen before attempting to modify the object. Thanks to @mkcosta for bringing this issue to our attention.
|
57
|
+
|
58
|
+
|
59
|
+
|
4
60
|
## v8.9.0
|
5
61
|
|
6
62
|
|
data/Guardfile
CHANGED
data/Rakefile
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# This file is distributed under New Relic's license terms.
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
1
6
|
require 'rubygems'
|
2
7
|
require 'rake/testtask'
|
3
8
|
require 'yard'
|
data/bin/mongrel_rpm
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
require 'rubygems'
|
3
4
|
require 'rack'
|
4
5
|
require 'rack/handler/mongrel'
|
@@ -13,9 +14,9 @@ OptionParser.new do |opts|
|
|
13
14
|
opts.on("--[no-]logging", "turn off request logging") { |l| options[:logging] = l }
|
14
15
|
opts.on("--license=license_key", "override license key") { |l| options[:license_key] = l }
|
15
16
|
opts.on("--install", "install a newrelic.yml template") { |l| options[:install] = true }
|
16
|
-
opts.separator
|
17
|
-
opts.separator
|
18
|
-
opts.separator
|
17
|
+
opts.separator("")
|
18
|
+
opts.separator("app_name is the name of the application where the metrics will be stored")
|
19
|
+
opts.separator("")
|
19
20
|
# The rackup file references this var
|
20
21
|
appname = opts.parse!(ARGV.clone).first
|
21
22
|
end
|
@@ -23,10 +24,10 @@ end
|
|
23
24
|
options[:app_name] = appname if appname
|
24
25
|
|
25
26
|
ru_file = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "new_relic", "rack", "mongrel_rpm.ru"))
|
26
|
-
rackup_code = File.read
|
27
|
-
builder = Rack::Builder.new { eval
|
27
|
+
rackup_code = File.read(ru_file)
|
28
|
+
builder = Rack::Builder.new { eval(rackup_code, binding, ru_file) }
|
28
29
|
|
29
30
|
options = {:Host => '127.0.0.1', :Port => port}
|
30
31
|
Rack::Handler::Mongrel.run(builder.to_app, options) do |server|
|
31
|
-
NewRelic::Agent.logger.info
|
32
|
+
NewRelic::Agent.logger.info("Started Mongrel listening for '#{NewRelic::Control.instance.app_names.join(" and ")}' data at #{server.host}:#{server.port}")
|
32
33
|
end
|
data/bin/newrelic
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
# executes one of the commands in the new_relic/commands directory
|
3
4
|
# pass the name of the command as an argument
|
4
5
|
|
@@ -9,5 +10,5 @@ begin
|
|
9
10
|
rescue NewRelic::Cli::Command::CommandFailure => failure
|
10
11
|
STDERR.puts failure.message
|
11
12
|
STDERR.puts failure.options if failure.options
|
12
|
-
exit
|
13
|
+
exit(1)
|
13
14
|
end
|
data/bin/newrelic_cmd
CHANGED
data/bin/nrdebug
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# encoding: utf-8
|
4
4
|
# This file is distributed under New Relic's license terms.
|
5
5
|
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
6
|
+
# frozen_string_literal: true
|
6
7
|
|
7
8
|
require 'tempfile'
|
8
9
|
require 'rbconfig'
|
@@ -178,10 +179,10 @@ class ProcessReport
|
|
178
179
|
def open
|
179
180
|
if @path
|
180
181
|
File.open(@path, "w") do |f|
|
181
|
-
yield
|
182
|
+
yield(f)
|
182
183
|
end
|
183
184
|
else
|
184
|
-
yield
|
185
|
+
yield($stdout)
|
185
186
|
end
|
186
187
|
end
|
187
188
|
|
data/init.rb
CHANGED
@@ -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 is the initialization for the New Relic Ruby Agent when used as
|
6
7
|
# a plugin
|
@@ -24,7 +25,7 @@ begin
|
|
24
25
|
Rails.configuration
|
25
26
|
end
|
26
27
|
|
27
|
-
NewRelic::Control.instance.init_plugin
|
28
|
+
NewRelic::Control.instance.init_plugin(:config => current_config)
|
28
29
|
rescue => e
|
29
|
-
::NewRelic::Agent.logger.error
|
30
|
+
::NewRelic::Agent.logger.error("Error initializing New Relic plugin. Agent is disabled.", e)
|
30
31
|
end
|
data/install.rb
CHANGED
@@ -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
|
if __FILE__ == $0 || $0 =~ /script\/plugin/ || File.basename($0) == 'rake'
|
6
7
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
|
@@ -1,11 +1,12 @@
|
|
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
|
7
8
|
class AdaptiveSampler
|
8
|
-
def initialize
|
9
|
+
def initialize(target_samples = 10, period_duration = 60)
|
9
10
|
@target = target_samples
|
10
11
|
@seen = 0
|
11
12
|
@seen_last = 0
|
@@ -84,7 +85,7 @@ module NewRelic
|
|
84
85
|
end
|
85
86
|
end
|
86
87
|
if target_changed
|
87
|
-
NewRelic::Agent.logger.debug
|
88
|
+
NewRelic::Agent.logger.debug("Sampling target set to: #{target}")
|
88
89
|
end
|
89
90
|
end
|
90
91
|
end
|
@@ -99,7 +100,7 @@ module NewRelic
|
|
99
100
|
end
|
100
101
|
end
|
101
102
|
if period_changed
|
102
|
-
NewRelic::Agent.logger.debug
|
103
|
+
NewRelic::Agent.logger.debug("Sampling period set to: #{period_duration}")
|
103
104
|
end
|
104
105
|
end
|
105
106
|
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
|
@@ -9,7 +10,7 @@ module NewRelic
|
|
9
10
|
# data.
|
10
11
|
def shutdown
|
11
12
|
return unless started?
|
12
|
-
::NewRelic::Agent.logger.info
|
13
|
+
::NewRelic::Agent.logger.info("Starting Agent shutdown")
|
13
14
|
|
14
15
|
stop_event_loop
|
15
16
|
trap_signals_for_litespeed
|
@@ -26,7 +27,7 @@ module NewRelic
|
|
26
27
|
graceful_disconnect
|
27
28
|
end
|
28
29
|
rescue => e
|
29
|
-
::NewRelic::Agent.logger.error
|
30
|
+
::NewRelic::Agent.logger.error(e)
|
30
31
|
end
|
31
32
|
end
|
32
33
|
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
|
@@ -10,8 +11,8 @@ module NewRelic
|
|
10
11
|
# before connecting, otherwise the parent process sends useless data
|
11
12
|
def using_forking_dispatcher?
|
12
13
|
# TODO: MAJOR VERSION - remove :rainbows
|
13
|
-
if [:puma, :passenger, :rainbows, :unicorn].include?
|
14
|
-
::NewRelic::Agent.logger.info
|
14
|
+
if [:puma, :passenger, :rainbows, :unicorn].include?(Agent.config[:dispatcher])
|
15
|
+
::NewRelic::Agent.logger.info("Deferring startup of agent reporting thread because #{Agent.config[:dispatcher]} may fork.")
|
15
16
|
true
|
16
17
|
else
|
17
18
|
false
|
@@ -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
|
|