├── .build_ignore
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── config.yml
│ ├── feature_request.md
│ └── story.md
├── actions
│ ├── annotate
│ │ ├── README.md
│ │ ├── action.yml
│ │ ├── dist
│ │ │ └── index.js
│ │ ├── index.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ └── pre-commit
│ ├── issue_closer
│ │ ├── .eslintrc.json
│ │ ├── README.md
│ │ ├── action.yml
│ │ ├── dist
│ │ │ └── index.js
│ │ ├── index.js
│ │ └── package.json
│ ├── simplecov-report
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ ├── .keep
│ │ │ └── main.test.ts
│ │ ├── action.yml
│ │ ├── dist
│ │ │ └── index.js
│ │ ├── dummy_coverage
│ │ │ └── .last_run.json
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── main.ts
│ │ │ └── report.ts
│ │ └── tsconfig.json
│ ├── variable-mapper
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── action.yml
│ │ ├── dist
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ ├── licenses.txt
│ │ │ └── sourcemap-register.js
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── exporter.ts
│ │ │ ├── main.ts
│ │ │ └── mapper.ts
│ │ └── tsconfig.json
│ └── workflow-conclusion
│ │ ├── LICENSE
│ │ ├── README.ja.md
│ │ ├── README.md
│ │ ├── action.yml
│ │ ├── build.json
│ │ └── lib
│ │ ├── constant.d.ts
│ │ ├── main.d.ts
│ │ ├── main.js
│ │ ├── process.d.ts
│ │ ├── process.test.d.ts
│ │ └── setup.d.ts
├── dependabot.yml
├── pull_request_template.md
├── versions.yml
└── workflows
│ ├── add_issues_to_project.yml
│ ├── ci.yml
│ ├── ci_cron.yml
│ ├── ci_jruby.yml
│ ├── ci_special.yml
│ ├── config_docs.yml
│ ├── label_community_cards.yml
│ ├── lambda_release.yml
│ ├── performance_tests.yml
│ ├── pr_closed.yml
│ ├── prerelease.yml
│ ├── release.yml
│ ├── release_notes.yml
│ ├── release_pr.yml
│ ├── repolinter.yml
│ ├── scripts
│ ├── generate_release_notes.rb
│ ├── rubygems-authenticate.py
│ ├── rubygems-publish.rb
│ ├── setup_bundler
│ └── slack_notifications
│ │ ├── README.md
│ │ ├── gem_notifier.rb
│ │ ├── slack_notifier.rb
│ │ └── supported_gems.txt
│ └── slack_notifications.yml
├── .gitignore
├── .rubocop.yml
├── .rubocop_todo.yml
├── .simplecov
├── .snyk
├── .yardopts
├── Brewfile
├── CHANGELOG.md
├── CONTRIBUTING.md
├── DOCKER.md
├── Dockerfile
├── Gemfile
├── Guardfile
├── LICENSE
├── README.md
├── Rakefile
├── THIRD_PARTY_NOTICES.md
├── Thorfile
├── bin
├── newrelic
├── newrelic_rpm
└── nrdebug
├── docker-compose.yml
├── infinite_tracing
├── .gitignore
├── CHANGELOG.md
├── Gemfile
├── Rakefile
├── lib
│ ├── infinite_tracing
│ │ ├── agent_integrations.rb
│ │ ├── agent_integrations
│ │ │ ├── agent.rb
│ │ │ ├── datastore_segment.rb
│ │ │ ├── external_request_segment.rb
│ │ │ └── segment.rb
│ │ ├── channel.rb
│ │ ├── client.rb
│ │ ├── config.rb
│ │ ├── connection.rb
│ │ ├── constants.rb
│ │ ├── proto.rb
│ │ ├── proto
│ │ │ ├── infinite_tracing_pb.rb
│ │ │ └── infinite_tracing_services_pb.rb
│ │ ├── record_status_handler.rb
│ │ ├── streaming_buffer.rb
│ │ ├── suspended_streaming_buffer.rb
│ │ ├── transformer.rb
│ │ ├── version.rb
│ │ └── worker.rb
│ ├── newrelic
│ │ └── infinite_tracing.rb
│ └── proto
│ │ └── infinite_tracing.proto
├── newrelic-infinite_tracing.gemspec
├── tasks
│ ├── all.rb
│ ├── helpers
│ │ └── license.rb
│ └── proto.rake
└── test
│ ├── fixtures
│ └── span_events
│ │ ├── deep_unscoped_with_error.yml
│ │ ├── external_expected_error_and_retried.yml
│ │ ├── external_ok.yml
│ │ ├── external_redirect.yml
│ │ ├── single.yml
│ │ ├── single_full_attributes.yml
│ │ ├── single_with_agent_attributes.yml
│ │ └── single_with_user_attributes.yml
│ ├── infinite_tracing
│ ├── agent_integrations
│ │ ├── agent_test.rb
│ │ ├── datastore_segment_test.rb
│ │ ├── external_request_segment_test.rb
│ │ └── segment_test.rb
│ ├── channel_test.rb
│ ├── client_test.rb
│ ├── config_test.rb
│ ├── connection_test.rb
│ ├── record_status_handler_test.rb
│ ├── streaming_buffer_test.rb
│ ├── suspended_streaming_buffer_test.rb
│ ├── transformer_test.rb
│ └── worker_test.rb
│ ├── infinite_tracing_test.rb
│ ├── support
│ ├── enumerator_queue.rb
│ ├── fake_trace_observer_helpers.rb
│ ├── fixtures.rb
│ └── server_response_simulator.rb
│ └── test_helper.rb
├── init.rb
├── install.rb
├── lefthook.yml
├── lib
├── boot
│ └── strap.rb
├── new_relic
│ ├── agent.rb
│ ├── agent
│ │ ├── adaptive_sampler.rb
│ │ ├── agent.rb
│ │ ├── agent_helpers
│ │ │ ├── connect.rb
│ │ │ ├── harvest.rb
│ │ │ ├── shutdown.rb
│ │ │ ├── special_startup.rb
│ │ │ ├── start_worker_thread.rb
│ │ │ ├── startup.rb
│ │ │ └── transmit.rb
│ │ ├── agent_logger.rb
│ │ ├── attribute_filter.rb
│ │ ├── attribute_pre_filtering.rb
│ │ ├── attribute_processing.rb
│ │ ├── attributes.rb
│ │ ├── audit_logger.rb
│ │ ├── autostart.rb
│ │ ├── aws.rb
│ │ ├── chained_call.rb
│ │ ├── commands
│ │ │ ├── agent_command.rb
│ │ │ ├── agent_command_router.rb
│ │ │ └── thread_profiler_session.rb
│ │ ├── configuration.rb
│ │ ├── configuration
│ │ │ ├── default_source.rb
│ │ │ ├── dotted_hash.rb
│ │ │ ├── environment_source.rb
│ │ │ ├── event_harvest_config.rb
│ │ │ ├── high_security_source.rb
│ │ │ ├── manager.rb
│ │ │ ├── manual_source.rb
│ │ │ ├── mask_defaults.rb
│ │ │ ├── security_policy_source.rb
│ │ │ ├── server_source.rb
│ │ │ └── yaml_source.rb
│ │ ├── connect
│ │ │ ├── request_builder.rb
│ │ │ └── response_handler.rb
│ │ ├── custom_event_aggregator.rb
│ │ ├── database.rb
│ │ ├── database
│ │ │ ├── explain_plan_helpers.rb
│ │ │ ├── obfuscation_helpers.rb
│ │ │ ├── obfuscator.rb
│ │ │ └── postgres_explain_obfuscator.rb
│ │ ├── database_adapter.rb
│ │ ├── datastores.rb
│ │ ├── datastores
│ │ │ ├── metric_helper.rb
│ │ │ ├── mongo.rb
│ │ │ ├── mongo
│ │ │ │ ├── event_formatter.rb
│ │ │ │ └── metric_translator.rb
│ │ │ ├── nosql_obfuscator.rb
│ │ │ └── redis.rb
│ │ ├── deprecator.rb
│ │ ├── distributed_tracing.rb
│ │ ├── distributed_tracing
│ │ │ ├── cross_app_payload.rb
│ │ │ ├── cross_app_tracing.rb
│ │ │ ├── distributed_trace_attributes.rb
│ │ │ ├── distributed_trace_metrics.rb
│ │ │ ├── distributed_trace_payload.rb
│ │ │ ├── distributed_trace_transport_type.rb
│ │ │ ├── trace_context.rb
│ │ │ └── trace_context_payload.rb
│ │ ├── encoding_normalizer.rb
│ │ ├── error_collector.rb
│ │ ├── error_event_aggregator.rb
│ │ ├── error_filter.rb
│ │ ├── error_trace_aggregator.rb
│ │ ├── event_aggregator.rb
│ │ ├── event_buffer.rb
│ │ ├── event_listener.rb
│ │ ├── event_loop.rb
│ │ ├── external.rb
│ │ ├── guid_generator.rb
│ │ ├── harvester.rb
│ │ ├── health_check.rb
│ │ ├── heap.rb
│ │ ├── hostname.rb
│ │ ├── http_clients
│ │ │ ├── abstract.rb
│ │ │ ├── async_http_wrappers.rb
│ │ │ ├── curb_wrappers.rb
│ │ │ ├── ethon_wrappers.rb
│ │ │ ├── excon_wrappers.rb
│ │ │ ├── http_rb_wrappers.rb
│ │ │ ├── httpclient_wrappers.rb
│ │ │ ├── httpx_wrappers.rb
│ │ │ ├── net_http_wrappers.rb
│ │ │ ├── typhoeus_wrappers.rb
│ │ │ └── uri_util.rb
│ │ ├── instrumentation.rb
│ │ ├── instrumentation
│ │ │ ├── action_cable_subscriber.rb
│ │ │ ├── action_controller_other_subscriber.rb
│ │ │ ├── action_controller_subscriber.rb
│ │ │ ├── action_dispatch.rb
│ │ │ ├── action_dispatch_subscriber.rb
│ │ │ ├── action_mailbox.rb
│ │ │ ├── action_mailbox_subscriber.rb
│ │ │ ├── action_mailer.rb
│ │ │ ├── action_mailer_subscriber.rb
│ │ │ ├── action_view_subscriber.rb
│ │ │ ├── active_job.rb
│ │ │ ├── active_job_subscriber.rb
│ │ │ ├── active_merchant.rb
│ │ │ ├── active_record.rb
│ │ │ ├── active_record_helper.rb
│ │ │ ├── active_record_notifications.rb
│ │ │ ├── active_record_prepend.rb
│ │ │ ├── active_record_subscriber.rb
│ │ │ ├── active_storage.rb
│ │ │ ├── active_storage_subscriber.rb
│ │ │ ├── active_support.rb
│ │ │ ├── active_support_broadcast_logger.rb
│ │ │ ├── active_support_broadcast_logger
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── active_support_logger.rb
│ │ │ ├── active_support_logger
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── active_support_subscriber.rb
│ │ │ ├── async_http.rb
│ │ │ ├── async_http
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── aws_sdk_firehose.rb
│ │ │ ├── aws_sdk_firehose
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── aws_sdk_kinesis.rb
│ │ │ ├── aws_sdk_kinesis
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── aws_sdk_lambda.rb
│ │ │ ├── aws_sdk_lambda
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── aws_sqs.rb
│ │ │ ├── aws_sqs
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── bunny.rb
│ │ │ ├── bunny
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── concurrent_ruby.rb
│ │ │ ├── concurrent_ruby
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── controller_instrumentation.rb
│ │ │ ├── curb.rb
│ │ │ ├── curb
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── custom_events.rb
│ │ │ ├── custom_events_subscriber.rb
│ │ │ ├── delayed_job
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── delayed_job_instrumentation.rb
│ │ │ ├── dynamodb.rb
│ │ │ ├── dynamodb
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── elasticsearch.rb
│ │ │ ├── elasticsearch
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── ethon.rb
│ │ │ ├── ethon
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── excon.rb
│ │ │ ├── excon
│ │ │ │ └── middleware.rb
│ │ │ ├── fiber.rb
│ │ │ ├── fiber
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── grape.rb
│ │ │ ├── grape
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── grpc
│ │ │ │ ├── client
│ │ │ │ │ ├── chain.rb
│ │ │ │ │ ├── instrumentation.rb
│ │ │ │ │ ├── prepend.rb
│ │ │ │ │ └── request_wrapper.rb
│ │ │ │ ├── helper.rb
│ │ │ │ └── server
│ │ │ │ │ ├── chain.rb
│ │ │ │ │ ├── instrumentation.rb
│ │ │ │ │ ├── rpc_desc_prepend.rb
│ │ │ │ │ └── rpc_server_prepend.rb
│ │ │ ├── grpc_client.rb
│ │ │ ├── grpc_server.rb
│ │ │ ├── httpclient.rb
│ │ │ ├── httpclient
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── httprb.rb
│ │ │ ├── httprb
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── httpx.rb
│ │ │ ├── httpx
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── ignore_actions.rb
│ │ │ ├── logger.rb
│ │ │ ├── logger
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── logstasher.rb
│ │ │ ├── logstasher
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── memcache.rb
│ │ │ ├── memcache
│ │ │ │ ├── chain.rb
│ │ │ │ ├── dalli.rb
│ │ │ │ ├── helper.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── middleware_proxy.rb
│ │ │ ├── middleware_tracing.rb
│ │ │ ├── mongo.rb
│ │ │ ├── mongodb_command_subscriber.rb
│ │ │ ├── net_http.rb
│ │ │ ├── net_http
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── notifications_subscriber.rb
│ │ │ ├── opensearch.rb
│ │ │ ├── opensearch
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── padrino.rb
│ │ │ ├── padrino
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── passenger_instrumentation.rb
│ │ │ ├── queue_time.rb
│ │ │ ├── rack.rb
│ │ │ ├── rack
│ │ │ │ ├── chain.rb
│ │ │ │ ├── helpers.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── rails3
│ │ │ │ └── action_controller.rb
│ │ │ ├── rails_middleware.rb
│ │ │ ├── rails_notifications
│ │ │ │ ├── action_cable.rb
│ │ │ │ ├── action_controller.rb
│ │ │ │ ├── action_view.rb
│ │ │ │ └── custom_events.rb
│ │ │ ├── rake.rb
│ │ │ ├── rake
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── rdkafka.rb
│ │ │ ├── rdkafka
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── redis.rb
│ │ │ ├── redis
│ │ │ │ ├── chain.rb
│ │ │ │ ├── cluster_middleware.rb
│ │ │ │ ├── constants.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ ├── middleware.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── resque.rb
│ │ │ ├── resque
│ │ │ │ ├── chain.rb
│ │ │ │ ├── helper.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── roda.rb
│ │ │ ├── roda
│ │ │ │ ├── chain.rb
│ │ │ │ ├── ignorer.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ ├── prepend.rb
│ │ │ │ └── roda_transaction_namer.rb
│ │ │ ├── ruby_kafka.rb
│ │ │ ├── ruby_kafka
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── ruby_openai.rb
│ │ │ ├── ruby_openai
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── sequel.rb
│ │ │ ├── sequel_helper.rb
│ │ │ ├── sidekiq.rb
│ │ │ ├── sidekiq
│ │ │ │ ├── client.rb
│ │ │ │ ├── extensions
│ │ │ │ │ ├── delay_extensions.rb
│ │ │ │ │ └── delayed_class.rb
│ │ │ │ └── server.rb
│ │ │ ├── sinatra.rb
│ │ │ ├── sinatra
│ │ │ │ ├── chain.rb
│ │ │ │ ├── ignorer.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ ├── prepend.rb
│ │ │ │ └── transaction_namer.rb
│ │ │ ├── stripe.rb
│ │ │ ├── stripe_subscriber.rb
│ │ │ ├── thread.rb
│ │ │ ├── thread
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── tilt.rb
│ │ │ ├── tilt
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── typhoeus.rb
│ │ │ ├── typhoeus
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ │ ├── view_component.rb
│ │ │ └── view_component
│ │ │ │ ├── chain.rb
│ │ │ │ ├── instrumentation.rb
│ │ │ │ └── prepend.rb
│ │ ├── internal_agent_error.rb
│ │ ├── javascript_instrumentor.rb
│ │ ├── linking_metadata.rb
│ │ ├── llm.rb
│ │ ├── llm
│ │ │ ├── chat_completion_message.rb
│ │ │ ├── chat_completion_summary.rb
│ │ │ ├── embedding.rb
│ │ │ ├── llm_event.rb
│ │ │ └── response_headers.rb
│ │ ├── local_log_decorator.rb
│ │ ├── log_event_aggregator.rb
│ │ ├── log_event_attributes.rb
│ │ ├── log_once.rb
│ │ ├── log_priority.rb
│ │ ├── logging.rb
│ │ ├── memory_logger.rb
│ │ ├── messaging.rb
│ │ ├── method_tracer.rb
│ │ ├── method_tracer_helpers.rb
│ │ ├── monitors.rb
│ │ ├── monitors
│ │ │ ├── cross_app_monitor.rb
│ │ │ ├── distributed_tracing_monitor.rb
│ │ │ ├── inbound_request_monitor.rb
│ │ │ └── synthetics_monitor.rb
│ │ ├── new_relic_service.rb
│ │ ├── new_relic_service
│ │ │ ├── encoders.rb
│ │ │ ├── json_marshaller.rb
│ │ │ ├── marshaller.rb
│ │ │ └── security_policy_settings.rb
│ │ ├── noticeable_error.rb
│ │ ├── null_logger.rb
│ │ ├── obfuscator.rb
│ │ ├── opentelemetry
│ │ │ ├── context.rb
│ │ │ ├── context
│ │ │ │ ├── propagation.rb
│ │ │ │ └── propagation
│ │ │ │ │ └── trace_propagator.rb
│ │ │ ├── trace.rb
│ │ │ ├── trace
│ │ │ │ ├── span.rb
│ │ │ │ ├── tracer.rb
│ │ │ │ └── tracer_provider.rb
│ │ │ └── transaction_patch.rb
│ │ ├── opentelemetry_bridge.rb
│ │ ├── parameter_filtering.rb
│ │ ├── payload_metric_mapping.rb
│ │ ├── pipe_channel_manager.rb
│ │ ├── pipe_service.rb
│ │ ├── prepend_supportability.rb
│ │ ├── priority_sampled_buffer.rb
│ │ ├── rules_engine.rb
│ │ ├── rules_engine
│ │ │ ├── replacement_rule.rb
│ │ │ └── segment_terms_rule.rb
│ │ ├── sampler.rb
│ │ ├── sampler_collection.rb
│ │ ├── samplers
│ │ │ ├── cpu_sampler.rb
│ │ │ ├── delayed_job_sampler.rb
│ │ │ ├── memory_sampler.rb
│ │ │ ├── object_sampler.rb
│ │ │ └── vm_sampler.rb
│ │ ├── serverless_handler.rb
│ │ ├── serverless_handler_event_sources.json
│ │ ├── serverless_handler_event_sources.rb
│ │ ├── span_event_aggregator.rb
│ │ ├── span_event_primitive.rb
│ │ ├── sql_sampler.rb
│ │ ├── stats.rb
│ │ ├── stats_engine.rb
│ │ ├── stats_engine
│ │ │ ├── gc_profiler.rb
│ │ │ └── stats_hash.rb
│ │ ├── synthetics_event_aggregator.rb
│ │ ├── system_info.rb
│ │ ├── threading
│ │ │ ├── agent_thread.rb
│ │ │ ├── backtrace_node.rb
│ │ │ ├── backtrace_service.rb
│ │ │ └── thread_profile.rb
│ │ ├── timestamp_sampled_buffer.rb
│ │ ├── tracer.rb
│ │ ├── transaction.rb
│ │ ├── transaction
│ │ │ ├── abstract_segment.rb
│ │ │ ├── datastore_segment.rb
│ │ │ ├── distributed_tracer.rb
│ │ │ ├── distributed_tracing.rb
│ │ │ ├── external_request_segment.rb
│ │ │ ├── message_broker_segment.rb
│ │ │ ├── request_attributes.rb
│ │ │ ├── segment.rb
│ │ │ ├── slowest_sample_buffer.rb
│ │ │ ├── synthetics_sample_buffer.rb
│ │ │ ├── trace.rb
│ │ │ ├── trace_builder.rb
│ │ │ ├── trace_context.rb
│ │ │ ├── trace_node.rb
│ │ │ ├── tracing.rb
│ │ │ └── transaction_sample_buffer.rb
│ │ ├── transaction_error_primitive.rb
│ │ ├── transaction_event_aggregator.rb
│ │ ├── transaction_event_primitive.rb
│ │ ├── transaction_event_recorder.rb
│ │ ├── transaction_metrics.rb
│ │ ├── transaction_sampler.rb
│ │ ├── transaction_time_aggregator.rb
│ │ ├── utilization
│ │ │ ├── aws.rb
│ │ │ ├── azure.rb
│ │ │ ├── ecs.rb
│ │ │ ├── ecs_v4.rb
│ │ │ ├── gcp.rb
│ │ │ ├── pcf.rb
│ │ │ └── vendor.rb
│ │ ├── utilization_data.rb
│ │ ├── vm.rb
│ │ ├── vm
│ │ │ ├── c_ruby_vm.rb
│ │ │ ├── jruby_vm.rb
│ │ │ ├── monotonic_gc_profiler.rb
│ │ │ └── snapshot.rb
│ │ └── worker_loop.rb
│ ├── base64.rb
│ ├── cli
│ │ ├── command.rb
│ │ └── commands
│ │ │ ├── deployments.rb
│ │ │ └── install.rb
│ ├── coerce.rb
│ ├── collection_helper.rb
│ ├── constants.rb
│ ├── control.rb
│ ├── control
│ │ ├── class_methods.rb
│ │ ├── frameworks.rb
│ │ ├── frameworks
│ │ │ ├── external.rb
│ │ │ ├── grape.rb
│ │ │ ├── padrino.rb
│ │ │ ├── rails.rb
│ │ │ ├── rails3.rb
│ │ │ ├── rails4.rb
│ │ │ ├── rails_notifications.rb
│ │ │ ├── roda.rb
│ │ │ ├── ruby.rb
│ │ │ └── sinatra.rb
│ │ ├── instance_methods.rb
│ │ ├── instrumentation.rb
│ │ ├── private_instance_methods.rb
│ │ ├── security_interface.rb
│ │ └── server_methods.rb
│ ├── delayed_job_injection.rb
│ ├── dependency_detection.rb
│ ├── environment_report.rb
│ ├── helper.rb
│ ├── language_support.rb
│ ├── latest_changes.rb
│ ├── local_environment.rb
│ ├── metric_data.rb
│ ├── metric_spec.rb
│ ├── noticed_error.rb
│ ├── rack.rb
│ ├── rack
│ │ ├── agent_hooks.rb
│ │ ├── agent_middleware.rb
│ │ └── browser_monitoring.rb
│ ├── recipes.rb
│ ├── recipes
│ │ ├── capistrano3.rb
│ │ ├── capistrano_legacy.rb
│ │ └── helpers
│ │ │ └── send_deployment.rb
│ ├── supportability_helper.rb
│ ├── thread_local_storage.rb
│ ├── traced_thread.rb
│ └── version.rb
├── newrelic_rpm.rb
├── sequel
│ ├── extensions
│ │ └── new_relic_instrumentation.rb
│ └── plugins
│ │ └── new_relic_instrumentation.rb
└── tasks
│ ├── all.rb
│ ├── bump_version.rake
│ ├── config.rake
│ ├── coverage_report.rake
│ ├── gha.rake
│ ├── helpers
│ ├── config.html.erb
│ ├── config.text.erb
│ ├── format.rb
│ ├── matches.rb
│ ├── newrelicyml.rb
│ ├── prompt.rb
│ └── version_bump.rb
│ ├── install.rake
│ ├── instrumentation_generator
│ ├── README.md
│ ├── TODO.md
│ ├── instrumentation.thor
│ └── templates
│ │ ├── Envfile.tt
│ │ ├── chain.tt
│ │ ├── chain_method.tt
│ │ ├── dependency_detection.tt
│ │ ├── instrumentation.tt
│ │ ├── instrumentation_method.tt
│ │ ├── newrelic.yml.tt
│ │ ├── prepend.tt
│ │ ├── prepend_method.tt
│ │ └── test.tt
│ ├── multiverse.rake
│ ├── multiverse.rb
│ ├── newrelic.rb
│ ├── newrelicyml.rake
│ └── tests.rake
├── newrelic.yml
├── newrelic_rpm.gemspec
├── recipes
└── newrelic.rb
└── test
├── README.md
├── agent_helper.rb
├── config
├── newrelic.yml
├── test.cert.crt
├── test.cert.key
├── test.cert.readme
└── test_control.rb
├── environments
├── .gitignore
├── lib
│ └── environments
│ │ └── runner.rb
├── norails
│ ├── Gemfile
│ └── Rakefile
├── rails40
│ ├── .bundler-version
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails41
│ ├── .bundler-version
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails42
│ ├── .bundler-version
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails50
│ ├── .bundler-version
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails51
│ ├── .bundler-version
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails52
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails60
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ ├── initializers
│ │ │ └── test.rb
│ │ └── psych4_monkeypatch.rb
│ └── db
│ │ └── schema.rb
├── rails61
│ ├── Gemfile
│ ├── Rakefile
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails70
│ ├── Gemfile
│ ├── Rakefile
│ ├── app
│ │ ├── assets
│ │ │ └── config
│ │ │ │ └── manifest.js
│ │ └── controllers
│ │ │ ├── application_controller.rb
│ │ │ └── no_method_controller.rb
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails71
│ ├── Gemfile
│ ├── Rakefile
│ ├── app
│ │ ├── assets
│ │ │ └── config
│ │ │ │ └── manifest.js
│ │ └── controllers
│ │ │ ├── application_controller.rb
│ │ │ └── no_method_controller.rb
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails72
│ ├── Gemfile
│ ├── Rakefile
│ ├── app
│ │ ├── assets
│ │ │ └── config
│ │ │ │ └── manifest.js
│ │ └── controllers
│ │ │ ├── application_controller.rb
│ │ │ └── no_method_controller.rb
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
├── rails80
│ ├── Gemfile
│ ├── Rakefile
│ ├── app
│ │ ├── assets
│ │ │ └── config
│ │ │ │ └── manifest.js
│ │ └── controllers
│ │ │ ├── application_controller.rb
│ │ │ └── no_method_controller.rb
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ └── initializers
│ │ │ └── test.rb
│ └── db
│ │ └── schema.rb
└── railsedge
│ ├── Gemfile
│ ├── Rakefile
│ ├── app
│ ├── assets
│ │ └── config
│ │ │ └── manifest.js
│ └── controllers
│ │ ├── application_controller.rb
│ │ └── no_method_controller.rb
│ ├── config
│ ├── application.rb
│ ├── boot.rb
│ ├── database.yml
│ ├── environment.rb
│ └── initializers
│ │ └── test.rb
│ └── db
│ └── schema.rb
├── fixtures
├── cross_agent_tests
│ ├── .gitignore
│ ├── README.md
│ ├── attribute_configuration.json
│ ├── aws.json
│ ├── cat
│ │ ├── README.md
│ │ ├── cat_map.json
│ │ └── path_hashing.json
│ ├── cat_map.json
│ ├── collector_hostname.json
│ ├── data_collection_server_configuration.json
│ ├── data_transport
│ │ ├── data_transport.json
│ │ └── data_transport.md
│ ├── datastores
│ │ ├── README.md
│ │ ├── datastore_api.json
│ │ └── datastore_instances.json
│ ├── distributed_tracing
│ │ ├── distributed_tracing.json
│ │ └── trace_context.json
│ ├── docker_container_id
│ │ ├── README.md
│ │ ├── cases.json
│ │ ├── docker-0.9.1.txt
│ │ ├── docker-1.0.0.txt
│ │ ├── docker-1.1.2-lxc-driver.txt
│ │ ├── docker-1.1.2-native-driver-fs.txt
│ │ ├── docker-1.1.2-native-driver-systemd.txt
│ │ ├── docker-1.3.txt
│ │ ├── docker-custom-prefix.txt
│ │ ├── docker-gcp.txt
│ │ ├── docker-too-long.txt
│ │ ├── empty.txt
│ │ ├── heroku.txt
│ │ ├── invalid-characters.txt
│ │ ├── invalid-length.txt
│ │ ├── no_cpu_subsystem.txt
│ │ ├── ubuntu-14.04-lxc-container.txt
│ │ ├── ubuntu-14.04-no-container.txt
│ │ └── ubuntu-14.10-no-container.txt
│ ├── docker_container_id_v2
│ │ ├── cases.json
│ │ ├── docker-20.10.16.txt
│ │ ├── docker-24.0.2.txt
│ │ ├── docker-too-long.txt
│ │ ├── empty.txt
│ │ ├── invalid-characters.txt
│ │ └── invalid-length.txt
│ ├── hybrid_agent.json
│ ├── labels.json
│ ├── lambda
│ │ └── event_source_info.json
│ ├── language_agents_security_policies.json
│ ├── postgres_explain_obfuscation
│ │ ├── README.md
│ │ ├── basic_where.colon_obfuscated.txt
│ │ ├── basic_where.explain.txt
│ │ ├── basic_where.obfuscated.txt
│ │ ├── basic_where.query.txt
│ │ ├── current_date.colon_obfuscated.txt
│ │ ├── current_date.explain.txt
│ │ ├── current_date.obfuscated.txt
│ │ ├── current_date.query.txt
│ │ ├── date.colon_obfuscated.txt
│ │ ├── date.explain.txt
│ │ ├── date.obfuscated.txt
│ │ ├── date.query.txt
│ │ ├── embedded_newline.colon_obfuscated.txt
│ │ ├── embedded_newline.explain.txt
│ │ ├── embedded_newline.obfuscated.txt
│ │ ├── embedded_newline.query.txt
│ │ ├── embedded_quote.colon_obfuscated.txt
│ │ ├── embedded_quote.explain.txt
│ │ ├── embedded_quote.obfuscated.txt
│ │ ├── embedded_quote.query.txt
│ │ ├── floating_point.colon_obfuscated.txt
│ │ ├── floating_point.explain.txt
│ │ ├── floating_point.obfuscated.txt
│ │ ├── floating_point.query.txt
│ │ ├── function_with_strings.colon_obfuscated.txt
│ │ ├── function_with_strings.explain.txt
│ │ ├── function_with_strings.obfuscated.txt
│ │ ├── function_with_strings.query.txt
│ │ ├── quote_in_table_name.colon_obfuscated.txt
│ │ ├── quote_in_table_name.explain.txt
│ │ ├── quote_in_table_name.obfuscated.txt
│ │ ├── quote_in_table_name.query.txt
│ │ ├── subplan.colon_obfuscated.txt
│ │ ├── subplan.explain.txt
│ │ ├── subplan.obfuscated.txt
│ │ ├── subplan.query.txt
│ │ ├── where_with_integer.colon_obfuscated.txt
│ │ ├── where_with_integer.explain.txt
│ │ ├── where_with_integer.obfuscated.txt
│ │ ├── where_with_integer.query.txt
│ │ ├── where_with_regex_chars.colon_obfuscated.txt
│ │ ├── where_with_regex_chars.explain.txt
│ │ ├── where_with_regex_chars.obfuscated.txt
│ │ ├── where_with_regex_chars.query.txt
│ │ ├── where_with_substring.colon_obfuscated.txt
│ │ ├── where_with_substring.explain.txt
│ │ ├── where_with_substring.obfuscated.txt
│ │ ├── where_with_substring.query.txt
│ │ ├── with_escape_case1.colon_obfuscated.txt
│ │ ├── with_escape_case1.explain.txt
│ │ ├── with_escape_case1.obfuscated.txt
│ │ ├── with_escape_case1.query.txt
│ │ ├── with_escape_case2.colon_obfuscated.txt
│ │ ├── with_escape_case2.explain.txt
│ │ ├── with_escape_case2.obfuscated.txt
│ │ ├── with_escape_case2.query.txt
│ │ ├── with_escape_case3.colon_obfuscated.txt
│ │ ├── with_escape_case3.explain.txt
│ │ ├── with_escape_case3.obfuscated.txt
│ │ ├── with_escape_case3.query.txt
│ │ ├── with_escape_case4.colon_obfuscated.txt
│ │ ├── with_escape_case4.explain.txt
│ │ ├── with_escape_case4.obfuscated.txt
│ │ ├── with_escape_case4.query.txt
│ │ ├── with_escape_case5.colon_obfuscated.txt
│ │ ├── with_escape_case5.explain.txt
│ │ ├── with_escape_case5.obfuscated.txt
│ │ ├── with_escape_case5.query.txt
│ │ ├── with_escape_case6.colon_obfuscated.txt
│ │ ├── with_escape_case6.explain.txt
│ │ ├── with_escape_case6.obfuscated.txt
│ │ ├── with_escape_case6.query.txt
│ │ ├── with_escape_case7.colon_obfuscated.txt
│ │ ├── with_escape_case7.explain.txt
│ │ ├── with_escape_case7.obfuscated.txt
│ │ ├── with_escape_case7.query.txt
│ │ ├── with_escape_case8.colon_obfuscated.txt
│ │ ├── with_escape_case8.explain.txt
│ │ ├── with_escape_case8.obfuscated.txt
│ │ ├── with_escape_case8.query.txt
│ │ ├── with_escape_case9.colon_obfuscated.txt
│ │ ├── with_escape_case9.explain.txt
│ │ ├── with_escape_case9.obfuscated.txt
│ │ └── with_escape_case9.query.txt
│ ├── proc_cpuinfo
│ │ ├── 1pack_1core_1logical.txt
│ │ ├── 1pack_1core_2logical.txt
│ │ ├── 1pack_2core_2logical.txt
│ │ ├── 1pack_4core_4logical.txt
│ │ ├── 2pack_12core_24logical.txt
│ │ ├── 2pack_20core_40logical.txt
│ │ ├── 2pack_2core_2logical.txt
│ │ ├── 2pack_2core_4logical.txt
│ │ ├── 2pack_4core_4logical.txt
│ │ ├── 4pack_4core_4logical.txt
│ │ ├── 8pack_8core_8logical.txt
│ │ ├── README.md
│ │ ├── Xpack_Xcore_2logical.txt
│ │ └── malformed_file.txt
│ ├── proc_meminfo
│ │ ├── README.md
│ │ └── meminfo_4096MB.txt
│ ├── rules.json
│ ├── rum_client_config.json
│ ├── rum_footer_insertion_location
│ │ ├── close-body-in-comment.html
│ │ └── dynamic-iframe.html
│ ├── rum_loader_insertion_location
│ │ ├── basic.html
│ │ ├── body_with_attributes.html
│ │ ├── charset_tag.html
│ │ ├── charset_tag_after_x_ua_tag.html
│ │ ├── charset_tag_before_x_ua_tag.html
│ │ ├── charset_tag_with_spaces.html
│ │ ├── comments1.html
│ │ ├── comments2.html
│ │ ├── content_type_charset_tag.html
│ │ ├── content_type_charset_tag_after_x_ua_tag.html
│ │ ├── content_type_charset_tag_before_x_ua_tag.html
│ │ ├── empty_head
│ │ ├── gt_in_quotes1.html
│ │ ├── gt_in_quotes2.html
│ │ ├── gt_in_quotes_mismatch.html
│ │ ├── gt_in_single_quotes1.html
│ │ ├── gt_in_single_quotes_mismatch.html
│ │ ├── head_with_attributes.html
│ │ ├── incomplete_non_meta_tags.html
│ │ ├── no_end_header.html
│ │ ├── no_header.html
│ │ ├── no_html_and_no_header.html
│ │ ├── no_start_header.html
│ │ ├── script1.html
│ │ ├── script2.html
│ │ ├── x_ua_meta_tag.html
│ │ ├── x_ua_meta_tag_multiline.html
│ │ ├── x_ua_meta_tag_multiple_tags.html
│ │ ├── x_ua_meta_tag_spaces_around_equals.html
│ │ ├── x_ua_meta_tag_with_others.html
│ │ └── x_ua_meta_tag_with_spaces.html
│ ├── sql_obfuscation
│ │ ├── README.md
│ │ └── sql_obfuscation.json
│ ├── sql_parsing.json
│ ├── synthetics
│ │ ├── README.md
│ │ └── synthetics.json
│ ├── transaction_segment_terms.json
│ ├── url_clean.json
│ ├── url_domain_extraction.json
│ ├── utilization
│ │ ├── README.md
│ │ ├── boot_id.json
│ │ └── utilization_json.json
│ └── utilization_vendor_specific
│ │ ├── README.md
│ │ ├── aws.json
│ │ ├── azure.json
│ │ ├── gcp.json
│ │ └── pcf.json
└── utilization
│ ├── aws
│ ├── ecs.json
│ ├── invalid_chars.json
│ ├── missing_value.json
│ └── valid.json
│ ├── azure
│ ├── invalid_chars.json
│ ├── missing_value.json
│ └── valid.json
│ └── gcp
│ ├── invalid_chars.json
│ ├── missing_value.json
│ └── valid.json
├── helpers
├── config_scanning.rb
├── docker.rb
├── exceptions.rb
├── file_searching.rb
├── logging.rb
├── minitest.rb
├── misc.rb
├── mongo_metric_builder.rb
├── ruby_rails_mappings.rb
└── transaction_sample.rb
├── intentional_fail.rb
├── minitest
├── test_time_plugin.rb
└── test_time_reporter.rb
├── multiverse
├── .gitignore
├── README.md
├── lib
│ ├── multiverse.rb
│ └── multiverse
│ │ ├── bundler_patch.rb
│ │ ├── clobber.rb
│ │ ├── color.rb
│ │ ├── envfile.rb
│ │ ├── gem_manifest.rb
│ │ ├── output_collector.rb
│ │ ├── runner.rb
│ │ ├── shell_utils.rb
│ │ ├── suite.rb
│ │ └── time_report_output.rb
├── suites
│ ├── active_record
│ │ ├── .gitignore
│ │ ├── Envfile
│ │ ├── Rakefile
│ │ ├── active_record_test.rb
│ │ ├── app
│ │ │ └── models
│ │ │ │ └── models.rb
│ │ ├── ar_method_aliasing.rb
│ │ ├── before_suite.rb
│ │ ├── config
│ │ │ ├── database.rb
│ │ │ ├── database.yml
│ │ │ └── newrelic.yml
│ │ └── db
│ │ │ └── migrate
│ │ │ ├── 20141105131800_create_users_and_aliases.rb
│ │ │ ├── 20141106082200_create_orders_and_shipments.rb
│ │ │ ├── 20150413011200_add_timestamps_to_orders.rb
│ │ │ └── 20150414084400_create_groups.rb
│ ├── active_record_pg
│ │ ├── .gitignore
│ │ ├── Envfile
│ │ ├── Rakefile
│ │ ├── active_record_test.rb
│ │ ├── app
│ │ │ └── models
│ │ │ │ └── models.rb
│ │ ├── ar_method_aliasing.rb
│ │ ├── before_suite.rb
│ │ ├── config
│ │ │ ├── database.rb
│ │ │ ├── database.yml
│ │ │ └── newrelic.yml
│ │ ├── db
│ │ │ └── migrate
│ │ │ │ ├── 20141105131800_create_users_and_aliases.rb
│ │ │ │ ├── 20141106082200_create_orders_and_shipments.rb
│ │ │ │ ├── 20150413011200_add_timestamps_to_orders.rb
│ │ │ │ └── 20150414084400_create_groups.rb
│ │ └── external_request_from_within_ar_block_test.rb
│ ├── active_support_broadcast_logger
│ │ ├── Envfile
│ │ ├── active_support_broadcast_logger_test.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ ├── active_support_logger
│ │ ├── Envfile
│ │ ├── active_support_logger_test.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ ├── activemerchant
│ │ ├── Envfile
│ │ └── activemerchant_test.rb
│ ├── agent_only
│ │ ├── Envfile
│ │ ├── adaptive_sampler_test.rb
│ │ ├── agent_attributes_test.rb
│ │ ├── agent_run_id_handling_test.rb
│ │ ├── audit_log_test.rb
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── cross_application_tracing_test.rb
│ │ ├── custom_analytics_events_test.rb
│ │ ├── custom_queue_time_test.rb
│ │ ├── encoding_handling_test.rb
│ │ ├── error_events_test.rb
│ │ ├── event_data_collection_test.rb
│ │ ├── exclusive_time_test.rb
│ │ ├── harvest_timestamps_test.rb
│ │ ├── http_response_code_test.rb
│ │ ├── keepalive_test.rb
│ │ ├── key_transactions_test.rb
│ │ ├── labels_test.rb
│ │ ├── log_events_test.rb
│ │ ├── logging_test.rb
│ │ ├── marshaling_test.rb
│ │ ├── pipe_manager_test.rb
│ │ ├── rename_rule_test.rb
│ │ ├── rum_instrumentation_test.rb
│ │ ├── script
│ │ │ ├── env_change.rb
│ │ │ ├── loading.rb
│ │ │ ├── public_api_when_disabled.rb
│ │ │ ├── symbol_env.rb
│ │ │ └── warnings.rb
│ │ ├── service_timeout_test.rb
│ │ ├── set_transaction_name_test.rb
│ │ ├── span_events_test.rb
│ │ ├── ssl_test.rb
│ │ ├── start_up_test.rb
│ │ ├── synthetics_test.rb
│ │ ├── testing_app.rb
│ │ ├── thread_profiling_test.rb
│ │ ├── transaction_events_test.rb
│ │ ├── transaction_ignoring_test.rb
│ │ └── utilization_data_collection_test.rb
│ ├── async_http
│ │ ├── Envfile
│ │ ├── async_http_instrumentation_test.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ ├── aws_sdk_firehose
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── firehose_instrumentation_test.rb
│ ├── aws_sdk_kinesis
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── kinesis_instrumentation_test.rb
│ ├── aws_sdk_lambda
│ │ ├── Envfile
│ │ ├── aws_sdk_lambda_instrumentation_test.rb
│ │ ├── aws_sdk_monkeypatch.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ ├── awssqs
│ │ ├── Envfile
│ │ ├── awssqs_instrumentation_test.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ ├── bare
│ │ ├── Envfile
│ │ └── standalone_instrumentation_test.rb
│ ├── bunny
│ │ ├── Envfile
│ │ ├── bunny_test.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ ├── capistrano
│ │ ├── Capfile
│ │ ├── Envfile
│ │ ├── config
│ │ │ ├── deploy.rb
│ │ │ ├── deploy
│ │ │ │ └── production.rb
│ │ │ └── newrelic.yml
│ │ └── deployment_test.rb
│ ├── capistrano2
│ │ ├── Capfile
│ │ ├── Envfile
│ │ ├── config
│ │ │ ├── deploy.rb
│ │ │ └── newrelic.yml
│ │ └── deployment_test.rb
│ ├── concurrent_ruby
│ │ ├── Envfile
│ │ ├── concurrent_ruby_instrumentation_test.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ ├── config_file_loading
│ │ ├── Envfile
│ │ └── config_file_loading_test.rb
│ ├── curb
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── curb_test.rb
│ ├── deferred_instrumentation
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── sinatra_test.rb
│ ├── delayed_job
│ │ ├── Envfile
│ │ ├── before_suite.rb
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── delayed_job_instrumentation_test.rb
│ │ ├── delayed_job_sampler_test.rb
│ │ └── unsupported_backend_test.rb
│ ├── dynamodb
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── dynamodb_instrumentation_test.rb
│ ├── elasticsearch
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── elasticsearch_instrumentation_test.rb
│ ├── ethon
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── ethon_instrumentation_test.rb
│ ├── excon
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── excon_test.rb
│ ├── grape
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── grape_test.rb
│ │ ├── grape_test_api.rb
│ │ ├── grape_versioning_test.rb
│ │ ├── grape_versioning_test_api.rb
│ │ └── unsupported_version_test.rb
│ ├── grpc
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── grpc_client_test.rb
│ │ ├── grpc_server_test.rb
│ │ └── helper_test.rb
│ ├── high_security
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── high_security_test.rb
│ ├── httpclient
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── httpclient_test.rb
│ ├── httprb
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── httprb_test.rb
│ ├── httpx
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── httpx_instrumentation_test.rb
│ ├── hybrid_agent
│ │ ├── Envfile
│ │ ├── README.md
│ │ ├── assertion_parameters.rb
│ │ ├── commands.rb
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── hybrid_agent_test.rb
│ │ ├── parsing_helpers.rb
│ │ ├── span_test.rb
│ │ ├── trace_propagator_test.rb
│ │ ├── tracer_provider_test.rb
│ │ ├── tracer_test.rb
│ │ └── transaction_patch_test.rb
│ ├── infinite_tracing
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── infinite_tracing_test.rb
│ ├── json
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── json_test.rb
│ ├── logger
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── logger_instrumentation_test.rb
│ ├── logstasher
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── logstasher_instrumentation_test.rb
│ ├── marshalling
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── marshalling_test.rb
│ ├── memcache
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── dalli_test.rb
│ │ ├── memcache_client_test.rb
│ │ ├── memcache_test_cases.rb
│ │ └── memcached_test.rb
│ ├── mongo
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── helpers
│ │ │ ├── mongo_helpers.rb
│ │ │ ├── mongo_operation_tests.rb
│ │ │ ├── mongo_replica_set.rb
│ │ │ ├── mongo_replica_set_test.rb
│ │ │ ├── mongo_server.rb
│ │ │ └── mongo_server_test.rb
│ │ ├── mongo2_instrumentation_test.rb
│ │ ├── mongo_connection_test.rb
│ │ ├── mongo_instrumentation_test.rb
│ │ └── mongo_unsupported_version_test.rb
│ ├── net_http
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── net_http_core_instrumentation_test.rb
│ │ └── net_http_test.rb
│ ├── opensearch
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── opensearch_instrumentation_test.rb
│ ├── padrino
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── padrino_test.rb
│ ├── rack
│ │ ├── Envfile
│ │ ├── before_suite.rb
│ │ ├── builder_map_test.rb
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── example_app.rb
│ │ ├── http_response_code_test.rb
│ │ ├── nested_non_rack_app_test.rb
│ │ ├── puma_rack_builder_test.rb
│ │ ├── puma_rack_urlmap_test.rb
│ │ ├── rack_auto_instrumentation_test.rb
│ │ ├── rack_builder_test.rb
│ │ ├── rack_cascade_test.rb
│ │ ├── rack_env_mutation_test.rb
│ │ ├── rack_parameter_filtering_test.rb
│ │ ├── rack_unsupported_version_test.rb
│ │ ├── response_content_type_test.rb
│ │ └── url_map_test.rb
│ ├── rails
│ │ ├── Envfile
│ │ ├── action_cable_test.rb
│ │ ├── action_controller_live_rum_test.rb
│ │ ├── action_controller_other_test.rb
│ │ ├── activejob_test.rb
│ │ ├── app.rb
│ │ ├── app
│ │ │ └── views
│ │ │ │ ├── foos
│ │ │ │ └── _foo.html.haml
│ │ │ │ └── views
│ │ │ │ ├── _a_partial.html.erb
│ │ │ │ ├── _mid_partial.html.erb
│ │ │ │ ├── _top_partial.html.erb
│ │ │ │ ├── deep_partial.html.erb
│ │ │ │ ├── haml_view.html.haml
│ │ │ │ └── index.html.erb
│ │ ├── bad_instrumentation_test.rb
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── dummy.txt
│ │ ├── error_tracing_test.rb
│ │ ├── gc_instrumentation_test.rb
│ │ ├── ignore_test.rb
│ │ ├── middleware_instrumentation_test.rb
│ │ ├── middlewares.rb
│ │ ├── parameter_capture_test.rb
│ │ ├── queue_time_test.rb
│ │ ├── rails3_app
│ │ │ ├── app_rails3_plus.rb
│ │ │ └── my_app.rb
│ │ ├── rails_logger_test.rb
│ │ ├── request_statistics_test.rb
│ │ ├── transaction_ignoring_test.rb
│ │ └── view_instrumentation_test.rb
│ ├── rails_prepend
│ │ ├── Envfile
│ │ ├── newrelic_prepender
│ │ │ ├── lib
│ │ │ │ ├── newrelic_prepender.rb
│ │ │ │ └── newrelic_prepender
│ │ │ │ │ └── version.rb
│ │ │ └── newrelic_prepender.gemspec
│ │ └── prepended_supportability_test.rb
│ ├── rake
│ │ ├── Envfile
│ │ ├── Rakefile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── instrumentation_test.rb
│ │ ├── multitask_test.rb
│ │ ├── rake_test.rb
│ │ ├── rake_test_helper.rb
│ │ └── unsupported_rake_test.rb
│ ├── rdkafka
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── rdkafka_instrumentation_test.rb
│ ├── redis
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── redis_instrumentation_test.rb
│ │ └── redis_unsupported_version_test.rb
│ ├── resque
│ │ ├── Envfile
│ │ ├── Rakefile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── instrumentation_test.rb
│ │ └── resque_marshalling_test.rb
│ ├── roda
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── ignorer_test.rb
│ │ └── roda_instrumentation_test.rb
│ ├── roda_agent_disabled
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── shim_test.rb
│ ├── ruby_kafka
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── ruby_kafka_instrumentation_test.rb
│ ├── ruby_openai
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── openai_helpers.rb
│ │ └── ruby_openai_instrumentation_test.rb
│ ├── sequel
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── database.rb
│ │ ├── sequel_extension_test.rb
│ │ ├── sequel_helpers.rb
│ │ ├── sequel_plugin_test.rb
│ │ └── sequel_safety_test.rb
│ ├── sidekiq
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── log
│ │ │ └── .gitkeep
│ │ ├── sidekiq_args_filtration_test.rb
│ │ ├── sidekiq_instrumentation_test.rb
│ │ ├── sidekiq_test_helpers.rb
│ │ └── sidekiq_with_redis_test.rb
│ ├── sidekiq_delay_extensions
│ │ ├── Envfile
│ │ ├── Rakefile
│ │ ├── app
│ │ │ └── models
│ │ │ │ └── dolce.rb
│ │ ├── before_suite.rb
│ │ ├── config
│ │ │ ├── database.rb
│ │ │ ├── database.yml
│ │ │ └── newrelic.yml
│ │ ├── db
│ │ │ ├── migrate
│ │ │ │ └── 20250317165716_create_dolces.rb
│ │ │ └── schema.rb
│ │ ├── sidekiq_delay_extension_instrumentation_test.rb
│ │ └── sidekiq_delay_extensions_test_helpers.rb
│ ├── sinatra
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── ignoring_test.rb
│ │ ├── nested_middleware_test.rb
│ │ ├── sinatra_classic_test.rb
│ │ ├── sinatra_error_tracing_test.rb
│ │ ├── sinatra_metric_explosion_test.rb
│ │ ├── sinatra_modular_test.rb
│ │ ├── sinatra_parameter_capture_test.rb
│ │ ├── sinatra_routes_test.rb
│ │ └── sinatra_test_cases.rb
│ ├── sinatra_agent_disabled
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── shim_test.rb
│ ├── stripe
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── stripe_instrumentation_test.rb
│ ├── thread
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── thread_fiber_instrumentation_test.rb
│ ├── tilt
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ ├── layout.haml
│ │ ├── test.erb
│ │ ├── test.haml
│ │ └── tilt_instrumentation_test.rb
│ ├── typhoeus
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── typhoeus_test.rb
│ ├── unicorn
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── unicorn_test.rb
│ ├── view_component
│ │ ├── Envfile
│ │ ├── config
│ │ │ └── newrelic.yml
│ │ └── view_component_instrumentation_test.rb
│ └── yajl
│ │ ├── Envfile
│ │ ├── config
│ │ └── newrelic.yml
│ │ └── yajl_test.rb
└── test
│ └── suite_examples
│ ├── one
│ ├── a
│ │ ├── Envfile
│ │ ├── a_test.rb
│ │ └── config
│ │ │ └── newrelic.yml
│ └── b
│ │ ├── Envfile
│ │ ├── b_test.rb
│ │ └── config
│ │ └── newrelic.yml
│ ├── three
│ ├── a
│ │ ├── Envfile
│ │ └── fail_test.rb
│ └── b
│ │ ├── Envfile
│ │ └── win_test.rb
│ └── two
│ └── a
│ ├── Envfile
│ └── fail_test.rb
├── new_relic
├── FAKECHANGELOG
├── agent
│ ├── adaptive_sampler_test.rb
│ ├── agent
│ │ ├── connect_test.rb
│ │ ├── start_test.rb
│ │ └── start_worker_thread_test.rb
│ ├── agent_logger_test.rb
│ ├── agent_test.rb
│ ├── apdex_from_server_test.rb
│ ├── api_tests
│ │ └── datastore_api_test.rb
│ ├── attribute_filter_test.rb
│ ├── attribute_pre_filtering_test.rb
│ ├── attribute_processing_test.rb
│ ├── audit_logger_test.rb
│ ├── autostart_test.rb
│ ├── aws_test.rb
│ ├── collector_hostname_test.rb
│ ├── collector_response_code_test.rb
│ ├── commands
│ │ ├── agent_command_router_test.rb
│ │ ├── agent_command_test.rb
│ │ └── thread_profiler_session_test.rb
│ ├── configuration
│ │ ├── default_source_test.rb
│ │ ├── dotted_hash_test.rb
│ │ ├── environment_source_test.rb
│ │ ├── event_harvest_config_test.rb
│ │ ├── high_security_source_test.rb
│ │ ├── manager_test.rb
│ │ ├── manual_source_test.rb
│ │ ├── orphan_configuration_test.rb
│ │ ├── security_policy_source_test.rb
│ │ ├── server_source_test.rb
│ │ └── yaml_source_test.rb
│ ├── connect
│ │ ├── request_builder_test.rb
│ │ └── response_handler_test.rb
│ ├── custom_event_aggregator_test.rb
│ ├── database
│ │ ├── postgres_explain_obfuscator_test.rb
│ │ └── sql_obfuscation_test.rb
│ ├── database_test.rb
│ ├── datastores
│ │ ├── metric_helper_test.rb
│ │ ├── mongo
│ │ │ ├── event_formatter_test.rb
│ │ │ └── metric_translator_test.rb
│ │ ├── nosql_obfuscator_test.rb
│ │ └── redis_test.rb
│ ├── datastores_test.rb
│ ├── deprecator_test.rb
│ ├── distributed_tracing
│ │ ├── distributed_trace_metrics_test.rb
│ │ ├── distributed_trace_payload_test.rb
│ │ ├── distributed_tracing_cross_agent_test.rb
│ │ ├── trace_context_cross_agent_test.rb
│ │ ├── trace_context_header_data_test.rb
│ │ ├── trace_context_payload_test.rb
│ │ └── trace_context_test.rb
│ ├── distributed_tracing_test.rb
│ ├── encoding_normalizer_test.rb
│ ├── error_collector_test.rb
│ ├── error_event_aggregator_test.rb
│ ├── error_filter_test.rb
│ ├── error_trace_aggregator_test.rb
│ ├── event_aggregator_test.rb
│ ├── event_listener_test.rb
│ ├── event_loop_test.rb
│ ├── external_test.rb
│ ├── guid_generator_test.rb
│ ├── harvester_test.rb
│ ├── health_check_test.rb
│ ├── heap_test.rb
│ ├── hostname_test.rb
│ ├── http_clients
│ │ └── uri_util_test.rb
│ ├── instrumentation
│ │ ├── action_cable_subscriber_test.rb
│ │ ├── action_controller_subscriber_test.rb
│ │ ├── action_dispatch_subscriber_test.rb
│ │ ├── action_mailbox_subscriber_test.rb
│ │ ├── action_mailer_subscriber_test.rb
│ │ ├── action_view_subscriber_test.rb
│ │ ├── active_job_subscriber_test.rb
│ │ ├── active_job_test.rb
│ │ ├── active_record_helper_test.rb
│ │ ├── active_record_subscriber_test.rb
│ │ ├── active_storage_subscriber_test.rb
│ │ ├── active_support_subscriber_test.rb
│ │ ├── controller_instrumentation_test.rb
│ │ ├── delayed_job_instrumentation_test.rb
│ │ ├── instance_identification_test.rb
│ │ ├── instrumentation_test.rb
│ │ ├── middleware_proxy_test.rb
│ │ ├── middleware_tracing_test.rb
│ │ ├── mongodb_command_subscriber_test.rb
│ │ ├── net_instrumentation_test.rb
│ │ ├── notification_subscriber_test.rb
│ │ ├── queue_time_test.rb
│ │ ├── rack_test.rb
│ │ ├── rails
│ │ │ ├── action_cable_subscriber.rb
│ │ │ ├── action_controller_subscriber.rb
│ │ │ ├── action_dispatch_subscriber.rb
│ │ │ ├── action_mailbox_subscriber.rb
│ │ │ ├── action_mailer_subscriber.rb
│ │ │ ├── action_view_subscriber.rb
│ │ │ ├── active_job_subscriber.rb
│ │ │ ├── active_record_subscriber.rb
│ │ │ ├── active_storage_subscriber.rb
│ │ │ ├── active_support_subscriber.rb
│ │ │ ├── custom_events_subscriber_test.rb
│ │ │ └── notifications_subscriber.rb
│ │ ├── sequel_helper_test.rb
│ │ ├── sinatra
│ │ │ └── transaction_namer_test.rb
│ │ ├── sinatra_test.rb
│ │ └── task_instrumentation_test.rb
│ ├── javascript_instrumentor_test.rb
│ ├── linking_metadata_test.rb
│ ├── llm
│ │ ├── chat_completion_message_test.rb
│ │ ├── chat_completion_summary_test.rb
│ │ ├── embedding_test.rb
│ │ ├── feedback_test.rb
│ │ ├── llm_event_test.rb
│ │ └── response_headers_test.rb
│ ├── llm_test.rb
│ ├── local_log_decorator_test.rb
│ ├── log_event_aggregator_test.rb
│ ├── log_event_attributes_test.rb
│ ├── log_priority_test.rb
│ ├── logging_test.rb
│ ├── memory_logger_test.rb
│ ├── messaging_test.rb
│ ├── method_interrobang_test.rb
│ ├── method_tracer
│ │ ├── class_methods
│ │ │ └── add_method_tracer_test.rb
│ │ └── instance_methods
│ │ │ └── trace_execution_scoped_test.rb
│ ├── method_tracer_helpers_test.rb
│ ├── method_tracer_params_test.rb
│ ├── method_tracer_test.rb
│ ├── method_visibility_test.rb
│ ├── monitors
│ │ ├── cross_app_monitor_test.rb
│ │ ├── distributed_trace_monitor_test.rb
│ │ ├── distributed_tracing_monitor_test.rb
│ │ ├── inbound_request_monitor_test.rb
│ │ ├── synthetics_monitor_test.rb
│ │ └── trace_context_request_monitor_test.rb
│ ├── new_relic_service
│ │ ├── json_marshaller_test.rb
│ │ └── security_policy_settings_test.rb
│ ├── new_relic_service_test.rb
│ ├── obfuscator_test.rb
│ ├── opentelemetry_bridge_test.rb
│ ├── parameter_filtering_test.rb
│ ├── payload_metric_mapping_test.rb
│ ├── pipe_channel_manager_test.rb
│ ├── pipe_service_test.rb
│ ├── priority_sampled_buffer_test.rb
│ ├── rpm_agent_test.rb
│ ├── rules_engine_test.rb
│ ├── sampler_collection_test.rb
│ ├── sampler_test.rb
│ ├── samplers
│ │ ├── cpu_sampler_test.rb
│ │ ├── memory_sampler_test.rb
│ │ └── vm_sampler_test.rb
│ ├── serverless_handler_event_sources_test.rb
│ ├── serverless_handler_test.rb
│ ├── span_event_aggregator_test.rb
│ ├── span_event_primitive_test.rb
│ ├── span_events_test.rb
│ ├── sql_sampler_test.rb
│ ├── stats_engine
│ │ ├── gc_profiler_test.rb
│ │ └── stats_hash_test.rb
│ ├── stats_engine_test.rb
│ ├── stats_test.rb
│ ├── supportability_test.rb
│ ├── synthetics_event_aggregator_test.rb
│ ├── system_info_test.rb
│ ├── threading
│ │ ├── agent_thread_test.rb
│ │ ├── backtrace_node_test.rb
│ │ ├── backtrace_service_test.rb
│ │ ├── fake_thread.rb
│ │ ├── thread_profile_test.rb
│ │ └── threaded_test_case.rb
│ ├── tracer_state_test.rb
│ ├── tracer_test.rb
│ ├── transaction
│ │ ├── abstract_segment_test.rb
│ │ ├── attributes_test.rb
│ │ ├── datastore_segment_test.rb
│ │ ├── distributed_tracer_test.rb
│ │ ├── distributed_tracing_test.rb
│ │ ├── external_request_segment_test.rb
│ │ ├── message_broker_segment_test.rb
│ │ ├── request_attributes_test.rb
│ │ ├── segment_test.rb
│ │ ├── slowest_sample_buffer_test.rb
│ │ ├── synthetics_sample_buffer_test.rb
│ │ ├── trace_builder_test.rb
│ │ ├── trace_context_test.rb
│ │ ├── trace_node_test.rb
│ │ ├── trace_test.rb
│ │ └── tracing_test.rb
│ ├── transaction_error_primitive_test.rb
│ ├── transaction_event_aggregator_test.rb
│ ├── transaction_event_primitive_test.rb
│ ├── transaction_event_recorder_test.rb
│ ├── transaction_interrobang_test.rb
│ ├── transaction_metrics_test.rb
│ ├── transaction_sampler_test.rb
│ ├── transaction_test.rb
│ ├── transaction_time_aggregator_test.rb
│ ├── utilization
│ │ ├── aws_test.rb
│ │ ├── azure_test.rb
│ │ ├── gcp_test.rb
│ │ ├── pcf_test.rb
│ │ └── vendor_test.rb
│ ├── utilization_data_test.rb
│ ├── vm
│ │ ├── c_ruby_vm_test.rb
│ │ ├── monotonic_gc_profiler_test.rb
│ │ └── snapshot_test.rb
│ ├── vm_test.rb
│ └── worker_loop_test.rb
├── agent_test.rb
├── boot
│ └── strap_test.rb
├── cli
│ └── commands
│ │ ├── deployments_test.rb
│ │ └── install_test.rb
├── coerce_test.rb
├── collection_helper_test.rb
├── common_aggregator_tests.rb
├── control
│ ├── class_methods_test.rb
│ ├── frameworks
│ │ └── rails_test.rb
│ ├── instance_methods_test.rb
│ ├── instrumentation_test.rb
│ └── security_interface_test.rb
├── control_test.rb
├── data_container_tests.rb
├── dependency_detection_test.rb
├── dispatcher_test.rb
├── environment_report_test.rb
├── evil_server.rb
├── fake_collector.rb
├── fake_external_server.rb
├── fake_instance_metadata_service.rb
├── fake_rpm_site.rb
├── fake_server.rb
├── filtering_test_app.rb
├── framework_test.rb
├── gemspec_files_test.rb
├── healthy_urls_test.rb
├── helper_test.rb
├── http_client_test_cases.rb
├── language_support_test.rb
├── latest_changes_test.rb
├── license_test.rb
├── load_test.rb
├── local_environment_test.rb
├── marshalling_test_cases.rb
├── metric_data_test.rb
├── metric_spec_test.rb
├── multiverse_helpers.rb
├── net_http_test_cases.rb
├── newrelic_rpm_test.rb
├── newrelicyml_test.rb
├── noticed_error_test.rb
├── rack
│ ├── agent_hooks_test.rb
│ ├── agent_middleware_test.rb
│ └── browser_monitoring_test.rb
├── recipes
│ └── helpers
│ │ └── send_deployment_test.rb
├── slack_notifications_tests
│ ├── gem_notifier_tests.rb
│ └── slack_notifier_tests.rb
├── supportability_helper_test.rb
├── tasks
│ └── bump_version_test.rb
├── test_time_reporter_test.rb
├── thread_local_storage_test.rb
└── transaction_ignoring_test_cases.rb
├── nullverse
├── default_source_require_test.rb
└── nullverse_helper.rb
├── performance
├── .simplecov
├── Gemfile
├── README.md
├── lib
│ ├── performance.rb
│ └── performance
│ │ ├── baseline.rb
│ │ ├── baseline_compare_reporter.rb
│ │ ├── baseline_save_reporter.rb
│ │ ├── console_reporter.rb
│ │ ├── formatting_helpers.rb
│ │ ├── hako_client.rb
│ │ ├── hako_reporter.rb
│ │ ├── instrumentation
│ │ ├── cpu_usage.rb
│ │ ├── gc_stats.rb
│ │ ├── perf_tools.rb
│ │ └── stackprof.rb
│ │ ├── instrumentor.rb
│ │ ├── json_reporter.rb
│ │ ├── options.rb
│ │ ├── platform.rb
│ │ ├── reporting.rb
│ │ ├── result.rb
│ │ ├── runner.rb
│ │ ├── table.rb
│ │ ├── test_case.rb
│ │ └── timer.rb
├── rails_app
│ ├── Rakefile
│ ├── app
│ │ ├── controllers
│ │ │ └── application_controller.rb
│ │ └── models
│ │ │ └── application_record.rb
│ ├── bin
│ │ ├── rails
│ │ ├── rake
│ │ └── setup
│ ├── config.ru
│ ├── config
│ │ ├── application.rb
│ │ ├── boot.rb
│ │ ├── credentials.yml.enc
│ │ ├── database.yml
│ │ ├── environment.rb
│ │ ├── environments
│ │ │ ├── development.rb
│ │ │ ├── production.rb
│ │ │ └── test.rb
│ │ ├── initializers
│ │ │ ├── cors.rb
│ │ │ ├── filter_parameter_logging.rb
│ │ │ └── inflections.rb
│ │ ├── locales
│ │ │ └── en.yml
│ │ ├── master.key
│ │ ├── puma.rb
│ │ └── routes.rb
│ ├── db
│ │ └── seeds.rb
│ └── lib
│ │ └── tasks
│ │ └── .keep
├── script
│ ├── baselines
│ ├── mega-runner
│ └── runner
└── suites
│ ├── active_record.rb
│ ├── active_record_subscriber.rb
│ ├── agent_attributes.rb
│ ├── agent_module.rb
│ ├── config.rb
│ ├── datastores.rb
│ ├── error_collector.rb
│ ├── external_segment.rb
│ ├── logging.rb
│ ├── marshalling.rb
│ ├── method_tracer.rb
│ ├── queue_time.rb
│ ├── rack_middleware.rb
│ ├── redis.rb
│ ├── rules_engine.rb
│ ├── rum_autoinsertion.rb
│ ├── segment_terms_rule.rb
│ ├── sql_obfuscation.rb
│ ├── startup.rb
│ ├── stats_hash.rb
│ ├── thread_profiling.rb
│ ├── trace_context.rb
│ ├── trace_context_request_monitor.rb
│ ├── trace_execution_scoped.rb
│ └── transaction_tracing.rb
├── script
├── before_install
│ ├── conditionally_upgrade_rubygems.sh
│ ├── gemstash_mirror.sh
│ └── update_rubygems.sh
├── before_script
│ └── install_mongodb.sh
├── external_server.rb
├── install_mysql55
├── path_hash.rb
└── run_tests
├── simplecov_test_helper.rb
├── test_helper.rb
└── warning_test_helper.rb
/.build_ignore:
--------------------------------------------------------------------------------
1 | .github/
2 | .gitignore
3 | .project
4 | .rubocop.yml
5 | .rubocop_todo.yml
6 | .simplecov
7 | .snyk
8 | .yardopts
9 | Brewfile
10 | CONTRIBUTING.md
11 | Dockerfile
12 | DOCKER.md
13 | docker-compose.yml
14 | config/
15 | config.dot
16 | infinite_tracing/
17 | Guardfile
18 | lefthook.yml
19 | log/
20 | README.md
21 | test/
22 | lib/tasks/bump_version.rb
23 | lib/tasks/coverage_report.rb
24 | lib/tasks/instrumentation_generator/
25 | lib/tasks/multiverse.rake
26 | lib/tasks/multiverse.rb
27 | lib/tasks/tests.rb
28 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # Ruby agent code owners:
2 | * @fallwith @hannahramadan @kaylareopelle @tannalynn
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Troubleshooting
4 | url: https://github.com/newrelic/newrelic-ruby-agent#support
5 | about: checkout the README for troubleshooting directions
--------------------------------------------------------------------------------
/.github/actions/annotate/action.yml:
--------------------------------------------------------------------------------
1 | name: 'Annotate Errors'
2 | description: 'Annotates errors if an errors.txt file is present'
3 | author: New Relic
4 | runs:
5 | using: 'node16'
6 | main: 'dist/index.js'
7 |
--------------------------------------------------------------------------------
/.github/actions/annotate/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | cd .github/actions/annotate
4 | yarn run package
5 | exec git add dist/index.js
6 |
--------------------------------------------------------------------------------
/.github/actions/issue_closer/action.yml:
--------------------------------------------------------------------------------
1 | name: 'Issue Closer'
2 | description: 'Close GitHub Issues on PR merges to non-default branches'
3 | inputs:
4 | token:
5 | description: 'A GitHub token with PR read and Issue close permissions'
6 | required: true
7 | runs:
8 | using: 'node20'
9 | main: 'dist/index.js'
10 |
--------------------------------------------------------------------------------
/.github/actions/simplecov-report/__tests__/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/newrelic/newrelic-ruby-agent/6ea1b4b03fe0aa0c0dd0714414d5ff9a19022856/.github/actions/simplecov-report/__tests__/.keep
--------------------------------------------------------------------------------
/.github/actions/simplecov-report/__tests__/main.test.ts:
--------------------------------------------------------------------------------
1 | test('test runs', () => {
2 | console.log('todo')
3 | })
4 |
--------------------------------------------------------------------------------
/.github/actions/simplecov-report/dummy_coverage/.last_run.json:
--------------------------------------------------------------------------------
1 | {
2 | "result": {
3 | "covered_percent": 93.08
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.github/actions/simplecov-report/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | clearMocks: true,
3 | moduleFileExtensions: ['js', 'ts'],
4 | testEnvironment: 'node',
5 | testMatch: ['**/*.test.ts'],
6 | testRunner: 'jest-circus/runner',
7 | transform: {
8 | '^.+\\.ts$': 'ts-jest'
9 | },
10 | verbose: true
11 | }
--------------------------------------------------------------------------------
/.github/actions/variable-mapper/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | clearMocks: true,
3 | moduleFileExtensions: ['js', 'ts'],
4 | testEnvironment: 'node',
5 | testMatch: ['**/*.test.ts'],
6 | testRunner: 'jest-circus/runner',
7 | transform: {
8 | '^.+\\.ts$': 'ts-jest'
9 | },
10 | verbose: true
11 | }
--------------------------------------------------------------------------------
/.github/actions/workflow-conclusion/build.json:
--------------------------------------------------------------------------------
1 | {"owner":"technote-space","repo":"workflow-conclusion-action","sha":"b74a7a0d9818c8e902cbb4fcc25f6def35dc48b3","ref":"refs/tags/v3.0.3","tagName":"v3.0.3","branch":"gh-actions","tags":["v3.0.3","v3.0","v3"],"updated_at":"2022-12-06T16:52:47.549Z"}
--------------------------------------------------------------------------------
/.github/actions/workflow-conclusion/lib/constant.d.ts:
--------------------------------------------------------------------------------
1 | export declare const CONCLUSIONS: string[];
2 |
--------------------------------------------------------------------------------
/.github/actions/workflow-conclusion/lib/main.d.ts:
--------------------------------------------------------------------------------
1 | export {};
2 |
--------------------------------------------------------------------------------
/.github/actions/workflow-conclusion/lib/process.test.d.ts:
--------------------------------------------------------------------------------
1 | export {};
2 |
--------------------------------------------------------------------------------
/.github/actions/workflow-conclusion/lib/setup.d.ts:
--------------------------------------------------------------------------------
1 | export {};
2 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | ---
2 | version: 2
3 | updates:
4 | - package-ecosystem: github-actions
5 | directory: "/"
6 | schedule:
7 | interval: monthly
8 |
--------------------------------------------------------------------------------
/.github/workflows/add_issues_to_project.yml:
--------------------------------------------------------------------------------
1 | name: Add new issues to project
2 |
3 | on:
4 | issues:
5 | types:
6 | - opened
7 |
8 | jobs:
9 | add-to-project:
10 | name: Add issue to project
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/add-to-project@244f685bbc3b7adfa8466e08b698b5577571133e # tag 1.0.2
14 | with:
15 | project-url: https://github.com/orgs/newrelic/projects/84
16 | github-token: ${{ secrets.NEW_RELIC_RUBY_AGENT_BOT_GITHUB_ADD_TO_PROJECT_ACTION }}
17 |
--------------------------------------------------------------------------------
/.github/workflows/pr_closed.yml:
--------------------------------------------------------------------------------
1 | name: PR Closed
2 |
3 | on:
4 | pull_request:
5 | types:
6 | - closed
7 |
8 | jobs:
9 | issue_closer:
10 | if: github.event.pull_request.merged == true
11 | runs-on: ubuntu-latest
12 | permissions: write-all
13 | steps:
14 | - name: Clone the repo
15 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag v4.2.2
16 | - name: issue_closer Action
17 | uses: ./.github/actions/issue_closer
18 | with:
19 | token: ${{ secrets.GITHUB_TOKEN }} # permission needed to read PR comments and close issues
20 |
--------------------------------------------------------------------------------
/.github/workflows/scripts/rubygems-authenticate.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import argparse
4 | import onetimepass
5 |
6 | if __name__ == '__main__':
7 |
8 | parser = argparse.ArgumentParser(
9 | description='Generate a one-time password from a key'
10 | )
11 | parser.add_argument('env_var', type=str, help='The name of the environment variable from which to load the MFA key from the service')
12 | args = parser.parse_args()
13 | print(onetimepass.get_totp(os.getenv(args.env_var)))
14 |
--------------------------------------------------------------------------------
/.simplecov:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | require 'securerandom'
4 |
5 | if ENV['CI']
6 | random = SecureRandom.uuid
7 | SimpleCov.command_name(random)
8 | SimpleCov.coverage_dir("coverage_#{random}")
9 | end
10 |
11 | SimpleCov.start do
12 | # enable_coverage(:branch)
13 | SimpleCov.root(File.join(File.dirname(__FILE__), '/lib'))
14 | track_files('**/*.rb')
15 | formatter(SimpleCov::Formatter::SimpleFormatter) if ENV['CI']
16 | end
17 |
--------------------------------------------------------------------------------
/.snyk:
--------------------------------------------------------------------------------
1 | exclude:
2 | global:
3 | # The project Dockerfile is only used to orchestrate container usage for
4 | # local development with containers that are not to be exposed to the
5 | # outside world. We use vanilla "ruby" images and do not layer on any
6 | # additional software dependencies or configurations ourselves that would
7 | # change the original "ruby" images' security profile. We defer all
8 | # security mitigation for the images to the "ruby" image maintainers (who
9 | # themselves are periodically updating their base Ubuntu layers to mitigate
10 | # issues).
11 | - Dockerfile
12 |
--------------------------------------------------------------------------------
/Brewfile:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | brew 'elasticsearch'
4 | brew 'imagemagick'
5 | brew 'memcached'
6 | tap 'mongodb/brew'
7 | brew 'mongodb-community'
8 | brew 'mysql'
9 | brew 'openssl'
10 | brew 'pkg-config'
11 | brew 'postgresql'
12 | brew 'rabbitmq'
13 | brew 'redis'
14 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | ARG ruby_version=3.1
2 |
3 | FROM ruby:$ruby_version
4 |
5 | WORKDIR /usr/src/app
6 |
7 | COPY . .
8 | RUN bundle install
9 |
10 | CMD ["bundle", "exec", "rake"]
11 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | source 'https://rubygems.org'
6 | gemspec name: 'newrelic_rpm'
7 |
--------------------------------------------------------------------------------
/Thorfile:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | Dir['./lib/tasks/**/*.thor'].sort.each { |f| load f }
6 |
--------------------------------------------------------------------------------
/bin/newrelic:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # frozen_string_literal: true
3 |
4 | # This command has been renamed "newrelic_rpm"
5 | # executes one of the commands in the new_relic/commands directory
6 | # pass the name of the command as an argument
7 |
8 | load File.dirname(__FILE__) + '/newrelic_rpm'
9 |
--------------------------------------------------------------------------------
/bin/newrelic_rpm:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # frozen_string_literal: true
3 |
4 | # executes one of the commands in the new_relic/commands directory
5 | # pass the name of the command as an argument
6 |
7 | $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
8 | require 'new_relic/cli/command'
9 | begin
10 | NewRelic::Cli::Command.run
11 | rescue NewRelic::Cli::Command::CommandFailure => failure
12 | STDERR.puts failure.message
13 | STDERR.puts failure.options if failure.options
14 | exit(1)
15 | end
16 |
--------------------------------------------------------------------------------
/infinite_tracing/.gitignore:
--------------------------------------------------------------------------------
1 | LICENSE
2 | CONTRIBUTING.md
3 |
--------------------------------------------------------------------------------
/infinite_tracing/Gemfile:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | source 'https://rubygems.org'
6 |
7 | gemspec name: 'newrelic-infinite_tracing'
8 |
9 | group :development do
10 | gem 'newrelic_rpm', path: '..'
11 | end
12 |
--------------------------------------------------------------------------------
/infinite_tracing/lib/infinite_tracing/version.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module InfiniteTracing
8 | VERSION = NewRelic::VERSION
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/infinite_tracing/tasks/all.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # This is required to load in task definitions
6 | Dir.glob(File.join(File.dirname(__FILE__), '*.rake')) do |file|
7 | load file
8 | end
9 |
--------------------------------------------------------------------------------
/infinite_tracing/test/fixtures/span_events/single.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - type: Span
3 | traceId: cb4925eee573c1f9c786fdb2b296459b
4 | guid: 0400ca1d25603072
5 | transactionId: fc81b7e3ba0476e3
6 | sampled: true
7 | priority: 1.274452
8 | timestamp: 1586870228134
9 | duration: 0.0
10 | name: Nested/Controller/Rack/Example::Application/call
11 | nr.entryPoint: true
12 | category: generic
13 | - &1 {}
14 | - *1
--------------------------------------------------------------------------------
/infinite_tracing/test/fixtures/span_events/single_full_attributes.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - type: Span
3 | traceId: cb4925eee573c1f9c786fdb2b296459b
4 | guid: 0400ca1d25603072
5 | transactionId: fc81b7e3ba0476e3
6 | sampled: true
7 | priority: 1.274452
8 | timestamp: 1586870228134
9 | duration: 0.0
10 | name: Nested/Controller/Rack/Example::Application/call
11 | nr.entryPoint: true
12 | category: generic
13 | - luke: Skywalker
14 | white: Walker
15 | - error.message: '500: Internal Server Error'
16 | error.class: ApplicationController::ExternalApiError
17 | error.expected: true
18 |
--------------------------------------------------------------------------------
/infinite_tracing/test/fixtures/span_events/single_with_agent_attributes.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - type: Span
3 | traceId: cb4925eee573c1f9c786fdb2b296459b
4 | guid: 0400ca1d25603072
5 | transactionId: fc81b7e3ba0476e3
6 | sampled: true
7 | priority: 1.274452
8 | timestamp: 1586870228134
9 | duration: 0.0
10 | name: Nested/Controller/Rack/Example::Application/call
11 | nr.entryPoint: true
12 | category: generic
13 | - {}
14 | - error.message: '500: Internal Server Error'
15 | error.class: ApplicationController::ExternalApiError
16 | error.expected: true
17 |
--------------------------------------------------------------------------------
/infinite_tracing/test/fixtures/span_events/single_with_user_attributes.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - type: Span
3 | traceId: cb4925eee573c1f9c786fdb2b296459b
4 | guid: 0400ca1d25603072
5 | transactionId: fc81b7e3ba0476e3
6 | sampled: true
7 | priority: 1.274452
8 | timestamp: 1586870228134
9 | duration: 0.0
10 | name: Nested/Controller/Rack/Example::Application/call
11 | nr.entryPoint: true
12 | category: generic
13 | - luke: Skywalker
14 | white: Walker
15 | - {}
--------------------------------------------------------------------------------
/install.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | if __FILE__ == $0 || $0.include?('script/plugin') || File.basename($0) == 'rake'
6 | $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
7 | require 'new_relic/cli/command'
8 | begin
9 | NewRelic::Cli::Install.new(:quiet => true, :app_name => 'My Application').run
10 | rescue NewRelic::Cli::Command::CommandFailure => e
11 | $stderr.puts e.message
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lefthook.yml:
--------------------------------------------------------------------------------
1 | # Lefthook (https://github.com/evilmartians/lefthook) is a git hooks manager
2 | # Install it on your machine by running `gem install lefthook`
3 | pre-commit:
4 | parallel: true
5 | commands:
6 | rubocop:
7 | files: git diff --name-only --staged
8 | glob: "*.rb"
9 | run: rubocop --force-exclusion {files}
10 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/chained_call.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # This class is used by NewRelic::Agent.set_sql_obfuscator to chain multiple
6 | # obfuscation blocks when not using the default :replace action
7 | class NewRelic::ChainedCall
8 | def initialize(block1, block2)
9 | @block1 = block1
10 | @block2 = block2
11 | end
12 |
13 | def call(sql)
14 | sql = @block1.call(sql)
15 | @block2.call(sql)
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/configuration/manual_source.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'new_relic/agent/configuration/dotted_hash'
6 |
7 | module NewRelic
8 | module Agent
9 | module Configuration
10 | class ManualSource < DottedHash
11 | def initialize(hash)
12 | super(hash, true)
13 | end
14 | end
15 | end
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/configuration/mask_defaults.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module Configuration
8 | MASK_DEFAULTS = {
9 | :'thread_profiler' => proc { !NewRelic::Agent::Threading::BacktraceService.is_supported? },
10 | :'thread_profiler.enabled' => proc { !NewRelic::Agent::Threading::BacktraceService.is_supported? }
11 | }
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'new_relic/agent'
6 | module NewRelic
7 | module Agent
8 | # stub module that contains instrumentation defined in the
9 | # instrumentation directory
10 | module Instrumentation
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/active_support_logger/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module ActiveSupportLogger::Prepend
7 | include NewRelic::Agent::Instrumentation::ActiveSupportLogger
8 | def broadcast(logger)
9 | broadcast_with_tracing(logger) { super }
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/async_http/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'instrumentation'
6 |
7 | module NewRelic::Agent::Instrumentation
8 | module AsyncHttp::Prepend
9 | include NewRelic::Agent::Instrumentation::AsyncHttp
10 |
11 | def call(method, url, headers = nil, body = nil)
12 | call_with_new_relic(method, url, headers, body) { |hdr| super(method, url, hdr, body) }
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/aws_sdk_firehose/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Firehose::Prepend
7 | include NewRelic::Agent::Instrumentation::Firehose
8 |
9 | INSTRUMENTED_METHODS.each do |method_name|
10 | define_method(method_name) do |*args|
11 | instrument_method_with_new_relic(method_name, *args) { super(*args) }
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/aws_sdk_kinesis/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Kinesis::Prepend
7 | include NewRelic::Agent::Instrumentation::Kinesis
8 |
9 | INSTRUMENTED_METHODS.each do |method_name|
10 | define_method(method_name) do |*args|
11 | instrument_method_with_new_relic(method_name, *args) { super(*args) }
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/elasticsearch/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Elasticsearch::Prepend
7 | include NewRelic::Agent::Instrumentation::Elasticsearch
8 |
9 | def perform_request(*args)
10 | perform_request_with_tracing(*args) { super }
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/grape/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Grape
7 | module Prepend
8 | def call(env)
9 | begin
10 | super(env)
11 | ensure
12 | Grape::Instrumentation.capture_transaction(env, self)
13 | end
14 | end
15 | end
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/httpclient/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module HTTPClient
7 | module Prepend
8 | include NewRelic::Agent::Instrumentation::HTTPClient::Instrumentation
9 |
10 | def do_get_block(req, proxy, conn, &block)
11 | with_tracing(req, conn) { super }
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/httprb/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module HTTPrb
7 | module Prepend
8 | include NewRelic::Agent::Instrumentation::HTTPrb
9 |
10 | def perform(request, options)
11 | with_tracing(request) { super }
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/httpx/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module HTTPX
7 | module Prepend
8 | include NewRelic::Agent::Instrumentation::HTTPX
9 |
10 | def send_requests(*requests)
11 | send_requests_with_tracing(*requests) { super }
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/logger/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Logger::Prepend
7 | include NewRelic::Agent::Instrumentation::Logger
8 |
9 | def format_message(severity, datetime, progname, msg)
10 | format_message_with_tracing(severity, datetime, progname, msg) { super }
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/logstasher/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module LogStasher::Prepend
7 | include NewRelic::Agent::Instrumentation::LogStasher
8 |
9 | def build_logstash_event(*args)
10 | build_logstash_event_with_new_relic(*args) { super }
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/memcache/chain.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Memcache
7 | module Chain
8 | extend Helper
9 |
10 | def self.instrument!(target_class)
11 | instrument_methods(target_class, client_methods)
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/opensearch/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module OpenSearch::Prepend
7 | include NewRelic::Agent::Instrumentation::OpenSearch
8 |
9 | def perform_request(*args)
10 | perform_request_with_tracing(*args) { super }
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/rake/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Rake
7 | module Prepend
8 | include NewRelic::Agent::Instrumentation::Rake::Tracer
9 | def invoke(*args)
10 | invoke_with_newrelic_tracing(*args) { super }
11 | end
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/resque/helper.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module Instrumentation
8 | module Resque
9 | module Helper
10 | extend self
11 |
12 | def resque_fork_per_job?
13 | ENV['FORK_PER_JOB'] != 'false' && NewRelic::LanguageSupport.can_fork?
14 | end
15 | end
16 | end
17 | end
18 | end
19 | end
20 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/resque/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Resque
7 | module Prepend
8 | include NewRelic::Agent::Instrumentation::Resque
9 |
10 | def perform
11 | with_tracing { super }
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/thread.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'thread/chain'
6 | require_relative 'thread/prepend'
7 |
8 | DependencyDetection.defer do
9 | named :thread
10 |
11 | executes do
12 | if use_prepend?
13 | prepend_instrument Thread, NewRelic::Agent::Instrumentation::MonitoredThread::Prepend
14 | else
15 | chain_instrument NewRelic::Agent::Instrumentation::MonitoredThread::Chain
16 | end
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/tilt/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Tilt::Prepend
7 | include NewRelic::Agent::Instrumentation::Tilt
8 |
9 | def render(*args, &block)
10 | render_with_tracing { super }
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module Typhoeus
7 | module Prepend
8 | include NewRelic::Agent::Instrumentation::Typhoeus
9 | def run(*args)
10 | with_tracing { super }
11 | end
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/instrumentation/view_component/prepend.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module ViewComponent::Prepend
7 | include NewRelic::Agent::Instrumentation::ViewComponent
8 |
9 | def render_in(*args)
10 | render_in_with_tracing(*args) { super }
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/log_priority.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'new_relic/agent/event_aggregator'
6 |
7 | # Stateless calculation of priority for a given log event
8 | module NewRelic
9 | module Agent
10 | module LogPriority
11 | extend self
12 |
13 | def priority_for(txn)
14 | return txn.priority if txn
15 |
16 | rand.round(NewRelic::PRIORITY_PRECISION)
17 | end
18 | end
19 | end
20 | end
21 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/opentelemetry/context.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module OpenTelemetry
8 | module Context
9 | require_relative 'context/propagation'
10 | end
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/opentelemetry/context/propagation.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module OpenTelemetry
8 | module Context
9 | module Propagation
10 | require_relative 'propagation/trace_propagator'
11 | end
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/opentelemetry/trace.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module OpenTelemetry
8 | module Trace
9 | require_relative 'trace/tracer_provider'
10 | require_relative 'trace/tracer'
11 | require_relative 'trace/span'
12 | end
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/opentelemetry/trace/span.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module OpenTelemetry
8 | module Trace
9 | class Span < ::OpenTelemetry::Trace::Span
10 | attr_accessor :finishable
11 |
12 | def finish(end_timestamp: nil)
13 | finishable&.finish
14 | end
15 | end
16 | end
17 | end
18 | end
19 | end
20 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/prepend_supportability.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module PrependSupportability
8 | def self.record_metrics_for(*classes)
9 | classes.each do |klass|
10 | count = klass.send(:ancestors).index(klass)
11 | ::NewRelic::Agent.record_metric("Supportability/PrependedModules/#{klass}", count) if count > 0
12 | end
13 | end
14 | end
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/timestamp_sampled_buffer.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'new_relic/agent/heap'
6 |
7 | module NewRelic
8 | module Agent
9 | class TimestampSampledBuffer < PrioritySampledBuffer
10 | TIMESTAMP_KEY = 'timestamp'.freeze
11 |
12 | private
13 |
14 | def priority_for(event)
15 | -event[0][TIMESTAMP_KEY]
16 | end
17 | end
18 | end
19 | end
20 |
--------------------------------------------------------------------------------
/lib/new_relic/agent/utilization/azure.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Agent
7 | module Utilization
8 | class Azure < Vendor
9 | vendor_name 'azure'
10 | endpoint 'http://169.254.169.254/metadata/instance/compute?api-version=2017-03-01'
11 | headers 'Metadata' => 'true'
12 | keys %w[vmId name vmSize location]
13 | key_transforms :to_sym
14 | end
15 | end
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/lib/new_relic/base64.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module Base64
7 | extend self
8 |
9 | def encode64(bin)
10 | [bin].pack('m')
11 | end
12 |
13 | def decode64(str)
14 | str.unpack1('m')
15 | end
16 |
17 | def strict_encode64(bin)
18 | [bin].pack('m0')
19 | end
20 |
21 | def strict_decode64(str)
22 | str.unpack1('m0')
23 | end
24 | end
25 | end
26 |
--------------------------------------------------------------------------------
/lib/new_relic/control/frameworks.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | class Control
7 | # Contains subclasses of NewRelic::Control that are used when
8 | # starting the agent within an application. Framework-specific
9 | # logic should be included here, as documented within the Control
10 | # abstract parent class
11 | module Frameworks
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/new_relic/control/frameworks/grape.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'new_relic/control/frameworks/ruby'
6 | module NewRelic
7 | class Control
8 | module Frameworks
9 | # Contains basic control logic for Grape
10 | class Grape < NewRelic::Control::Frameworks::Ruby
11 | end
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/new_relic/control/frameworks/padrino.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'new_relic/control/frameworks/sinatra'
6 | module NewRelic
7 | class Control
8 | module Frameworks
9 | # Contains basic control logic for Padrino
10 | class Padrino < NewRelic::Control::Frameworks::Sinatra
11 | end
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/new_relic/control/frameworks/rails_notifications.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'new_relic/control/frameworks/rails4'
6 |
7 | module NewRelic
8 | class Control
9 | module Frameworks
10 | class RailsNotifications < NewRelic::Control::Frameworks::Rails4
11 | end
12 | end
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/new_relic/delayed_job_injection.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic
6 | module DelayedJobInjection
7 | extend self
8 | attr_accessor :worker_name
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/lib/new_relic/rack.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # @api public
6 | module NewRelic
7 | # This module contains Rack middlewares used by the Ruby agent.
8 | #
9 | # Generally, these middlewares should be injected automatically when starting
10 | # your application. If automatic injection into the middleware chain is not
11 | # working for some reason, you may also include them manually.
12 | #
13 | #
14 | # @api public
15 | module Rack
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/lib/new_relic/version.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | # This file is distributed under New Relic's license terms.
3 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4 | # frozen_string_literal: true
5 |
6 | module NewRelic
7 | module VERSION # :nodoc:
8 | MAJOR = 9
9 | MINOR = 19
10 | TINY = 0
11 |
12 | STRING = "#{MAJOR}.#{MINOR}.#{TINY}"
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/lib/tasks/all.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # This is required to load in task definitions
6 | Dir.glob(File.join(File.dirname(__FILE__), '*.rake')) do |file|
7 | load file
8 | end
9 |
--------------------------------------------------------------------------------
/lib/tasks/helpers/config.text.erb:
--------------------------------------------------------------------------------
1 | <% sections.each do |(section_key, section_name, section_description, configs)| %><% configs.each do |config| %>
2 | <%= config[:key] %>
3 | <%= config[:description] %>
4 |
5 | Type: <%= config[:type] %>
6 | Default: <%= config[:default] %>
7 | Environ var: <%= config[:env_var] %>
8 | ------------------------------<% end %><% end %>
9 |
--------------------------------------------------------------------------------
/lib/tasks/helpers/matches.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module Matches
6 | def look_for_seed(tasks)
7 | matches = tasks.map { |t| /(seed=.*?)[,\]]/.match(t) }.compact
8 | if matches.any?
9 | matches.first[1]
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/lib/tasks/install.rake:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | namespace :newrelic do
6 | desc 'Install a default config/newrelic.yml file'
7 | task :install do
8 | load File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'install.rb'))
9 | end
10 |
11 | desc 'Gratefulness is always appreciated'
12 | task :thanks do
13 | puts 'The Ruby agent team is grateful to Jim Weirich for his kindness and his code. He will be missed.'
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/lib/tasks/instrumentation_generator/templates/Envfile.tt:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | instrumentation_methods :chain, :prepend
6 |
7 | gemfile <<~RB
8 | gem '<%= @name.downcase %>'
9 | RB
10 |
--------------------------------------------------------------------------------
/lib/tasks/instrumentation_generator/templates/chain_method.tt:
--------------------------------------------------------------------------------
1 | alias_method(:<%= @method.downcase %>_without_new_relic, :<%= @method.downcase %>)
2 |
3 | def <%= @method.downcase %><%= "(#{@args})" unless @args.empty? %>
4 | <%= @method.downcase %>_with_new_relic<%= "(#{@args})" unless @args.empty? %> do
5 | <%= @method.downcase %>_without_new_relic<%= "(#{@args})" unless @args.empty? %>
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/lib/tasks/instrumentation_generator/templates/instrumentation_method.tt:
--------------------------------------------------------------------------------
1 | def <%= @method.downcase %>_with_new_relic<%= "(#{@args})" unless @args.empty? %>
2 | # add instrumentation content here
3 | end
4 |
--------------------------------------------------------------------------------
/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt:
--------------------------------------------------------------------------------
1 | ---
2 | development:
3 | error_collector:
4 | enabled: true
5 | apdex_t: 0.5
6 | monitor_mode: true
7 | license_key: bootstrap_newrelic_admin_license_key_000
8 | instrumentation:
9 | <%= @snake_name %>: <%= @instrumentation_method_global_erb_snippet %>
10 | app_name: test
11 | log_level: debug
12 | host: 127.0.0.1
13 | api_host: 127.0.0.1
14 | transaction_trace:
15 | record_sql: obfuscated
16 | enabled: true
17 | stack_trace_threshold: 0.5
18 | transaction_threshold: 1.0
19 | capture_params: false
20 |
--------------------------------------------------------------------------------
/lib/tasks/instrumentation_generator/templates/prepend.tt:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | module NewRelic::Agent::Instrumentation
6 | module <%= @class_name %>::Prepend
7 | include NewRelic::Agent::Instrumentation::<%= @class_name %>
8 |
9 | def <%= @method.downcase %><%= "(#{@args})" unless @args.empty? %>
10 | <%= @method.downcase %>_with_new_relic<%= "(#{@args})" unless @args.empty? %> { super }
11 | end
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/lib/tasks/instrumentation_generator/templates/prepend_method.tt:
--------------------------------------------------------------------------------
1 | def <%= @method.downcase %><%= "(#{@args})" unless @args.empty? %>
2 | <%= @method.downcase %>_with_new_relic<%= "(#{@args})" unless @args.empty? %> { super }
3 | end
4 |
--------------------------------------------------------------------------------
/lib/tasks/instrumentation_generator/templates/test.tt:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | class <%= @class_name %>InstrumentationTest < Minitest::Test
6 | def setup
7 | @stats_engine = NewRelic::Agent.instance.stats_engine
8 | end
9 |
10 | def teardown
11 | NewRelic::Agent.instance.stats_engine.clear_stats
12 | end
13 |
14 | # Add tests here
15 | end
16 |
--------------------------------------------------------------------------------
/lib/tasks/multiverse.rake:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Guts of task are in a .rb file to allow requiring from external gems
6 | require "#{File.join(File.dirname(__FILE__))}/multiverse"
7 |
--------------------------------------------------------------------------------
/lib/tasks/newrelic.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | #
6 | # If you are looking to instrument rake tasks in a Rails environment, but the
7 | # task doesn't depend on :environment, this task may be included to ensure that
8 | # the agent will load.
9 |
10 | NewRelic::Agent.manual_start(:sync_startup => false)
11 |
--------------------------------------------------------------------------------
/lib/tasks/newrelicyml.rake:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'helpers/newrelicyml'
6 |
7 | namespace :newrelic do
8 | desc 'Update newrelic.yml with latest config options from default_source.rb'
9 | task :update_newrelicyml do
10 | NewRelicYML.write_file
11 | puts 'newrelic.yml updated'
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/recipes/newrelic.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # The capistrano recipes in plugins are automatically
6 | # loaded from here. From gems, they are available from
7 | # the lib directory. We have to make them available from
8 | # both locations
9 |
10 | require File.join(File.dirname(__FILE__), '..', 'lib', 'new_relic', 'recipes')
11 |
--------------------------------------------------------------------------------
/test/environments/.gitignore:
--------------------------------------------------------------------------------
1 | .bundle
2 | test/reports/
3 | coverage/
4 | .idea/
5 | tmp/
6 | .project
7 | **/db/*.sqlite3
8 | **/vendor/plugins
9 | .DS_Store
10 | .DS\_Store
11 | .svn/
12 | *~
13 | pkg/
14 | /tmp
15 | **/log/*.log
16 | **/tmp/**/*
17 |
--------------------------------------------------------------------------------
/test/environments/norails/Rakefile:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Add your own tasks in files placed in lib/tasks ending in .rake,
6 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
7 |
8 | require_relative '../../warning_test_helper'
9 |
10 | require 'rake'
11 | require 'tasks/all'
12 |
13 | ENV['NO_RAILS'] = '1'
14 |
15 | task :default => [:'test:newrelic']
16 |
--------------------------------------------------------------------------------
/test/environments/rails40/.bundler-version:
--------------------------------------------------------------------------------
1 | 1.17.3
2 |
--------------------------------------------------------------------------------
/test/environments/rails40/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails40/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails40/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails40/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails41/.bundler-version:
--------------------------------------------------------------------------------
1 | 1.17.3
2 |
--------------------------------------------------------------------------------
/test/environments/rails41/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails41/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails41/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails41/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails42/.bundler-version:
--------------------------------------------------------------------------------
1 | 1.17.3
2 |
--------------------------------------------------------------------------------
/test/environments/rails42/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails42/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails42/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails42/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails50/.bundler-version:
--------------------------------------------------------------------------------
1 | 1.17.3
2 |
--------------------------------------------------------------------------------
/test/environments/rails50/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails50/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails50/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails50/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails51/.bundler-version:
--------------------------------------------------------------------------------
1 | 1.17.3
2 |
--------------------------------------------------------------------------------
/test/environments/rails51/Rakefile:
--------------------------------------------------------------------------------
1 | # This file is distributed under new relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/license for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Add your own tasks in files placed in lib/tasks ending in .rake,
6 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
7 |
8 | require_relative 'config/application'
9 | require 'rake'
10 |
11 | RpmTestApp::Application.load_tasks
12 | require 'tasks/all'
13 |
14 | Rake::Task['default'].clear
15 | task :default => [:'test:newrelic']
16 |
--------------------------------------------------------------------------------
/test/environments/rails51/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails51/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails51/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails51/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails52/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails52/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails52/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails52/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails60/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails60/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails60/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails60/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails61/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require 'rubygems'
6 |
7 | # Set up gems listed in the Gemfile.
8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9 |
10 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11 |
--------------------------------------------------------------------------------
/test/environments/rails61/config/database.yml:
--------------------------------------------------------------------------------
1 | mysql: &mysql
2 | adapter: mysql2
3 | username: root
4 | password: <%= ENV['MYSQL_PASSWORD'] %>
5 | host: localhost
6 | database: <%= db = "#{ENV['RUBY_VERSION']}#{ENV['BRANCH']}"; db.empty? ? "rails_blog" : db %>
7 |
8 | sqlite3: &sqlite3
9 | <% if defined?(JRuby) %>
10 | adapter: jdbcsqlite3
11 | <% else %>
12 | adapter: sqlite3
13 | <% end %>
14 | database: db/all.sqlite3
15 | pool: 5
16 | timeout: 5000
17 | host: localhost
18 |
19 | development:
20 | <<: *sqlite3
21 |
22 | test:
23 | <<: *sqlite3
24 |
25 | production:
26 | <<: *sqlite3
27 |
--------------------------------------------------------------------------------
/test/environments/rails61/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application'
6 | RpmTestApp::Application.initialize!
7 |
--------------------------------------------------------------------------------
/test/environments/rails61/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails70/Rakefile:
--------------------------------------------------------------------------------
1 | # This file is distributed under new relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/license for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Add your own tasks in files placed in lib/tasks ending in .rake,
6 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
7 |
8 | require_relative '../../warning_test_helper'
9 |
10 | require_relative 'config/application'
11 |
12 | Rails.application.load_tasks
13 |
14 | require 'tasks/all'
15 |
16 | Rake::Task['default'].clear
17 | task :default => [:'test:newrelic']
18 |
--------------------------------------------------------------------------------
/test/environments/rails70/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/newrelic/newrelic-ruby-agent/6ea1b4b03fe0aa0c0dd0714414d5ff9a19022856/test/environments/rails70/app/assets/config/manifest.js
--------------------------------------------------------------------------------
/test/environments/rails70/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | class ApplicationController < ActionController::Base
6 | end
7 |
--------------------------------------------------------------------------------
/test/environments/rails70/app/controllers/no_method_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application_controller'
6 |
7 | class NoMethodController < ApplicationController; end
8 |
--------------------------------------------------------------------------------
/test/environments/rails70/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
6 |
7 | require 'bundler/setup' # Set up gems listed in the Gemfile.
8 | require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
9 |
--------------------------------------------------------------------------------
/test/environments/rails70/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Load the Rails application.
6 | require_relative 'application'
7 |
8 | # Initialize the Rails application.
9 | Rails.application.initialize!
10 |
--------------------------------------------------------------------------------
/test/environments/rails70/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails71/Rakefile:
--------------------------------------------------------------------------------
1 | # This file is distributed under new relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/license for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Add your own tasks in files placed in lib/tasks ending in .rake,
6 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
7 |
8 | require_relative '../../warning_test_helper'
9 |
10 | require_relative 'config/application'
11 |
12 | Rails.application.load_tasks
13 |
14 | require 'tasks/all'
15 |
16 | Rake::Task['default'].clear
17 | task :default => [:'test:newrelic']
18 |
--------------------------------------------------------------------------------
/test/environments/rails71/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/newrelic/newrelic-ruby-agent/6ea1b4b03fe0aa0c0dd0714414d5ff9a19022856/test/environments/rails71/app/assets/config/manifest.js
--------------------------------------------------------------------------------
/test/environments/rails71/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | class ApplicationController < ActionController::Base
6 | end
7 |
--------------------------------------------------------------------------------
/test/environments/rails71/app/controllers/no_method_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application_controller'
6 |
7 | class NoMethodController < ApplicationController; end
8 |
--------------------------------------------------------------------------------
/test/environments/rails71/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
6 |
7 | require 'bundler/setup' # Set up gems listed in the Gemfile.
8 | require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
9 |
--------------------------------------------------------------------------------
/test/environments/rails71/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Load the Rails application.
6 | require_relative 'application'
7 |
8 | # Initialize the Rails application.
9 | Rails.application.initialize!
10 |
--------------------------------------------------------------------------------
/test/environments/rails71/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails72/Rakefile:
--------------------------------------------------------------------------------
1 | # This file is distributed under new relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/license for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Add your own tasks in files placed in lib/tasks ending in .rake,
6 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
7 |
8 | require_relative '../../warning_test_helper'
9 |
10 | require_relative 'config/application'
11 |
12 | Rails.application.load_tasks
13 |
14 | require 'tasks/all'
15 |
16 | Rake::Task['default'].clear
17 | task :default => [:'test:newrelic']
18 |
--------------------------------------------------------------------------------
/test/environments/rails72/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/newrelic/newrelic-ruby-agent/6ea1b4b03fe0aa0c0dd0714414d5ff9a19022856/test/environments/rails72/app/assets/config/manifest.js
--------------------------------------------------------------------------------
/test/environments/rails72/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | class ApplicationController < ActionController::Base
6 | end
7 |
--------------------------------------------------------------------------------
/test/environments/rails72/app/controllers/no_method_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application_controller'
6 |
7 | class NoMethodController < ApplicationController; end
8 |
--------------------------------------------------------------------------------
/test/environments/rails72/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
6 |
7 | require 'bundler/setup' # Set up gems listed in the Gemfile.
8 | require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
9 |
--------------------------------------------------------------------------------
/test/environments/rails72/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Load the Rails application.
6 | require_relative 'application'
7 |
8 | # Initialize the Rails application.
9 | Rails.application.initialize!
10 |
--------------------------------------------------------------------------------
/test/environments/rails72/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/rails80/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/newrelic/newrelic-ruby-agent/6ea1b4b03fe0aa0c0dd0714414d5ff9a19022856/test/environments/rails80/app/assets/config/manifest.js
--------------------------------------------------------------------------------
/test/environments/rails80/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | class ApplicationController < ActionController::Base
6 | end
7 |
--------------------------------------------------------------------------------
/test/environments/rails80/app/controllers/no_method_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application_controller'
6 |
7 | class NoMethodController < ApplicationController; end
8 |
--------------------------------------------------------------------------------
/test/environments/rails80/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
6 |
7 | require 'bundler/setup' # Set up gems listed in the Gemfile.
8 | require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
9 |
--------------------------------------------------------------------------------
/test/environments/rails80/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Load the Rails application.
6 | require_relative 'application'
7 |
8 | # Initialize the Rails application.
9 | Rails.application.initialize!
10 |
--------------------------------------------------------------------------------
/test/environments/rails80/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/environments/railsedge/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/newrelic/newrelic-ruby-agent/6ea1b4b03fe0aa0c0dd0714414d5ff9a19022856/test/environments/railsedge/app/assets/config/manifest.js
--------------------------------------------------------------------------------
/test/environments/railsedge/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | class ApplicationController < ActionController::Base
6 | end
7 |
--------------------------------------------------------------------------------
/test/environments/railsedge/app/controllers/no_method_controller.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | require_relative 'application_controller'
6 |
7 | class NoMethodController < ApplicationController; end
8 |
--------------------------------------------------------------------------------
/test/environments/railsedge/config/boot.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
6 |
7 | require 'bundler/setup' # Set up gems listed in the Gemfile.
8 | require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
9 |
--------------------------------------------------------------------------------
/test/environments/railsedge/config/environment.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # Load the Rails application.
6 | require_relative 'application'
7 |
8 | # Initialize the Rails application.
9 | Rails.application.initialize!
10 |
--------------------------------------------------------------------------------
/test/environments/railsedge/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is distributed under New Relic's license terms.
2 | # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
3 | # frozen_string_literal: true
4 |
5 | # File is required to exist by Rails
6 |
--------------------------------------------------------------------------------
/test/fixtures/cross_agent_tests/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 |
--------------------------------------------------------------------------------
/test/fixtures/cross_agent_tests/docker_container_id/README.md:
--------------------------------------------------------------------------------
1 | These tests cover parsing of Docker container IDs on Linux hosts out of
2 | `/proc/self/cgroup` (or `/proc/ The quick brown fox jumps over the lazy dog.