diff --git a/.gitignore b/.gitignore index df2840a6..b64eb6bc 100644 --- a/.gitignore +++ b/.gitignore @@ -52,4 +52,9 @@ package-lock.json .idea/ #sitemap -/public/sitemap.xml.gz \ No newline at end of file +/public/sitemap.xml.gz/public/packs +/public/packs-test +/node_modules +yarn-debug.log* +.yarn-integrity +.env diff --git a/Dockerfile b/Dockerfile index a95bcafa..5d333141 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,11 +7,11 @@ RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources # Install dependencies and perform clean-up RUN apt-get update -qq && apt-get install -y \ - build-essential \ - nodejs \ - yarn \ - && apt-get -q clean \ - && rm -rf /var/lib/apt/lists + build-essential \ + nodejs \ + yarn \ + && apt-get -q clean \ + && rm -rf /var/lib/apt/lists WORKDIR /usr/src/app ENV RAILS_ENV development diff --git a/Envfile b/Envfile index 944a3fac..b7c1654b 100644 --- a/Envfile +++ b/Envfile @@ -49,9 +49,9 @@ variable :AIRBRAKE_PROJECT_ID, :integer, default: 00000 # Algolia for search (not optional) 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 :ALGOLIASEARCH_API_KEY, :String, default: ENV['ALGOLIASEARCH_API_KEY'] +variable :ALGOLIASEARCH_APPLICATION_ID, :String, default: ENV['ALGOLIASEARCH_APPLICATION_ID'] +variable :ALGOLIASEARCH_SEARCH_ONLY_KEY, :String, default: ENV['ALGOLIASEARCH_SEARCH_ONLY_KEY'] # AWS for images storages variable :AWS_ID, :String, default: "Optional" diff --git a/Gemfile b/Gemfile index 1a5f4c0b..a2b58816 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,6 @@ gem "acts_as_follower", github: "forem/acts_as_follower", branch: "master" gem "addressable", "~> 2.5", ">= 2.5.2" gem "administrate", "~> 0.11" gem "ahoy_email", "~> 0.5" -gem "airbrake", "~> 8.1" gem "algoliasearch-rails", "~> 1.21" gem "algorithmia", "~> 1.0" gem "ancestry", "~> 3.0" @@ -37,6 +36,7 @@ gem "dalli", "~> 2.7" gem "delayed_job_active_record", "~> 4.1" gem "delayed_job_web", "~> 1.4" gem "devise", "~> 4.6" +gem "dotenv-rails" gem "draper", "~> 3.0" gem "email_validator", "~> 1.6" gem "emoji_regex", "~> 1.0" @@ -59,12 +59,14 @@ gem "jquery-rails", "~> 4.3" gem "kaminari", "~> 1.1" gem "libhoney", "~> 1.11" gem "liquid", "~> 4.0" +gem "newrelic_rpm" gem "nokogiri", "~> 1.10" gem "octokit", "~> 4.13" gem "omniauth", "~> 1.9" gem "omniauth-github", "~> 1.3" gem "omniauth-twitter", "~> 1.4" gem "pg", "~> 1.1" +gem "prometheus_exporter" gem "pry", "~> 0.12" gem "pry-rails", "~> 0.3" gem "puma", "~> 3.12" @@ -72,6 +74,7 @@ gem "pundit", "~> 2.0" gem "pusher", "~> 1.3" gem "pusher-push-notifications", "~> 1.0" gem "rack-host-redirect", "~> 1.3" +gem "rack-mini-profiler", require: false gem "rack-timeout", "~> 0.5" gem "rails", "~> 5.1.6" gem "rails-assets-airbrake-js-client", "~> 1.5", source: "https://rails-assets.org" @@ -117,6 +120,10 @@ group :development do gem "web-console", "~> 3.7" end +group :development, :local_production do + gem "meta_request" +end + group :development, :test do gem "capybara", "~> 3.13" gem "derailed", "~> 0.1" diff --git a/Gemfile.lock b/Gemfile.lock index c7c050cf..9ad88f9e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -97,10 +97,6 @@ GEM nokogiri railties safely_block (>= 0.1.1) - airbrake (8.1.4) - airbrake-ruby (~> 3.2) - airbrake-ruby (3.2.5) - rbtree3 (~> 0.5) algoliasearch (1.26.0) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) @@ -137,6 +133,7 @@ GEM descendants_tracker (~> 0.0.4) ice_nine (~> 0.11.0) thread_safe (~> 0.3, >= 0.3.1) + base64 (0.2.0) bcrypt (3.1.12) benchmark-ips (2.7.2) better_errors (2.5.0) @@ -263,6 +260,10 @@ GEM docile (1.3.1) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) + dotenv (2.8.1) + dotenv-rails (2.8.1) + dotenv (= 2.8.1) + railties (>= 3.2) draper (3.0.1) actionpack (~> 5.0) activemodel (~> 5.0) @@ -592,6 +593,9 @@ GEM memoizable (0.4.2) thread_safe (~> 0.3, >= 0.3.1) memory_profiler (0.9.12) + meta_request (0.7.4) + rack-contrib (>= 1.1, < 3) + railties (>= 3.0.0, < 7.1) method_source (0.9.2) mime-types (3.2.2) mime-types-data (~> 3.2015) @@ -612,6 +616,8 @@ GEM net-http-persistent (3.0.0) connection_pool (~> 2.2) netrc (0.11.0) + newrelic_rpm (9.6.0) + base64 nio4r (2.3.1) nokogiri (1.10.1) mini_portile2 (~> 2.4.0) @@ -651,6 +657,8 @@ GEM ast (~> 2.4.0) pg (1.1.4) powerpack (0.1.2) + prometheus_exporter (2.0.8) + webrick pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) @@ -675,8 +683,12 @@ GEM pusher-signature (0.1.8) raabro (1.1.6) rack (2.0.6) + rack-contrib (2.4.0) + rack (< 4) 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) @@ -719,7 +731,6 @@ GEM rb-fsevent (0.10.3) rb-inotify (0.9.10) ffi (>= 0.5.0, < 2) - rbtree3 (0.5.0) rbvmomi (1.11.6) builder (~> 3.0) json (>= 1.8) @@ -932,6 +943,7 @@ GEM webpush (0.3.2) hkdf (~> 0.2) jwt + webrick (1.8.1) websocket-driver (0.6.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.3) @@ -952,7 +964,6 @@ DEPENDENCIES addressable (~> 2.5, >= 2.5.2) administrate (~> 0.11) ahoy_email (~> 0.5) - airbrake (~> 8.1) algoliasearch-rails (~> 1.21) algorithmia (~> 1.0) ancestry (~> 3.0) @@ -980,6 +991,7 @@ DEPENDENCIES derailed (~> 0.1) derailed_benchmarks (~> 1.3) devise (~> 4.6) + dotenv-rails draper (~> 3.0) email_validator (~> 1.6) emoji_regex (~> 1.0) @@ -1012,7 +1024,9 @@ DEPENDENCIES libhoney (~> 1.11) liquid (~> 4.0) memory_profiler (~> 0.9) + meta_request nakayoshi_fork + newrelic_rpm nokogiri (~> 1.10) octokit (~> 4.13) omniauth (~> 1.9) @@ -1020,6 +1034,7 @@ DEPENDENCIES omniauth-twitter (~> 1.4) parallel_tests (~> 2.27) pg (~> 1.1) + prometheus_exporter pry (~> 0.12) pry-byebug (~> 3.7) pry-rails (~> 0.3) @@ -1029,6 +1044,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)! diff --git a/Procfile.local_production b/Procfile.local_production new file mode 100644 index 00000000..a41fcad9 --- /dev/null +++ b/Procfile.local_production @@ -0,0 +1,3 @@ +web: bin/rails s -p 3000 +job: bin/rake jobs:work +prometheus_exporter: bundle exec prometheus_exporter diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js new file mode 100644 index 00000000..54b106ee --- /dev/null +++ b/app/javascript/packs/application.js @@ -0,0 +1,10 @@ +/* eslint no-console:0 */ +// This file is automatically compiled by Webpack, along with any other files +// present in this directory. You're encouraged to place your actual application logic in +// a relevant structure within app/javascript and only use these pack files to reference +// that code so it'll be compiled. +// +// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate +// layout file, like app/views/layouts/application.html.erb + +console.log('Hello World from Webpacker') diff --git a/app/views/stories/_main_stories_feed.html.erb b/app/views/stories/_main_stories_feed.html.erb index b6cd0a65..3e175010 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/bin/startup_local_production b/bin/startup_local_production new file mode 100755 index 00000000..53fff5c2 --- /dev/null +++ b/bin/startup_local_production @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby +require "pathname" +require "fileutils" +include FileUtils + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path("..", __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + puts "== STARTING UP ==" + system! "bundle exec rake assets:precompile" if ENV['PRECOMPILE_NEEDED'] + system! "foreman start -f Procfile.local_production" +end diff --git a/case-study.md b/case-study.md new file mode 100644 index 00000000..cc808898 --- /dev/null +++ b/case-study.md @@ -0,0 +1,55 @@ +Бенчмарк до кэша + +``` +Requests per second: 12.53 [#/sec] (mean) +Time per request: 79.815 [ms] (mean) +Time per request: 79.815 [ms] (mean, across all concurrent requests) +Transfer rate: 1766.58 [Kbytes/sec] received + +Connection Times (ms) + min mean[+/-sd] median max +Connect: 0 0 0.0 0 0 +Processing: 59 80 20.6 71 118 +Waiting: 59 80 20.6 71 118 +Total: 59 80 20.6 71 118 + +Percentage of the requests served within a certain time (ms) + 50% 71 + 66% 89 + 75% 100 + 80% 101 + 90% 118 + 95% 118 + 98% 118 + 99% 118 + 100% 118 (longest request) +``` + +Бенчмарк после кэширования фрагмента story в app/views/stories/_main_stories_feed.html.erb + +``` +Requests per second: 21.13 [#/sec] (mean) +Time per request: 47.333 [ms] (mean) +Time per request: 47.333 [ms] (mean, across all concurrent requests) +Transfer rate: 2979.84 [Kbytes/sec] received + +Connection Times (ms) + min mean[+/-sd] median max +Connect: 0 0 0.0 0 0 +Processing: 38 47 13.6 44 85 +Waiting: 38 47 13.6 44 85 +Total: 38 47 13.6 44 85 + +Percentage of the requests served within a certain time (ms) + 50% 44 + 66% 46 + 75% 46 + 80% 48 + 90% 85 + 95% 85 + 98% 85 + 99% 85 + 100% 85 (longest request) +``` + +По медиане оптимизация принесла 60% ускорения загрузки diff --git a/config/application.rb b/config/application.rb index 1b4c391f..42742f9b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -53,5 +53,7 @@ class Application < Rails::Application end ReservedWords.all = [ReservedWords::BASE_WORDS + top_routes].flatten.compact.uniq end + + config.skylight.environments << "local_production" end end diff --git a/config/environments/local_production.rb b/config/environments/local_production.rb new file mode 100644 index 00000000..2e8563eb --- /dev/null +++ b/config/environments/local_production.rb @@ -0,0 +1,45 @@ +Rails.application.configure do + config.webpacker.check_yarn_integrity = false + config.cache_classes = true + config.eager_load = true + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + config.cache_store = :memory_store + config.public_file_server.enabled = true + config.public_file_server.headers = { + "Cache-Control" => "public, s-maxage=2592000, max-age=86400" + } + config.assets.js_compressor = Uglifier.new(harmony: true) + config.action_mailer.raise_delivery_errors = false + config.active_support.deprecation = :log + config.active_record.migration_error = :page_load + config.assets.debug = false + config.assets.compile = true + config.assets.digest = true + config.assets.quiet = true + config.assets.raise_runtime_errors = true + 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 + config.action_mailer.perform_caching = false + 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.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews" + config.log_level = :debug + config.log_tags = [:request_id] +end diff --git a/config/environments/production.rb b/config/environments/production.rb index 9926e830..15d60a72 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -2,6 +2,9 @@ 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 + + # Verifies that versions and hashed value of the package contents in the project's package.json config.webpacker.check_yarn_integrity = false # Settings specified here will take precedence over those in config/application.rb. diff --git a/config/initializers/airbrake.rb b/config/initializers/airbrake.rb deleted file mode 100644 index 0a3fffc7..00000000 --- a/config/initializers/airbrake.rb +++ /dev/null @@ -1,60 +0,0 @@ -# Airbrake is an online tool that provides robust exception tracking in your Rails -# applications. In doing so, it allows you to easily review errors, tie an error -# to an individual piece of code, and trace the cause back to recent -# changes. Airbrake enables for easy categorization, searching, and prioritization -# of exceptions so that when errors occur, your team can quickly determine the -# root cause. -# -# Configuration details: -# https://github.com/airbrake/airbrake-ruby#configuration -Airbrake.configure do |c| - # You must set both project_id & project_key. To find your project_id and - # project_key navigate to your project's General Settings and copy the values - # from the right sidebar. - # https://github.com/airbrake/airbrake-ruby#project_id--project_key - c.project_id = ApplicationConfig["AIRBRAKE_PROJECT_ID"] - c.project_key = ApplicationConfig["AIRBRAKE_API_KEY"] - - # Configures the root directory of your project. Expects a String or a - # Pathname, which represents the path to your project. Providing this option - # helps us to filter out repetitive data from backtrace frames and link to - # GitHub files from our dashboard. - # https://github.com/airbrake/airbrake-ruby#root_directory - c.root_directory = Rails.root - - # By default, Airbrake Ruby outputs to STDOUT. In Rails apps it makes sense to - # use the Rails' logger. - # https://github.com/airbrake/airbrake-ruby#logger - c.logger = Rails.logger - - # Configures the environment the application is running in. Helps the Airbrake - # dashboard to distinguish between exceptions occurring in different - # environments. By default, it's not set. - # NOTE: This option must be set in order to make the 'ignore_environments' - # option work. - # https://github.com/airbrake/airbrake-ruby#environment - c.environment = Rails.env - - # Setting this option allows Airbrake to filter exceptions occurring in - # unwanted environments such as :test. By default, it is equal to an empty - # Array, which means Airbrake Ruby sends exceptions occurring in all - # 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] - - # A list of parameters that should be filtered out of what is sent to - # Airbrake. By default, all "password" attributes will have their contents - # replaced. - # https://github.com/airbrake/airbrake-ruby#blacklist_keys - c.blacklist_keys = [/password/i] -end - -# If Airbrake doesn't send any expected exceptions, we suggest to uncomment the -# line below. It might simplify debugging of background Airbrake workers, which -# can silently die. -# Thread.abort_on_exception = ['test', 'development'].include?(Rails.env) - -Airbrake.add_filter do |notice| - notice.ignore! if notice[:errors].any? { |error| error[:type] == "Pundit::NotAuthorizedError" } -end diff --git a/config/initializers/prometheus.rb b/config/initializers/prometheus.rb new file mode 100644 index 00000000..967979c8 --- /dev/null +++ b/config/initializers/prometheus.rb @@ -0,0 +1,6 @@ +unless Rails.env.test? + require "prometheus_exporter/middleware" + + # This reports stats per request like HTTP status and timings + Rails.application.middleware.unshift PrometheusExporter::Middleware +end diff --git a/config/initializers/rack_mini_profiler.rb b/config/initializers/rack_mini_profiler.rb new file mode 100644 index 00000000..7a61503c --- /dev/null +++ b/config/initializers/rack_mini_profiler.rb @@ -0,0 +1,8 @@ +# # frozen_string_literal: true + +# if Rails.env.development? +# require "rack-mini-profiler" + +# # The initializer was required late, so initialize it manually. +# Rack::MiniProfilerRails.initialize!(Rails.application) +# end diff --git a/config/initializers/rack_profiler.rb b/config/initializers/rack_profiler.rb new file mode 100644 index 00000000..b1fec2d5 --- /dev/null +++ b/config/initializers/rack_profiler.rb @@ -0,0 +1,4 @@ +require "rack-mini-profiler" + +Rack::MiniProfilerRails.initialize!(Rails.application) +Rack::MiniProfiler.config.authorization_mode = :allow_all diff --git a/config/newrelic.yml b/config/newrelic.yml new file mode 100644 index 00000000..8126e8e8 --- /dev/null +++ b/config/newrelic.yml @@ -0,0 +1,827 @@ +# +# 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 <%= Time.now.strftime('%B %d, %Y') %><%= ", for version #{@agent_version}" if @agent_version %> +#<%= "\n# #{generated_for_user}\n#" if generated_for_user %> +# 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 # Required license key associated with your New Relic account. + license_key: <%= license_key %> + + # 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: task_4 + + # 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 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 at the beginning and end. + # 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 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 + + # 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 + + # 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, 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. +development: + <<: *default_settings + app_name: task_4 (Development) + +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: task_4 (Staging) + +production: + <<: *default_settings + +local_production: + <<: *default_settings diff --git a/config/secrets.yml b/config/secrets.yml index 73f5e05c..ae0e21d8 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -16,7 +16,8 @@ development: test: secret_key_base: 42dd7834039ebbea271af22635a6782ee15e519b14629c5276bfcdd4cff841e9926994784bb43a335a8f8c9739bb254ea3afe831839d4dc65654ec7516ec25f0 - +local_production: + secret_key_base: a60edc976c913b19fd9fc8118936fbe1df2b07f4eecc5ad32f975e33cd4ea36b150c1ce933b681b90874a46568041629003dcbfc07238f7dca91741bcd1ec870 # Do not keep production secrets in the repository, # instead read values from the environment. production: diff --git a/config/webpacker.yml b/config/webpacker.yml index 2dfcd170..4fad4c5c 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -46,7 +46,7 @@ test: # Compile test packs to a separate directory public_output_path: packs-test -production: +production: &production <<: *default # Production depends on precompilation of packs prior to booting for performance. @@ -54,3 +54,6 @@ production: # Cache manifest.json for performance cache_manifest: true + +local_production: + <<: *production diff --git a/docker-compose.prom.yml b/docker-compose.prom.yml new file mode 100644 index 00000000..068f8ba3 --- /dev/null +++ b/docker-compose.prom.yml @@ -0,0 +1,25 @@ +services: + prometheus: + image: prom/prometheus + container_name: prometheus + command: + - '--config.file=/etc/prometheus/prometheus.yml' + ports: + - 9090:9090 + restart: unless-stopped + volumes: + - ./prometheus:/etc/prometheus + - prom_data:/prometheus + grafana: + image: grafana/grafana + container_name: grafana + ports: + - 3001:3001 + restart: unless-stopped + environment: + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=grafana + volumes: + - ./grafana:/etc/grafana/provisioning/datasources +volumes: + prom_data: diff --git a/prometheus/prometheus.yml b/prometheus/prometheus.yml new file mode 100644 index 00000000..331b98ce --- /dev/null +++ b/prometheus/prometheus.yml @@ -0,0 +1,7 @@ +global: + scrape_interval: 15s + +scrape_configs: + - job_name: 'rails' + static_configs: + - targets: ['localhost:3000']