newrelic_rpm 7.0.0 → 8.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.rubocop.yml +1941 -0
- data/.yardopts +1 -0
- data/Brewfile +10 -0
- data/CHANGELOG.md +431 -1
- data/CONTRIBUTING.md +32 -5
- data/DOCKER.md +167 -0
- data/Dockerfile +10 -0
- data/Guardfile +8 -8
- data/LICENSE +0 -6
- data/README.md +20 -18
- data/Rakefile +39 -29
- data/THIRD_PARTY_NOTICES.md +14 -199
- data/bin/mongrel_rpm +8 -9
- data/bin/newrelic +1 -1
- data/bin/nrdebug +14 -14
- data/docker-compose.yml +85 -0
- data/init.rb +0 -2
- data/lefthook.yml +9 -0
- data/lib/new_relic/agent/adaptive_sampler.rb +9 -5
- data/lib/new_relic/agent/agent.rb +72 -49
- data/lib/new_relic/agent/agent_logger.rb +15 -9
- data/lib/new_relic/agent/attribute_filter.rb +31 -31
- data/lib/new_relic/agent/attributes.rb +2 -2
- data/lib/new_relic/agent/audit_logger.rb +4 -0
- data/lib/new_relic/agent/autostart.rb +19 -17
- data/lib/new_relic/agent/commands/agent_command.rb +2 -2
- data/lib/new_relic/agent/commands/agent_command_router.rb +6 -5
- data/lib/new_relic/agent/commands/thread_profiler_session.rb +7 -6
- data/lib/new_relic/agent/configuration/default_source.rb +731 -476
- data/lib/new_relic/agent/configuration/dotted_hash.rb +3 -3
- data/lib/new_relic/agent/configuration/environment_source.rb +5 -4
- data/lib/new_relic/agent/configuration/event_harvest_config.rb +39 -16
- data/lib/new_relic/agent/configuration/high_security_source.rb +7 -7
- data/lib/new_relic/agent/configuration/manager.rb +74 -64
- data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -1
- data/lib/new_relic/agent/configuration/security_policy_source.rb +73 -73
- data/lib/new_relic/agent/configuration/server_source.rb +14 -12
- data/lib/new_relic/agent/configuration/yaml_source.rb +26 -5
- data/lib/new_relic/agent/connect/request_builder.rb +14 -15
- data/lib/new_relic/agent/connect/response_handler.rb +0 -3
- data/lib/new_relic/agent/custom_event_aggregator.rb +9 -9
- data/lib/new_relic/agent/database/explain_plan_helpers.rb +3 -4
- data/lib/new_relic/agent/database/obfuscation_helpers.rb +12 -12
- data/lib/new_relic/agent/database/postgres_explain_obfuscator.rb +2 -2
- data/lib/new_relic/agent/database.rb +30 -31
- data/lib/new_relic/agent/datastores/metric_helper.rb +13 -11
- data/lib/new_relic/agent/datastores/mongo/event_formatter.rb +2 -3
- data/lib/new_relic/agent/datastores/mongo/metric_translator.rb +3 -5
- data/lib/new_relic/agent/datastores/mongo/obfuscator.rb +1 -2
- data/lib/new_relic/agent/datastores/mongo.rb +5 -10
- data/lib/new_relic/agent/datastores/redis.rb +2 -4
- data/lib/new_relic/agent/datastores.rb +7 -9
- data/lib/new_relic/agent/distributed_tracing/cross_app_payload.rb +9 -9
- data/lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb +21 -16
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb +10 -12
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +42 -43
- data/lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb +3 -3
- data/lib/new_relic/agent/distributed_tracing/trace_context.rb +41 -43
- data/lib/new_relic/agent/distributed_tracing/trace_context_payload.rb +25 -25
- data/lib/new_relic/agent/distributed_tracing.rb +17 -18
- data/lib/new_relic/agent/encoding_normalizer.rb +1 -1
- data/lib/new_relic/agent/error_collector.rb +65 -50
- data/lib/new_relic/agent/error_event_aggregator.rb +1 -1
- data/lib/new_relic/agent/error_filter.rb +173 -0
- 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 +6 -7
- data/lib/new_relic/agent/event_listener.rb +0 -1
- data/lib/new_relic/agent/event_loop.rb +14 -14
- data/lib/new_relic/agent/external.rb +1 -34
- data/lib/new_relic/agent/guid_generator.rb +2 -9
- data/lib/new_relic/agent/harvester.rb +3 -4
- data/lib/new_relic/agent/heap.rb +1 -3
- data/lib/new_relic/agent/hostname.rb +16 -10
- data/lib/new_relic/agent/http_clients/abstract.rb +7 -9
- data/lib/new_relic/agent/http_clients/curb_wrappers.rb +1 -5
- data/lib/new_relic/agent/http_clients/excon_wrappers.rb +4 -4
- data/lib/new_relic/agent/http_clients/http_rb_wrappers.rb +3 -3
- data/lib/new_relic/agent/http_clients/httpclient_wrappers.rb +1 -2
- data/lib/new_relic/agent/http_clients/net_http_wrappers.rb +8 -3
- data/lib/new_relic/agent/http_clients/typhoeus_wrappers.rb +2 -3
- data/lib/new_relic/agent/http_clients/uri_util.rb +0 -1
- data/lib/new_relic/agent/instrumentation/action_cable_subscriber.rb +2 -3
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +28 -26
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +5 -7
- data/lib/new_relic/agent/instrumentation/active_job.rb +12 -5
- data/lib/new_relic/agent/instrumentation/active_merchant.rb +17 -3
- data/lib/new_relic/agent/instrumentation/active_record.rb +20 -18
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +56 -46
- data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +28 -25
- data/lib/new_relic/agent/instrumentation/active_record_prepend.rb +3 -3
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +22 -16
- data/lib/new_relic/agent/instrumentation/active_storage.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_support_logger/chain.rb +23 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb +20 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb +12 -0
- data/lib/new_relic/agent/instrumentation/active_support_logger.rb +24 -0
- data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +18 -9
- data/lib/new_relic/agent/instrumentation/authlogic.rb +10 -0
- data/lib/new_relic/agent/instrumentation/bunny/chain.rb +1 -1
- data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +8 -9
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +52 -46
- data/lib/new_relic/agent/instrumentation/curb/chain.rb +20 -21
- data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +34 -38
- data/lib/new_relic/agent/instrumentation/curb/prepend.rb +10 -11
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +22 -10
- data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +5 -7
- data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +5 -9
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +23 -4
- data/lib/new_relic/agent/instrumentation/excon/middleware.rb +2 -2
- data/lib/new_relic/agent/instrumentation/excon.rb +3 -23
- data/lib/new_relic/agent/instrumentation/grape/chain.rb +1 -2
- data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +6 -7
- data/lib/new_relic/agent/instrumentation/grape.rb +2 -3
- data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +2 -3
- data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +0 -1
- data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +0 -2
- data/lib/new_relic/agent/instrumentation/httprb/chain.rb +2 -2
- data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +6 -6
- data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +1 -1
- data/lib/new_relic/agent/instrumentation/ignore_actions.rb +2 -3
- data/lib/new_relic/agent/instrumentation/logger/chain.rb +21 -0
- data/lib/new_relic/agent/instrumentation/logger/instrumentation.rb +58 -0
- data/lib/new_relic/agent/instrumentation/logger/prepend.rb +13 -0
- data/lib/new_relic/agent/instrumentation/logger.rb +26 -0
- data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +7 -2
- data/lib/new_relic/agent/instrumentation/memcache/helper.rb +5 -1
- data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +9 -2
- data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +9 -10
- data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +5 -6
- data/lib/new_relic/agent/instrumentation/mongo.rb +3 -141
- data/lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb +4 -4
- data/lib/new_relic/agent/instrumentation/net_http/chain.rb +3 -4
- data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +5 -5
- data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +4 -4
- data/lib/new_relic/agent/instrumentation/net_http.rb +7 -2
- data/lib/new_relic/agent/instrumentation/notifications_subscriber.rb +2 -3
- data/lib/new_relic/agent/instrumentation/padrino/chain.rb +23 -19
- data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +3 -2
- data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +2 -2
- data/lib/new_relic/agent/instrumentation/padrino.rb +2 -5
- data/lib/new_relic/agent/instrumentation/queue_time.rb +8 -8
- data/lib/new_relic/agent/instrumentation/rack/chain.rb +8 -7
- data/lib/new_relic/agent/instrumentation/rack/helpers.rb +2 -1
- data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +4 -5
- data/lib/new_relic/agent/instrumentation/rack/prepend.rb +2 -2
- data/lib/new_relic/agent/instrumentation/rack.rb +1 -1
- data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +11 -47
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_cable.rb +2 -2
- data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +0 -1
- data/lib/new_relic/agent/instrumentation/rainbows_instrumentation.rb +11 -0
- data/lib/new_relic/agent/instrumentation/rake/chain.rb +0 -5
- data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +6 -6
- data/lib/new_relic/agent/instrumentation/rake.rb +1 -1
- data/lib/new_relic/agent/instrumentation/redis/chain.rb +6 -6
- data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +2 -2
- data/lib/new_relic/agent/instrumentation/redis/prepend.rb +1 -1
- data/lib/new_relic/agent/instrumentation/redis.rb +5 -1
- data/lib/new_relic/agent/instrumentation/resque/chain.rb +2 -3
- data/lib/new_relic/agent/instrumentation/resque/helper.rb +19 -0
- data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +9 -7
- data/lib/new_relic/agent/instrumentation/resque/prepend.rb +1 -2
- data/lib/new_relic/agent/instrumentation/resque.rb +17 -8
- data/lib/new_relic/agent/instrumentation/sequel.rb +7 -9
- data/lib/new_relic/agent/instrumentation/sequel_helper.rb +1 -1
- data/lib/new_relic/agent/instrumentation/sidekiq.rb +22 -1
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +0 -1
- data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +12 -5
- data/lib/new_relic/agent/instrumentation/sinatra.rb +21 -11
- data/lib/new_relic/agent/instrumentation/sunspot.rb +11 -1
- data/lib/new_relic/agent/instrumentation/thread/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/thread/instrumentation.rb +27 -0
- data/lib/new_relic/agent/instrumentation/thread/prepend.rb +22 -0
- data/lib/new_relic/agent/instrumentation/thread.rb +20 -0
- data/lib/new_relic/agent/instrumentation/tilt/chain.rb +24 -0
- data/lib/new_relic/agent/instrumentation/tilt/instrumentation.rb +40 -0
- data/lib/new_relic/agent/instrumentation/tilt/prepend.rb +13 -0
- data/lib/new_relic/agent/instrumentation/tilt.rb +25 -0
- data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +4 -4
- data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +3 -5
- data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +1 -1
- data/lib/new_relic/agent/internal_agent_error.rb +1 -1
- data/lib/new_relic/agent/javascript_instrumentor.rb +38 -33
- data/lib/new_relic/agent/linking_metadata.rb +45 -0
- data/lib/new_relic/agent/local_log_decorator.rb +37 -0
- data/lib/new_relic/agent/log_event_aggregator.rb +234 -0
- data/lib/new_relic/agent/log_priority.rb +20 -0
- data/lib/new_relic/agent/logging.rb +11 -8
- data/lib/new_relic/agent/memory_logger.rb +1 -1
- data/lib/new_relic/agent/messaging.rb +46 -62
- data/lib/new_relic/agent/method_tracer.rb +145 -144
- data/lib/new_relic/agent/method_tracer_helpers.rb +82 -2
- data/lib/new_relic/agent/monitors/cross_app_monitor.rb +21 -13
- data/lib/new_relic/agent/monitors/distributed_tracing_monitor.rb +2 -2
- data/lib/new_relic/agent/monitors/inbound_request_monitor.rb +0 -1
- data/lib/new_relic/agent/monitors/synthetics_monitor.rb +4 -7
- data/lib/new_relic/agent/monitors.rb +1 -2
- data/lib/new_relic/agent/new_relic_service/encoders.rb +4 -4
- 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 +4 -3
- data/lib/new_relic/agent/new_relic_service.rb +61 -53
- data/lib/new_relic/agent/noticible_error.rb +0 -2
- data/lib/new_relic/agent/null_logger.rb +6 -2
- data/lib/new_relic/agent/obfuscator.rb +6 -8
- data/lib/new_relic/agent/parameter_filtering.rb +16 -8
- data/lib/new_relic/agent/payload_metric_mapping.rb +8 -9
- data/lib/new_relic/agent/pipe_channel_manager.rb +15 -12
- data/lib/new_relic/agent/pipe_service.rb +6 -3
- data/lib/new_relic/agent/priority_sampled_buffer.rb +4 -7
- data/lib/new_relic/agent/rules_engine/replacement_rule.rb +9 -9
- data/lib/new_relic/agent/rules_engine/segment_terms_rule.rb +12 -12
- data/lib/new_relic/agent/rules_engine.rb +2 -2
- data/lib/new_relic/agent/sampler.rb +2 -3
- data/lib/new_relic/agent/sampler_collection.rb +2 -3
- data/lib/new_relic/agent/samplers/cpu_sampler.rb +1 -1
- data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +10 -7
- data/lib/new_relic/agent/samplers/memory_sampler.rb +9 -3
- data/lib/new_relic/agent/samplers/vm_sampler.rb +18 -18
- data/lib/new_relic/agent/span_event_aggregator.rb +10 -10
- data/lib/new_relic/agent/span_event_primitive.rb +48 -45
- data/lib/new_relic/agent/sql_sampler.rb +9 -9
- data/lib/new_relic/agent/stats.rb +62 -37
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +7 -9
- data/lib/new_relic/agent/stats_engine/stats_hash.rb +8 -9
- data/lib/new_relic/agent/stats_engine.rb +7 -7
- data/lib/new_relic/agent/synthetics_event_aggregator.rb +1 -2
- data/lib/new_relic/agent/system_info.rb +22 -20
- data/lib/new_relic/agent/threading/agent_thread.rb +4 -5
- data/lib/new_relic/agent/threading/backtrace_node.rb +6 -9
- data/lib/new_relic/agent/threading/backtrace_service.rb +12 -13
- data/lib/new_relic/agent/threading/thread_profile.rb +16 -19
- data/lib/new_relic/agent/tracer.rb +57 -72
- data/lib/new_relic/agent/transaction/abstract_segment.rb +38 -10
- data/lib/new_relic/agent/transaction/datastore_segment.rb +7 -6
- data/lib/new_relic/agent/transaction/distributed_tracer.rb +8 -9
- data/lib/new_relic/agent/transaction/distributed_tracing.rb +21 -22
- data/lib/new_relic/agent/transaction/external_request_segment.rb +6 -5
- data/lib/new_relic/agent/transaction/message_broker_segment.rb +24 -30
- data/lib/new_relic/agent/transaction/request_attributes.rb +7 -7
- data/lib/new_relic/agent/transaction/segment.rb +6 -3
- data/lib/new_relic/agent/transaction/slowest_sample_buffer.rb +0 -2
- data/lib/new_relic/agent/transaction/trace.rb +8 -8
- data/lib/new_relic/agent/transaction/trace_context.rb +14 -16
- data/lib/new_relic/agent/transaction/trace_node.rb +16 -16
- data/lib/new_relic/agent/transaction/tracing.rb +9 -6
- data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +1 -2
- data/lib/new_relic/agent/transaction.rb +132 -119
- data/lib/new_relic/agent/transaction_error_primitive.rb +18 -16
- data/lib/new_relic/agent/transaction_event_aggregator.rb +7 -8
- data/lib/new_relic/agent/transaction_event_primitive.rb +29 -29
- data/lib/new_relic/agent/transaction_event_recorder.rb +1 -1
- data/lib/new_relic/agent/transaction_metrics.rb +8 -7
- data/lib/new_relic/agent/transaction_sampler.rb +0 -1
- data/lib/new_relic/agent/transaction_time_aggregator.rb +11 -11
- data/lib/new_relic/agent/utilization/aws.rb +32 -2
- data/lib/new_relic/agent/utilization/azure.rb +1 -1
- data/lib/new_relic/agent/utilization/vendor.rb +15 -2
- data/lib/new_relic/agent/utilization_data.rb +3 -4
- data/lib/new_relic/agent/vm/monotonic_gc_profiler.rb +1 -1
- data/lib/new_relic/agent/vm/mri_vm.rb +13 -1
- data/lib/new_relic/agent/vm/snapshot.rb +4 -4
- data/lib/new_relic/agent/worker_loop.rb +8 -10
- data/lib/new_relic/agent.rb +36 -41
- data/lib/new_relic/cli/command.rb +15 -17
- data/lib/new_relic/cli/commands/deployments.rb +21 -23
- data/lib/new_relic/cli/commands/install.rb +6 -10
- data/lib/new_relic/coerce.rb +5 -8
- data/lib/new_relic/collection_helper.rb +48 -47
- data/lib/new_relic/constants.rb +0 -4
- data/lib/new_relic/control/class_methods.rb +2 -2
- data/lib/new_relic/control/frameworks/external.rb +1 -1
- data/lib/new_relic/control/frameworks/rails.rb +5 -6
- data/lib/new_relic/control/frameworks/rails3.rb +2 -3
- data/lib/new_relic/control/frameworks/ruby.rb +2 -2
- data/lib/new_relic/control/frameworks/sinatra.rb +6 -0
- data/lib/new_relic/control/instance_methods.rb +4 -5
- data/lib/new_relic/control/instrumentation.rb +35 -5
- data/lib/new_relic/control/server_methods.rb +2 -3
- data/lib/new_relic/control.rb +0 -1
- data/lib/new_relic/dependency_detection.rb +7 -9
- data/lib/new_relic/environment_report.rb +16 -18
- data/lib/new_relic/helper.rb +45 -5
- data/lib/new_relic/language_support.rb +20 -2
- data/lib/new_relic/latest_changes.rb +2 -2
- data/lib/new_relic/local_environment.rb +9 -7
- data/lib/new_relic/metric_data.rb +6 -7
- data/lib/new_relic/metric_spec.rb +3 -3
- data/lib/new_relic/noticed_error.rb +18 -19
- data/lib/new_relic/rack/agent_middleware.rb +2 -2
- data/lib/new_relic/rack/browser_monitoring.rb +9 -9
- data/lib/new_relic/recipes/capistrano3.rb +11 -13
- data/lib/new_relic/recipes/capistrano_legacy.rb +11 -14
- data/lib/new_relic/supportability_helper.rb +2 -2
- data/lib/new_relic/traced_thread.rb +35 -0
- data/lib/new_relic/version.rb +5 -16
- data/lib/newrelic_rpm.rb +10 -34
- data/lib/sequel/extensions/newrelic_instrumentation.rb +4 -7
- data/lib/sequel/plugins/newrelic_instrumentation.rb +3 -9
- data/lib/tasks/all.rb +2 -2
- data/lib/tasks/config.html.erb +14 -25
- data/lib/tasks/config.rake +36 -27
- data/lib/tasks/multiverse.rb +4 -6
- data/lib/tasks/tests.rake +3 -7
- data/newrelic.yml +610 -3
- data/newrelic_rpm.gemspec +14 -14
- data/recipes/newrelic.rb +1 -1
- data/test/agent_helper.rb +98 -59
- metadata +69 -20
- data/ROADMAP.md +0 -24
- data/lib/new_relic/agent/datastores/mongo/statement_formatter.rb +0 -53
- data/lib/new_relic/agent/instrumentation/excon/connection.rb +0 -49
- data/lib/new_relic/agent/instrumentation/merb/controller.rb +0 -44
- data/lib/new_relic/agent/instrumentation/merb/errors.rb +0 -33
- data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +0 -125
- data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +0 -46
- data/lib/new_relic/agent/supported_versions.rb +0 -275
- data/lib/new_relic/control/frameworks/merb.rb +0 -29
data/DOCKER.md
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
# Using Docker with the New Relic Ruby Agent
|
2
|
+
|
3
|
+
These instructions will guide you through the process of setting up Docker for
|
4
|
+
use with developing the New Relic Ruby Agent. The use of Docker containers can
|
5
|
+
provide for a consistent experience free from machine specific issues.
|
6
|
+
|
7
|
+
## Quick Start
|
8
|
+
|
9
|
+
```shell
|
10
|
+
# unit tests (Ruby only)
|
11
|
+
$ docker build -t newrelic_rpm .
|
12
|
+
$ docker run --rm newrelic_rpm
|
13
|
+
|
14
|
+
# or
|
15
|
+
|
16
|
+
# functional tests (MySQL, PostgreSQL, Redis, etc.)
|
17
|
+
$ docker-compose up
|
18
|
+
$ docker-compose exec app bundle exec rake test:all
|
19
|
+
```
|
20
|
+
|
21
|
+
|
22
|
+
## Install Docker
|
23
|
+
|
24
|
+
You will need to have [Docker Desktop](https://www.docker.com/) installed and
|
25
|
+
running on your machine.
|
26
|
+
|
27
|
+
If you are using on macOS and using [Homebrew](https://brew.sh/), Docker can be
|
28
|
+
installed as a cask via:
|
29
|
+
|
30
|
+
```shell
|
31
|
+
$ brew install --cask docker
|
32
|
+
```
|
33
|
+
|
34
|
+
and then launched via the `/Applications/Docker.app` launcher that is installed.
|
35
|
+
|
36
|
+
For alternatives to using macOS with Homebrew, see Docker's
|
37
|
+
[Get Started Guide](https://www.docker.com/get-started).
|
38
|
+
|
39
|
+
|
40
|
+
## Clone the project
|
41
|
+
|
42
|
+
Use git to clone the [newrelic/newrelic-ruby-agent](https://github.com/newrelic/newrelic-ruby-agent)
|
43
|
+
project.
|
44
|
+
|
45
|
+
The [Dockerfile](Dockerfile) and [docker-compose.yml](docker-compose.yml)
|
46
|
+
files are located in the root of the project, where this `DOCKER.md`
|
47
|
+
document resides.
|
48
|
+
|
49
|
+
|
50
|
+
## Using just the Dockerfile (unit tests and standalone dev only)
|
51
|
+
|
52
|
+
The project `Dockerfile` can be used by itself to run the project unit tests.
|
53
|
+
Docker Compose and the project `docker-compose.yml` file will be needed to
|
54
|
+
run functional tests which involve communicating with data systems such as
|
55
|
+
PostgreSQL and Redis.
|
56
|
+
|
57
|
+
To run the unit tests using `Dockerfile` by itself, first change
|
58
|
+
directories to the root of the project, then build an image, and
|
59
|
+
finally run a container from the image:
|
60
|
+
|
61
|
+
```shell
|
62
|
+
$ cd /path/to/project/git/clone
|
63
|
+
$ docker build -t newrelic_rpm .
|
64
|
+
$ docker run --rm newrelic_rpm
|
65
|
+
```
|
66
|
+
|
67
|
+
The `Dockerfile` specifies a default Ruby version to test with. To override this
|
68
|
+
version, pass the `ruby_version` build arg like so when building the image:
|
69
|
+
|
70
|
+
```shell
|
71
|
+
docker build --build-arg ruby_version=2.7 .
|
72
|
+
```
|
73
|
+
|
74
|
+
**Legend:**
|
75
|
+
* `build -t <TAG>` applies a tag to the image during building.
|
76
|
+
* `.` indicates "here" and tells Docker that the `Dockerfile` file can be found
|
77
|
+
in the current directory
|
78
|
+
* `run --rm` tells Docker to remove the container after the tests complete.
|
79
|
+
* `--build-arg ruby_version=<RUBY VERSION>` specifies that a given Ruby version should be used (use MAJOR.MINOR or optionally MAJOR.MINOR.PATCH)
|
80
|
+
|
81
|
+
|
82
|
+
## Using Docker Compose (for functional tests and developing with services)
|
83
|
+
|
84
|
+
Docker Compose launches multiple containers simultaneously to support the
|
85
|
+
running of the functional tests that require a variety of data handling
|
86
|
+
server applications such as PostgreSQL, Redis, memcached, etc. Each one of
|
87
|
+
these server applications uses its own container and then there's a Ruby
|
88
|
+
container (referred to as the "app" container) that runs the Minitest tests
|
89
|
+
while connecting to the other containers.
|
90
|
+
|
91
|
+
In one shell session, change to the root of the project and then bring up all
|
92
|
+
containers with Docker Compose:
|
93
|
+
|
94
|
+
```shell
|
95
|
+
$ docker-compose up
|
96
|
+
```
|
97
|
+
|
98
|
+
By default, `docker-compose` will use the default Ruby version specified in the
|
99
|
+
`Dockerfile` file. To override this version with a custom desired version, set
|
100
|
+
the `RUBY_VERSION` environment variable before calling `docker-compose`,
|
101
|
+
like so:
|
102
|
+
|
103
|
+
```shell
|
104
|
+
RUBY_VERSION=3.0 docker-compose up
|
105
|
+
```
|
106
|
+
|
107
|
+
In a separate shell session (probably in a separate terminal split, tab, or
|
108
|
+
window), execute the 'test:all' rake task to test all standard, environment,
|
109
|
+
and multiverse tests:
|
110
|
+
|
111
|
+
```shell
|
112
|
+
$ docker-compose exec app bundle exec rake test:all
|
113
|
+
```
|
114
|
+
|
115
|
+
In lieu of running the tests, an interactive Bash shell can be
|
116
|
+
launched against the running Ruby app container for development and/or
|
117
|
+
debugging. While the `docker-compose up` shell session is still running,
|
118
|
+
bring up an additional local shell session and run the following:
|
119
|
+
|
120
|
+
```shell
|
121
|
+
$ docker-compose exec app bash
|
122
|
+
```
|
123
|
+
|
124
|
+
You will be dropped at a Bash prompt as the "relic" user, with "ruby" and
|
125
|
+
"bundle" in your PATH.
|
126
|
+
|
127
|
+
|
128
|
+
## Output
|
129
|
+
|
130
|
+
When using Docker Compose, one shell session will produce STDOUT output that
|
131
|
+
pertains to all of the services (MySQL, MongoDB, etc.) and the other shell
|
132
|
+
session will produce STDOUT output related to the Ruby based functional tests.
|
133
|
+
Both streams of output may provide information about any errors or warnings
|
134
|
+
that take place.
|
135
|
+
|
136
|
+
|
137
|
+
## Cleanup
|
138
|
+
|
139
|
+
If the project `Dockerfile` is being used without Docker Compose, then use
|
140
|
+
`docker ps` to show information about containers and `docker images`
|
141
|
+
for information about images. The `docker stop`, `docker kill`, `docker rm`
|
142
|
+
and `docker rmi` commands can be used with the appropriate container and image
|
143
|
+
ids. Run `docker --help` or read through the hosted [CLI documentation](https://docs.docker.com/engine/reference/commandline/docker/).
|
144
|
+
|
145
|
+
When Docker Compose is used, invoking `ctrl-c` in the shell session that is
|
146
|
+
running the `docker-compose up` command should suffice to prompt Docker Compose
|
147
|
+
to shut down all running containers. Otherwise, `docker-compose down` can be
|
148
|
+
ran after the `docker-compose up` process has been stopped. All relevant
|
149
|
+
containers and images can then be optionally discarded using the `docker` CLI
|
150
|
+
commands described in the previous paragraph.
|
151
|
+
|
152
|
+
Use `docker ps -a` to show a list of all containers. Pass a container id to
|
153
|
+
`docker rm` (ex: `docker rm 5c15ee2f1c4f`) to remove it.
|
154
|
+
|
155
|
+
Use `docker images` to show a list of all images. Typically, you'll want to
|
156
|
+
keep these images if you plan on running Docker with them again in the future.
|
157
|
+
If you are done with them, you can pass an image id to `docker rmi` to remove
|
158
|
+
an image (ex: `docker rmi 4253856b2570`).
|
159
|
+
|
160
|
+
## Questions, Feature Requests, Contributions, etc.
|
161
|
+
|
162
|
+
The maintainers of New Relic's Ruby agent project are hopeful that the use of
|
163
|
+
containers and these instructions can provide consistency and a lowered barrier
|
164
|
+
of entry when it comes to providing contributions to the agent project itself.
|
165
|
+
|
166
|
+
For questions, feature requests, proposals to support Podman, PRs to improve
|
167
|
+
behavior or documentation, etc., please see [CONTRIBUTING.md](CONTRIBUTING.md).
|
data/Dockerfile
ADDED
data/Guardfile
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
require './test/multiverse/lib/multiverse/bundler_patch'
|
2
2
|
|
3
|
-
test_folders = Dir.glob("test/new_relic/*").select{|f| File.directory?(f)}
|
4
|
-
test_folders += Dir.glob("test/new_relic/**/*").select{|f| File.directory?(f)}
|
3
|
+
test_folders = Dir.glob("test/new_relic/*").select { |f| File.directory?(f) }
|
4
|
+
test_folders += Dir.glob("test/new_relic/**/*").select { |f| File.directory?(f) }
|
5
5
|
|
6
|
-
rake_lib_path = Bundler.with_unbundled_env{ `bundle exec gem which rake`.chomp.gsub("lib/rake.rb", "lib") }
|
7
|
-
ruby_options = %
|
6
|
+
rake_lib_path = Bundler.with_unbundled_env { `bundle exec gem which rake`.chomp.gsub("lib/rake.rb", "lib") }
|
7
|
+
ruby_options = %(-w -I"#{rake_lib_path}" "#{rake_lib_path}/rake/rake_test_loader.rb")
|
8
8
|
|
9
9
|
guard_options = {
|
10
10
|
spring: "bundle exec ruby #{ruby_options} ",
|
11
|
-
test_folders: ['test/new_relic'] + test_folders,
|
11
|
+
test_folders: ['test/new_relic'] + test_folders,
|
12
12
|
all_after_pass: false,
|
13
13
|
all_on_start: false
|
14
14
|
}
|
15
15
|
|
16
16
|
guard :minitest, guard_options do
|
17
|
-
watch(%r{^lib/(.+)\.rb$})
|
17
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
|
18
18
|
watch(%r{^test/.+_test\.rb$})
|
19
|
-
watch(%r{^test/rum/.*})
|
19
|
+
watch(%r{^test/rum/.*}) { "test/new_relic/rack/browser_monitoring_test.rb" }
|
20
20
|
watch(%r{^test/fixtures/cross_agent_tests/distributed_tracing/(.+).json}) { |m| "test/new_relic/agent/distributed_tracing/#{m[1]}_cross_agent_test.rb" }
|
21
|
-
watch('test/test_helper.rb')
|
21
|
+
watch('test/test_helper.rb') { "test/new_relic" }
|
22
22
|
watch('test/agent_helper.rb') { "test/new_relic" }
|
23
23
|
watch('lib/new_relic/agent/configuration/default_source.rb') { "test/new_relic/agent/configuration/orphan_configuration_test.rb" }
|
24
24
|
watch(%r{^lib/new_relic/agent/transaction/(.+).rb}) { |m| "test/new_relic/agent/distributed_tracing/#{m[1]}_cross_agent_test.rb" }
|
data/LICENSE
CHANGED
@@ -175,10 +175,6 @@
|
|
175
175
|
|
176
176
|
END OF TERMS AND CONDITIONS
|
177
177
|
|
178
|
-
Versions 6.12.0 and above for this project are licensed under
|
179
|
-
Apache 2.0. For prior versions of this project, please see the
|
180
|
-
LICENSE file in the root directory of that version for more information.
|
181
|
-
|
182
178
|
APPENDIX: How to apply the Apache License to your work.
|
183
179
|
|
184
180
|
To apply the Apache License to your work, attach the following
|
@@ -204,5 +200,3 @@
|
|
204
200
|
See the License for the specific language governing permissions and
|
205
201
|
limitations under the License.
|
206
202
|
|
207
|
-
|
208
|
-
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[![Community Plus
|
1
|
+
[![Blue banner - Community Plus: This code is currently maintained by New Relic engineering teams and delivered here in GitHub. See the README for troubleshooting and defect reporting instructions.](https://github.com/newrelic/opensource-website/raw/master/src/images/categories/Community_Plus.png)](https://opensource.newrelic.com/oss-category/#community-plus)
|
2
2
|
|
3
3
|
# New Relic Ruby Agent
|
4
4
|
|
@@ -8,9 +8,11 @@ You can also extend the agent's performance monitoring to
|
|
8
8
|
[collect and analyze business data](https://docs.newrelic.com/docs/agents/ruby-agent/getting-started/introduction-new-relic-ruby#business-data)
|
9
9
|
to help you improve the customer experience and make data-driven business decisions.
|
10
10
|
|
11
|
-
The New Relic Ruby
|
11
|
+
The New Relic Ruby agent is dual-purposed as either a Gem or a Rails plugin,
|
12
12
|
hosted on [github](https://github.com/newrelic/newrelic-ruby-agent).
|
13
13
|
|
14
|
+
[![Gem Version](https://badge.fury.io/rb/newrelic_rpm.svg)](https://badge.fury.io/rb/newrelic_rpm)
|
15
|
+
|
14
16
|
## Supported Environments
|
15
17
|
|
16
18
|
An up-to-date list of Ruby versions and frameworks for the latest agent
|
@@ -21,11 +23,13 @@ Environments" section below.
|
|
21
23
|
|
22
24
|
## Installing and Using
|
23
25
|
|
26
|
+
The latest released gem for the Ruby agent can be found at [Rubygems.org](https://rubygems.org/gems/newrelic_rpm)
|
27
|
+
|
24
28
|
### Quick Start
|
25
29
|
|
26
30
|
#### With Bundler
|
27
31
|
|
28
|
-
For using with Bundler, add the Ruby
|
32
|
+
For using with Bundler, add the Ruby agent to your project's Gemfile.
|
29
33
|
|
30
34
|
```ruby
|
31
35
|
gem 'newrelic_rpm'
|
@@ -67,16 +71,18 @@ For complete documentation on installing the New Relic Ruby agent, see the follo
|
|
67
71
|
* [GAE Flexible Environment](https://docs.newrelic.com/docs/agents/ruby-agent/installation/install-new-relic-ruby-agent-gae-flexible-environment)
|
68
72
|
* [Pure Rack Apps](http://docs.newrelic.com/docs/ruby/rack-middlewares)
|
69
73
|
* [Ruby agent and Heroku](https://docs.newrelic.com/docs/agents/ruby-agent/installation/ruby-agent-heroku)
|
70
|
-
* [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs)
|
74
|
+
* [Background Jobs](https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/monitor-ruby-background-processes)
|
71
75
|
* [Uninstall the Ruby agent](https://docs.newrelic.com/docs/agents/ruby-agent/installation/uninstall-ruby-agent)
|
72
76
|
|
73
77
|
### Recording Deploys
|
74
78
|
|
75
|
-
The Ruby
|
76
|
-
tool or Capistrano recipes. For more information on these features see
|
79
|
+
The Ruby agent supports* recording deployments in New Relic via a command line
|
80
|
+
tool or Capistrano recipes. For more information on these features, see
|
77
81
|
[our deployment documentation](http://docs.newrelic.com/docs/ruby/recording-deployments-with-the-ruby-agent)
|
78
82
|
for more information.
|
79
83
|
|
84
|
+
*There is a [known issue](https://github.com/newrelic/newrelic-ruby-agent/issues/715) that prevents newly generated New Relic API keys from recording deploys.
|
85
|
+
|
80
86
|
## Support
|
81
87
|
|
82
88
|
Should you need assistance with New Relic products, you are in good hands with several support diagnostic tools and support channels.
|
@@ -99,17 +105,14 @@ If the issue has been confirmed as a bug or is a Feature request, please file a
|
|
99
105
|
|
100
106
|
At New Relic we take your privacy and the security of your information seriously, and are committed to protecting your information. We must emphasize the importance of not sharing personal data in public forums, and ask all users to scrub logs and diagnostic information for sensitive information, whether personal, proprietary, or otherwise.
|
101
107
|
|
102
|
-
We define “Personal Data” as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address and email address.
|
108
|
+
We define “Personal Data” as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address, and email address.
|
103
109
|
|
104
110
|
Please review [New Relic’s General Data Privacy Notice](https://newrelic.com/termsandconditions/privacy) for more information.
|
105
111
|
|
106
|
-
## Roadmap
|
107
|
-
See our [roadmap](https://github.com/newrelic/newrelic-ruby-agent/blob/main/ROADMAP.md), to learn more about our product vision, understand our plans, and provide us valuable feedback.
|
108
|
-
|
109
112
|
## Contributing
|
110
113
|
|
111
|
-
We encourage contributions to improve the New Relic Ruby agent! Keep in mind when you submit your pull request, you'll need to sign the CLA via the click-through using CLA-Assistant. You only have to sign the CLA one time per project.
|
112
|
-
If you have any questions, or to execute our corporate CLA
|
114
|
+
We encourage contributions to improve the New Relic Ruby agent! Keep in mind when you submit your pull request, you'll need to sign the Contributor License Agreement (CLA) via the click-through using CLA-Assistant. You only have to sign the CLA one time per project.
|
115
|
+
If you have any questions, or to execute our corporate CLA (required if your contribution is on behalf of a company), please drop us an email at opensource@newrelic.com.
|
113
116
|
|
114
117
|
**A note about vulnerabilities**
|
115
118
|
|
@@ -124,13 +127,12 @@ the [New Relic Ruby agent](https://opensource.newrelic.com/projects/newrelic/new
|
|
124
127
|
|
125
128
|
## License
|
126
129
|
|
127
|
-
|
128
|
-
The New Relic Ruby agent also uses source code from third-party libraries. Full details on which libraries are used and the terms under which they are licensed can be found in the [THIRD_PARTY_NOTICES.md](https://github.com/newrelic/newrelic-ruby-agent/blob/main/THIRD_PARTY_NOTICES.md).
|
130
|
+
As of version 6.12 (released July 16, 2020), the New Relic Ruby agent is licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for a copy of the license. For older agent versions, check the LICENSE file included with the source code.
|
129
131
|
|
130
|
-
|
132
|
+
The New Relic Ruby agent may use source code from third-party libraries. When used, these libraries will be outlined in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
131
133
|
|
132
|
-
Thank
|
134
|
+
## Thank You
|
133
135
|
|
134
|
-
|
136
|
+
Thank you,
|
135
137
|
|
136
|
-
New Relic
|
138
|
+
New Relic Ruby agent team
|
data/Rakefile
CHANGED
@@ -10,16 +10,7 @@ task :test => ['test:newrelic']
|
|
10
10
|
|
11
11
|
namespace :test do
|
12
12
|
desc "Run all tests"
|
13
|
-
task :all => %w
|
14
|
-
|
15
|
-
begin
|
16
|
-
require 'test_bisect'
|
17
|
-
TestBisect::BisectTask.new do |t|
|
18
|
-
t.test_task_name = 'test:newrelic'
|
19
|
-
end
|
20
|
-
rescue LoadError
|
21
|
-
end
|
22
|
-
|
13
|
+
task :all => %w[newrelic multiverse all_compatible_envs]
|
23
14
|
agent_home = File.expand_path(File.dirname(__FILE__))
|
24
15
|
|
25
16
|
desc "Run agent performance tests"
|
@@ -27,14 +18,21 @@ namespace :test do
|
|
27
18
|
require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'performance', 'lib', 'performance'))
|
28
19
|
options = {}
|
29
20
|
options[:suite] = args[:suite] if args[:suite]
|
30
|
-
options[:name]
|
21
|
+
options[:name] = args[:name] if args[:name]
|
31
22
|
Performance::Runner.new(options).run_and_report
|
32
23
|
end
|
33
24
|
|
34
|
-
desc "Run agent within existing mini
|
35
|
-
task :env
|
25
|
+
desc "Run agent within existing mini environment(s): env[name1,name2,name3,etc.]"
|
26
|
+
task :env do |t, args|
|
36
27
|
require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'environments', 'lib', 'environments', 'runner'))
|
37
|
-
Environments::Runner.new(args.
|
28
|
+
Environments::Runner.new(args.to_a).run_and_report
|
29
|
+
end
|
30
|
+
|
31
|
+
desc "Run all mini environment tests known to work with the current Ruby version"
|
32
|
+
task :all_compatible_envs do |t, args|
|
33
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'helpers', 'ruby_rails_mappings'))
|
34
|
+
rails_versions = rails_versions_for_ruby_version(RUBY_VERSION)
|
35
|
+
Rake::Task['test:env'].invoke(*rails_versions)
|
38
36
|
end
|
39
37
|
|
40
38
|
Rake::TestTask.new(:intentional_fail) do |t|
|
@@ -51,15 +49,14 @@ namespace :test do
|
|
51
49
|
|
52
50
|
# Note unit testing task is defined in lib/tasks/tests.rake to facilitate
|
53
51
|
# running them in a rails application environment.
|
54
|
-
|
55
52
|
end
|
56
53
|
|
57
54
|
desc 'Record build number and stage'
|
58
|
-
task :record_build, [
|
55
|
+
task :record_build, [:build_number, :stage] do |t, args|
|
59
56
|
build_string = args.build_number
|
60
57
|
build_string << ".#{args.stage}" unless args.stage.nil? || args.stage.empty?
|
61
58
|
|
62
|
-
gitsha = File.
|
59
|
+
gitsha = File.exist?(".git") ? `git rev-parse HEAD` : "Unknown"
|
63
60
|
gitsha.chomp!
|
64
61
|
|
65
62
|
File.open("lib/new_relic/build.rb", "w") do |f|
|
@@ -110,24 +107,38 @@ task :update_ca_bundle do |t|
|
|
110
107
|
end
|
111
108
|
|
112
109
|
namespace :cross_agent_tests do
|
113
|
-
|
114
|
-
|
110
|
+
CROSS_AGENT_TESTS_UPSTREAM_PATH = File.expand_path(File.join('..', 'cross_agent_tests')).freeze
|
111
|
+
CROSS_AGENT_TESTS_LOCAL_PATH = File.expand_path(File.join('test', 'fixtures', 'cross_agent_tests')).freeze
|
112
|
+
|
113
|
+
def prompt_to_continue(command, destination = 'local')
|
114
|
+
puts "The following rsync command will be executed to update the #{destination} copy of the specs:"
|
115
|
+
puts
|
116
|
+
puts command
|
117
|
+
puts
|
118
|
+
puts "CAUTION: Any unsaved changes that exist within the #{destination} content will be OVERWRITTEN!"
|
119
|
+
if destination.eql?('local')
|
120
|
+
puts 'CAUTION 2: Before continuing, make sure your local repo is on the correct, synced branch!'
|
121
|
+
end
|
122
|
+
puts
|
123
|
+
print "Do you wish to continue? ('y' to continue, return to cancel) [n] "
|
124
|
+
continue = STDIN.gets.chomp
|
125
|
+
if continue.downcase.eql?('y')
|
126
|
+
system(command)
|
127
|
+
else
|
128
|
+
puts 'Cancelled'
|
129
|
+
end
|
130
|
+
end
|
115
131
|
|
116
|
-
# Note: before you pull, make sure your local repo is on the correct, synced branch!
|
117
132
|
desc 'Pull latest changes from cross_agent_tests repo'
|
118
133
|
task :pull do
|
119
|
-
|
120
|
-
|
121
|
-
puts cmd
|
122
|
-
system(cmd)
|
134
|
+
command = " rsync -av --exclude .git #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/ #{CROSS_AGENT_TESTS_LOCAL_PATH}/"
|
135
|
+
prompt_to_continue(command)
|
123
136
|
end
|
124
137
|
|
125
138
|
desc 'Copy changes from embedded cross_agent_tests to official repo working copy'
|
126
139
|
task :push do
|
127
|
-
|
128
|
-
|
129
|
-
puts cmd
|
130
|
-
system(cmd)
|
140
|
+
command = "rsync -av #{CROSS_AGENT_TESTS_LOCAL_PATH}/ #{CROSS_AGENT_TESTS_UPSTREAM_PATH}/"
|
141
|
+
prompt_to_continue(command, 'remote (agent spec repo)')
|
131
142
|
end
|
132
143
|
end
|
133
144
|
|
@@ -137,4 +148,3 @@ task :console do
|
|
137
148
|
ARGV.clear
|
138
149
|
Pry.start
|
139
150
|
end
|
140
|
-
|