newrelic_rpm 6.9.0.363 → 6.12.0.367
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +32 -2
- data/CHANGELOG.md +172 -10
- data/CODE_OF_CONDUCT.md +46 -0
- data/CONTRIBUTING.md +56 -12
- data/Gemfile +6 -2
- data/LICENSE +208 -38
- data/README.md +61 -89
- data/Rakefile +2 -0
- data/THIRD_PARTY_NOTICES.md +213 -0
- data/bin/nrdebug +1 -1
- data/init.rb +1 -1
- data/install.rb +1 -1
- data/lib/new_relic/agent.rb +15 -5
- data/lib/new_relic/agent/adaptive_sampler.rb +1 -1
- data/lib/new_relic/agent/agent.rb +11 -6
- data/lib/new_relic/agent/agent_logger.rb +1 -1
- data/lib/new_relic/agent/attribute_filter.rb +1 -1
- data/lib/new_relic/agent/attribute_processing.rb +1 -1
- data/lib/new_relic/agent/attributes.rb +3 -1
- data/lib/new_relic/agent/audit_logger.rb +1 -1
- data/lib/new_relic/agent/autostart.rb +1 -1
- data/lib/new_relic/agent/chained_call.rb +1 -1
- data/lib/new_relic/agent/commands/agent_command.rb +1 -1
- data/lib/new_relic/agent/commands/agent_command_router.rb +1 -1
- data/lib/new_relic/agent/commands/thread_profiler_session.rb +1 -1
- data/lib/new_relic/agent/configuration.rb +1 -1
- data/lib/new_relic/agent/configuration/default_source.rb +28 -1
- data/lib/new_relic/agent/configuration/dotted_hash.rb +1 -1
- data/lib/new_relic/agent/configuration/environment_source.rb +1 -1
- data/lib/new_relic/agent/configuration/event_harvest_config.rb +1 -1
- data/lib/new_relic/agent/configuration/high_security_source.rb +1 -1
- data/lib/new_relic/agent/configuration/manager.rb +1 -1
- data/lib/new_relic/agent/configuration/manual_source.rb +1 -1
- data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -1
- data/lib/new_relic/agent/configuration/security_policy_source.rb +1 -1
- data/lib/new_relic/agent/configuration/server_source.rb +1 -1
- data/lib/new_relic/agent/configuration/yaml_source.rb +1 -1
- data/lib/new_relic/agent/connect/request_builder.rb +1 -1
- data/lib/new_relic/agent/connect/response_handler.rb +1 -1
- data/lib/new_relic/agent/custom_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/database.rb +1 -1
- data/lib/new_relic/agent/database/explain_plan_helpers.rb +1 -1
- data/lib/new_relic/agent/database/obfuscation_helpers.rb +2 -2
- data/lib/new_relic/agent/database/obfuscator.rb +1 -1
- data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +1 -1
- data/lib/new_relic/agent/datastores.rb +1 -1
- data/lib/new_relic/agent/datastores/metric_helper.rb +1 -1
- data/lib/new_relic/agent/datastores/mongo.rb +2 -2
- data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +1 -1
- data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +1 -1
- data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +1 -1
- data/lib/new_relic/agent/datastores/mongo/statement_formatter.rb +1 -1
- data/lib/new_relic/agent/datastores/redis.rb +1 -1
- data/lib/new_relic/agent/deprecator.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +3 -2
- data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/{distributed_trace_intrinsics.rb → distributed_trace_attributes.rb} +9 -5
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +3 -4
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/trace_context.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +2 -2
- data/lib/new_relic/agent/encoding_normalizer.rb +1 -1
- data/lib/new_relic/agent/error_collector.rb +31 -12
- data/lib/new_relic/agent/error_event_aggregator.rb +5 -5
- data/lib/new_relic/agent/error_trace_aggregator.rb +1 -1
- data/lib/new_relic/agent/event_aggregator.rb +1 -1
- data/lib/new_relic/agent/event_buffer.rb +1 -1
- data/lib/new_relic/agent/event_listener.rb +1 -1
- data/lib/new_relic/agent/event_loop.rb +1 -1
- data/lib/new_relic/agent/external.rb +1 -1
- data/lib/new_relic/agent/guid_generator.rb +1 -1
- data/lib/new_relic/agent/harvester.rb +1 -1
- data/lib/new_relic/agent/heap.rb +1 -1
- data/lib/new_relic/agent/hostname.rb +8 -2
- data/lib/new_relic/agent/http_clients/abstract.rb +82 -0
- data/lib/new_relic/agent/http_clients/curb_wrappers.rb +25 -20
- data/lib/new_relic/agent/http_clients/excon_wrappers.rb +29 -14
- data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +18 -22
- data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +11 -12
- data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +17 -5
- data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +5 -7
- data/lib/new_relic/agent/http_clients/uri_util.rb +4 -3
- data/lib/new_relic/agent/instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +5 -6
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +5 -1
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +12 -3
- data/lib/new_relic/agent/instrumentation/active_job.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_record.rb +85 -38
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +82 -24
- data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +92 -34
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +8 -3
- data/lib/new_relic/agent/instrumentation/active_storage.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_storage_subscriber.rb +9 -5
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +24 -8
- data/lib/new_relic/agent/instrumentation/authlogic.rb +1 -1
- data/lib/new_relic/agent/instrumentation/bunny.rb +114 -51
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/curb.rb +92 -27
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +4 -2
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +61 -25
- data/lib/new_relic/agent/instrumentation/excon.rb +1 -1
- data/lib/new_relic/agent/instrumentation/excon/connection.rb +7 -4
- data/lib/new_relic/agent/instrumentation/excon/middleware.rb +3 -2
- data/lib/new_relic/agent/instrumentation/grape.rb +1 -1
- data/lib/new_relic/agent/instrumentation/http.rb +6 -3
- data/lib/new_relic/agent/instrumentation/httpclient.rb +5 -3
- data/lib/new_relic/agent/instrumentation/ignore_actions.rb +1 -1
- data/lib/new_relic/agent/instrumentation/memcache.rb +4 -2
- data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +7 -3
- data/lib/new_relic/agent/instrumentation/merb/controller.rb +1 -1
- data/lib/new_relic/agent/instrumentation/merb/errors.rb +1 -1
- data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +12 -4
- data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +9 -7
- data/lib/new_relic/agent/instrumentation/mongo.rb +10 -4
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +36 -3
- data/lib/new_relic/agent/instrumentation/net.rb +59 -22
- data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +26 -2
- data/lib/new_relic/agent/instrumentation/padrino.rb +40 -16
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/queue_time.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rack.rb +36 -13
- data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_view.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rake.rb +54 -20
- data/lib/new_relic/agent/instrumentation/redis.rb +141 -56
- data/lib/new_relic/agent/instrumentation/resque.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sequel.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sidekiq.rb +48 -24
- data/lib/new_relic/agent/instrumentation/sinatra.rb +62 -23
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sunspot.rb +1 -1
- data/lib/new_relic/agent/instrumentation/typhoeus.rb +23 -6
- data/lib/new_relic/agent/internal_agent_error.rb +1 -1
- data/lib/new_relic/agent/javascript_instrumentor.rb +1 -1
- data/lib/new_relic/agent/log_once.rb +1 -1
- data/lib/new_relic/agent/logging.rb +2 -2
- data/lib/new_relic/agent/memory_logger.rb +1 -1
- data/lib/new_relic/agent/messaging.rb +1 -1
- data/lib/new_relic/agent/method_tracer.rb +16 -5
- data/lib/new_relic/agent/method_tracer_helpers.rb +2 -2
- data/lib/new_relic/agent/monitors.rb +1 -1
- data/lib/new_relic/agent/monitors/cross_app_monitor.rb +1 -1
- data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +1 -1
- data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +1 -1
- data/lib/new_relic/agent/monitors/synthetics_monitor.rb +1 -1
- data/lib/new_relic/agent/new_relic_service.rb +1 -2
- data/lib/new_relic/agent/new_relic_service/encoders.rb +1 -1
- data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +1 -1
- data/lib/new_relic/agent/new_relic_service/marshaller.rb +1 -1
- data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +1 -1
- data/lib/new_relic/agent/noticible_error.rb +22 -0
- data/lib/new_relic/agent/null_logger.rb +1 -1
- data/lib/new_relic/agent/obfuscator.rb +1 -1
- data/lib/new_relic/agent/parameter_filtering.rb +1 -1
- data/lib/new_relic/agent/payload_metric_mapping.rb +1 -1
- data/lib/new_relic/agent/pipe_channel_manager.rb +1 -1
- data/lib/new_relic/agent/pipe_service.rb +1 -1
- data/lib/new_relic/agent/prepend_supportability.rb +1 -1
- data/lib/new_relic/agent/priority_sampled_buffer.rb +8 -5
- data/lib/new_relic/agent/range_extensions.rb +1 -1
- data/lib/new_relic/agent/rules_engine.rb +1 -1
- data/lib/new_relic/agent/rules_engine/replacement_rule.rb +1 -1
- data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +1 -1
- data/lib/new_relic/agent/sampler.rb +1 -1
- data/lib/new_relic/agent/sampler_collection.rb +1 -1
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -1
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +1 -1
- data/lib/new_relic/agent/samplers/memory_sampler.rb +1 -1
- data/lib/new_relic/agent/samplers/object_sampler.rb +1 -1
- data/lib/new_relic/agent/samplers/vm_sampler.rb +1 -1
- data/lib/new_relic/agent/span_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/span_event_primitive.rb +71 -37
- data/lib/new_relic/agent/sql_sampler.rb +4 -4
- data/lib/new_relic/agent/stats.rb +1 -1
- data/lib/new_relic/agent/stats_engine.rb +1 -1
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -1
- data/lib/new_relic/agent/stats_engine/stats_hash.rb +1 -1
- data/lib/new_relic/agent/supported_versions.rb +1 -1
- data/lib/new_relic/agent/synthetics_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/system_info.rb +13 -4
- data/lib/new_relic/agent/threading/agent_thread.rb +1 -1
- data/lib/new_relic/agent/threading/backtrace_node.rb +1 -1
- data/lib/new_relic/agent/threading/backtrace_service.rb +1 -1
- data/lib/new_relic/agent/threading/thread_profile.rb +1 -1
- data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -1
- data/lib/new_relic/agent/tracer.rb +31 -16
- data/lib/new_relic/agent/transaction.rb +67 -46
- data/lib/new_relic/agent/transaction/abstract_segment.rb +29 -2
- data/lib/new_relic/agent/transaction/datastore_segment.rb +1 -1
- data/lib/new_relic/agent/transaction/distributed_tracer.rb +3 -3
- data/lib/new_relic/agent/transaction/distributed_tracing.rb +2 -2
- data/lib/new_relic/agent/transaction/external_request_segment.rb +26 -10
- data/lib/new_relic/agent/transaction/message_broker_segment.rb +1 -1
- data/lib/new_relic/agent/transaction/request_attributes.rb +1 -1
- data/lib/new_relic/agent/transaction/segment.rb +18 -2
- data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +1 -1
- data/lib/new_relic/agent/transaction/synthetics_sample_buffer.rb +1 -1
- data/lib/new_relic/agent/transaction/trace.rb +1 -1
- data/lib/new_relic/agent/transaction/trace_builder.rb +1 -1
- data/lib/new_relic/agent/transaction/trace_context.rb +1 -1
- data/lib/new_relic/agent/transaction/trace_node.rb +1 -1
- data/lib/new_relic/agent/transaction/tracing.rb +1 -1
- data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -1
- data/lib/new_relic/agent/transaction_error_primitive.rb +8 -6
- data/lib/new_relic/agent/transaction_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/transaction_event_primitive.rb +3 -3
- data/lib/new_relic/agent/transaction_event_recorder.rb +1 -1
- data/lib/new_relic/agent/transaction_metrics.rb +1 -1
- data/lib/new_relic/agent/transaction_sampler.rb +1 -1
- data/lib/new_relic/agent/transaction_time_aggregator.rb +1 -1
- data/lib/new_relic/agent/utilization/aws.rb +1 -1
- data/lib/new_relic/agent/utilization/azure.rb +1 -1
- data/lib/new_relic/agent/utilization/gcp.rb +1 -1
- data/lib/new_relic/agent/utilization/pcf.rb +1 -1
- data/lib/new_relic/agent/utilization/vendor.rb +1 -1
- data/lib/new_relic/agent/utilization_data.rb +1 -1
- data/lib/new_relic/agent/vm.rb +1 -1
- data/lib/new_relic/agent/vm/jruby_vm.rb +1 -1
- data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -1
- data/lib/new_relic/agent/vm/mri_vm.rb +1 -1
- data/lib/new_relic/agent/vm/snapshot.rb +1 -1
- data/lib/new_relic/agent/worker_loop.rb +1 -1
- data/lib/new_relic/cli/command.rb +1 -1
- data/lib/new_relic/cli/commands/deployments.rb +1 -1
- data/lib/new_relic/cli/commands/install.rb +4 -3
- data/lib/new_relic/coerce.rb +1 -1
- data/lib/new_relic/collection_helper.rb +1 -1
- data/lib/new_relic/constants.rb +5 -1
- data/lib/new_relic/control.rb +1 -1
- data/lib/new_relic/control/class_methods.rb +1 -1
- data/lib/new_relic/control/frameworks.rb +1 -1
- data/lib/new_relic/control/frameworks/external.rb +1 -1
- data/lib/new_relic/control/frameworks/merb.rb +1 -1
- data/lib/new_relic/control/frameworks/rails.rb +1 -1
- data/lib/new_relic/control/frameworks/rails3.rb +1 -1
- data/lib/new_relic/control/frameworks/rails4.rb +1 -1
- data/lib/new_relic/control/frameworks/rails_notifications.rb +1 -1
- data/lib/new_relic/control/frameworks/ruby.rb +1 -1
- data/lib/new_relic/control/frameworks/sinatra.rb +1 -1
- data/lib/new_relic/control/instance_methods.rb +1 -1
- data/lib/new_relic/control/instrumentation.rb +1 -1
- data/lib/new_relic/control/server_methods.rb +1 -1
- data/lib/new_relic/delayed_job_injection.rb +1 -1
- data/lib/new_relic/dependency_detection.rb +1 -1
- data/lib/new_relic/environment_report.rb +6 -2
- data/lib/new_relic/helper.rb +1 -1
- data/lib/new_relic/language_support.rb +1 -1
- data/lib/new_relic/latest_changes.rb +2 -2
- data/lib/new_relic/local_environment.rb +1 -1
- data/lib/new_relic/metric_data.rb +1 -1
- data/lib/new_relic/metric_spec.rb +1 -1
- data/lib/new_relic/metrics.rb +1 -1
- data/lib/new_relic/noticed_error.rb +29 -10
- data/lib/new_relic/rack.rb +1 -1
- data/lib/new_relic/rack/agent_hooks.rb +1 -1
- data/lib/new_relic/rack/agent_middleware.rb +1 -1
- data/lib/new_relic/rack/browser_monitoring.rb +3 -2
- data/lib/new_relic/recipes.rb +1 -1
- data/lib/new_relic/recipes/capistrano3.rb +1 -1
- data/lib/new_relic/recipes/capistrano_legacy.rb +1 -1
- data/lib/new_relic/supportability_helper.rb +1 -1
- data/lib/new_relic/version.rb +2 -2
- data/lib/newrelic_rpm.rb +1 -1
- data/lib/sequel/extensions/newrelic_instrumentation.rb +1 -1
- data/lib/sequel/plugins/newrelic_instrumentation.rb +1 -1
- data/lib/tasks/all.rb +1 -1
- data/lib/tasks/multiverse.rb +26 -1
- data/lib/tasks/newrelic.rb +1 -1
- data/lib/tasks/tests.rake +1 -1
- data/newrelic_rpm.gemspec +11 -9
- data/recipes/newrelic.rb +1 -1
- data/test/agent_helper.rb +231 -70
- metadata +18 -15
- data/lib/new_relic/agent/http_clients/abstract_request.rb +0 -31
- data/true +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
require 'zlib'
|
6
6
|
require 'base64'
|
@@ -156,13 +156,13 @@ module NewRelic
|
|
156
156
|
|
157
157
|
PRIORITY = "priority".freeze
|
158
158
|
|
159
|
-
def
|
159
|
+
def distributed_trace_attributes(state)
|
160
160
|
transaction = state.current_transaction
|
161
161
|
params = nil
|
162
162
|
if transaction && transaction.distributed_tracer.distributed_trace_payload
|
163
163
|
params = {}
|
164
164
|
payload = transaction.distributed_tracer.distributed_trace_payload
|
165
|
-
|
165
|
+
DistributedTraceAttributes.copy_from_transaction transaction, payload, params
|
166
166
|
params[PRIORITY] = transaction.priority
|
167
167
|
end
|
168
168
|
params
|
@@ -176,7 +176,7 @@ module NewRelic
|
|
176
176
|
if state.is_sql_recorded?
|
177
177
|
if duration > Agent.config[:'slow_sql.explain_threshold']
|
178
178
|
backtrace = caller.join("\n")
|
179
|
-
params =
|
179
|
+
params = distributed_trace_attributes state
|
180
180
|
data.sql_data << SlowSql.new(statement, metric_name, duration, backtrace, params)
|
181
181
|
end
|
182
182
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
module NewRelic
|
5
5
|
module Agent
|
6
6
|
class Stats
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
require 'new_relic/agent/stats_engine/gc_profiler'
|
6
6
|
require 'new_relic/agent/stats_engine/stats_hash'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
# -*- coding: utf-8 -*-
|
6
6
|
module NewRelic
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
# A Hash-like class for storing metric data.
|
6
6
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
module NewRelic
|
6
6
|
module Agent
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
# encoding: utf-8
|
3
3
|
# This file is distributed under New Relic's license terms.
|
4
|
-
# See https://github.com/newrelic/
|
4
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
5
5
|
|
6
6
|
require 'new_relic/agent/event_aggregator'
|
7
7
|
require 'new_relic/agent/timestamp_sampled_buffer'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
# This module is intended to provide access to information about the host OS and
|
6
6
|
# [virtual] machine. It intentionally does no caching and maintains no state -
|
@@ -170,11 +170,20 @@ module NewRelic
|
|
170
170
|
|
171
171
|
container_id = case cpu_cgroup
|
172
172
|
# docker native driver w/out systemd (fs)
|
173
|
-
when /[0-9a-f]{64}/
|
173
|
+
when /[0-9a-f]{64,}/
|
174
|
+
if $&.length == 64
|
175
|
+
$&
|
176
|
+
else # container ID is too long
|
177
|
+
::NewRelic::Agent.logger.debug("Ignoring docker ID of invalid length: '#{cpu_cgroup}'")
|
178
|
+
return
|
179
|
+
end
|
174
180
|
# docker native driver with systemd
|
175
|
-
when '/'
|
181
|
+
when '/' then nil
|
176
182
|
# in a cgroup, but we don't recognize its format
|
177
|
-
when /docker/
|
183
|
+
when /docker\/.*[^0-9a-f]/ then
|
184
|
+
::NewRelic::Agent.logger.debug("Cgroup indicates docker but container_id has invalid characters: '#{cpu_cgroup}'")
|
185
|
+
return
|
186
|
+
when /docker/ then
|
178
187
|
::NewRelic::Agent.logger.debug("Cgroup indicates docker but container_id unrecognized: '#{cpu_cgroup}'")
|
179
188
|
::NewRelic::Agent.increment_metric "Supportability/utilization/docker/error"
|
180
189
|
return
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
module NewRelic
|
6
6
|
module Agent
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
module NewRelic
|
6
6
|
module Agent
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
module NewRelic
|
6
6
|
module Agent
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
require 'set'
|
6
6
|
require 'new_relic/agent/worker_loop'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
require 'new_relic/agent/heap'
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
3
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
4
4
|
|
5
5
|
require 'new_relic/agent/transaction'
|
6
6
|
require 'new_relic/agent/transaction/segment'
|
@@ -102,9 +102,9 @@ module NewRelic
|
|
102
102
|
# only wrap the yield to be absolutely sure we don't report agent
|
103
103
|
# problems as app errors
|
104
104
|
yield
|
105
|
-
rescue =>
|
106
|
-
current_transaction.notice_error(
|
107
|
-
raise
|
105
|
+
rescue => exception
|
106
|
+
current_transaction.notice_error(exception)
|
107
|
+
raise
|
108
108
|
ensure
|
109
109
|
finishable.finish if finishable
|
110
110
|
end
|
@@ -157,8 +157,8 @@ module NewRelic
|
|
157
157
|
|
158
158
|
rescue ArgumentError
|
159
159
|
raise
|
160
|
-
rescue =>
|
161
|
-
log_error('start_transaction_or_segment',
|
160
|
+
rescue => exception
|
161
|
+
log_error('start_transaction_or_segment', exception)
|
162
162
|
end
|
163
163
|
|
164
164
|
# Takes name or partial_name and a category.
|
@@ -190,8 +190,8 @@ module NewRelic
|
|
190
190
|
options)
|
191
191
|
rescue ArgumentError
|
192
192
|
raise
|
193
|
-
rescue =>
|
194
|
-
log_error('start_transaction',
|
193
|
+
rescue => exception
|
194
|
+
log_error('start_transaction', exception)
|
195
195
|
end
|
196
196
|
|
197
197
|
def create_distributed_trace_payload
|
@@ -251,8 +251,8 @@ module NewRelic
|
|
251
251
|
|
252
252
|
rescue ArgumentError
|
253
253
|
raise
|
254
|
-
rescue =>
|
255
|
-
log_error('start_segment',
|
254
|
+
rescue => exception
|
255
|
+
log_error('start_segment', exception)
|
256
256
|
end
|
257
257
|
|
258
258
|
UNKNOWN = "Unknown".freeze
|
@@ -310,8 +310,8 @@ module NewRelic
|
|
310
310
|
|
311
311
|
rescue ArgumentError
|
312
312
|
raise
|
313
|
-
rescue =>
|
314
|
-
log_error('start_datastore_segment',
|
313
|
+
rescue => exception
|
314
|
+
log_error('start_datastore_segment', exception)
|
315
315
|
end
|
316
316
|
|
317
317
|
# Creates and starts an external request segment using the
|
@@ -357,8 +357,23 @@ module NewRelic
|
|
357
357
|
|
358
358
|
rescue ArgumentError
|
359
359
|
raise
|
360
|
-
rescue =>
|
361
|
-
log_error('start_external_request_segment',
|
360
|
+
rescue => exception
|
361
|
+
log_error('start_external_request_segment', exception)
|
362
|
+
end
|
363
|
+
|
364
|
+
# Will potentially capture and notice an error at the
|
365
|
+
# segment that was executing when error occurred.
|
366
|
+
# if passed +segment+ is something that doesn't
|
367
|
+
# respond to +notice_segment_error+ then this method
|
368
|
+
# is effectively just a yield to the given &block
|
369
|
+
def capture_segment_error segment
|
370
|
+
return unless block_given?
|
371
|
+
yield
|
372
|
+
rescue => exception
|
373
|
+
if segment && segment.is_a?(Transaction::AbstractSegment)
|
374
|
+
segment.notice_error exception
|
375
|
+
end
|
376
|
+
raise
|
362
377
|
end
|
363
378
|
|
364
379
|
# For New Relic internal use only.
|
@@ -390,8 +405,8 @@ module NewRelic
|
|
390
405
|
|
391
406
|
rescue ArgumentError
|
392
407
|
raise
|
393
|
-
rescue =>
|
394
|
-
log_error('start_datastore_segment',
|
408
|
+
rescue => exception
|
409
|
+
log_error('start_datastore_segment', exception)
|
395
410
|
end
|
396
411
|
|
397
412
|
# This method should only be used by Tracer for access to the
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# This file is distributed under New Relic's license terms.
|
3
|
-
# See https://github.com/newrelic/
|
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/instrumentation/queue_time'
|
6
7
|
require 'new_relic/agent/transaction_metrics'
|
@@ -23,22 +24,36 @@ module NewRelic
|
|
23
24
|
include Tracing
|
24
25
|
|
25
26
|
# for nested transactions
|
26
|
-
|
27
|
-
CONTROLLER_PREFIX =
|
28
|
-
MIDDLEWARE_PREFIX =
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
27
|
+
NESTED_TRANSACTION_PREFIX = "Nested/"
|
28
|
+
CONTROLLER_PREFIX = "Controller/"
|
29
|
+
MIDDLEWARE_PREFIX = "Middleware/Rack/"
|
30
|
+
OTHER_TRANSACTION_PREFIX = "OtherTransaction/"
|
31
|
+
TASK_PREFIX = "#{OTHER_TRANSACTION_PREFIX}Background/"
|
32
|
+
RAKE_PREFIX = "#{OTHER_TRANSACTION_PREFIX}Rake/"
|
33
|
+
MESSAGE_PREFIX = "#{OTHER_TRANSACTION_PREFIX}Message/"
|
34
|
+
RACK_PREFIX = "#{CONTROLLER_PREFIX}Rack/"
|
35
|
+
SINATRA_PREFIX = "#{CONTROLLER_PREFIX}Sinatra/"
|
36
|
+
GRAPE_PREFIX = "#{CONTROLLER_PREFIX}Grape/"
|
37
|
+
ACTION_CABLE_PREFIX = "#{CONTROLLER_PREFIX}ActionCable/"
|
37
38
|
|
38
39
|
WEB_TRANSACTION_CATEGORIES = [:web, :controller, :uri, :rack, :sinatra, :grape, :middleware, :action_cable].freeze
|
39
40
|
TRANSACTION_NAMING_SOURCES = [:child, :api].freeze
|
40
41
|
|
41
|
-
MIDDLEWARE_SUMMARY_METRICS = [
|
42
|
+
MIDDLEWARE_SUMMARY_METRICS = ["Middleware/all"].freeze
|
43
|
+
WEB_SUMMARY_METRIC = "HttpDispatcher"
|
44
|
+
OTHER_SUMMARY_METRIC = "#{OTHER_TRANSACTION_PREFIX}all"
|
45
|
+
QUEUE_TIME_METRIC = "WebFrontend/QueueTime"
|
46
|
+
|
47
|
+
APDEX_S = "S"
|
48
|
+
APDEX_T = "T"
|
49
|
+
APDEX_F = "F"
|
50
|
+
APDEX_ALL_METRIC = "ApdexAll"
|
51
|
+
APDEX_METRIC = "Apdex"
|
52
|
+
APDEX_OTHER_METRIC = "ApdexOther"
|
53
|
+
APDEX_TXN_METRIC_PREFIX = "Apdex/"
|
54
|
+
APDEX_OTHER_TXN_METRIC_PREFIX = "ApdexOther/Transaction/"
|
55
|
+
|
56
|
+
JRUBY_CPU_TIME_ERROR = "Error calculating JRuby CPU Time"
|
42
57
|
|
43
58
|
# reference to the transaction state managing this transaction
|
44
59
|
attr_accessor :state
|
@@ -136,23 +151,22 @@ module NewRelic
|
|
136
151
|
|
137
152
|
def self.nested_transaction_name(name)
|
138
153
|
if name.start_with?(CONTROLLER_PREFIX) || name.start_with?(OTHER_TRANSACTION_PREFIX)
|
139
|
-
"#{
|
154
|
+
"#{NESTED_TRANSACTION_PREFIX}#{name}"
|
140
155
|
else
|
141
156
|
name
|
142
157
|
end
|
143
158
|
end
|
144
159
|
|
145
|
-
#
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
160
|
+
# discards the currently saved transaction information
|
161
|
+
def self.abort_transaction!
|
162
|
+
if txn = Tracer.current_transaction
|
163
|
+
txn.abort_transaction!
|
164
|
+
end
|
150
165
|
end
|
151
166
|
|
152
167
|
# See NewRelic::Agent.notice_error for options and commentary
|
153
|
-
def self.notice_error(e, options={})
|
154
|
-
txn = Tracer.current_transaction
|
155
|
-
if txn
|
168
|
+
def self.notice_error(e, options={})
|
169
|
+
if txn = Tracer.current_transaction
|
156
170
|
txn.notice_error(e, options)
|
157
171
|
elsif NewRelic::Agent.instance
|
158
172
|
NewRelic::Agent.instance.error_collector.notice_error(e, options)
|
@@ -194,6 +208,7 @@ module NewRelic
|
|
194
208
|
|
195
209
|
def add_agent_attribute(key, value, default_destinations)
|
196
210
|
@attributes.add_agent_attribute(key, value, default_destinations)
|
211
|
+
current_segment.add_agent_attribute(key, value) if current_segment
|
197
212
|
end
|
198
213
|
|
199
214
|
def self.merge_untrusted_agent_attributes(attributes, prefix, default_destinations)
|
@@ -206,6 +221,7 @@ module NewRelic
|
|
206
221
|
|
207
222
|
def merge_untrusted_agent_attributes(attributes, prefix, default_destinations)
|
208
223
|
@attributes.merge_untrusted_agent_attributes(attributes, prefix, default_destinations)
|
224
|
+
current_segment.merge_untrusted_agent_attributes(attributes, prefix, default_destinations) if current_segment
|
209
225
|
end
|
210
226
|
|
211
227
|
@@java_classes_loaded = false
|
@@ -407,6 +423,10 @@ module NewRelic
|
|
407
423
|
ignore! if user_defined_rules_ignore?
|
408
424
|
|
409
425
|
create_initial_segment
|
426
|
+
Segment.merge_untrusted_agent_attributes \
|
427
|
+
@filtered_params,
|
428
|
+
:'request.parameters',
|
429
|
+
AttributeFilter::DST_SPAN_EVENTS
|
410
430
|
end
|
411
431
|
|
412
432
|
def initial_segment
|
@@ -446,9 +466,9 @@ module NewRelic
|
|
446
466
|
|
447
467
|
nest_initial_segment if nesting_max_depth == 1
|
448
468
|
nested_name = self.class.nested_transaction_name options[:transaction_name]
|
449
|
-
|
469
|
+
segment = create_segment nested_name
|
450
470
|
set_default_transaction_name(options[:transaction_name], category)
|
451
|
-
|
471
|
+
segment
|
452
472
|
end
|
453
473
|
|
454
474
|
def nest_initial_segment
|
@@ -462,9 +482,6 @@ module NewRelic
|
|
462
482
|
@ignore_trace = true
|
463
483
|
end
|
464
484
|
|
465
|
-
WEB_SUMMARY_METRIC = 'HttpDispatcher'.freeze
|
466
|
-
OTHER_SUMMARY_METRIC = 'OtherTransaction/all'.freeze
|
467
|
-
|
468
485
|
def summary_metrics
|
469
486
|
if @frozen_name.start_with?(CONTROLLER_PREFIX)
|
470
487
|
[WEB_SUMMARY_METRIC]
|
@@ -496,6 +513,9 @@ module NewRelic
|
|
496
513
|
initial_segment.name = @frozen_name
|
497
514
|
end
|
498
515
|
|
516
|
+
initial_segment.transaction_name = @frozen_name
|
517
|
+
assign_segment_dt_attributes
|
518
|
+
assign_agent_attributes
|
499
519
|
initial_segment.finish
|
500
520
|
|
501
521
|
NewRelic::Agent::TransactionTimeAggregator.transaction_stop(@end_time, @starting_thread_id)
|
@@ -519,8 +539,6 @@ module NewRelic
|
|
519
539
|
|
520
540
|
def commit!(outermost_node_name)
|
521
541
|
generate_payload
|
522
|
-
|
523
|
-
assign_agent_attributes
|
524
542
|
assign_intrinsics
|
525
543
|
|
526
544
|
finalize_segments
|
@@ -540,6 +558,13 @@ module NewRelic
|
|
540
558
|
send_transaction_finished_event
|
541
559
|
end
|
542
560
|
|
561
|
+
def assign_segment_dt_attributes
|
562
|
+
dt_payload = distributed_tracer.trace_state_payload || distributed_tracer.distributed_trace_payload
|
563
|
+
parent_attributes = {}
|
564
|
+
DistributedTraceAttributes.copy_parent_attributes self, dt_payload, parent_attributes
|
565
|
+
parent_attributes.each { |k, v| initial_segment.add_agent_attribute k, v }
|
566
|
+
end
|
567
|
+
|
543
568
|
def assign_agent_attributes
|
544
569
|
default_destinations = AttributeFilter::DST_TRANSACTION_TRACER |
|
545
570
|
AttributeFilter::DST_TRANSACTION_EVENTS |
|
@@ -547,6 +572,9 @@ module NewRelic
|
|
547
572
|
|
548
573
|
if http_response_code
|
549
574
|
add_agent_attribute(:httpResponseCode, http_response_code.to_s, default_destinations)
|
575
|
+
# Sending status code as an int with http.statusCode key is correct
|
576
|
+
# The above attribute is deprecated and should be removed in agent version 7.0.0
|
577
|
+
add_agent_attribute(:'http.statusCode', http_response_code, default_destinations)
|
550
578
|
end
|
551
579
|
|
552
580
|
if response_content_length
|
@@ -666,10 +694,6 @@ module NewRelic
|
|
666
694
|
info[4]
|
667
695
|
end
|
668
696
|
|
669
|
-
APDEX_S = 'S'.freeze
|
670
|
-
APDEX_T = 'T'.freeze
|
671
|
-
APDEX_F = 'F'.freeze
|
672
|
-
|
673
697
|
def append_apdex_perf_zone(payload)
|
674
698
|
if recording_web_transaction?
|
675
699
|
bucket = apdex_bucket(duration, apdex_t)
|
@@ -708,13 +732,21 @@ module NewRelic
|
|
708
732
|
options[:metric] = best_name
|
709
733
|
options[:attributes] = @attributes
|
710
734
|
|
711
|
-
|
735
|
+
span_id = options.delete :span_id
|
736
|
+
error_recorded = !!agent.error_collector.notice_error(exception, options, span_id) || error_recorded
|
712
737
|
end
|
713
738
|
payload[:error] = error_recorded if payload
|
714
739
|
end
|
715
740
|
|
716
741
|
# Do not call this. Invoke the class method instead.
|
717
742
|
def notice_error(error, options={}) # :nodoc:
|
743
|
+
|
744
|
+
# Only the last error is kept
|
745
|
+
if @current_segment
|
746
|
+
@current_segment.notice_error error, expected: options[:expected]
|
747
|
+
options[:span_id] = @current_segment.guid
|
748
|
+
end
|
749
|
+
|
718
750
|
if @exceptions[error]
|
719
751
|
@exceptions[error].merge! options
|
720
752
|
else
|
@@ -726,8 +758,6 @@ module NewRelic
|
|
726
758
|
agent.transaction_event_recorder.record payload
|
727
759
|
end
|
728
760
|
|
729
|
-
QUEUE_TIME_METRIC = 'WebFrontend/QueueTime'.freeze
|
730
|
-
|
731
761
|
def queue_time
|
732
762
|
@apdex_start ? @start_time - @apdex_start : 0
|
733
763
|
end
|
@@ -743,17 +773,9 @@ module NewRelic
|
|
743
773
|
end
|
744
774
|
end
|
745
775
|
|
746
|
-
APDEX_ALL_METRIC = 'ApdexAll'.freeze
|
747
|
-
|
748
|
-
APDEX_METRIC = 'Apdex'.freeze
|
749
|
-
APDEX_OTHER_METRIC = 'ApdexOther'.freeze
|
750
|
-
|
751
|
-
APDEX_TXN_METRIC_PREFIX = 'Apdex/'.freeze
|
752
|
-
APDEX_OTHER_TXN_METRIC_PREFIX = 'ApdexOther/Transaction/'.freeze
|
753
|
-
|
754
776
|
def had_error_affecting_apdex?
|
755
777
|
@exceptions.each do |exception, options|
|
756
|
-
ignored
|
778
|
+
ignored = NewRelic::Agent.instance.error_collector.error_is_ignored?(exception)
|
757
779
|
expected = options[:expected]
|
758
780
|
|
759
781
|
return true unless ignored || expected
|
@@ -892,7 +914,6 @@ module NewRelic
|
|
892
914
|
p.stime + p.utime
|
893
915
|
end
|
894
916
|
|
895
|
-
JRUBY_CPU_TIME_ERROR = "Error calculating JRuby CPU Time".freeze
|
896
917
|
def jruby_cpu_time
|
897
918
|
return nil unless @@java_classes_loaded
|
898
919
|
threadMBean = Java::JavaLangManagement::ManagementFactory.getThreadMXBean()
|