From 1d2efeafb07ba1d6441b6f472653bd6c5da40d62 Mon Sep 17 00:00:00 2001 From: Aleksei Iaroslavtsev Date: Sun, 26 May 2024 22:53:33 +0200 Subject: [PATCH] optim --- .dockerdev/compose.yml | 20 +- .dockerdev/newrelic-infra.dockerfile | 2 + .gitignore | 3 +- .ruby-version | 2 +- Envfile | 1 + Gemfile | 7 +- Gemfile.lock | 19 +- app/controllers/application_controller.rb | 5 + app/controllers/stories_controller.rb | 6 + app/views/stories/_main_stories_feed.html.erb | 4 +- case-study.md | 124 +++ config/application.rb | 1 + config/environments/local_production.rb | 138 +++ config/initializers/airbrake.rb | 2 +- config/initializers/mini_profiler.rb | 1 + config/newrelic.yml | 879 ++++++++++++++++++ config/secrets.yml | 3 + config/webpacker.yml | 15 + dip.yml | 2 +- img.png | Bin 0 -> 67477 bytes img_1.png | Bin 0 -> 25939 bytes 21 files changed, 1220 insertions(+), 14 deletions(-) create mode 100644 .dockerdev/newrelic-infra.dockerfile create mode 100644 case-study.md create mode 100644 config/environments/local_production.rb create mode 100644 config/initializers/mini_profiler.rb create mode 100644 config/newrelic.yml create mode 100644 img.png create mode 100644 img_1.png diff --git a/.dockerdev/compose.yml b/.dockerdev/compose.yml index 641a256d..25efc9f5 100644 --- a/.dockerdev/compose.yml +++ b/.dockerdev/compose.yml @@ -18,7 +18,7 @@ x-backend: &backend stdin_open: true tty: true volumes: - - ..:/app:cached + - ..:/app - bundle:/usr/local/bundle - rails_cache:/app/tmp/cache - node_modules:/app/node_modules @@ -30,9 +30,6 @@ x-backend: &backend environment: &backend_environment <<: *env YARN_INTEGRITY_ENABLED: "false" - ALGOLIASEARCH_APPLICATION_ID: PASTE - ALGOLIASEARCH_API_KEY: YOUR - ALGOLIASEARCH_SEARCH_ONLY_KEY: HERE REDIS_URL: redis://redis:6379/ DATABASE_URL: postgres://postgres:postgres@postgres:5432 WEBPACKER_DEV_SERVER_HOST: webpacker @@ -113,7 +110,20 @@ services: <<: *env WEBPACKER_DEV_SERVER_HOST: 0.0.0.0 YARN_CACHE_FOLDER: /app/node_modules/.yarn-cache - + agent: + container_name: newrelic-infra + build: + context: . + dockerfile: newrelic-infra.dockerfile + cap_add: + - SYS_PTRACE + network_mode: host + pid: host + privileged: true + volumes: + - "/:/host:ro" + - "/var/run/docker.sock:/var/run/docker.sock" + restart: unless-stopped volumes: bundle: node_modules: diff --git a/.dockerdev/newrelic-infra.dockerfile b/.dockerdev/newrelic-infra.dockerfile new file mode 100644 index 00000000..05bb7e74 --- /dev/null +++ b/.dockerdev/newrelic-infra.dockerfile @@ -0,0 +1,2 @@ +FROM newrelic/infrastructure:latest +ADD newrelic-infra.yml /etc/newrelic-infra.yml diff --git a/.gitignore b/.gitignore index df2840a6..91d33045 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ latest.dump # Ignore application configuration /config/application.yml +/.dockerdev/newrelic-infra.yml /public/packs /public/packs-test /node_modules @@ -52,4 +53,4 @@ package-lock.json .idea/ #sitemap -/public/sitemap.xml.gz \ No newline at end of file +/public/sitemap.xml.gz diff --git a/.ruby-version b/.ruby-version index bea438e9..351227fc 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.1 +3.2.4 diff --git a/Envfile b/Envfile index 944a3fac..cb329b52 100644 --- a/Envfile +++ b/Envfile @@ -52,6 +52,7 @@ only_in_test = proc { ENV['RACK_ENV'] == "test" ? "test-test" : nil} variable :ALGOLIASEARCH_API_KEY, :String, default: only_in_test variable :ALGOLIASEARCH_APPLICATION_ID, :String, default: only_in_test variable :ALGOLIASEARCH_SEARCH_ONLY_KEY, :String, default: only_in_test +variable :NEW_RELIC_LICENSE_KEY, :String, default: "Optional" # AWS for images storages variable :AWS_ID, :String, default: "Optional" diff --git a/Gemfile b/Gemfile index fcad8024..7e2fbbf1 100644 --- a/Gemfile +++ b/Gemfile @@ -102,6 +102,11 @@ gem "uglifier", "~> 4.1" gem "validate_url", "~> 1.0" gem "webpacker", "~> 3.5" gem "webpush", "~> 0.3" +gem 'newrelic_rpm' +gem 'newrelic-infinite_tracing' +gem 'rack-mini-profiler' +gem 'memory_profiler' +gem 'stackprof' group :development do gem "better_errors", "~> 2.5" @@ -123,7 +128,6 @@ group :development, :test do gem "erb_lint", "~> 0.0", require: false gem "faker", git: "https://github.com/stympy/faker.git", branch: "master" gem "fix-db-schema-conflicts", github: "jakeonrails/fix-db-schema-conflicts", branch: "master" - gem "memory_profiler", "~> 0.9" gem "parallel_tests", "~> 2.27" gem "pry-byebug", "~> 3.7" gem "rspec-rails", "~> 3.8" @@ -149,7 +153,6 @@ group :test do gem "shoulda-matchers", "4.0.0.rc1", require: false gem "simplecov", "~> 0.16", require: false gem "sinatra", "~> 2.0" - gem "stackprof", "~> 0.2", require: false, platforms: :ruby gem "stripe-ruby-mock", "~> 2.5", require: "stripe_mock" gem "test-prof", "~> 0.7" gem "timecop", "~> 0.9" diff --git a/Gemfile.lock b/Gemfile.lock index a9b680a0..6de19f92 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -487,6 +487,9 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.0) signet (~> 0.10) + google-protobuf (3.23.4) + googleapis-common-protos-types (1.12.0) + google-protobuf (~> 3.18) googleauth (0.8.0) faraday (~> 0.12) jwt (>= 1.4, < 3.0) @@ -494,6 +497,9 @@ GEM multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (~> 0.7) + grpc (1.58.0) + google-protobuf (~> 3.23) + googleapis-common-protos-types (~> 1.0) guard (2.15.0) formatador (>= 0.2.4) listen (>= 2.7, < 4.0) @@ -612,6 +618,10 @@ GEM net-http-persistent (3.0.0) connection_pool (~> 2.2) netrc (0.11.0) + newrelic-infinite_tracing (9.9.0) + grpc (~> 1.34) + newrelic_rpm (= 9.9.0) + newrelic_rpm (9.9.0) nio4r (2.3.1) nokogiri (1.10.1) mini_portile2 (~> 2.4.0) @@ -677,6 +687,8 @@ GEM rack (2.0.6) rack-host-redirect (1.3.0) rack + rack-mini-profiler (3.1.1) + rack (>= 1.2.0) rack-protection (2.0.4) rack rack-proxy (0.6.5) @@ -1007,8 +1019,10 @@ DEPENDENCIES launchy (~> 2.4) libhoney (~> 1.11) liquid (~> 4.0) - memory_profiler (~> 0.9) + memory_profiler nakayoshi_fork + newrelic-infinite_tracing + newrelic_rpm nokogiri (~> 1.10) octokit (~> 4.13) omniauth (~> 1.9) @@ -1025,6 +1039,7 @@ DEPENDENCIES pusher (~> 1.3) pusher-push-notifications (~> 1.0) rack-host-redirect (~> 1.3) + rack-mini-profiler rack-timeout (~> 0.5) rails (~> 5.1.6) rails-assets-airbrake-js-client (~> 1.5)! @@ -1057,7 +1072,7 @@ DEPENDENCIES slack-notifier (~> 2.3) sprockets (~> 3.7) staccato (~> 0.5) - stackprof (~> 0.2) + stackprof storext (~> 2.2) stripe (~> 4.8) stripe-ruby-mock (~> 2.5) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1531dc97..18186a3c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -4,6 +4,11 @@ class ApplicationController < ActionController::Base include Pundit include Instrumentation + def profile_call + return true if params['profile'] == 'true' + false + end + def require_http_auth authenticate_or_request_with_http_basic do |username, password| username == ApplicationConfig["APP_NAME"] && password == ApplicationConfig["APP_PASSWORD"] diff --git a/app/controllers/stories_controller.rb b/app/controllers/stories_controller.rb index df60029f..4dd22c8d 100644 --- a/app/controllers/stories_controller.rb +++ b/app/controllers/stories_controller.rb @@ -2,6 +2,12 @@ class StoriesController < ApplicationController before_action :authenticate_user!, except: %i[index search show feed new] before_action :set_cache_control_headers, only: %i[index search show] + before_action do + if profile_call + ::Rack::MiniProfiler.authorize_request + end + end + def index add_param_context(:username, :tag) return handle_user_or_organization_or_podcast_index if params[:username] diff --git a/app/views/stories/_main_stories_feed.html.erb b/app/views/stories/_main_stories_feed.html.erb index b6cd0a65..9fb395e7 100644 --- a/app/views/stories/_main_stories_feed.html.erb +++ b/app/views/stories/_main_stories_feed.html.erb @@ -55,7 +55,9 @@ <% if !user_signed_in? && i == 4 %> <%= render "stories/sign_in_invitation" %> <% end %> - <%= render "articles/single_story", story: story %> + <% cache(story) do %> + <%= render "articles/single_story", story: story %> + <% end %> <% end %> <% end %> <% if @stories.size > 1 %> diff --git a/case-study.md b/case-study.md new file mode 100644 index 00000000..3982802b --- /dev/null +++ b/case-study.md @@ -0,0 +1,124 @@ +## Case Study + +## Подготовка + +- Запустил проект `dev.to` локально +- Настроил `NewRelic` для 'development' +- Настроил `local_production` для проекта и подкючил `NewRelic` +- Настроил `rack-mini-profiler` для `local_production` и добавил ключ по которому можно включить профайлер + +## Оптимизация + +Ввиду сложностей запуска, я строго следовал рекомендация из описания. +NewRelic оказался не очень информативен для понимания причины медленной работы ввиду трейсы из коробки не идентифицируют все трейсы. +`rack-mini-profiler` показал, что `single_story` рендерится многократно и это точка для оптимизации. + +![img.png](img.png) + +Утилита ab показала, что среднее время ответа составляет `675.065 [ms]` + +
+ab -n 100 -c 5 127.0.0.1:3000/ + +``` +This is ApacheBench, Version 2.3 <$Revision: 1903618 $> +Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ +Licensed to The Apache Software Foundation, http://www.apache.org/ + +Benchmarking 127.0.0.1 (be patient).....done + + +Server Software: +Server Hostname: 127.0.0.1 +Server Port: 3000 + +Document Path: / +Document Length: 143403 bytes + +Concurrency Level: 5 +Time taken for tests: 13.501 seconds +Complete requests: 100 +Failed requests: 0 +Total transferred: 14382600 bytes +HTML transferred: 14340300 bytes +Requests per second: 7.41 [#/sec] (mean) +Time per request: 675.065 [ms] (mean) +Time per request: 135.013 [ms] (mean, across all concurrent requests) +Transfer rate: 1040.31 [Kbytes/sec] received + +Connection Times (ms) + min mean[+/-sd] median max +Connect: 0 0 0.5 0 4 +Processing: 108 631 1067.2 377 5300 +Waiting: 107 624 1066.9 373 5297 +Total: 109 631 1067.2 378 5300 + +Percentage of the requests served within a certain time (ms) + 50% 378 + 66% 405 + 75% 440 + 80% 459 + 90% 520 + 95% 5153 + 98% 5285 + 99% 5300 + 100% 5300 (longest request) +``` + +
+ +После добавления кэширования в метод `single_story` среднее время ответа составило `133.472 [ms]` +и `rack-mini-profiler` показал, что `single_story` рендерится один раз. +![img_1.png](img_1.png) + +
+ab -n 100 -c 5 127.0.0.1:3000/ + +``` +This is ApacheBench, Version 2.3 <$Revision: 1903618 $> +Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ +Licensed to The Apache Software Foundation, http://www.apache.org/ + +Benchmarking 127.0.0.1 (be patient).....done + + +Server Software: +Server Hostname: 127.0.0.1 +Server Port: 3000 + +Document Path: / +Document Length: 143451 bytes + +Concurrency Level: 5 +Time taken for tests: 2.669 seconds +Complete requests: 100 +Failed requests: 0 +Total transferred: 14387400 bytes +HTML transferred: 14345100 bytes +Requests per second: 37.46 [#/sec] (mean) +Time per request: 133.472 [ms] (mean) +Time per request: 26.694 [ms] (mean, across all concurrent requests) +Transfer rate: 5263.34 [Kbytes/sec] received + +Connection Times (ms) + min mean[+/-sd] median max +Connect: 0 0 0.2 0 1 +Processing: 68 124 26.5 115 206 +Waiting: 66 122 26.1 112 205 +Total: 68 125 26.5 116 206 + +Percentage of the requests served within a certain time (ms) + 50% 116 + 66% 135 + 75% 143 + 80% 146 + 90% 157 + 95% 175 + 98% 198 + 99% 206 + 100% 206 (longest request) +``` + +
+ +Таким образом, после оптимизации среднее время ответа уменьшилось в 5 раз. diff --git a/config/application.rb b/config/application.rb index 1b4c391f..b030a9a9 100644 --- a/config/application.rb +++ b/config/application.rb @@ -9,6 +9,7 @@ module PracticalDeveloper class Application < Rails::Application config.load_defaults 5.1 + # config.web_console.whitelisted_ips = '192.168.0.0/16' # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers diff --git a/config/environments/local_production.rb b/config/environments/local_production.rb new file mode 100644 index 00000000..a9d7c3b2 --- /dev/null +++ b/config/environments/local_production.rb @@ -0,0 +1,138 @@ +# rubocop:disable Metrics/BlockLength + +Rails.application.configure do + # Verifies that versions and hashed value of the package contents in the project's package.json + config.webpacker.check_yarn_integrity = false + config.middleware.use Rack::Deflater + + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + config.read_encrypted_secrets = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? + config.public_file_server.headers = { + "Cache-Control" => "public, s-maxage=2592000, max-age=86400" + } + + # Compress JavaScripts and CSS. + config.assets.js_compressor = Uglifier.new(harmony: true) + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` + # have moved to config/initializers/assets.rb + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + config.log_tags = [:request_id] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + config.action_controller.asset_host = ENV["FASTLY_CDN_URL"] + config.action_mailer.perform_caching = true + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = [I18n.default_locale] + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + # config.log_formatter = ::Logger::Formatter.new + config.log_formatter = ::Logger::Formatter.new + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + # Timber.io logger + send_logs_to_timber = ENV["SEND_LOGS_TO_TIMBER"] || "false" # <---- production should send timber logs by default + log_device = send_logs_to_timber == "true" ? Timber::LogDevices::HTTP.new(ENV["TIMBER"]) : STDOUT + logger = Timber::Logger.new(log_device) + logger.level = config.log_level + config.logger = ActiveSupport::TaggedLogging.new(logger) + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false + + if Rails.root.join("tmp/caching-dev.txt").exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=172800" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + config.app_domain = "localhost:3000" + + config.action_mailer.default_url_options = { host: "localhost:3000" } + config.action_mailer.delivery_method = :smtp + config.action_mailer.perform_deliveries = true + config.action_mailer.default_url_options = { host: config.app_domain } + config.action_mailer.smtp_settings = { + address: "smtp.gmail.com", + port: "587", + enable_starttls_auto: true, + user_name: '<%= ENV["DEVELOPMENT_EMAIL_USERNAME"] %>', + password: '<%= ENV["DEVELOPMENT_EMAIL_PASSWORD"] %>', + authentication: :plain, + domain: "localhost:3000" + } + + config.middleware.use Rack::HostRedirect, + "practicaldev.herokuapp.com" => "dev.to" +end + +# rubocop:enable Metrics/BlockLength diff --git a/config/initializers/airbrake.rb b/config/initializers/airbrake.rb index 0a3fffc7..c530ddc8 100644 --- a/config/initializers/airbrake.rb +++ b/config/initializers/airbrake.rb @@ -41,7 +41,7 @@ # environments. # NOTE: This option *does not* work if you don't set the 'environment' option. # https://github.com/airbrake/airbrake-ruby#ignore_environments - c.ignore_environments = %w[test development] + c.ignore_environments = %w[test development local_production] # A list of parameters that should be filtered out of what is sent to # Airbrake. By default, all "password" attributes will have their contents diff --git a/config/initializers/mini_profiler.rb b/config/initializers/mini_profiler.rb new file mode 100644 index 00000000..26437779 --- /dev/null +++ b/config/initializers/mini_profiler.rb @@ -0,0 +1 @@ +Rack::MiniProfiler.config.authorization_mode = :allow_authorized diff --git a/config/newrelic.yml b/config/newrelic.yml new file mode 100644 index 00000000..2c7046ea --- /dev/null +++ b/config/newrelic.yml @@ -0,0 +1,879 @@ +# +# This file configures the New Relic agent. New Relic monitors Ruby, Java, +# .NET, PHP, Python, Node, and Go applications with deep visibility and low +# overhead. For more information, visit www.newrelic.com. + +# Generated May 25, 2024, for version 9.9.0 +# +# For full documentation of agent configuration options, please refer to +# https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ruby-agent-configuration + +common: &default_settings + # Your application name. Renaming here affects where data displays in New + # Relic. For more details, see https://docs.newrelic.com/docs/apm/new-relic-apm/maintenance/renaming-applications + app_name: rails-opt + + # To disable the agent regardless of other settings, uncomment the following: + # agent_enabled: false + + # Logging level for log/newrelic_agent.log; options are error, warn, info, or + # debug. + log_level: info + + # All of the following configuration options are optional. Review them, and + # uncomment or edit them if they appear relevant to your application needs. + + # An array of ActiveSupport custom event names to subscribe to and instrument. For + # example, + # - one.custom.event + # - another.event + # - a.third.event + # active_support_custom_events_names: [] + + # If false, all LLM instrumentation (OpenAI only for now) will be disabled and no + # metrics, events, or spans will be sent. AI Monitoring is automatically disabled + # if high_security mode is enabled. + # ai_monitoring.enabled: false + + # If false, LLM instrumentation (OpenAI only for now) will not capture input and + # output content on specific LLM events. + # The excluded attributes include: + # * content from LlmChatCompletionMessage events + # * input from LlmEmbedding events + # ai_monitoring.record_content.enabled: true + + # If true, enables capture of all HTTP request headers for all destinations. + # allow_all_headers: false + + # Your New Relic userKey. Required when using the New Relic REST API v2 to record + # deployments using the newrelic deployments command. + # api_key: "" + + # If true, enables log decoration and the collection of log events and metrics. + # application_logging.enabled: true + + # A hash with key/value pairs to add as custom attributes to all log events + # forwarded to New Relic. If sending using an environment variable, the value must + # be formatted like: "key1=value1,key2=value2" + # application_logging.forwarding.custom_attributes: {} + + # If true, the agent captures log records emitted by your application. + # application_logging.forwarding.enabled: true + + # Sets the minimum level a log event must have to be forwarded to New Relic. + # This is based on the integer values of Ruby's Logger::Severity constants: + # https://github.com/ruby/ruby/blob/master/lib/logger/severity.rb + # The intention is to forward logs with the level given to the configuration, as + # well as any logs with a higher level of severity. + # For example, setting this value to "debug" will forward all log events to New + # Relic. Setting this value to "error" will only forward log events with the + # levels "error", "fatal", and "unknown". + # Valid values (ordered lowest to highest): + # * "debug" + # * "info" + # * "warn" + # * "error" + # * "fatal" + # * "unknown" + # application_logging.forwarding.log_level: debug + + # Defines the maximum number of log records to buffer in memory at a time. + # application_logging.forwarding.max_samples_stored: 10000 + + # If true, the agent decorates logs with metadata to link to entities, hosts, + # traces, and spans. + # application_logging.local_decorating.enabled: false + + # If true, the agent captures metrics related to logging for your application. + # application_logging.metrics.enabled: true + + # If true, enables capture of attributes for all destinations. + # attributes.enabled: true + + # Prefix of attributes to exclude from all destinations. Allows * as wildcard at + # end. + # attributes.exclude: [] + + # Prefix of attributes to include in all destinations. Allows * as wildcard at + # end. + # attributes.include: [] + + # If true, enables an audit log which logs communications with the New Relic + # collector. + # audit_log.enabled: false + + # List of allowed endpoints to include in audit log. + # audit_log.endpoints: [".*"] + + # Specifies a path to the audit log file (including the filename). + # audit_log.path: log/newrelic_audit.log + + # Specify a list of constants that should prevent the agent from starting + # automatically. Separate individual constants with a comma ,. For example, + # "Rails::Console,UninstrumentedBackgroundJob". + # autostart.denylisted_constants: Rails::Command::ConsoleCommand,Rails::Command::CredentialsCommand,Rails::Command::Db::System::ChangeCommand,Rails::Command::DbConsoleCommand,Rails::Command::DestroyCommand,Rails::Command::DevCommand,Rails::Command::EncryptedCommand,Rails::Command::GenerateCommand,Rails::Command::InitializersCommand,Rails::Command::NotesCommand,Rails::Command::RoutesCommand,Rails::Command::SecretsCommand,Rails::Console,Rails::DBConsole + + # Defines a comma-delimited list of executables that the agent should not + # instrument. For example, "rake,my_ruby_script.rb". + # autostart.denylisted_executables: irb,rspec + + # Defines a comma-delimited list of Rake tasks that the agent should not + # instrument. For example, "assets:precompile,db:migrate". + # autostart.denylisted_rake_tasks: about,assets:clean,assets:clobber,assets:environment,assets:precompile,assets:precompile:all,db:create,db:drop,db:fixtures:load,db:migrate,db:migrate:status,db:rollback,db:schema:cache:clear,db:schema:cache:dump,db:schema:dump,db:schema:load,db:seed,db:setup,db:structure:dump,db:version,doc:app,log:clear,middleware,notes,notes:custom,rails:template,rails:update,routes,secret,spec,spec:features,spec:requests,spec:controllers,spec:helpers,spec:models,spec:views,spec:routing,spec:rcov,stats,test,test:all,test:all:db,test:recent,test:single,test:uncommitted,time:zones:all,tmp:clear,tmp:create,webpacker:compile + + # Backports the faster ActiveRecord connection lookup introduced in Rails 6, which + # improves agent performance when instrumenting ActiveRecord. Note that this + # setting may not be compatible with other gems that patch ActiveRecord. + # backport_fast_active_record_connection_lookup: false + + # If true, the agent captures attributes from browser monitoring. + # browser_monitoring.attributes.enabled: false + + # Prefix of attributes to exclude from browser monitoring. Allows * as wildcard at + # end. + # browser_monitoring.attributes.exclude: [] + + # Prefix of attributes to include in browser monitoring. Allows * as wildcard at + # end. + # browser_monitoring.attributes.include: [] + + # If true, enables auto-injection of the JavaScript header for page load timing + # (sometimes referred to as real user monitoring or RUM). + # browser_monitoring.auto_instrument: true + + # Manual override for the path to your local CA bundle. This CA bundle will be + # used to validate the SSL certificate presented by New Relic's data collection + # service. + # ca_bundle_path: nil + + # Enable or disable the capture of memcache keys from transaction traces. + # capture_memcache_keys: false + + # When true, the agent captures HTTP request parameters and attaches them to + # transaction traces, traced errors, and TransactionError events. + # When using the capture_params setting, the Ruby agent will not attempt to filter + # secret information. Recommendation: To filter secret information from request + # parameters, use the attributes.include setting instead. For more information, + # see the Ruby attribute examples. + # capture_params: false + + # If true, the agent will clear Tracer::State in Agent.drop_buffered_data. + # clear_transaction_state_after_fork: false + + # If true, the agent will report source code level metrics for traced methods. + # see: + # https://docs.newrelic.com/docs/apm/agents/ruby-agent/features/ruby-codestream-integration/ + # code_level_metrics.enabled: true + + # Path to newrelic.yml. If undefined, the agent checks the following directories + # (in order): + # * config/newrelic.yml + # * newrelic.yml + # * $HOME/.newrelic/newrelic.yml + # * $HOME/newrelic.yml + # config_path: newrelic.yml + + # If false, custom attributes will not be sent on events. + # custom_attributes.enabled: true + + # If true, the agent captures custom events. + # custom_insights_events.enabled: true + + # Specify a maximum number of custom events to buffer in memory at a time. + # custom_insights_events.max_samples_stored: 3000 + + # If false, the agent will not add database_name parameter to transaction or slow + # sql traces. + # datastore_tracer.database_name_reporting.enabled: true + + # If false, the agent will not report datastore instance metrics, nor add host or + # port_path_or_id parameters to transaction or slow SQL traces. + # datastore_tracer.instance_reporting.enabled: true + + # If true, disables Action Cable instrumentation. + # disable_action_cable_instrumentation: false + + # If true, disables Action Controller instrumentation. + # disable_action_controller: false + + # If true, disables Action Mailbox instrumentation. + # disable_action_mailbox: false + + # If true, disables Action Mailer instrumentation. + # disable_action_mailer: false + + # If true, disables Active Record instrumentation. + # disable_active_record_instrumentation: false + + # If true, disables instrumentation for Active Record 4+ + # disable_active_record_notifications: false + + # If true, disables Active Storage instrumentation. + # disable_active_storage: false + + # If true, disables Active Support instrumentation. + # disable_active_support: false + + # If true, disables Active Job instrumentation. + # disable_activejob: false + + # If true, the agent won't sample the CPU usage of the host process. + # disable_cpu_sampler: false + + # If true, the agent won't measure the depth of Delayed Job queues. + # disable_delayed_job_sampler: false + + # If true, disables the use of GC::Profiler to measure time spent in garbage + # collection + # disable_gc_profiler: false + + # If true, the agent won't sample the memory usage of the host process. + # disable_memory_sampler: false + + # If true, the agent won't wrap third-party middlewares in instrumentation + # (regardless of whether they are installed via Rack::Builder or Rails). + # When middleware instrumentation is disabled, if an application is using + # middleware that could alter the response code, the HTTP status code reported on + # the transaction may not reflect the altered value. + # disable_middleware_instrumentation: false + + # If true, disables agent middleware for Roda. This middleware is responsible for + # advanced feature support such as page load timing and error collection. + # disable_roda_auto_middleware: false + + # If true, disables the collection of sampler metrics. Sampler metrics are metrics + # that are not event-based (such as CPU time or memory usage). + # disable_samplers: false + + # If true, disables Sequel instrumentation. + # disable_sequel_instrumentation: false + + # If true, disables Sidekiq instrumentation. + # disable_sidekiq: false + + # If true, disables agent middleware for Sinatra. This middleware is responsible + # for advanced feature support such as cross application tracing, page load + # timing, and error collection. + # Cross application tracing is deprecated in favor of distributed tracing. + # Distributed tracing is on by default for Ruby agent versions 8.0.0 and above. + # Middlewares are not required to support distributed tracing. + # To continue using cross application tracing, update the following options in + # your newrelic.yml configuration file: + # ``yaml + # # newrelic.yml + # cross_application_tracer: + # enabled: true + # distributed_tracing: + # enabled: false + # `` + # disable_sinatra_auto_middleware: false + + # If true, disables view instrumentation. + # disable_view_instrumentation: false + + # If true, the agent won't sample performance measurements from the Ruby VM. + # disable_vm_sampler: false + + # Distributed tracing lets you see the path that a request takes through your + # distributed system. Enabling distributed tracing changes the behavior of some + # New Relic features, so carefully consult the transition guide before you enable + # this feature. + # distributed_tracing.enabled: true + + # If true, the agent captures Elasticsearch queries in transaction traces. + # elasticsearch.capture_queries: true + + # If true, the agent obfuscates Elasticsearch queries in transaction traces. + # elasticsearch.obfuscate_queries: true + + # If true, the agent captures attributes from error collection. + # error_collector.attributes.enabled: true + + # Prefix of attributes to exclude from error collection. Allows * as wildcard at + # end. + # error_collector.attributes.exclude: [] + + # Prefix of attributes to include in error collection. Allows * as wildcard at + # end. + # error_collector.attributes.include: [] + + # If true, the agent collects TransactionError events. + # error_collector.capture_events: true + + # If true, the agent captures traced errors and error count metrics. + # error_collector.enabled: true + + # A list of error classes that the agent should treat as expected. + # This option can't be set via environment variable. + # error_collector.expected_classes: [] + + # A map of error classes to a list of messages. When an error of one of the + # classes specified here occurs, if its error message contains one of the strings + # corresponding to it here, that error will be treated as expected. + # This option can't be set via environment variable. + # error_collector.expected_messages: {} + + # A comma separated list of status codes, possibly including ranges. Errors + # associated with these status codes, where applicable, will be treated as + # expected. + # error_collector.expected_status_codes: "" + + # A list of error classes that the agent should ignore. + # This option can't be set via environment variable. + # error_collector.ignore_classes: ["ActionController::RoutingError", "Sinatra::NotFound"] + + # A map of error classes to a list of messages. When an error of one of the + # classes specified here occurs, if its error message contains one of the strings + # corresponding to it here, that error will be ignored. + # This option can't be set via environment variable. + # error_collector.ignore_messages: {} + + # A comma separated list of status codes, possibly including ranges. Errors + # associated with these status codes, where applicable, will be ignored. + # error_collector.ignore_status_codes: "" + + # Defines the maximum number of frames in an error backtrace. Backtraces over this + # amount are truncated in the middle, preserving the beginning and the end of the + # stack trace. + # error_collector.max_backtrace_frames: 50 + + # Defines the maximum number of TransactionError events reported per harvest + # cycle. + # error_collector.max_event_samples_stored: 100 + + # Allows newrelic distributed tracing headers to be suppressed on outbound + # requests. + # exclude_newrelic_header: false + + # Forces the exit handler that sends all cached data to collector before shutting + # down to be installed regardless of detecting scenarios where it generally should + # not be. Known use-case for this option is where Sinatra is running as an + # embedded service within another framework and the agent is detecting the Sinatra + # app and skipping the at_exit handler as a result. Sinatra classically runs the + # entire application in an at_exit block and would otherwise misbehave if the + # agent's at_exit handler was also installed in those circumstances. Note: + # send_data_on_exit should also be set to true in tandem with this setting. + # force_install_exit_handler: false + + # Ordinarily the agent reports dyno names with a trailing dot and process ID (for + # example, worker.3). You can remove this trailing data by specifying the prefixes + # you want to report without trailing data (for example, worker). + # heroku.dyno_name_prefixes_to_shorten: ["scheduler", "run"] + + # If true, the agent uses Heroku dyno names as the hostname. + # heroku.use_dyno_names: true + + # If true, enables high security mode. Ensure you understand the implications of + # high security mode before enabling this setting. + # high_security: false + + # If true (the default), data sent to the trace observer is batched instead of + # sending each span individually. + # infinite_tracing.batching: true + + # Configure the compression level for data sent to the trace observer. + # May be one of: :none, :low, :medium, :high. + # Set the level to :none to disable compression. + # infinite_tracing.compression_level: high + + # Configures the hostname for the trace observer Host. When configured, enables + # tail-based sampling by sending all recorded spans to a trace observer for + # further sampling decisions, irrespective of any usual agent sampling decision. + # infinite_tracing.trace_observer.host: "" + + # Configures the TCP/IP port for the trace observer Host + # infinite_tracing.trace_observer.port: 443 + + # Controls auto-instrumentation of ActiveSupport::BroadcastLogger at start up. May + # be one of: auto, prepend, chain, disabled. Used in Rails versions >= 7.1. + # instrumentation.active_support_broadcast_logger: auto + + # Controls auto-instrumentation of ActiveSupport::Logger at start up. May be one + # of: auto, prepend, chain, disabled. Used in Rails versions below 7.1. + # instrumentation.active_support_logger: auto + + # Controls auto-instrumentation of Async::HTTP at start up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.async_http: auto + + # Controls auto-instrumentation of bunny at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.bunny: auto + + # Controls auto-instrumentation of the concurrent-ruby library at start-up. May be + # one of: auto, prepend, chain, disabled. + # instrumentation.concurrent_ruby: auto + + # Controls auto-instrumentation of Curb at start-up. May be one of: auto, prepend, + # chain, disabled. + # instrumentation.curb: auto + + # Controls auto-instrumentation of Delayed Job at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.delayed_job: auto + + # Controls auto-instrumentation of the elasticsearch library at start-up. May be + # one of: auto, prepend, chain, disabled. + # instrumentation.elasticsearch: auto + + # Controls auto-instrumentation of ethon at start up. May be one of + # [auto|prepend|chain|disabled] + # instrumentation.ethon: auto + + # Controls auto-instrumentation of Excon at start-up. May be one of: enabled, + # disabled. + # instrumentation.excon: enabled + + # Controls auto-instrumentation of the Fiber class at start-up. May be one of: + # auto, prepend, chain, disabled. + # instrumentation.fiber: auto + + # Controls auto-instrumentation of Grape at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.grape: auto + + # Specifies a list of hostname patterns separated by commas that will match gRPC + # hostnames that traffic is to be ignored by New Relic for. New Relic's gRPC + # client instrumentation will ignore traffic streamed to a host matching any of + # these patterns, and New Relic's gRPC server instrumentation will ignore traffic + # for a server running on a host whose hostname matches any of these patterns. By + # default, no traffic is ignored when gRPC instrumentation is itself enabled. For + # example, "private.com$,exception.*" + # instrumentation.grpc.host_denylist: [] + + # Controls auto-instrumentation of gRPC clients at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.grpc_client: auto + + # Controls auto-instrumentation of gRPC servers at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.grpc_server: auto + + # Controls auto-instrumentation of HTTPClient at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.httpclient: auto + + # Controls auto-instrumentation of http.rb gem at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.httprb: auto + + # Controls auto-instrumentation of httpx at start up. May be one of + # [auto|prepend|chain|disabled] + # instrumentation.httpx: auto + + # Controls auto-instrumentation of Ruby standard library Logger at start-up. May + # be one of: auto, prepend, chain, disabled. + # instrumentation.logger: auto + + # Controls auto-instrumentation of dalli gem for Memcache at start-up. May be one + # of: auto, prepend, chain, disabled. + # instrumentation.memcache: auto + + # Controls auto-instrumentation of memcache-client gem for Memcache at start-up. + # May be one of: auto, prepend, chain, disabled. + # instrumentation.memcache_client: auto + + # Controls auto-instrumentation of memcached gem for Memcache at start-up. May be + # one of: auto, prepend, chain, disabled. + # instrumentation.memcached: auto + + # Controls auto-instrumentation of Mongo at start-up. May be one of: enabled, + # disabled. + # instrumentation.mongo: enabled + + # Controls auto-instrumentation of Net::HTTP at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.net_http: auto + + # Controls auto-instrumentation of Puma::Rack. When enabled, the agent hooks into + # the to_app method in Puma::Rack::Builder to find gems to instrument during + # application startup. May be one of: auto, prepend, chain, disabled. + # instrumentation.puma_rack: auto + + # Controls auto-instrumentation of Puma::Rack::URLMap at start-up. May be one of: + # auto, prepend, chain, disabled. + # instrumentation.puma_rack_urlmap: auto + + # Controls auto-instrumentation of Rack. When enabled, the agent hooks into the + # to_app method in Rack::Builder to find gems to instrument during application + # startup. May be one of: auto, prepend, chain, disabled. + # instrumentation.rack: auto + + # Controls auto-instrumentation of Rack::URLMap at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.rack_urlmap: auto + + # Controls auto-instrumentation of rake at start-up. May be one of: auto, prepend, + # chain, disabled. + # instrumentation.rake: auto + + # Controls auto-instrumentation of Redis at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.redis: auto + + # Controls auto-instrumentation of resque at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.resque: auto + + # Controls auto-instrumentation of Roda at start-up. May be one of: auto, prepend, + # chain, disabled. + # instrumentation.roda: auto + + # Controls auto-instrumentation of the ruby-openai gem at start-up. May be one of: + # auto, prepend, chain, disabled. + # instrumentation.ruby_openai: auto + + # Controls auto-instrumentation of Sinatra at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.sinatra: auto + + # Controls auto-instrumentation of Stripe at startup. May be one of: enabled, + # disabled. + # instrumentation.stripe: enabled + + # Controls auto-instrumentation of the Thread class at start-up to allow the agent + # to correctly nest spans inside of an asynchronous transaction. This does not + # enable the agent to automatically trace all threads created (see + # instrumentation.thread.tracing). May be one of: auto, prepend, chain, disabled. + # instrumentation.thread: auto + + # Controls auto-instrumentation of the Thread class at start-up to automatically + # add tracing to all Threads created in the application. + # instrumentation.thread.tracing: true + + # Controls auto-instrumentation of the Tilt template rendering library at + # start-up. May be one of: auto, prepend, chain, disabled. + # instrumentation.tilt: auto + + # Controls auto-instrumentation of Typhoeus at start-up. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.typhoeus: auto + + # Controls auto-instrumentation of ViewComponent at startup. May be one of: auto, + # prepend, chain, disabled. + # instrumentation.view_component: auto + + # A dictionary of label names and values that will be applied to the data sent + # from this agent. May also be expressed as a semicolon-delimited ; string of + # colon-separated : pairs. For example, Server:One;Data Center:Primary. + # labels: "" + + # Defines a name for the log file. + # log_file_name: newrelic_agent.log + + # Defines a path to the agent log file, excluding the filename. + # log_file_path: log/ + + # Specifies a marshaller for transmitting data to the New Relic collector. + # Currently json is the only valid value for this setting. + # marshaller: json + + # If true, the agent will collect metadata about messages and attach them as + # segment parameters. + # message_tracer.segment_parameters.enabled: true + + # If true, the agent captures Mongo queries in transaction traces. + # mongo.capture_queries: true + + # If true, the agent obfuscates Mongo queries in transaction traces. + # mongo.obfuscate_queries: true + + # When true, the agent transmits data about your app to the New Relic collector. + # monitor_mode: true + + # If true, uses Module#prepend rather than alias_method for ActiveRecord + # instrumentation. + # prepend_active_record_instrumentation: false + + # Specify a custom host name for display in the New Relic UI. + # process_host.display_name: default hostname + + # Defines a host for communicating with the New Relic collector via a proxy + # server. + # proxy_host: nil + + # Defines a password for communicating with the New Relic collector via a proxy + # server. + # proxy_pass: nil + + # Defines a port for communicating with the New Relic collector via a proxy + # server. + # proxy_port: 8080 + + # Defines a user for communicating with the New Relic collector via a proxy + # server. + # proxy_user: nil + + # Timeout for waiting on connect to complete before a rake task + # rake.connect_timeout: 10 + + # Specify an Array of Rake tasks to automatically instrument. This configuration + # option converts the Array to a RegEx list. If you'd like to allow all tasks by + # default, use rake.tasks: [.+]. No rake tasks will be instrumented unless they're + # added to this list. For more information, visit the New Relic Rake + # Instrumentation docs. + # rake.tasks: [] + + # Define transactions you want the agent to ignore, by specifying a list of + # patterns matching the URI you want to ignore. For more detail, see the docs on + # ignoring specific transactions. + # rules.ignore_url_regexes: [] + + # Applies Language Agent Security Policy settings. + # security_policies_token: "" + + # If true, enables the exit handler that sends data to the New Relic collector + # before shutting down. + # send_data_on_exit: true + + # If true, the agent will operate in a streamlined mode suitable for use with + # short-lived serverless functions. NOTE: Only AWS Lambda functions are supported + # currently and this option is not intended for use without New Relic's Ruby + # Lambda layer offering. + # serverless_mode.enabled: false + + # An array of strings that will collectively serve as a denylist for filtering + # which Sidekiq job arguments get reported to New Relic. To capture any Sidekiq + # arguments, 'job.sidekiq.args.*' must be added to the separate + # :'attributes.include' configuration option. Each string in this array will be + # turned into a regular expression via Regexp.new to permit advanced matching. For + # job argument hashes, if either a key or value matches the pair will be excluded. + # All matching job argument array elements and job argument scalars will be + # excluded. + # sidekiq.args.exclude: [] + + # An array of strings that will collectively serve as an allowlist for filtering + # which Sidekiq job arguments get reported to New Relic. To capture any Sidekiq + # arguments, 'job.sidekiq.args.*' must be added to the separate + # :'attributes.include' configuration option. Each string in this array will be + # turned into a regular expression via Regexp.new to permit advanced matching. For + # job argument hashes, if either a key or value matches the pair will be included. + # All matching job argument array elements and job argument scalars will be + # included. + # sidekiq.args.include: [] + + # If true, the agent collects slow SQL queries. + # slow_sql.enabled: true + + # If true, the agent collects explain plans in slow SQL queries. If this setting + # is omitted, the transaction_tracer.explain_enabled setting will be applied as + # the default setting for explain plans in slow SQL as well. + # slow_sql.explain_enabled: true + + # Specify a threshold in seconds. The agent collects slow SQL queries and explain + # plans that exceed this threshold. + # slow_sql.explain_threshold: 0.5 + + # Defines an obfuscation level for slow SQL queries. Valid options are obfuscated, + # raw, or none. + # slow_sql.record_sql: obfuscated + + # Generate a longer sql_id for slow SQL traces. sql_id is used for aggregation of + # similar queries. + # slow_sql.use_longer_sql_id: false + + # If true, the agent captures attributes on span events. + # span_events.attributes.enabled: true + + # Prefix of attributes to exclude from span events. Allows * as wildcard at end. + # span_events.attributes.exclude: [] + + # Prefix of attributes to include on span events. Allows * as wildcard at end. + # span_events.attributes.include: [] + + # If true, enables span event sampling. + # span_events.enabled: true + + # Defines the maximum number of span events reported from a single harvest. Any + # Integer between 1 and 10000 is valid. + # span_events.max_samples_stored: 2000 + + # Sets the maximum number of span events to buffer when streaming to the trace + # observer. + # span_events.queue_size: 10000 + + # Specify a list of exceptions you do not want the agent to strip when + # strip_exception_messages is true. Separate exceptions with a comma. For example, + # "ImportantException,PreserveMessageException". + # strip_exception_messages.allowed_classes: "" + + # If true, the agent strips messages from all exceptions except those in the + # allowlist. Enabled automatically in high security mode. + # strip_exception_messages.enabled: false + + # An array of strings to specify which keys and/or values inside a Stripe event's + # user_data hash should + # not be reported to New Relic. Each string in this array will be turned into a + # regular expression via + # Regexp.new to permit advanced matching. For each hash pair, if either the key or + # value is matched the + # pair will not be reported. By default, no user_data is reported, so this option + # should only be used if + # the stripe.user_data.include option is being used. + # stripe.user_data.exclude: [] + + # An array of strings to specify which keys inside a Stripe event's user_data hash + # should be reported + # to New Relic. Each string in this array will be turned into a regular expression + # via Regexp.new to + # permit advanced matching. Setting the value to ["."] will report all user_data. + # stripe.user_data.include: [] + + # When set to true, forces a synchronous connection to the New Relic collector + # during application startup. For very short-lived processes, this helps ensure + # the New Relic agent has time to report. + # sync_startup: false + + # If true, tracer state storage is thread-local, otherwise, fiber-local + # thread_local_tracer_state: false + + # If true, enables use of the thread profiler. + # thread_profiler.enabled: false + + # Defines the maximum number of seconds the agent should spend attempting to + # connect to the collector. + # timeout: 120 + + # If true, the agent captures attributes from transaction events. + # transaction_events.attributes.enabled: true + + # Prefix of attributes to exclude from transaction events. Allows * as wildcard at + # end. + # transaction_events.attributes.exclude: [] + + # Prefix of attributes to include in transaction events. Allows * as wildcard at + # end. + # transaction_events.attributes.include: [] + + # If true, enables transaction event sampling. + # transaction_events.enabled: true + + # Defines the maximum number of transaction events reported from a single harvest. + # transaction_events.max_samples_stored: 1200 + + # If true, the agent captures attributes on transaction segments. + # transaction_segments.attributes.enabled: true + + # Prefix of attributes to exclude from transaction segments. Allows * as wildcard + # at end. + # transaction_segments.attributes.exclude: [] + + # Prefix of attributes to include on transaction segments. Allows * as wildcard at + # end. + # transaction_segments.attributes.include: [] + + # If true, the agent captures attributes from transaction traces. + # transaction_tracer.attributes.enabled: true + + # Prefix of attributes to exclude from transaction traces. Allows * as wildcard at + # end. + # transaction_tracer.attributes.exclude: [] + + # Prefix of attributes to include in transaction traces. Allows * as wildcard at + # end. + # transaction_tracer.attributes.include: [] + + # If true, enables collection of transaction traces. + # transaction_tracer.enabled: true + + # If true, enables the collection of explain plans in transaction traces. This + # setting will also apply to explain plans in slow SQL traces if + # slow_sql.explain_enabled is not set separately. + # transaction_tracer.explain_enabled: true + + # Threshold (in seconds) above which the agent will collect explain plans. + # Relevant only when explain_enabled is true. + # transaction_tracer.explain_threshold: 0.5 + + # Maximum number of transaction trace nodes to record in a single transaction + # trace. + # transaction_tracer.limit_segments: 4000 + + # If true, the agent records Redis command arguments in transaction traces. + # transaction_tracer.record_redis_arguments: false + + # Obfuscation level for SQL queries reported in transaction trace nodes. + # By default, this is set to obfuscated, which strips out the numeric and string + # literals. + # - If you do not want the agent to capture query information, set this to none. + # - If you want the agent to capture all query information in its original form, + # set this to raw. + # - When you enable high security mode, this is automatically set to obfuscated. + # transaction_tracer.record_sql: obfuscated + + # Specify a threshold in seconds. The agent includes stack traces in transaction + # trace nodes when the stack trace duration exceeds this threshold. + # transaction_tracer.stack_trace_threshold: 0.5 + + # Specify a threshold in seconds. Transactions with a duration longer than this + # threshold are eligible for transaction traces. Specify a float value or the + # string apdex_f. + # transaction_tracer.transaction_threshold: 1.0 + + # If true, the agent automatically detects that it is running in an AWS + # environment. + # utilization.detect_aws: true + + # If true, the agent automatically detects that it is running in an Azure + # environment. + # utilization.detect_azure: true + + # If true, the agent automatically detects that it is running in Docker. + # utilization.detect_docker: true + + # If true, the agent automatically detects that it is running in an Google Cloud + # Platform environment. + # utilization.detect_gcp: true + + # If true, the agent automatically detects that it is running in Kubernetes. + # utilization.detect_kubernetes: true + + # If true, the agent automatically detects that it is running in a Pivotal Cloud + # Foundry environment. + # utilization.detect_pcf: true + +# Environment-specific settings are in this section. +# RAILS_ENV or RACK_ENV (as appropriate) is used to determine the environment. +# If your application has other named environments, configure them here. +local_production: + <<: *default_settings + app_name: rails-opt (Development) + distributed_tracing: + enabled: true + + # To disable the agent regardless of other settings, uncomment the following: + + # agent_enabled: false + + # Logging level for log/newrelic_agent.log + log_level: info + + application_logging: + # If `true`, all logging-related features for the agent can be enabled or disabled + # independently. If `false`, all logging-related features are disabled. + enabled: true + forwarding: + # If `true`, the agent captures log records emitted by this application. + enabled: true + # Defines the maximum number of log records to buffer in memory at a time. + max_samples_stored: 10000 + metrics: + # If `true`, the agent captures metrics related to logging for this application. + enabled: true + local_decorating: + # If `true`, the agent decorates logs with metadata to link to entities, hosts, traces, and spans. + # This requires a log forwarder to send your log files to New Relic. + # This should not be used when forwarding is enabled. + enabled: false + +test: + <<: *default_settings + # It doesn't make sense to report to New Relic from automated test runs. + monitor_mode: false + +staging: + <<: *default_settings + app_name: rails-opt (Staging) + +production: + <<: *default_settings diff --git a/config/secrets.yml b/config/secrets.yml index 73f5e05c..8bf3b1cf 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -13,6 +13,9 @@ development: secret_key_base: a60edc976c913b19fd9fc8118936fbe1df2b07f4eecc5ad32f975e33cd4ea36b150c1ce933b681b90874a46568041629003dcbfc07238f7dca91741bcd1ec870 +local_production: + secret_key_base: a60edc976c913b19fd9fc8118936fbe1df2b07f4eecc5ad32f975e33cd4ea36b150c1ce933b681b90874a46568041629003dcbfc07238f7dca91741bcd1ec870 + test: secret_key_base: 42dd7834039ebbea271af22635a6782ee15e519b14629c5276bfcdd4cff841e9926994784bb43a335a8f8c9739bb254ea3afe831839d4dc65654ec7516ec25f0 diff --git a/config/webpacker.yml b/config/webpacker.yml index 2dfcd170..5bc34a2d 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -46,6 +46,21 @@ test: # Compile test packs to a separate directory public_output_path: packs-test +local_production: + <<: *default + + # Production depends on precompilation of packs prior to booting for performance. + compile: false + + # Cache manifest.json for performance + cache_manifest: true + + dev_server: + host: localhost + port: 3035 + hmr: false + https: false + production: <<: *default diff --git a/dip.yml b/dip.yml index 1b2d1bad..e222e363 100644 --- a/dip.yml +++ b/dip.yml @@ -3,7 +3,7 @@ version: '7.1' # Define default environment variables to pass # to Docker Compose environment: - RAILS_ENV: development + RAILS_ENV: local_production compose: files: diff --git a/img.png b/img.png new file mode 100644 index 0000000000000000000000000000000000000000..bf14b49335ebc0469a9ebb8e1b044d2dde19bfc8 GIT binary patch literal 67477 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