newrelic_rpm 8.16.0 → 9.2.2
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 +4 -106
- data/.rubocop_todo.yml +13 -14
- data/.simplecov +2 -1
- data/Brewfile +1 -0
- data/CHANGELOG.md +225 -0
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +1 -1
- data/Guardfile +8 -7
- data/README.md +3 -2
- data/Rakefile +8 -8
- data/Thorfile +1 -1
- data/bin/newrelic +1 -0
- data/bin/newrelic_cmd +1 -0
- data/bin/nrdebug +36 -36
- data/init.rb +1 -1
- data/lib/new_relic/agent/agent.rb +3 -16
- data/lib/new_relic/agent/agent_helpers/connect.rb +5 -10
- data/lib/new_relic/agent/agent_helpers/harvest.rb +4 -4
- data/lib/new_relic/agent/agent_helpers/shutdown.rb +5 -5
- data/lib/new_relic/agent/agent_helpers/special_startup.rb +3 -4
- data/lib/new_relic/agent/agent_helpers/start_worker_thread.rb +47 -39
- data/lib/new_relic/agent/agent_helpers/startup.rb +13 -13
- data/lib/new_relic/agent/agent_helpers/transmit.rb +6 -6
- data/lib/new_relic/agent/agent_logger.rb +9 -9
- data/lib/new_relic/agent/attribute_filter.rb +2 -4
- data/lib/new_relic/agent/attribute_processing.rb +2 -2
- data/lib/new_relic/agent/audit_logger.rb +5 -5
- data/lib/new_relic/agent/autostart.rb +1 -1
- data/lib/new_relic/agent/commands/agent_command.rb +2 -2
- data/lib/new_relic/agent/commands/agent_command_router.rb +5 -4
- data/lib/new_relic/agent/commands/thread_profiler_session.rb +8 -8
- data/lib/new_relic/agent/configuration/default_source.rb +200 -588
- data/lib/new_relic/agent/configuration/environment_source.rb +2 -2
- data/lib/new_relic/agent/configuration/high_security_source.rb +3 -5
- data/lib/new_relic/agent/configuration/manager.rb +15 -2
- data/lib/new_relic/agent/configuration/security_policy_source.rb +10 -26
- data/lib/new_relic/agent/configuration/server_source.rb +24 -24
- data/lib/new_relic/agent/configuration/yaml_source.rb +4 -4
- 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 +4 -4
- 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 +2 -2
- data/lib/new_relic/agent/database.rb +4 -18
- data/lib/new_relic/agent/datastores/metric_helper.rb +5 -5
- data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +11 -11
- data/lib/new_relic/agent/datastores/redis.rb +6 -6
- data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +8 -10
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +10 -10
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb +7 -7
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +1 -1
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +6 -6
- data/lib/new_relic/agent/distributed_tracing/trace_context.rb +7 -7
- data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +4 -4
- data/lib/new_relic/agent/distributed_tracing.rb +5 -5
- data/lib/new_relic/agent/error_collector.rb +36 -8
- data/lib/new_relic/agent/error_filter.rb +5 -5
- data/lib/new_relic/agent/error_trace_aggregator.rb +5 -4
- data/lib/new_relic/agent/event_loop.rb +3 -3
- data/lib/new_relic/agent/external.rb +1 -1
- data/lib/new_relic/agent/harvester.rb +1 -3
- data/lib/new_relic/agent/heap.rb +2 -1
- data/lib/new_relic/agent/hostname.rb +1 -1
- data/lib/new_relic/agent/http_clients/abstract.rb +9 -21
- data/lib/new_relic/agent/http_clients/curb_wrappers.rb +7 -3
- data/lib/new_relic/agent/http_clients/excon_wrappers.rb +7 -5
- data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +4 -0
- data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +6 -2
- data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +5 -1
- data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +8 -5
- data/lib/new_relic/agent/http_clients/uri_util.rb +2 -2
- data/lib/new_relic/agent/instrumentation/action_controller_other_subscriber.rb +5 -2
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +3 -2
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +3 -3
- data/lib/new_relic/agent/instrumentation/active_job.rb +2 -2
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +3 -3
- data/lib/new_relic/agent/instrumentation/active_record.rb +3 -2
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +38 -35
- data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +3 -3
- data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +2 -2
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +3 -2
- data/lib/new_relic/agent/instrumentation/bunny/chain.rb +1 -1
- data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +3 -3
- data/lib/new_relic/agent/instrumentation/bunny.rb +1 -1
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +6 -4
- data/lib/new_relic/agent/instrumentation/curb/chain.rb +1 -1
- data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +5 -5
- data/lib/new_relic/agent/instrumentation/curb.rb +1 -1
- data/lib/new_relic/agent/instrumentation/custom_events_subscriber.rb +2 -1
- data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +1 -0
- data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +2 -1
- data/lib/new_relic/agent/instrumentation/elasticsearch/chain.rb +2 -2
- data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +4 -3
- data/lib/new_relic/agent/instrumentation/elasticsearch.rb +2 -2
- data/lib/new_relic/agent/instrumentation/excon/middleware.rb +2 -1
- data/lib/new_relic/agent/instrumentation/excon.rb +3 -3
- data/lib/new_relic/agent/instrumentation/fiber/chain.rb +20 -0
- data/lib/new_relic/agent/instrumentation/fiber/instrumentation.rb +24 -0
- data/lib/new_relic/agent/instrumentation/fiber/prepend.rb +18 -0
- data/lib/new_relic/agent/instrumentation/fiber.rb +25 -0
- data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +4 -4
- data/lib/new_relic/agent/instrumentation/grape.rb +4 -4
- data/lib/new_relic/agent/instrumentation/grpc/client/chain.rb +1 -1
- data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +3 -2
- data/lib/new_relic/agent/instrumentation/grpc/client/prepend.rb +1 -1
- data/lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb +1 -1
- data/lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb +4 -4
- data/lib/new_relic/agent/instrumentation/grpc_client.rb +1 -1
- data/lib/new_relic/agent/instrumentation/grpc_server.rb +1 -1
- data/lib/new_relic/agent/instrumentation/httprb.rb +1 -1
- data/lib/new_relic/agent/instrumentation/ignore_actions.rb +1 -1
- data/lib/new_relic/agent/instrumentation/logger.rb +1 -1
- data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +3 -1
- data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +2 -2
- data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +3 -1
- data/lib/new_relic/agent/instrumentation/memcache.rb +10 -10
- data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +3 -3
- data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +1 -1
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +6 -6
- data/lib/new_relic/agent/instrumentation/net_http.rb +2 -2
- data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +1 -1
- data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +3 -3
- data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +2 -2
- data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +3 -2
- data/lib/new_relic/agent/instrumentation/rails_middleware.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +8 -15
- data/lib/new_relic/agent/instrumentation/rake.rb +3 -3
- data/lib/new_relic/agent/instrumentation/redis/constants.rb +1 -1
- data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +2 -1
- data/lib/new_relic/agent/instrumentation/redis.rb +1 -1
- data/lib/new_relic/agent/instrumentation/resque/helper.rb +1 -1
- data/lib/new_relic/agent/instrumentation/resque.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sequel.rb +8 -9
- data/lib/new_relic/agent/instrumentation/sequel_helper.rb +10 -10
- data/lib/new_relic/agent/instrumentation/sidekiq/extensions/delayed_class.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sidekiq/server.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sidekiq.rb +1 -0
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +6 -5
- data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +1 -1
- data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +3 -7
- data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +2 -1
- data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +5 -5
- data/lib/new_relic/agent/javascript_instrumentor.rb +29 -24
- data/lib/new_relic/agent/linking_metadata.rb +2 -2
- data/lib/new_relic/agent/log_event_aggregator.rb +15 -15
- data/lib/new_relic/agent/logging.rb +73 -33
- data/lib/new_relic/agent/messaging.rb +7 -5
- data/lib/new_relic/agent/method_tracer.rb +7 -7
- data/lib/new_relic/agent/method_tracer_helpers.rb +1 -1
- data/lib/new_relic/agent/monitors/cross_app_monitor.rb +4 -5
- data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +1 -1
- data/lib/new_relic/agent/new_relic_service/encoders.rb +1 -1
- data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +2 -2
- data/lib/new_relic/agent/new_relic_service/security_policy_settings.rb +0 -1
- data/lib/new_relic/agent/new_relic_service.rb +15 -16
- data/lib/new_relic/agent/obfuscator.rb +1 -1
- data/lib/new_relic/agent/parameter_filtering.rb +6 -6
- data/lib/new_relic/agent/pipe_channel_manager.rb +7 -6
- data/lib/new_relic/agent/pipe_service.rb +5 -3
- data/lib/new_relic/agent/priority_sampled_buffer.rb +1 -1
- data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +0 -1
- data/lib/new_relic/agent/sampler.rb +2 -1
- data/lib/new_relic/agent/sampler_collection.rb +1 -1
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +5 -5
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +9 -9
- data/lib/new_relic/agent/samplers/memory_sampler.rb +9 -9
- data/lib/new_relic/agent/samplers/object_sampler.rb +1 -1
- data/lib/new_relic/agent/span_event_aggregator.rb +4 -4
- data/lib/new_relic/agent/span_event_primitive.rb +2 -2
- data/lib/new_relic/agent/sql_sampler.rb +2 -2
- data/lib/new_relic/agent/stats.rb +1 -1
- data/lib/new_relic/agent/synthetics_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/system_info.rb +10 -10
- data/lib/new_relic/agent/threading/agent_thread.rb +1 -1
- data/lib/new_relic/agent/threading/backtrace_node.rb +3 -3
- data/lib/new_relic/agent/threading/backtrace_service.rb +3 -7
- data/lib/new_relic/agent/threading/thread_profile.rb +5 -5
- data/lib/new_relic/agent/timestamp_sampled_buffer.rb +1 -1
- data/lib/new_relic/agent/tracer.rb +19 -9
- data/lib/new_relic/agent/transaction/abstract_segment.rb +54 -48
- data/lib/new_relic/agent/transaction/datastore_segment.rb +1 -1
- data/lib/new_relic/agent/transaction/distributed_tracer.rb +7 -6
- data/lib/new_relic/agent/transaction/distributed_tracing.rb +13 -14
- data/lib/new_relic/agent/transaction/external_request_segment.rb +11 -11
- data/lib/new_relic/agent/transaction/message_broker_segment.rb +1 -1
- data/lib/new_relic/agent/transaction/request_attributes.rb +2 -2
- data/lib/new_relic/agent/transaction/segment.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_context.rb +4 -4
- data/lib/new_relic/agent/transaction/trace_node.rb +8 -7
- data/lib/new_relic/agent/transaction/tracing.rb +10 -4
- data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -1
- data/lib/new_relic/agent/transaction.rb +60 -52
- data/lib/new_relic/agent/transaction_error_primitive.rb +5 -5
- data/lib/new_relic/agent/transaction_event_aggregator.rb +4 -4
- data/lib/new_relic/agent/transaction_event_primitive.rb +3 -3
- data/lib/new_relic/agent/transaction_sampler.rb +3 -3
- data/lib/new_relic/agent/transaction_time_aggregator.rb +7 -3
- data/lib/new_relic/agent/utilization/aws.rb +1 -1
- data/lib/new_relic/agent/utilization/azure.rb +3 -3
- data/lib/new_relic/agent/utilization/gcp.rb +3 -3
- 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/vm/monotonic_gc_profiler.rb +1 -1
- data/lib/new_relic/agent/vm/mri_vm.rb +9 -8
- data/lib/new_relic/agent/worker_loop.rb +1 -1
- data/lib/new_relic/agent.rb +79 -35
- data/lib/new_relic/cli/command.rb +3 -3
- data/lib/new_relic/cli/commands/deployments.rb +26 -25
- data/lib/new_relic/cli/commands/install.rb +23 -23
- data/lib/new_relic/collection_helper.rb +2 -2
- data/lib/new_relic/constants.rb +7 -8
- data/lib/new_relic/control/class_methods.rb +3 -3
- data/lib/new_relic/control/frameworks/rails.rb +30 -18
- data/lib/new_relic/control/instance_methods.rb +6 -6
- data/lib/new_relic/control/instrumentation.rb +1 -15
- data/lib/new_relic/control/private_instance_methods.rb +1 -1
- data/lib/new_relic/dependency_detection.rb +14 -18
- data/lib/new_relic/environment_report.rb +4 -4
- data/lib/new_relic/helper.rb +2 -1
- data/lib/new_relic/language_support.rb +1 -1
- data/lib/new_relic/latest_changes.rb +5 -5
- data/lib/new_relic/local_environment.rb +0 -10
- data/lib/new_relic/noticed_error.rb +20 -18
- data/lib/new_relic/rack/browser_monitoring.rb +20 -16
- data/lib/new_relic/recipes/capistrano3.rb +1 -1
- data/lib/new_relic/recipes/capistrano_legacy.rb +6 -6
- data/lib/new_relic/recipes/helpers/send_deployment.rb +5 -5
- data/lib/new_relic/supportability_helper.rb +2 -1
- data/lib/new_relic/version.rb +3 -3
- data/lib/newrelic_rpm.rb +4 -4
- data/lib/sequel/extensions/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +5 -5
- data/lib/sequel/plugins/{newrelic_instrumentation.rb → new_relic_instrumentation.rb} +4 -4
- data/lib/tasks/config.rake +12 -12
- data/lib/tasks/coverage_report.rake +4 -4
- data/lib/tasks/helpers/format.rb +10 -10
- data/lib/tasks/helpers/removers.rb +5 -5
- data/lib/tasks/install.rake +4 -4
- data/lib/tasks/instrumentation_generator/instrumentation.thor +15 -18
- data/lib/tasks/instrumentation_generator/templates/Envfile.tt +1 -1
- data/lib/tasks/instrumentation_generator/templates/chain.tt +1 -1
- data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +1 -1
- data/lib/tasks/multiverse.rb +13 -6
- data/lib/tasks/newrelic.rb +1 -0
- data/lib/tasks/tests.rake +6 -6
- data/newrelic.yml +10 -13
- data/newrelic_rpm.gemspec +29 -26
- data/test/agent_helper.rb +25 -24
- metadata +84 -16
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +0 -83
- data/lib/new_relic/agent/instrumentation/authlogic.rb +0 -33
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +0 -215
- data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +0 -36
- data/lib/new_relic/agent/instrumentation/sunspot.rb +0 -41
- data/lib/new_relic/agent/range_extensions.rb +0 -27
@@ -62,9 +62,8 @@ module NewRelic
|
|
62
62
|
File.join(instrumentation_path, app.to_s, '*.rb')
|
63
63
|
@instrumentation_files.each { |pattern| load_instrumentation_files(pattern) }
|
64
64
|
DependencyDetection.detect!
|
65
|
-
ruby_deprecation
|
66
65
|
rails_32_deprecation
|
67
|
-
::NewRelic::Agent.logger.info(
|
66
|
+
::NewRelic::Agent.logger.info('Finished instrumentation')
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
@@ -81,19 +80,6 @@ module NewRelic
|
|
81
80
|
)
|
82
81
|
end
|
83
82
|
|
84
|
-
def ruby_deprecation
|
85
|
-
return unless RUBY_VERSION < '2.4.0'
|
86
|
-
|
87
|
-
deprecation_msg = 'The Ruby Agent is dropping support for Rubies below 2.4 ' \
|
88
|
-
'in version 9.0.0. Please upgrade your Ruby version to continue receiving support. ' \
|
89
|
-
|
90
|
-
::NewRelic::Agent.logger.log_once(
|
91
|
-
:warn,
|
92
|
-
:deprecated_ruby_version,
|
93
|
-
deprecation_msg
|
94
|
-
)
|
95
|
-
end
|
96
|
-
|
97
83
|
include Instrumentation
|
98
84
|
end
|
99
85
|
end
|
@@ -12,7 +12,7 @@ module NewRelic
|
|
12
12
|
|
13
13
|
def configure_high_security
|
14
14
|
if security_settings_valid? && Agent.config[:high_security]
|
15
|
-
Agent.logger.info(
|
15
|
+
Agent.logger.info('Installing high security configuration based on local configuration')
|
16
16
|
Agent.config.replace_or_add_config(Agent::Configuration::HighSecuritySource.new(Agent.config))
|
17
17
|
end
|
18
18
|
end
|
@@ -35,19 +35,6 @@ module DependencyDetection
|
|
35
35
|
@items.find { |i| i.name == name }
|
36
36
|
end
|
37
37
|
|
38
|
-
def installed?(name)
|
39
|
-
item = dependency_by_name(name)
|
40
|
-
item && item.executed
|
41
|
-
end
|
42
|
-
|
43
|
-
def items
|
44
|
-
@items
|
45
|
-
end
|
46
|
-
|
47
|
-
def items=(new_items)
|
48
|
-
@items = new_items
|
49
|
-
end
|
50
|
-
|
51
38
|
class Dependent
|
52
39
|
attr_reader :executed
|
53
40
|
attr_accessor :name
|
@@ -83,7 +70,7 @@ module DependencyDetection
|
|
83
70
|
# Given "NewRelic::Agent::Instrumentation::NetHTTP::Prepend"
|
84
71
|
# Will extract "NetHTTP" which is in the 2nd to last spot
|
85
72
|
def extract_supportability_name(instrumenting_module)
|
86
|
-
instrumenting_module.to_s.split(
|
73
|
+
instrumenting_module.to_s.split('::')[-2]
|
87
74
|
end
|
88
75
|
|
89
76
|
def log_and_instrument(method, instrumenting_module, supportability_name)
|
@@ -94,20 +81,20 @@ module DependencyDetection
|
|
94
81
|
end
|
95
82
|
|
96
83
|
def prepend_instrument(target_class, instrumenting_module, supportability_name = nil)
|
97
|
-
log_and_instrument(
|
84
|
+
log_and_instrument('Prepend', instrumenting_module, supportability_name) do
|
98
85
|
target_class.send(:prepend, instrumenting_module)
|
99
86
|
end
|
100
87
|
end
|
101
88
|
|
102
89
|
def chain_instrument(instrumenting_module, supportability_name = nil)
|
103
|
-
log_and_instrument(
|
90
|
+
log_and_instrument('MethodChaining', instrumenting_module, supportability_name) do
|
104
91
|
instrumenting_module.instrument!
|
105
92
|
end
|
106
93
|
end
|
107
94
|
|
108
95
|
def chain_instrument_target(target, instrumenting_module, supportability_name = nil)
|
109
96
|
NewRelic::Agent.logger.info("Installing deferred #{target} instrumentation")
|
110
|
-
log_and_instrument(
|
97
|
+
log_and_instrument('MethodChaining', instrumenting_module, supportability_name) do
|
111
98
|
instrumenting_module.instrument!(target)
|
112
99
|
end
|
113
100
|
end
|
@@ -192,6 +179,15 @@ module DependencyDetection
|
|
192
179
|
return valid_value
|
193
180
|
end
|
194
181
|
|
182
|
+
# update any :auto config value to be either :prepend or :chain after auto
|
183
|
+
# determination has selected one of those to use
|
184
|
+
def update_config_value(use_prepend)
|
185
|
+
if config_key && auto_configured?
|
186
|
+
NewRelic::Agent.config.instance_variable_get(:@cache)[config_key] = use_prepend ? :prepend : :chain
|
187
|
+
end
|
188
|
+
use_prepend
|
189
|
+
end
|
190
|
+
|
195
191
|
def config_value
|
196
192
|
return AUTO_CONFIG_VALUE unless config_key
|
197
193
|
|
@@ -215,7 +211,7 @@ module DependencyDetection
|
|
215
211
|
end
|
216
212
|
|
217
213
|
def use_prepend?
|
218
|
-
prepend_configured? || (auto_configured? && !prepend_conflicts?)
|
214
|
+
update_config_value(prepend_configured? || (auto_configured? && !prepend_conflicts?))
|
219
215
|
end
|
220
216
|
|
221
217
|
def prepend_conflicts?
|
@@ -52,7 +52,7 @@ module NewRelic
|
|
52
52
|
# though so try it if the above fails.
|
53
53
|
Bundler.load.specs.map do |spec|
|
54
54
|
version = (spec.respond_to?(:version) && spec.version)
|
55
|
-
spec.name + (version ? "(#{version})" :
|
55
|
+
spec.name + (version ? "(#{version})" : '')
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -118,19 +118,19 @@ module NewRelic
|
|
118
118
|
def record_value(data, key, value)
|
119
119
|
data[key] = value
|
120
120
|
|
121
|
-
Agent.record_metric(
|
121
|
+
Agent.record_metric('Supportability/EnvironmentReport/success', 0.0)
|
122
122
|
Agent.record_metric("Supportability/EnvironmentReport/success/#{key}", 0.0)
|
123
123
|
end
|
124
124
|
|
125
125
|
def record_empty_value(key, value)
|
126
126
|
Agent.logger.debug("EnvironmentReport ignoring value for #{key.inspect} which came back falsey: #{value.inspect}")
|
127
|
-
Agent.record_metric(
|
127
|
+
Agent.record_metric('Supportability/EnvironmentReport/empty', 0.0)
|
128
128
|
Agent.record_metric("Supportability/EnvironmentReport/empty/#{key}", 0.0)
|
129
129
|
end
|
130
130
|
|
131
131
|
def rescue_initialize(key, exception)
|
132
132
|
Agent.logger.debug("EnvironmentReport failed to retrieve value for #{key.inspect}: #{exception}")
|
133
|
-
Agent.record_metric(
|
133
|
+
Agent.record_metric('Supportability/EnvironmentReport/error', 0.0)
|
134
134
|
Agent.record_metric("Supportability/EnvironmentReport/error/#{key}", 0.0)
|
135
135
|
end
|
136
136
|
end
|
data/lib/new_relic/helper.rb
CHANGED
@@ -63,7 +63,8 @@ module NewRelic
|
|
63
63
|
raise NewRelic::CommandRunFailedError.new("Failed to run command '#{command}': #{message}")
|
64
64
|
end
|
65
65
|
|
66
|
-
|
66
|
+
# needs else branch coverage
|
67
|
+
output.chomp if output # rubocop:disable Style/SafeNavigation
|
67
68
|
end
|
68
69
|
|
69
70
|
# TODO: Open3 defers the actual execution of a binary to Process.spawn,
|
@@ -62,7 +62,7 @@ module NewRelic
|
|
62
62
|
#
|
63
63
|
# Can't help if the constant isn't a class...
|
64
64
|
if result.is_a?(Module)
|
65
|
-
expected_name = "#{namespace}::#{name}".gsub(/^Object::/,
|
65
|
+
expected_name = "#{namespace}::#{name}".gsub(/^Object::/, '')
|
66
66
|
return unless expected_name == result.to_s
|
67
67
|
end
|
68
68
|
|
@@ -26,12 +26,12 @@ EOS
|
|
26
26
|
# * This is a patch item (3.7.1.188)
|
27
27
|
def self.read_patch(patch_level, changelog = default_changelog)
|
28
28
|
latest = extract_latest_changes(File.read(changelog))
|
29
|
-
changes = ["## v#{patch_level}",
|
29
|
+
changes = ["## v#{patch_level}", '']
|
30
30
|
|
31
31
|
current_item = nil
|
32
32
|
latest.each do |line|
|
33
|
-
if
|
34
|
-
if
|
33
|
+
if /^\s*\*.*/.match?(line)
|
34
|
+
if /\(#{patch_level}\)/.match?(line)
|
35
35
|
# Found a patch level item, so start tracking the lines!
|
36
36
|
current_item = line
|
37
37
|
else
|
@@ -52,12 +52,12 @@ EOS
|
|
52
52
|
changes = []
|
53
53
|
version_count = 0
|
54
54
|
contents.each_line do |line|
|
55
|
-
if
|
55
|
+
if /##\s+v[\d.]+/.match?(line)
|
56
56
|
version_count += 1
|
57
57
|
end
|
58
58
|
break if version_count >= 2
|
59
59
|
|
60
|
-
changes << line.sub(/^ \* /,
|
60
|
+
changes << line.sub(/^ \* /, '* ').chomp
|
61
61
|
end
|
62
62
|
changes
|
63
63
|
end
|
@@ -74,9 +74,7 @@ module NewRelic
|
|
74
74
|
unicorn
|
75
75
|
webrick
|
76
76
|
fastcgi
|
77
|
-
rainbows
|
78
77
|
]
|
79
|
-
# TODO: MAJOR VERSION - remove rainbows
|
80
78
|
while dispatchers.any? && @discovered_dispatcher.nil?
|
81
79
|
send('check_for_' + (dispatchers.shift))
|
82
80
|
end
|
@@ -134,14 +132,6 @@ module NewRelic
|
|
134
132
|
end
|
135
133
|
end
|
136
134
|
|
137
|
-
# TODO: MAJOR VERSION - remove this method
|
138
|
-
def check_for_rainbows
|
139
|
-
if (defined?(::Rainbows) && defined?(::Rainbows::HttpServer)) && NewRelic::LanguageSupport.object_space_usable?
|
140
|
-
v = find_class_in_object_space(::Rainbows::HttpServer)
|
141
|
-
@discovered_dispatcher = :rainbows if v
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
135
|
def check_for_puma
|
146
136
|
if defined?(::Puma) && File.basename($0) == 'puma'
|
147
137
|
@discovered_dispatcher = :puma
|
@@ -15,18 +15,20 @@ class NewRelic::NoticedError
|
|
15
15
|
:stack_trace, :attributes_from_notice_error, :attributes,
|
16
16
|
:expected
|
17
17
|
|
18
|
-
attr_reader :exception_id, :is_internal
|
18
|
+
attr_reader :error_group, :exception_id, :is_internal
|
19
19
|
|
20
20
|
STRIPPED_EXCEPTION_REPLACEMENT_MESSAGE = "Message removed by New Relic 'strip_exception_messages' setting"
|
21
21
|
UNKNOWN_ERROR_CLASS_NAME = 'Error'
|
22
22
|
NIL_ERROR_MESSAGE = '<no message>'
|
23
23
|
|
24
|
-
USER_ATTRIBUTES =
|
25
|
-
AGENT_ATTRIBUTES =
|
26
|
-
INTRINSIC_ATTRIBUTES =
|
24
|
+
USER_ATTRIBUTES = 'userAttributes'
|
25
|
+
AGENT_ATTRIBUTES = 'agentAttributes'
|
26
|
+
INTRINSIC_ATTRIBUTES = 'intrinsics'
|
27
27
|
|
28
28
|
DESTINATION = NewRelic::Agent::AttributeFilter::DST_ERROR_COLLECTOR
|
29
29
|
|
30
|
+
AGENT_ATTRIBUTE_ERROR_GROUP = :'error.group.name'
|
31
|
+
|
30
32
|
ERROR_PREFIX_KEY = 'error'
|
31
33
|
ERROR_MESSAGE_KEY = "#{ERROR_PREFIX_KEY}.message"
|
32
34
|
ERROR_CLASS_KEY = "#{ERROR_PREFIX_KEY}.class"
|
@@ -141,21 +143,9 @@ class NewRelic::NoticedError
|
|
141
143
|
end
|
142
144
|
|
143
145
|
def build_agent_attributes(merged_attributes)
|
144
|
-
|
145
|
-
@attributes.agent_attributes_for(DESTINATION)
|
146
|
-
else
|
147
|
-
NewRelic::EMPTY_HASH
|
148
|
-
end
|
149
|
-
|
150
|
-
# It's possible to override the request_uri from the transaction attributes
|
151
|
-
# with a uri passed to notice_error. Add it to merged_attributes filter and
|
152
|
-
# merge with the transaction attributes, possibly overriding the request_uri
|
153
|
-
if request_uri
|
154
|
-
merged_attributes.add_agent_attribute(:'request.uri', request_uri, DESTINATION)
|
155
|
-
agent_attributes.merge(merged_attributes.agent_attributes_for(DESTINATION))
|
156
|
-
end
|
146
|
+
return NewRelic::EMPTY_HASH unless @attributes
|
157
147
|
|
158
|
-
|
148
|
+
@attributes.agent_attributes_for(DESTINATION)
|
159
149
|
end
|
160
150
|
|
161
151
|
def build_intrinsic_attributes
|
@@ -197,4 +187,16 @@ class NewRelic::NoticedError
|
|
197
187
|
@message = exception.to_s
|
198
188
|
end
|
199
189
|
end
|
190
|
+
|
191
|
+
def error_group=(name)
|
192
|
+
return if name.nil? || name.empty?
|
193
|
+
|
194
|
+
if agent_attributes.frozen?
|
195
|
+
processed_attributes[AGENT_ATTRIBUTES] = agent_attributes.merge(AGENT_ATTRIBUTE_ERROR_GROUP => name)
|
196
|
+
else
|
197
|
+
agent_attributes[AGENT_ATTRIBUTE_ERROR_GROUP] = name
|
198
|
+
end
|
199
|
+
|
200
|
+
@error_group = name
|
201
|
+
end
|
200
202
|
end
|
@@ -26,11 +26,11 @@ module NewRelic
|
|
26
26
|
ATTACHMENT = 'attachment'.freeze
|
27
27
|
TEXT_HTML = 'text/html'.freeze
|
28
28
|
|
29
|
-
BODY_START =
|
30
|
-
HEAD_START =
|
31
|
-
GT =
|
29
|
+
BODY_START = '<body'.freeze
|
30
|
+
HEAD_START = '<head'.freeze
|
31
|
+
GT = '>'.freeze
|
32
32
|
|
33
|
-
ALREADY_INSTRUMENTED_KEY =
|
33
|
+
ALREADY_INSTRUMENTED_KEY = 'newrelic.browser_monitoring_already_instrumented'
|
34
34
|
CHARSET_RE = /<\s*meta[^>]+charset\s*=[^>]*>/im.freeze
|
35
35
|
X_UA_COMPATIBLE_RE = /<\s*meta[^>]+http-equiv\s*=\s*['"]x-ua-compatible['"][^>]*>/im.freeze
|
36
36
|
|
@@ -40,7 +40,7 @@ module NewRelic
|
|
40
40
|
|
41
41
|
js_to_inject = NewRelic::Agent.browser_timing_header
|
42
42
|
if (js_to_inject != NewRelic::EMPTY_STR) && should_instrument?(env, status, headers)
|
43
|
-
response_string = autoinstrument_source(response,
|
43
|
+
response_string = autoinstrument_source(response, js_to_inject)
|
44
44
|
if headers.key?(CONTENT_LENGTH)
|
45
45
|
content_length = response_string ? response_string.bytesize : 0
|
46
46
|
headers[CONTENT_LENGTH] = content_length.to_s
|
@@ -69,11 +69,17 @@ module NewRelic
|
|
69
69
|
|
70
70
|
private
|
71
71
|
|
72
|
-
def autoinstrument_source(response,
|
72
|
+
def autoinstrument_source(response, js_to_inject)
|
73
73
|
source = gather_source(response)
|
74
74
|
close_old_response(response)
|
75
|
-
return
|
75
|
+
return unless source
|
76
76
|
|
77
|
+
modify_source(source, js_to_inject)
|
78
|
+
rescue => e
|
79
|
+
NewRelic::Agent.logger.debug("Skipping RUM instrumentation on exception: #{e.class} - #{e.message}")
|
80
|
+
end
|
81
|
+
|
82
|
+
def modify_source(source, js_to_inject)
|
77
83
|
# Only scan the first 50k (roughly) then give up.
|
78
84
|
beginning_of_source = source[0..SCAN_LIMIT]
|
79
85
|
meta_tag_positions = find_meta_tag_positions(beginning_of_source)
|
@@ -81,26 +87,24 @@ module NewRelic
|
|
81
87
|
if insertion_index = find_insertion_index(meta_tag_positions, beginning_of_source, body_start)
|
82
88
|
source = source_injection(source, insertion_index, js_to_inject)
|
83
89
|
else
|
84
|
-
NewRelic::Agent.logger.debug(
|
90
|
+
NewRelic::Agent.logger.debug('Skipping RUM instrumentation. Could not properly determine location to ' \
|
91
|
+
'inject script.')
|
85
92
|
end
|
86
93
|
else
|
87
94
|
msg = "Skipping RUM instrumentation. Unable to find <body> tag in first #{SCAN_LIMIT} bytes of document."
|
88
95
|
NewRelic::Agent.logger.log_once(:warn, :rum_insertion_failure, msg)
|
89
96
|
NewRelic::Agent.logger.debug(msg)
|
90
97
|
end
|
91
|
-
|
92
98
|
source
|
93
|
-
rescue => e
|
94
|
-
NewRelic::Agent.logger.debug("Skipping RUM instrumentation on exception.", e)
|
95
|
-
nil
|
96
99
|
end
|
97
100
|
|
98
101
|
def html?(headers)
|
99
|
-
|
102
|
+
# needs else branch coverage
|
103
|
+
headers[CONTENT_TYPE] && headers[CONTENT_TYPE].include?(TEXT_HTML) # rubocop:disable Style/SafeNavigation
|
100
104
|
end
|
101
105
|
|
102
106
|
def attachment?(headers)
|
103
|
-
headers[CONTENT_DISPOSITION]
|
107
|
+
headers[CONTENT_DISPOSITION]&.include?(ATTACHMENT)
|
104
108
|
end
|
105
109
|
|
106
110
|
def streaming?(env, headers)
|
@@ -150,12 +154,12 @@ module NewRelic
|
|
150
154
|
|
151
155
|
def find_x_ua_compatible_position(beginning_of_source)
|
152
156
|
match = X_UA_COMPATIBLE_RE.match(beginning_of_source)
|
153
|
-
match
|
157
|
+
match&.end(0)
|
154
158
|
end
|
155
159
|
|
156
160
|
def find_charset_position(beginning_of_source)
|
157
161
|
match = CHARSET_RE.match(beginning_of_source)
|
158
|
-
match
|
162
|
+
match&.end(0)
|
159
163
|
end
|
160
164
|
|
161
165
|
def find_end_of_head_open(beginning_of_source)
|
@@ -8,7 +8,7 @@ require_relative 'helpers/send_deployment'
|
|
8
8
|
namespace :newrelic do
|
9
9
|
include SendDeployment
|
10
10
|
# notifies New Relic of a deployment
|
11
|
-
desc
|
11
|
+
desc 'Record a deployment in New Relic (newrelic.com)'
|
12
12
|
task :notice_deployment do
|
13
13
|
if fetch(:newrelic_role)
|
14
14
|
on roles(fetch(:newrelic_role)) do
|
@@ -5,9 +5,9 @@
|
|
5
5
|
make_notify_task = proc do
|
6
6
|
namespace(:newrelic) do
|
7
7
|
# on all deployments, notify New Relic
|
8
|
-
desc(
|
8
|
+
desc('Record a deployment in New Relic (newrelic.com)')
|
9
9
|
task(:notice_deployment, :roles => :app, :except => {:no_release => true}) do
|
10
|
-
rails_env = fetch(:newrelic_rails_env, fetch(:rails_env,
|
10
|
+
rails_env = fetch(:newrelic_rails_env, fetch(:rails_env, 'production'))
|
11
11
|
|
12
12
|
require 'new_relic/cli/command'
|
13
13
|
|
@@ -36,14 +36,14 @@ make_notify_task = proc do
|
|
36
36
|
:license_key => license_key
|
37
37
|
}
|
38
38
|
|
39
|
-
logger.debug(
|
39
|
+
logger.debug('Uploading deployment to New Relic')
|
40
40
|
deployment = NewRelic::Cli::Deployments.new(deploy_options)
|
41
41
|
deployment.run
|
42
|
-
logger.info(
|
42
|
+
logger.info('Uploaded deployment information to New Relic')
|
43
43
|
rescue NewRelic::Cli::Command::CommandFailure => e
|
44
44
|
logger.info(e.message)
|
45
45
|
rescue Capistrano::CommandError
|
46
|
-
logger.info(
|
46
|
+
logger.info('Unable to notify New Relic of the deployment... skipping')
|
47
47
|
rescue => e
|
48
48
|
logger.info("Error creating New Relic deployment (#{e})\n#{e.backtrace.join("\n")}")
|
49
49
|
end
|
@@ -51,7 +51,7 @@ make_notify_task = proc do
|
|
51
51
|
|
52
52
|
def lookup_changelog(changelog)
|
53
53
|
if !changelog
|
54
|
-
logger.debug(
|
54
|
+
logger.debug('Getting log of changes for New Relic Deployment details')
|
55
55
|
from_revision = source.next_revision(current_revision)
|
56
56
|
|
57
57
|
if scm == :git
|
@@ -5,9 +5,9 @@
|
|
5
5
|
module SendDeployment
|
6
6
|
def send_deployment_notification_to_newrelic
|
7
7
|
require 'new_relic/cli/command'
|
8
|
-
debug(
|
8
|
+
debug('Uploading deployment to New Relic')
|
9
9
|
NewRelic::Cli::Deployments.new(deploy_options).run
|
10
|
-
info(
|
10
|
+
info('Uploaded deployment information to New Relic')
|
11
11
|
rescue NewRelic::Cli::Command::CommandFailure => e
|
12
12
|
info(e.message)
|
13
13
|
rescue => e
|
@@ -34,7 +34,7 @@ module SendDeployment
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def fetch_environment
|
37
|
-
fetch(:newrelic_rails_env, fetch(:rack_env, fetch(:rails_env, fetch(:stage,
|
37
|
+
fetch(:newrelic_rails_env, fetch(:rack_env, fetch(:rails_env, fetch(:stage, 'production'))))
|
38
38
|
end
|
39
39
|
|
40
40
|
def fetch_rev
|
@@ -59,9 +59,9 @@ module SendDeployment
|
|
59
59
|
current_revision = fetch(:current_revision)
|
60
60
|
return unless current_revision && previous_revision
|
61
61
|
|
62
|
-
debug(
|
62
|
+
debug('Retrieving changelog for New Relic Deployment details')
|
63
63
|
|
64
|
-
if Rake::Task.task_defined?(
|
64
|
+
if Rake::Task.task_defined?('git:check')
|
65
65
|
log_command = "git --no-pager log --no-color --pretty=format:' * %an: %s' " +
|
66
66
|
"--abbrev-commit --no-merges #{previous_revision}..#{current_revision}"
|
67
67
|
`#{log_command}`
|
@@ -21,7 +21,6 @@ module NewRelic
|
|
21
21
|
:browser_timing_header,
|
22
22
|
:disable_all_tracing,
|
23
23
|
:disable_sql_recording,
|
24
|
-
:disable_transaction_tracing,
|
25
24
|
:drop_buffered_data,
|
26
25
|
:get_request_metadata,
|
27
26
|
:get_response_metadata,
|
@@ -45,8 +44,10 @@ module NewRelic
|
|
45
44
|
:record_metric,
|
46
45
|
:recording_web_transaction?,
|
47
46
|
:require_test_helper,
|
47
|
+
:set_error_group_callback,
|
48
48
|
:set_sql_obfuscator,
|
49
49
|
:set_transaction_name,
|
50
|
+
:set_user_id,
|
50
51
|
:shutdown,
|
51
52
|
:start_segment,
|
52
53
|
:trace,
|
data/lib/new_relic/version.rb
CHANGED
data/lib/newrelic_rpm.rb
CHANGED
@@ -20,17 +20,17 @@ require 'new_relic/control'
|
|
20
20
|
if defined?(Rails::VERSION)
|
21
21
|
module NewRelic
|
22
22
|
class Railtie < Rails::Railtie
|
23
|
-
if
|
24
|
-
initializer
|
23
|
+
if ENV['NEW_RELIC_DEFER_RAILS_INITIALIZATION']
|
24
|
+
initializer 'newrelic_rpm.include_method_tracers', before: :load_config_initializers do |app|
|
25
25
|
Module.send(:include, NewRelic::Agent::MethodTracer::ClassMethods)
|
26
26
|
Module.send(:include, NewRelic::Agent::MethodTracer)
|
27
27
|
end
|
28
28
|
|
29
|
-
initializer
|
29
|
+
initializer 'newrelic_rpm.start_plugin', after: :load_config_initializers do |app|
|
30
30
|
NewRelic::Control.instance.init_plugin(config: app.config)
|
31
31
|
end
|
32
32
|
else
|
33
|
-
initializer
|
33
|
+
initializer 'newrelic_rpm.start_plugin', before: :load_config_initializers do |app|
|
34
34
|
NewRelic::Control.instance.init_plugin(config: app.config)
|
35
35
|
end
|
36
36
|
end
|
@@ -17,7 +17,7 @@ module Sequel
|
|
17
17
|
# instrumentation is loaded:
|
18
18
|
#
|
19
19
|
# db = Sequel.connect( ... )
|
20
|
-
# db.extension :
|
20
|
+
# db.extension :new_relic_instrumentation
|
21
21
|
#
|
22
22
|
# Versions 3.47.0 and later use `Database.extension` to automatically
|
23
23
|
# install the extension for new connections.
|
@@ -32,7 +32,7 @@ module Sequel
|
|
32
32
|
module NewRelicInstrumentation
|
33
33
|
module Naming
|
34
34
|
def self.query_method_name
|
35
|
-
if Sequel::VERSION >=
|
35
|
+
if Sequel::VERSION >= '4.35.0'
|
36
36
|
:log_connection_yield
|
37
37
|
else
|
38
38
|
:log_yield
|
@@ -86,13 +86,13 @@ module Sequel
|
|
86
86
|
if THREAD_SAFE_CONNECTION_POOL_CLASSES.include?(self.pool.class)
|
87
87
|
self[sql].explain
|
88
88
|
else
|
89
|
-
NewRelic::Agent.logger.log_once(:info, :sequel_explain_skipped,
|
89
|
+
NewRelic::Agent.logger.log_once(:info, :sequel_explain_skipped, 'Not running SQL explains because Sequel is not in recognized multi-threaded mode')
|
90
90
|
nil
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end # module NewRelicInstrumentation
|
95
95
|
|
96
|
-
NewRelic::Agent.logger.debug(
|
97
|
-
Database.register_extension(:
|
96
|
+
NewRelic::Agent.logger.debug('Registering the :new_relic_instrumentation extension.')
|
97
|
+
Database.register_extension(:new_relic_instrumentation, NewRelicInstrumentation)
|
98
98
|
end # module Sequel
|
@@ -11,7 +11,7 @@ require 'new_relic/agent/datastores/metric_helper'
|
|
11
11
|
module Sequel
|
12
12
|
module Plugins
|
13
13
|
# Sequel::Model instrumentation for the New Relic agent.
|
14
|
-
module
|
14
|
+
module NewRelicInstrumentation
|
15
15
|
# Meta-programming for creating method tracers for the Sequel::Model plugin.
|
16
16
|
module MethodWrapping
|
17
17
|
# Install a method named +method_name+ that will trace execution
|
@@ -38,7 +38,7 @@ module Sequel
|
|
38
38
|
|
39
39
|
# Methods to be added to Sequel::Model instances.
|
40
40
|
module InstanceMethods
|
41
|
-
extend Sequel::Plugins::
|
41
|
+
extend Sequel::Plugins::NewRelicInstrumentation::MethodWrapping
|
42
42
|
|
43
43
|
wrap_sequel_method :delete
|
44
44
|
wrap_sequel_method :destroy
|
@@ -52,9 +52,9 @@ module Sequel
|
|
52
52
|
|
53
53
|
# Methods to be added to Sequel::Model classes.
|
54
54
|
module ClassMethods
|
55
|
-
extend Sequel::Plugins::
|
55
|
+
extend Sequel::Plugins::NewRelicInstrumentation::MethodWrapping
|
56
56
|
|
57
|
-
wrap_sequel_method :[],
|
57
|
+
wrap_sequel_method :[], 'get'
|
58
58
|
wrap_sequel_method :all
|
59
59
|
wrap_sequel_method :first
|
60
60
|
wrap_sequel_method :create
|
data/lib/tasks/config.rake
CHANGED
@@ -7,9 +7,9 @@ include Format
|
|
7
7
|
|
8
8
|
namespace :newrelic do
|
9
9
|
namespace :config do
|
10
|
-
GENERAL =
|
11
|
-
DISABLING =
|
12
|
-
ATTRIBUTES =
|
10
|
+
GENERAL = 'general'
|
11
|
+
DISABLING = 'disabling'
|
12
|
+
ATTRIBUTES = 'attributes'
|
13
13
|
|
14
14
|
# these configuration options are not able to be set using environment variables
|
15
15
|
NON_ENV_CONFIGS = ['error_collector.ignore_classes', 'error_collector.ignore_messages', 'error_collector.expected_classes', 'error_collector.expected_messages']
|
@@ -18,21 +18,21 @@ namespace :newrelic do
|
|
18
18
|
GENERAL => 'These settings are available for agent configuration. Some settings depend on your New Relic subscription level.',
|
19
19
|
DISABLING => 'Use these settings to toggle instrumentation types during agent startup.',
|
20
20
|
ATTRIBUTES => '[Attributes](/docs/features/agent-attributes) are key-value pairs containing information that determines the properties of an event or transaction. These key-value pairs can be viewed within transaction traces in APM, traced errors in APM, transaction events in dashboards, and page views in dashboards. You can customize exactly which attributes will be sent to each of these destinations',
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
'transaction_tracer' => 'The [transaction traces](/docs/apm/traces/transaction-traces/transaction-traces) feature collects detailed information from a selection of transactions, including a summary of the calling sequence, a breakdown of time spent, and a list of SQL queries and their query plans (on mysql and postgresql). Available features depend on your New Relic subscription level.',
|
22
|
+
'error_collector' => "The agent collects and reports all uncaught exceptions by default. These configuration options allow you to customize the error collection.\n\nFor information on ignored and expected errors, [see this page on Error Analytics in APM](/docs/agents/manage-apm-agents/agent-data/manage-errors-apm-collect-ignore-or-mark-expected/). To set expected errors via the `NewRelic::Agent.notice_error` Ruby method, [consult the Ruby Agent API](/docs/agents/ruby-agent/api-guides/sending-handled-errors-new-relic/).",
|
23
|
+
'browser_monitoring' => "The browser monitoring [page load timing](/docs/browser/new-relic-browser/page-load-timing/page-load-timing-process) feature (sometimes referred to as real user monitoring or RUM) gives you insight into the performance real users are experiencing with your website. This is accomplished by measuring the time it takes for your users' browsers to download and render your web pages by injecting a small amount of JavaScript code into the header and footer of each page.",
|
24
|
+
'analytics_events' => '[New Relic dashboards](/docs/query-your-data/explore-query-data/dashboards/introduction-new-relic-one-dashboards) is a resource to gather and visualize data about your software and what it says about your business. With it you can quickly and easily create real-time dashboards to get immediate answers about end-user experiences, clickstreams, mobile activities, and server transactions.'
|
25
25
|
}
|
26
26
|
|
27
27
|
NAME_OVERRIDES = {
|
28
|
-
|
29
|
-
|
28
|
+
'slow_sql' => 'Slow SQL',
|
29
|
+
'custom_insights_events' => 'Custom Events'
|
30
30
|
}
|
31
31
|
|
32
|
-
desc
|
32
|
+
desc 'Describe available New Relic configuration settings'
|
33
33
|
task :docs, [:format] => [] do |t, args|
|
34
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
35
|
-
format = args[:format] ||
|
34
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'new_relic', 'agent', 'configuration', 'default_source.rb'))
|
35
|
+
format = args[:format] || 'text'
|
36
36
|
output(format)
|
37
37
|
end
|
38
38
|
end
|