# New Relic Ruby Agent Release Notes #

## v3.14.1 ##

  * Add support for setting a display name on hosts

  You can now configure a display name for your hosts using process_host.display_name,
  to more easily distinguish dynamically assigned hosts. For more info, see
  https://docs.newrelic.com/docs/apm/new-relic-apm/maintenance/add-rename-remove-hosts#display_name

  * Fixes automatic middleware instrumentation for Puma 2.12.x

  Starting with version 2.12.x the Puma project inlines versions of Rack::Builder
  and Rack::URLMap under the Puma namespace. This had the unfortunate side effect of
  breaking automatic Rack middleware instrumentation. We now instrument Puma::Rack::Builder
  and Puma::Rack::URLMap and once again have automatic Rack middleware instrumentation for
  applications running on Puma.

  * Do not use a DelayedJob's display_name for naming the transaction

  A DelayedJob's name may be superceded by a display_name, which can
  lead to a metric grouping issue if the display_name contains unique
  identifiers. We no longer use job name methods that may lead to an
  arbitrary display_name. Instead, we use the appropriate class and/or
  method names, depending what makes sense for the job and how it's called.

  * Improvements to Mongo 2.1.x instrumentation

  Fixes issue where getMore operations in batched queries could create metric grouping issues.
  Previously when multiple Mongo queries executed in the same scope only a single query was recorded
  as part of a transaction trace. Now transaction trace nodes will be created for every query
  executed during a transaction.

  * Bugfix for NewRelic::Agent.notice_error

  Fixes issue introduced in v3.14.0 where calling NewRelic::Agent.notice_error outside of an active
  transaction results in a NoMethodError.

  * Bugfix for Resque TransactionError events

  Fixes error preventing Transaction Error events generated in Resque tasks from being sent to New Relic.

## v3.14.0 ##

  * pruby marshaller removed

  The deprecated pruby marshaller has now been removed; the `marshaller` config
  option now only accepts `json`. Customers still running Ruby 1.8.7/REE must
  add the `json` gem to their Gemfile, or (preferably) upgrade to Ruby 1.9.3 or
  newer.

  * Log dates in ISO 8601 format

  The agent will now log dates in ISO 8601 (YYYY-mm-dd) format, instead of
  mm/dd/yy.

  * Additional attributes collected

  The agent now collects the following information in web transactions:
  Accept, Host, User-Agent, Content-Length HTTP request headers, HTTP request
  method, and Content-Type HTTP response header.

  * TransactionErrors reported for Advanced Analytics for APM Errors

  With this release, the agent reports TransactionError events. These new events
  power the beta feature Advanced Analytics for APM Errors. The error events are
  also available today through New Relic Insights.

  Advanced Analytics for APM Errors lets you see all of your errors, with
  granular detail. Filter and group by any attribute to analyze them. Take
  action to resolve issues through collaboration.

  For more information, see https://docs.newrelic.com/docs/apm/applications-menu/events/view-apm-errors-error-traces

## v3.13.2 ##

  * Don't fail to send data when using 'mathn' library

  Version 3.12.1 introduced a bug with applications using the 'mathn' library
  that would prevent the agent from sending data to New Relic. This has been
  fixed.

## v3.13.1 ##

  * Don't use a pager when running `git log` command

  This would cause Capistrano deploys to hang when a large number of commits were being deployed.
  Thanks to John Naegle for reporting and fixing this issue!

  * Official support for JRuby 9.0.0.0

  The Ruby agent is now officially fully tested and supported on JRuby 9.0.0.0.

  * Instrumentation for MongoDB 2.1.x

  Visibility in your MongoDB queries returns when using version 2.1.0 of
  the Mongo driver or newer.  Thanks to Durran Jordan of MongoDB for contributing
  the Mongo Monitoring instrumentation!

  * Fix for ArgumentError "invalid byte sequence in UTF-8"

  This would come up when trying to parse out the operation from a database query
  containing characters that would trigger a invalid byte sequence in UTF-8 error.
  Thanks to Mario Izquierdo for reporting this issue!

  * Improved database metric names for ActiveRecord::Calculations queries

  Aggregate metrics recorded for queries made via the ActiveRecord::Calculations
  module (#count, #sum, #max, etc.) will now be associated with the correct
  model name, rather than being counted as generic 'select' operations.

  * Allow at_exit handlers to be installed for Rubinius

  Rubinius can support the at_exit block used by install_exit_handler.
  Thanks to Aidan Coyle for reporting and fixing this issue!

## v3.13.0 ##

  * Bugfix for uninitialized constant NewRelic::Agent::ParameterFiltering

  Users in some environments encountered a NameError: uninitialized constant
  NewRelic::Agent::ParameterFiltering from the Rails instrumentation while
  running v3.12.x of the Ruby agent. This issue has been fixed.

  * Rake task instrumentation

  The Ruby agent now provides opt-in tracing for Rake tasks. If you run
  long jobs via Rake, you can get all the visibility and goodness of New Relic
  that your other background jobs have. To enable this, see
  https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/rake

  * Redis instrumentation

  Redis operations will now show up on the Databases tab and in transaction
  traces. By default, only command names will be captured; to capture command
  arguments, set `transaction_tracer.record_redis_arguments` to `true` in
  your configuration.

  * Fix for over-obfuscated SQL Traces and PostgreSQL

  An issue with the agent obfuscating column and table names from Slow SQL
  Traces when using PostgreSQL has been resolved.

  * Rubinius 2.5.8 VM metric renaming support

  Rubinius 2.5.8 changed some VM metric names and eliminated support for
  total allocated object counters. The agent has been updated accordingly.

  * Fix agent attributes with a value of false not being stored

  An issue introduced in v3.12.1 prevented attributes (like those added with
  `add_custom_attributes`) from being stored if their value was false. This has
  been fixed.

## v3.12.1 ##

  * More granular Database metrics for ActiveRecord 3 and 4

  Database metrics recorded for non-SELECT operations (UPDATE, INSERT, DELETE,
  etc.) on ActiveRecord 3 and 4 now include the model name that the query was
  being executed against, allowing you to view these queries broken down by
  model on the Datastores page. Thanks to Bill Kayser for reporting this issue!

  * Support for Multiverse testing third party gems

  The Ruby agent has rich support for testing multiple gem versions, but
  previously that wasn't accessible to third party gems.  Now you can now
  simply `require 'task/multiverse'` in your Rakefile to access the same
  test:multiverse task that New Relic uses itself. For more details, see:

  https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/third-party-instrumentation#testing-your-extension

  * Use Sidekiq 3.x's error handler

  Sidekiq 3.x+ provides an error handler for internal and middleware related
  failures. Failures at these points were previously unseen by the Ruby agent,
  but now they are properly traced.

  * Better error messages for common configuration problems with Capistrano

  Templating errors in newrelic.yml would result in obscure error messages
  during Capistrano deployments. These messages now more properly reflect the
  root cause of the errors.

  * newrelic_ignore methods allow strings

  The newrelic_ignore methods previously only supported passing symbols, and
  would quietly ignore any strings passed. Now strings can be passed as well
  to get the intuitive ignoring behavior you'd expect.

  * Replace DNS resolver for Resque jobs with Resolv

  In some circumstances customers with a very high number of short-lived Resque
  jobs were experiencing deadlocks during DNS resolution. Resolv is an all Ruby
  DNS resolver that replaces the libc implementation to prevent these deadlocks.

## v3.12.0 ##

  * Flexible capturing of attributes

  The Ruby agent now allows you more control over exactly which request
  parameters and job arguments are attached to transaction traces, traced
  errors, and Insights events. For details, see:

  https://docs.newrelic.com/docs/agents/ruby-agent/ruby-agent-attributes

  * Fixed missing URIs in traces for retried Excon requests

  If Excon's idempotent option retried a request, the transaction trace node
  for the call would miss having the URI assigned. This has been fixed.

  * Capturing request parameters from rescued exceptions in Grape

  If an exception was handled via a rescue_from in Grape, request parameters
  were not properly set on the error trace. This has been fixed. Thanks to
  Ankit Shah for helping us spot the bug.

## v3.11.2 ##

  * Better naming for Rack::URLMap

  If a Rack app made direct use of Rack::URLMap, instrumentation would miss
  out on using the clearest naming based on the app class. This has been
  fixed.

  * Avoid performance regression in makara database adapter

  Delegation in the makara database adapter caused performance issues when the
  agent looked up a connection in the pool.  The agent now uses a faster
  lookup to work around this problem in makara, and allocates less as well.
  Thanks Mike Nelson for the help in resolving this!

  * Allow audit logging to STDOUT

  Previously audit logs of the agent's communication with New Relic could only
  write to a file. This prevented using the feature on cloud providers like
  Heroku. Now STDOUT is an allowed destination for `audit_log.path`. Logging
  can also be restricted to certain endpoints via `audit_log.endpoints`.

  For more information see https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ruby-agent-configuration#audit_log

  * Fix for crash during startup when Rails required but not used

  If an application requires Rails but wasn't actually running it, the Ruby
  agent would fail during startup. This has been fixed.

  * Use IO.select explicitly in the event loop

  If an application adds their own select method to Object/Kernel or mixes in a
  module that overrides the select method (as with ActionView::Helpers) we would
  previously have used their implementation instead of the intended IO.select,
  leading to all sorts of unusual errors. We now explicitly reference IO.select
  in the event loop to avoid these issues.

  * Fix for background thread hangs on old Linux kernels

  When running under Ruby 1.8.7 on Linux kernel versions 2.6.11 and earlier,
  the background thread used by the agent to report data would hang, leading
  to no data being reported. This has been be fixed.

## v3.11.1 ##

  If an application adds their own select method to Object/Kernel or mixes in a
  module that overrides the select method (as with ActionView::Helpers) we would
  previously have used their implementation instead of the intended IO.select,
  leading to all sorts of unusual errors. We now explicitly reference IO.select
  in the event loop to avoid these issues.

  * Fix for background thread hangs on old Linux kernels

  When running under Ruby 1.8.7 on Linux kernel versions 2.6.11 and earlier,
  the background thread used by the agent to report data would hang, leading
  to no data being reported. This has been be fixed.

## v3.11.1 ##

  The Ruby agent incorrectly rescued exceptions at a point which caused
  sequel_pg 1.6.11 to segfault. This has been fixed. Thanks to Oldrich
  Vetesnik for the report!

## v3.11.0 ##

  * Unified view for SQL database and NoSQL datastore products.

  The response time charts in the application overview page will now include
  NoSQL datastores, such as MongoDB, and also the product name of existing SQL
  databases such as MySQL, Postgres, etc.

  The Databases page will now enable the filtering of metrics and operations
  by product, and includes a table listing all operations.

  For existing SQL databases, in addition to the existing breakdown of SQL
  statements and operations, the queries are now also associated with the
  database product being used.

  For NoSQL datastores, such as MongoDB, we have now added information about
  operations performed against those products, similar to what is being done
  for SQL databases.

  Because this introduces a notable change to how SQL database metrics are
  collected, it is important that you upgrade the agent version on all hosts.
  If you are unable to transition to the latest agent version on all hosts at
  the same time, you can still access old and new metric data for SQL
  databases, but the information will be split across two separate views.

  For more information see https://docs.newrelic.com/docs/apm/applications-menu/monitoring/databases-slow-queries-dashboard

  * Track background transactions as Key Transactions

  In prior versions of the Ruby agent, only web transactions could be tracked
  as Key Transactions. This functionality is now available to all
  transactions, including custom Apdex values and X-Ray sessions.

  For more information see https://docs.newrelic.com/docs/apm/selected-transactions/key-transactions/key-transactions-tracking-important-transactions-or-events

  * More support and documentation for third-party extensions

  It's always been possible to write extension gems for the Ruby agent, but
  now there's one location with best practices and recommendations to guide
  you in writing extensions. Check out
  https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/third-party-instrumentation

  We've also added simpler APIs for tracing datastores and testing your
  extensions. It's our way of giving back to everyone who's helped build on
  the agent over the years. <3

  * Fix for anonymous class middleware naming

  Metric names based off anonymous middlewares lacked a class name in the UI.
  The Ruby agent will now look for a superclass, or default to AnonymousClass
  in those cases.

  * Improved exit behavior in the presence of Sinatra

  The agent uses an `at_exit` hook to ensure data from the last < 60s before a
  process exits is sent to New Relic. Previously, this hook was skipped if
  Sinatra::Application was defined. This unfortunately missed data for
  short-lived background processes that required, but didn't run, Sinatra. Now
  the agent only skips its `at_exit` hook if Sinatra actually runs from
  `at_exit`.

## v3.10.0 ##

  * Support for the Grape framework

  We now instrument the Grape REST API framework! To avoid conflicts with the
  third-party newrelic-grape gem, our instrumentation will not be installed if
  newrelic-grape is present in the Gemfile.

  For more details, see https://docs.newrelic.com/docs/agents/ruby-agent/frameworks/grape-instrumentation

  * Automatic Cross Application Tracing support for all Rack applications

  Previously Rack apps not using Rails or Sinatra needed to include the
  AgentHooks middleware to get Cross Application Tracing support. With
  these changes, this is no longer necessary. Any explicit references to
  AgentHooks can be removed unless the `disable_middleware_instrumentation`
  setting is set to `true`.

  * Metrics no longer reported from Puma master processes

  When using Puma's cluster mode with the preload_app! configuration directive,
  the agent will no longer start its reporting thread in the Puma master
  process. This should result in more accurate instance counts, and more
  accurate stats on the Ruby VMs page (since the master process will be
  excluded).

  * Better support for Sinatra apps used with Rack::Cascade

  Previously, using a Sinatra application as part of a Rack::Cascade chain would
  cause all transactions to be named after the Sinatra application, rather than
  allowing downstream applications to set the transaction name when the Sinatra
  application returned a 404 response. This has been fixed.

  * Updated support for Rubinius 2.3+ metrics

  Rubinius 2.3 introduced a new system for gathering metrics from the
  underlying VM. Data capture for the Ruby VM's page has been updated to take
  advantage of these. Thanks Yorick Peterse for the contribution!

  * Fix for missing ActiveJob traced errors

  ActiveJobs processed by backends where the Ruby agent lacked existing
  instrumentation missed reporting traced errors. This did not impact
  ActiveJobs used with Sidekiq or Resque, and has been fixed.

  * Fix possible crash in middleware tracing

  In rare circumstances, a failure in the agent early during tracing of a web
  request could lead to a cascading error when trying to capture the HTTP status
  code of the request. This has been fixed. Thanks to Michal Cichra for the fix!

## v3.9.9 ##

  * Support for Ruby 2.2

  A new version of Ruby is available, and the Ruby agent is ready to run on
  it. We've been testing things out since the early previews so you can
  upgrade to the latest and greatest and use New Relic right away to see how
  the new Ruby's performing for you.

  * Support for Rails 4.2 and ActiveJob

  Not only is a new Ruby available, but a new Rails is out too! The Ruby agent
  provides all the usual support for Rails that you'd expect, and we
  instrument the newly released ActiveJob framework that's part of 4.2.

  * Security fix for handling of error responses from New Relic servers

  This release fixes a potential security issue wherein an attacker who was able
  to impersonate New Relic's servers could have triggered arbitrary code
  execution in agent's host processes by sending a specially-crafted error
  response to a data submission request.

  This issue is mitigated by the fact that the agent uses SSL certificate
  checking in order to verify the identity of the New Relic servers to which it
  connects. SSL is enabled by default by the agent, and can be enforced
  account-wide by enabling High Security Mode for your account:

  https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security

  * Fix for transactions with invalid URIs

  If an application used the agent's `ignore_url_regexes` config setting to
  ignore certain transactions, but received an invalid URI, the agent would
  fail to record the transaction. This has been fixed.

  * Fixed incompatibility with newrelic-grape

  The 3.9.8 release of the Ruby agent included disabled prototyped
  instrumentation for the Grape API framework. This introduced an
  incompatibility with the existing third party extension newrelic-grape. This
  has been fixed. Newrelic-grape continues to be the right solution until
  full agent support for Grape is available.

## v3.9.8 ##

  * Custom Insights events API

  In addition to attaching custom parameters to the events that the Ruby agent
  generates automatically for each transaction, you can now record custom event
  types into Insights with the new NewRelic::Agent.record_custom_event API.

  For details, see https://docs.newrelic.com/docs/insights/new-relic-insights/adding-querying-data/inserting-custom-events-new-relic-agents

  * Reduced memory usage for idling applications

  Idling applications using the agent could previously appear to leak memory
  because of native allocations during creation of new SSL connections to our
  servers. These native allocations didn't factor into triggering Ruby's
  garbage collector.

  The agent will now re-use a single TCP connection to our servers for as long
  as possible, resulting in improved memory usage for applications that are
  idling and not having GC triggered for other reasons.

  * Don't write to stderr during CPU sampling

  The Ruby agent's code for gathering CPU information would write error
  messages to stderr on some FreeBSD systems. This has been fixed.

  * LocalJumpError on Rails 2.x

  Under certain conditions, Rails 2.x controller instrumentation could fail
  with a LocalJumpError when an action was not being traced. This has been
  fixed.

  * Fixed config lookup in warbler packaged apps

  When running a Ruby application from a standalone warbler .jar file on
  JRuby, the packaged config/newrelic.yml was not properly found. This has
  been fixed, and thanks to Bob Beaty for the help getting it fixed!

  * Hash iteration failure in middleware

  If a background thread iterated over the keys in the Rack env hash, it could
  cause failures in New Relic's AgentHooks middleware. This has been fixed.

## v3.9.7 ##

  * Support for New Relic Synthetics

  The Ruby agent now gives you additional information for requests from New
  Relic Synthetics. More transaction traces and events give you a clearer look
  into how your application is performing around the world.

  For more details, see https://docs.newrelic.com/docs/synthetics/new-relic-synthetics/getting-started/new-relic-synthetics

  * Support for multiple job per fork gems with Resque

  The resque-jobs-per-fork and resque-multi-job-forks gems alter Resque to
  fork every N jobs instead of every job. This previously caused issues for
  the Ruby agent, but those have been resolved. These gems are fully supported.

  Running Resque with the FORK_PER_JOB=false environment variable setting is
  also supported now.

  For more details on our Resque support, see https://docs.newrelic.com/docs/agents/ruby-agent/background-jobs/resque-instrumentation

  * Support agent when starting Resque Pool from Rake task

  When running resque-pool with its provided rake tasks, the agent would not
  start up properly. Thanks Tiago Sousa for the fix!

  * Fix for DelayedJob + Rails 4.x queue depth metrics

  The Ruby agent periodically records DelayedJob queuedepth as a metric, but
  this didn't work properly in Rails 4.x applications.  This has been fixed.
  Thanks Jonathan del Strother for his help with the issue!

  * Fix for failure in background transactions with rules.ignore_url_regexes

  The recently added feature for ignoring transactions via URL regexes caused
  errors for non-web transactions. This has been fixed.

  * Rename the TransactionNamer.name method to TransactionNamer.name_for

  The internal TransactionNamer class had a class method called 'name', with a
  different signature than the existing Class#name method and could cause
  problems when trying to introspect instances of the class.

  Thanks to Dennis Taylor for contributing this fix!

## v3.9.6 ##

  * Rails 4.2 ActiveJob support

  A new version of Rails is coming! One of the highlight features is
  ActiveJob, a framework for interacting with background job processors. This
  release of the Ruby agent adds instrumentation to give you insight into
  ActiveJob, whether you're just testing it out or running it for real.

  Metrics are recorded around enqueuing ActiveJobs, and background transactions
  are started for any ActiveJob performed where the agent didn't already
  provide specific instrumentation (such as DelayedJob, Resque and Sidekiq).

  Since Rails 4.2 is still in beta we'd love to hear any feedback on this
  instrumentation so it'll be rock solid for the general release!

  * Ruby 2.2.0-preview1 updates

  Ruby 2.2.0 is on its way later in the year, and the Ruby agent is ready for
  it. Updates to the GC stats and various other small changes have already been
  applied, and our automated tests are running against 2.2.0 so the agent will
  be ready on release day.

  * Ignoring transactions by URL

  While you could always ignore transactions by controller and action, the
  Ruby agent previously lacked a way to ignore by specific URLs or patterns
  without code changes. This release adds the config setting,
  `rules.ignore_url_regexes` to ignore specific transactions based on the
  request URL as well. For more information, see the documentation at:
  https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ignoring-specific-transactions#config-ignoring

  * Better dependency detection in non-Rack applications

  The Ruby agent runs dependency detection at key points in the Rack and Rails
  lifecycle, but non-Rails apps could occasionally miss out instrumenting late
  loaded libraries. The agent now runs an additional dependency detection
  during manual_start to more seamlessly install instrumentation in any app.

  * Excluding /newrelic routes from developer mode

  Recent changes to track time in middleware resulted in New Relic's developer
  mode capturing its own page views in the list. This has been fixed. Thanks
  to Ignatius Reza Lesmana for the report!

  * Spikes in external time

  Timeouts during certain external HTTP requests could result in incorrect
  large spikes in the time recorded by the agent. This has been fixed.

  * Recognize browser_monitoring.auto_instrument setting in non-Rails apps

  The `browser_monitoring.auto_instrument` config setting disables
  auto-injection of JavaScript into your pages, but was not properly obeyed in
  Sinatra and other non-Rails contexts.  This has been fixed.

  * Failures to gather CPU thread time on JRuby

  JRuby running on certain JVM's and operating systems (FreeBSD in particular)
  did not always support the method being used to gather CPU burn metrics.
  This would result in a failure during those transactions. This has been
  fixed.

  * Fix for rare race condition in Resque instrumentation

  A race condition in the agent's Resque instrumentation that could cause rare
  Resque job failures in high-throughput Resque setups has been fixed. This bug
  would manifest as an exception with the following error message:
  "RuntimeError: can't add a new key into hash during iteration" and a backtrace
  leading through the PipeChannelManager class in the agent.

## v3.9.5 ##

  * Per-dyno data on Heroku

  When running on Heroku, data from the agent can now be broken out by dyno
  name, allowing you to more easily see what's happening on a per-dyno level.
  Dynos on Heroku are now treated in the same way that distinct hosts on other
  platforms work.

  By default, 'scheduler' and 'run' dyno names will be aggregated into
  'scheduler.*' and 'run.*' to avoid unbounded growth in the number of reported
  hostnames.

  Read more about this feature on our Heroku docs page:
  https://docs.newrelic.com/docs/agents/ruby-agent/miscellaneous/ruby-agent-heroku

  * HTTP response codes in Insights events

  The Ruby agent will now capture HTTP response codes from Rack applications
  (including Rails and Sinatra apps) and include them under the httpResponseCode
  attribute on events sent to Insights.

  * Stricter limits on memory usage of SQL traces

  The agent now imposes stricter limits on the number of distinct SQL traces
  that it will buffer in memory at any point in time, leading to more
  predictable memory consumption even in exceptional circumstances.

  * Improved reliability of thread profiling

  Several issues that would previously have prevented the successful completion
  and transmission of thread profiles to New Relic's servers have been fixed.

  These issues were related to the use of recursion in processing thread
  profiles, and have been addressed by both limiting the maximum depth of the
  backtraces recorded in thread profiles, and eliminating the agent's use of
  recursion in processing profile data.

  * Allow tracing Rails view helpers with add_method_tracer

  Previously, attempting to trace a Rails view helper method using
  add_method_tracer on the view helper module would lead to a NoMethodError
  when the traced method was called (undefined method `trace_execution_scoped').
  This has been fixed.

  This issue was an instance of the Ruby 'dynamic module inclusion' or 'double
  inclusion' problem. Usage of add_method_tracer now no longer relies upon the
  target class having actually picked up the trace_execution_scoped method from
  the NewRelic::Agent::MethodTracer module.

  * Improved performance of queue time parsing

  The number of objects allocated while parsing the front-end timestamps on
  incoming HTTP requests has been significantly reduced.

  Thanks to Aleksei Magusev for the contribution!

## v3.9.4 ##

  * Allow agent to use alternate certificate stores

  When connecting via SSL to New Relic services, the Ruby agent verifies its
  connection via a certificate bundle shipped with the agent. This had problems
  with certain proxy configurations, so the `ca_bundle_path` setting in
  newrelic.yml can now override where the agent locates the cert bundle to use.

  For more information see the documentation at:
  https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ssl-settings-ruby-agent

  * Rails 4.2 beta in tests

  Although still in beta, a new version of Rails is on its way!  We're
  already running our automated test suites against the beta to ensure New
  Relic is ready the day the next Rails is released.

  * ActiveRecord 4 cached queries fix

  Queries that were hitting in the ActiveRecord 4.x query cache were
  incorrectly being counted as database time by the agent.

  * Fix for error in newrelic.yml loading

  If your application ran with a RAILS_ENV that was not listed in newrelic.yml
  recent agent versions would give a NameError rather than a helpful message.
  This has been fixed. Thanks Oleksiy Kovyrin for the patch!

## v3.9.3 ##

  * Fix to prevent proxy credentials transmission

  This update prevents proxy credentials set in the agent config file from
  being transmitted to New Relic.

## v3.9.2 ##

  * Added API for ignoring transactions

  This release adds three new API calls for ignoring transactions:

    - `NewRelic::Agent.ignore_transaction`
    - `NewRelic::Agent.ignore_apdex`
    - `NewRelic::Agent.ignore_enduser`

  The first of these ignores a transaction completely: nothing about it will be
  reported to New Relic. The second ignores only the Apdex metric for a single
  transaction. The third disables javascript injection for browser monitoring
  for the current transaction.

  These methods differ from the existing newrelic_ignore_* method in that they
  may be called *during* a transaction based on some dynamic runtime criteria,
  as opposed to at the class level on startup.

  See the docs for more details on how to use these methods:
  https://docs.newrelic.com/docs/agents/ruby-agent/installation-and-configuration/ignoring-specific-transactions

  * Improved SQL obfuscation

  SQL queries containing string literals ending in backslash ('\') characters
  would previously not have been obfuscated correctly by the Ruby agent prior to
  transmission to New Relic. In addition, SQL comments were left un-obfuscated.
  This has been fixed, and the test coverage for SQL obfuscation has been
  improved.

  * newrelic_ignore* methods now work when called in a superclass

  The newrelic_ignore* family of methods previously did not apply to subclasses
  of the class from which it was called, meaning that Rails controllers
  inheriting from a single base class where newrelic_ignore had been called
  would not be ignored. This has been fixed.

  * Fix for rare crashes in Rack::Request#params on Sinatra apps

  Certain kinds of malformed HTTP requests could previously have caused
  unhandled exceptions in the Ruby agent's Sinatra instrumentation, in the
  Rack::Request#params method. This has been fixed.

  * Improved handling for rare errors caused by timeouts in Excon requests

  In some rare cases, the agent would emit a warning message in its log file and
  abort instrumentation of a transaction if a timeout occurred during an
  Excon request initiated from within that transaction. This has been fixed.

  * Improved behavior when the agent is misconfigured

  When the agent is misconfigured by attempting to shut it down without
  it ever having been started, or by attempting to disable instrumentation after
  instrumentation has already been installed, the agent will no longer raise an
  exception, but will instead log an error to its log file.

  * Fix for ignore_error_filter not working in some configurations

  The ignore_error_filter method allows you to specify a block to be evaluated
  in order to determine whether a given error should be ignored by the agent.
  If the agent was initially disabled, and then later enabled with a call to
  manual_start, the ignore_error_filter would not work. This has been fixed.

  * Fix for Capistrano 3 ignoring newrelic_revision

  New Relic's Capistrano recipes support passing parameters to control the
  values recorded with deployments, but user provided :newrelic_revision was
  incorrectly overwritten. This has been fixed.

  * Agent errors logged with ruby-prof in production

  If the ruby-prof gem was available in an environment without New Relic's
  developer mode enabled, the agent would generate errors to its log. This has
  been fixed.

  * Tighter requirements on naming for configuration environment variables

  The agent would previously assume any environment variable containing
  'NEWRELIC' was a configuration setting. It now looks for this string as a
  prefix only.

  Thanks to Chad Woolley for the contribution!

## v3.9.1 ##

  * Ruby 1.8.7 users: upgrade or add JSON gem now

  Ruby 1.8.7 is end-of-lifed, and not receiving security updates, so we strongly
  encourage all users with apps on 1.8.7 to upgrade.

  If you're not able to upgrade yet, be aware that a coming release of the Ruby
  agent will require users of Ruby 1.8.7 to have the 'json' gem available within
  their applications in order to continue sending data to New Relic.

  For more details, see:
  https://docs.newrelic.com/docs/ruby/ruby-1.8.7-support

  * Support for new Cross Application Trace view

  This release enhances cross application tracing with a visualization of
  the cross application calls that a specific Transaction Trace is involved
  in. The new visualization helps you spot bottlenecks in external services
  within Transaction Traces and gives you an end-to-end understanding
  of how the transaction trace is used by other applications and services.
  This leads to faster problem diagnosis and better collaboration across
  teams. All agents involved in the cross application communication must
  be upgraded to see the complete graph. You can view cross application
  traces from in the Transaction Trace drill-down.

  * High security mode V2

  The Ruby agent now supports V2 of New Relic's high security mode. To enable
  it, you must add 'high_security: true' to your newrelic.yml file, *and* enable
  high security mode through the New Relic web interface. The local agent
  setting must be in agreement with the server-side setting, or the agent will
  shut down and no data will be collected.

  Customers who already had the server-side high security mode setting enabled
  must add 'high_security: true' to their agent configuration files when
  upgrading to this release.

  For details on high security mode, see:
  http://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security

  * Improved memcached instrumentation

  More accurate instrumentation for the 'cas' command when using version 1.8.0
  or later of the memcached gem. Previous versions of the agent would count all
  time spent in the block given to 'cas' as memcache time, but 1.8.0 and later
  allows us to more accurately measure just the time spent talking to memcache.

  Many thanks to Francis Bogsanyi for contributing this change!

  * Improved support for Rails apps launched from outside the app root directory

  The Ruby agent attempts to resolve the location of its configuration file at
  runtime relative to the directory that the host process is started from.

  In cases where the host process was started from outside of the application's
  root directory (for example, if the process is started from from '/'), it will
  now also attempt to locate its configuration file based on the value of
  Rails.root for Rails applications.

  * Better compatibility with ActionController::Live

  Browser Application Monitoring auto-injection can cause request failures under
  certain circumstances when used with ActionController::Live, so the agent will
  now automatically detect usage of ActionController::Live, and not attempt
  auto-injection for those requests (even if auto-instrumentation is otherwise
  enabled).

  Many thanks to Rodrigo Rosenfeld Rosas for help diagnosing this issue!

  * Fix for occasional spikes in external services time

  Certain kinds of failures during HTTP requests made by an application could
  have previously resulted in the Ruby agent reporting erroneously large amounts
  of time spent in outgoing HTTP requests. This issue manifested most obviously
  in spikes on the 'Web external' band on the main overview graph. This issue
  has now been fixed.

  * Fix 'rake newrelic:install' for Rails 4 applications

  The newrelic:install rake task was previously not working for Rails 4
  applications and has been fixed.

  Thanks to Murahashi Sanemat Kenichi for contributing this fix!

## v3.9.0 ##

  * Rack middleware instrumentation

  The Ruby agent now automatically instruments Rack middlewares!

  This means that the agent can now give you a more complete picture of your
  application's response time, including time spent in middleware. It also means
  that requests which previously weren't captured by the agent because they
  never made it to the bottom of your middleware stack (usually a Rails or
  Sinatra application) will now be captured.

  After installing this version of the Ruby agent, you'll see a new 'Middleware'
  band on your application's overview graph, and individual middlewares will
  appear in transaction breakdown charts and transaction traces.

  The agent can instrument middlewares that are added from a config.ru file via
  Rack::Builder, or via Rails' middleware stack in Rails 3.0+.

  This instrumentation may be disabled with the
  disable_middlware_instrumentation configuration setting.

  For more details, see the documentation for this feature:

    - http://docs.newrelic.com/docs/ruby/rack-middlewares
    - http://docs.newrelic.com/docs/ruby/middleware-upgrade-changes

  * Capistrano 3.x support

  Recording application deployments using Capistrano 3.x is now supported.

  Many thanks to Jennifer Page for the contribution!

  * Better support for Sidekiq's Delayed extensions

  Sidekiq jobs executed via the Delayed extensions (e.g. the #delay method) will
  now be named after the actual class that #delay was invoked against, and will
  have their job arguments correctly captured if the sidekiq.capture_params
  configuration setting is enabled.

  Many thanks to printercu for the contribution!

  * Improved Apdex calculation with ignored error classes

  Previously, a transaction resulting in an exception that bubbled up to the top
  level would always be counted as failing for the purposes of Apdex
  calculations (unless the transaction name was ignored entirely). Now,
  exceptions whose classes have been ignored by the
  error_collector.ignore_errors configuration setting will not cause a
  transaction to be automatically counted as failing.

  * Allow URIs that are not parseable by stdlib's URI if addressable is present

  There are some URIs that are valid by RFC 3986, but not parseable by Ruby's
  stdlib URI class. The Ruby agent will now attempt to use the addressable gem
  to parse URIs if it is present, allowing requests against these problematic
  URIs to be instrumented.

  Many thanks to Craig R Webster and Amir Yalon for their help with this issue!

  * More robust error collection from Resque processes

  Previously, traced errors where the exception class was defined in the Resque
  worker but not in the Resque master process would not be correctly handled by
  the agent. This has been fixed.

  * Allow Sinatra apps to set the New Relic environment without setting RACK_ENV

  The NEW_RELIC_ENV environment variable may now be used to specify the
  environment the agent should use from its configuration file, independently of
  RACK_ENV.

  Many thanks to Mario Izquierdo for the contribution!

  * Better error handling in Browser Application Monitoring injection

  The agent middleware that injects the JavaScript code necessary for Browser
  Application Monitoring now does a better job of catching errors that might
  occur during the injection process.

  * Allow disabling of Net::HTTP instrumentation

  Most instrumentation in the Ruby agent can be disabled easily via a
  configuration setting. Our Net::HTTP instrumentation was previously an
  exception, but now it can also be disabled with the disable_net_http
  configuration setting.

  * Make Rails constant presence check more defensive

  The Ruby agent now guards against the (rare) case where an application has a
  Rails constant defined, but no Rails::VERSION constant (because Rails is not
  actually present).

  Many thanks to Vladimir Kiselev for the contribution!

## v3.8.1 ##

  * Better handling for Rack applications implemented as middlewares

  When using a Sinatra application as a middleware around another app (for
  example, a Rails app), or manually instrumenting a Rack middleware wrapped
  around another application, the agent would previously generate two separate
  transaction names in the New Relic UI (one for the middleware, and one for
  the inner application).

  As of this release, the agent will instead unify these two parts into a single
  transaction in the UI. The unified name will be the name assigned to the
  inner-most traced transaction by default. Calls to
  NewRelic::Agent.set_transaction_name will continue to override the default
  names assigned by the agent's instrumentation code.

  This change also makes it possible to run X-Ray sessions against transactions
  of the 'inner' application in cases where one instrumented app is wrapped in
  another that's implemented as a middleware.

  * Support for mongo-1.10.0

  The Ruby agent now instruments version 1.10.0 of the mongo gem (versions 1.8.x
  and 1.9.x were already supported, and continue to be).

  * Allow setting configuration file path via an option to manual_start

  Previously, passing the :config_path option to NewRelic::Agent.manual_start
  would not actually affect the location that the agent would use to look for
  its configuration file. This has been fixed, and the log messages emitted when
  a configuration file is not found should now be more helpful.

## v3.8.0 ##

  * Better support for forking and daemonizing dispatchers (e.g. Puma, Unicorn)

  The agent should now work out-of-the box with no special configuration on
  servers that fork or daemonize themselves (such as Unicorn or Puma in some
  configurations). The agent's background thread will be automatically restarted
  after the first transaction processed within each child process.

  This change means it's no longer necessary to set the
  'restart_thread_in_children setting' in your agent configuration file if you
  were doing so previously.

  * Rails 4.1 support

  Rails 4.1 has shipped, and the Ruby agent is ready for it! We've been running
  our test suites against the release candidates with no significant issues, so
  we're happy to announce full compatibility with this new release of Rails.

  * Ruby VM measurements

  The Ruby agent now records more detailed information about the performance and
  behavior of the Ruby VM, mainly focused around Ruby's garbage collector. This
  information is exposed on the new 'Ruby VM' tab in the UI. For details about
  what is recorded, see:

  http://docs.newrelic.com/docs/ruby/ruby-vm-stats

  * Separate in-transaction GC timings for web and background processes

  Previously, an application with GC instrumentation enabled, and both web and
  background processes reporting in to it would show an overly inflated GC band
  on the application overview graph, because data from both web and non-web
  transactions would be included. This has been fixed, and GC time during web
  and non-web transactions is now tracked separately.

  * More accurate GC measurements on multi-threaded web servers

  The agent could previously have reported inaccurate GC times on multi-threaded
  web servers such as Puma. It will now correctly report GC timings in
  multi-threaded contexts.

  * Improved ActiveMerchant instrumentation

  The agent will now trace the store, unstore, and update methods on
  ActiveMerchant gateways. In addition, a bug preventing ActiveMerchant
  instrumentation from working on Ruby 1.9+ has been fixed.

  Thanks to Troex Nevelin for the contribution!

  * More robust Real User Monitoring script injection with charset meta tags

  Previous versions of the agent with Real User Monitoring enabled could have
  injected JavaScript code into the page above a charset meta tag. By the HTML5
  spec, the charset tag must appear in the first 1024 bytes of the page, so the
  Ruby agent will now attempt to inject RUM script after a charset tag, if one
  is present.

  * More robust connection sequence with New Relic servers

  A rare bug that could cause the agent's initial connection handshake with
  New Relic servers to silently fail has been fixed, and better logging has been
  added to the related code path to ease diagnosis of any future issues.

  * Prevent over-counting of queue time with nested transactions

  When using add_transaction_tracer on methods called from within a Rails or
  Sinatra action, it was previously possible to get inflated queue time
  measurements, because queue time would be recorded for both the outer
  transaction (the Rails or Sinatra action) and the inner transaction (the
  method given to add_transaction_tracer). This has been fixed, so only the
  outermost transaction will now record queue time.

## v3.7.3 ##

  * Obfuscation for PostgreSQL explain plans

  Fixes an agent bug with PostgreSQL where parameters from the original query
  could appear in explain plans sent to New Relic servers, even when SQL
  obfuscation was enabled. Parameters from the query are now masked in explain
  plans prior to transmission when transaction_tracer.record_sql is set to
  'obfuscated' (the default setting).

  For more information, see:
  https://docs.newrelic.com/docs/traces/security-for-postgresql-explain-plans

  * More accurate categorization of SQL statements

  Some SQL SELECT statements that were previously being mis-categorized as
  'SQL - OTHER' will now correctly be tagged as 'SQL - SELECT'. This
  particularly affected ActiveRecord users using PostgreSQL.

  * More reliable Typhoeus instrumentation

  Fixed an issue where an exception raised from a user-specified on_complete
  block would cause our Typhoeus instrumentation to fail to record the request.

  * Fix for Puma 2.8.0 cluster mode (3.7.3.204)

  Puma's 2.8.0 release renamed a hook New Relic used to support Puma's cluster
  mode.  This resulted in missing data for users running Puma. Thanks Benjamin
  Kudria for the fix!

  * Fix for deployment command bug (3.7.3.204)

  Problems with file loading order could result in `newrelic deployments`
  failing with an unrecognized command error. This has been fixed.

## v3.7.2 ##

  * Mongo instrumentation improvements

  Users of the 'mongo' MongoDB client gem will get more detailed instrumentation
  including support for some operations that were not previously captured, and
  separation of aggregate metrics for web transactions from background jobs.

  An issue with ensure_index when passed a symbol or string was also fixed.
  Thanks Maxime RETY for the report!

  * More accurate error tracing in Rails 4

  Traced errors in Rails 4 applications will now be correctly associated with
  the transaction they occurred in, and custom attributes attached to the
  transaction will be correctly attached to the traced error as well.

  * More accurate partial-rendering metrics for Rails 4

  View partials are now correctly treated as sub-components of the containing
  template render in Rails 4 applications, meaning that the app server breakdown
  graphs for Rails 4 transactions should be more accurate and useful.

  * Improved Unicorn 4.8.0 compatibility

  A rare issue that could lead to spurious traced errors on app startup for
  applications using Unicorn 4.8.0 has been fixed.

  * meta_request gem compatibility

  An incompatibility with the meta_request gem has been fixed.

  * Typhoeus 0.6.4+ compatibility

  A potential crash with Typhoeus 0.6.4+ when passing a URI object instead of a
  String instance to one of Typhoeus's HTTP request methods has been fixed.

  * Sequel single threaded mode fix

  The agent will no longer attempt to run EXPLAIN queries for slow SQL
  statements issued using the Sequel gem in single-threaded mode, since
  doing so could potentially cause crashes.

  * Additional functionality for add_custom_parameters

  Calling add_custom_parameters adds parameters to the system codenamed
  Rubicon. For more information, see http://newrelic.com/software-analytics

  * Update gem signing cert (3.7.2.195)

  The certificate used to sign newrelic_rpm expired in February. This patch
  updates that for clients installing with verification.

## v3.7.1 ##

  * MongoDB support

  The Ruby agent provides support for the mongo gem, versions 1.8 and 1.9!
  Mongo calls are captured for transaction traces along with their parameters,
  and time spent in Mongo shows up on the Database tab.

  Support for more Mongo gems and more UI goodness will be coming, so watch
  http://docs.newrelic.com/docs/ruby/mongo for up-to-date status.

  * Harvest thread restarts for forked and daemonized processes

  Historically framework specific code was necessary for the Ruby agent to
  successfully report data after an app forked or daemonized. Gems or scripts
  with daemonizing modes had to wait for agent support or find workarounds.

  With 3.7.1 setting `restart_thread_in_children: true` in your newrelic.yml
  automatically restarts the agent in child processes without requiring custom
  code. For now the feature is opt-in, but future releases may default it on.

  * Fix for missing HTTP time

  The agent previously did not include connection establishment time for
  outgoing Net::HTTP requests. This has been corrected, and reported HTTP
  timings should now be more accurate.

  * Fix for Mongo ensure_index instrumentation (3.7.1.182)

  The Mongo instrumentation for ensure_index in 3.7.1.180 was not properly
  calling through to the uninstrumented version of this method. This has been
  fixed in 3.7.1.182. Thanks to Yuki Miyauchi for the fix!

  * Correct first reported metric timespan for forking dispatchers (3.7.1.188)

  The first time a newly-forked process (in some configurations) reported metric
  data, it would use the startup time of the parent process as the start time
  for that metric data instead of its own start time. This has been fixed.

## v3.7.0 ##

  * Official Rubinius support (for Rubinius >= 2.2.1)

  We're happy to say that all known issues with the Ruby agent running on
  Rubinius have been resolved as of Rubinius version 2.2.1! See
  http://docs.newrelic.com/docs/ruby/rubinius for the most up-to-date status.

  * RUM injection updates

  The Ruby agent's code for both automatic and manual injection of Real User
  Monitoring scripts has been improved. No application changes are required, but
  the new injection logic is simpler, faster, more robust, and paves the way for
  future improvements to Real User Monitoring.

  * More robust communication with New Relic

  Failures when transmitting data to New Relic could cause data to be held over
  unnecessarily to a later harvest. This has been improved both to handle
  errors more robustly and consistently, and to send data as soon as possible.

  * Fix for agent not restarting on server-side config changes

  A bug in 3.6.9 caused the agent to not reset correctly after server-side
  config changes. New settings would not be received without a full process
  restart. This has been fixed.

  * Blacklisting rake spec tasks

  A blacklist helps the agent avoid starting during rake tasks. Some default
  RSpec tasks were missing. Thanks for the contribution Kohei Hasegawa!

## v3.6.9 ##

  * Experimental Rubinius 2.x support

  The agent is now being tested against the latest version of Rubinius. While
  support is still considered experimental, you can track the progress at
  http://docs.newrelic.com/docs/ruby/rubinius for up to date status.

  * Capture arguments for Resque and Sidekiq jobs

  The agent can optionally record arguments for your Resque and Sidekiq jobs on
  transaction traces and traced errors. This is disabled by default, but may be
  enabled by setting resque.capture_params or sidekiq.capture_params.

  Thanks to Juan Ignacio Pumarino, Ken Mayer, Paul Henry, and Eric Saxby for
  their help with this feature!

  * Supported versions rake task and documentation

  We've improved our documentation for what Ruby and gem versions we support.
  Run `rake newrelic:supported_versions` or see the latest agent's versions at
  https://docs.newrelic.com/docs/ruby/supported-frameworks.

  * ActiveRecord 4.0 explain plans for JRuby and Rubinius

  The agent's ActiveRecord 4.0 instrumentation could not gather SQL explain
  plans on JRuby by default because of a dependency on ObjectSpace, which isn't
  avialable by default. This has been fixed.

  * Fix for Curb http_put_with_newrelic

  A bug in the agent caused PUT calls in the Curb gem to crash. This has been
  fixed. Thanks to Michael D'Auria and Kirk Diggler for the contributions!

  * Fix for head position on RUM injection

  Certain unusual HTML documents resulted in browser monitoring injecting
  incorrect content. Thanks Alex McHale for the contribution!

  * Specify the Content-Type header in developer mode

  Thanks Jared Ning for the contribution!

## v3.6.8 ##

  * X-Ray Sessions support

  X-Ray Sessions provide more targeted transaction trace samples and thread
  profiling for web transactions. For full details see our X-Ray sessions
  documentation at https://newrelic.com/docs/site/xray-sessions.

  * Percentiles and Histograms

  The Ruby Agent now captures data that provides percentile and histogram views
  in the New Relic UI.

  * CPU metrics re-enabled for JRuby >= 1.7.0

  To work around a JRuby bug, the Ruby agent stopped gathering CPU metrics on
  that platform.  With the bug fixed, the agent can gather those metrics again.
  Thanks Bram de Vries for the contribution!

  * Missing Resque transaction traces (3.6.8.168)

  A bug in 3.6.8.164 prevented transaction traces in Resque jobs from being
  communicated back to New Relic. 3.6.8.168 fixes this.

  * Retry on initial connect (3.6.8.168)

  Failure to contact New Relic on agent start-up would not properly retry. This
  has been fixed.

  * Fix potential memory leak on failure to send to New Relic (3.6.8.168)

  3.6.8.164 introduced a potential memory leak when transmission of some kinds
  of data to New Relic servers failed. 3.6.8.168 fixes this.

## v3.6.7 ##

  * Resque-pool support

  Resque processes started via the resque-pool gem weren't recognized by the
  Ruby agent. The agent now starts correctly in those worker processes.

  * Environment-based configuration

  All settings in newrelic.yml can now be configured via environment variables.
  See https://newrelic.com/docs/ruby/ruby-agent-configuration for full details.

  * Additional locking option for Resque (3.6.7.159)

  There have been reports of worker process deadlocks in Resque when using the
  Ruby agent. An optional lock is now available to avoid those deadlocks. See
  https://newrelic.com/docs/ruby/resque-instrumentation for more details.

  * HTTP connection setup timeout (3.6.7.159)

  HTTP initialization in the agent lacked an appropriate timeout,
  leading to dropouts in reporting under certain network error conditions.

  * Unnecessary requests from Resque jobs (3.6.7.159)

  An issue causing Resque jobs to unnecessarily make requests against New Relic
  servers was fixed.

  * Fix compatibility issues with excon and curb instrumentation

  This release of the agent fixes a warning seen under certain circumstances
  with the excon gem (most notably, when excon was used by fog), as well as
  a bug with the curb instrumentation that conflicted with the  feedzirra gem.

  * Allow license key to be set by Capistrano variables

  A license key can be passed via a Capistrano variable where previously it
  could only be in newrelic.yml. Thanks Chris Marshall for the contribution!

  * Make HTTP client instrumentation aware of "Host" request header

  If a "Host" header is set explicitly on an HTTP request, that hostname will
  be used for external metrics. Thanks Mislav Marohnić for the contribution!

  * Fix ActiveSupport::Concern warnings with MethodTracer

  Including NewRelic::Agent::MethodTracer in a class using Concerns could cause
  deprecation warnings. Thanks Mike Połtyn for the contribution!

  * Fix Authlogic constant name

  Code checking for the Authlogic module was using in the wrong case. Thanks
  Dharam Gollapudi for the contribution!

## v3.6.6 ##

  * HTTPClient and Curb support

  The Ruby agent now supports the HTTPClient and Curb HTTP libraries! Cross
  application tracing and more is fully supported for these libraries. For more
  details see https://newrelic.com/docs/ruby/ruby-http-clients.

  * Sinatra startup improvements

  In earlier agent versions, newrelic_rpm had to be required after Sinatra to
  get instrumentation. Now the agent should start when your Sinatra app starts
  up in rackup, thin, unicorn, or similar web servers.

  * Puma clustered mode support

  Clustered mode in Puma was not reporting data without manually adding a hook
  to Puma's configuration. The agent will now automatically add this hook.

  * SSL certificate verification

  Early versions of the agent's SSL support provided an option to skip
  certificate verification. This option has been removed.

## v3.6.5 ##

  * Rails 4.0 Support

  The Ruby agent is all set for the recent general release of Rails 4.0! We've
  been tracking the RC's, and that work paid off. Versions 3.6.5 and 3.6.4 of
  the Ruby agent should work fine with Rails 4.0.0.

  * Excon and Typhoeus support

  The Ruby agent now supports the Excon and Typhoeus HTTP libraries! For more
  details see https://newrelic.com/docs/ruby/ruby-http-clients.

## v3.6.4 ##

  * Exception Whitelist

  We've improved exception message handling for applications running in
  high security mode. Enabling 'high_security' now removes exception messages
  entirely rather than simply obfuscating any SQL.

  By default this feature affects all exceptions, though you can configure a
  whitelist of exceptions whose messages should be left intact.

  More details: https://newrelic.com/docs/ruby/ruby-agent-configuration

  * Fix a race condition affecting some Rails applications at startup

  Some Rails applications using newrelic_rpm were affected by a race condition
  at startup that manifested as an error when model classes with associations
  were first loaded. The cause of these errors has been addressed by moving the
  generation of the agent's EnvironmentReport on startup from a background
  thread to the main thread.

## v3.6.3 ##

  * Better Sinatra Support

  A number of improvements have been made to our Sinatra instrumentation.
  More details: https://newrelic.com/docs/ruby/sinatra-support-in-the-ruby-agent

  Sinatra instrumentation has been updated to more accurately reflect the final
  route that was actually executed, taking pass and conditions into account.

  New Relic middlewares for error collection, real user monitoring, and cross
  application tracing are automatically inserted into the middleware stack.

  Ignoring routes, similar to functionality available to Rails controllers, is
  now available in Sinatra as well.

  Routes in 1.4 are properly formatting in transaction names. Thanks Zachary
  Anker for the contribution!

  * Padrino Support

  Along with improving our support of Sinatra, we've also extended that to
  supporting Padrino, a framework that builds on Sinatra. Web transactions
  should show up in New Relic now for Padrino apps automatically. The agent has
  been tested against the latest Padrino in versions 0.11.x and 0.10.x.

  * Main overview graph only shows web transactions

  In the past database times from background jobs mixed with other web transaction
  metrics in the main overview graph. This often skewed graphs. A common workaround
  was to send background jobs to a separate application, but that should no longer
  be necessary as the overview graphs now only represent web transactions.

## v3.6.2 ##

  * Sequel support

  The Ruby agent now supports Sequel, a database toolkit for Ruby. This
  includes capturing SQL calls and model operations in transaction traces, and
  recording slow SQL calls. See https://newrelic.com/docs/ruby/sequel-instrumentation
  for full details.

  * Thread profiling fix

  The prior release of the agent (version 3.6.1) broke thread profiling. A
  profile would appear to run, but return no data. This has been fixed.

  * Fix for over-counted Net::HTTP calls

  Under some circumstances, calls into Net::HTTP were being counted twice in
  metrics and transaction traces. This has been fixed.

  * Missing traced errors for Resque applications

  Traced errors weren't displaying for some Resque workers, although the errors
  were factored into the overall count graphs. This has been fixed, and traced
  errors should be available again after upgrading the agent.

## v3.6.1 ##

  * Full URIs for HTTP requests are recorded in transaction traces

  When recording a transaction trace node for an outgoing HTTP call via
  Net::HTTP, the agent will now save the full URI (instead of just the hostname)
  for the request. Embedded credentials, the query string, and the fragment will
  be stripped from the URI before it is saved.

  * Simplify Agent Autostart Logic

  Previously the agent would only start when it detected a supported
  "Dispatcher", meaning a known web server or background task framework.  This
  was problematic for customers using webservers that the agent was not
  configured to detect (e.g. Puma).  Now the agent will attempt to report any
  time it detects it is running in a monitored environment (e.g. production).
  There are two exceptions to this.  The agent will not autostart in a rails
  console or irb session or when the process was invoked by a rake task (e.g.
  rake assets:precompile).  The NEWRELIC_ENABLE environment variable can be set
  to true or false to force the agent to start or not start.

  * Don't attempt to resolve collector hostname when proxy is in use

  When a proxy is configured, the agent will not attempt to lookup and cache the
  IP address of New Relic server to which it is sending data, since DNS may not
  be available in some environments. Thanks to Bill Kirtley for the contribution

  * Added NewRelic::Agent.set_transaction_name and NewRelic::Agent.get_transaction_name

  Ordinarily the name of your transaction is defined up-front, but if you'd like to
  change the name of a transaction while it is still running you can use
  **NewRelic::Agent.set_transaction_name()**.  Similarly, if you need to know the name
  of the currently running transaction, you can use **NewRelic::Agent.get_transaction_name()**.

## v3.6.0 ##

  * Sidekiq support

  The Ruby agent now supports the Sidekiq background job framework. Traces from
  Sidekiq jobs will automatically show up in the Background tasks on New Relic
  similar to Resque and Delayed::Job tasks.

  * Improved thread safety

  The primary metrics data structures in the Ruby agent are now thread safe.
  This should provide better reliability for the agent under JRuby and threaded
  scenarios such as Sidekiq or Puma.

  * More robust environment report

  The agent's analysis of the local environment (e.g. OS, Processors, loaded
  gems) will now work in a wider variety of app environments, including
  Sinatra.

  * Experimental Rainbows! support

  The Ruby agent now automatically detects and instruments the Rainbows! web
  server. This support is considered experimental at present, and has not been
  tested with all dispatch modes.

  Thanks to Joseph Chen for the contribution.

  * Fix a potential file descriptor leak in Resque instrumentation

  A file descriptor leak that occurred when DontPerform exceptions were used to
  abort processing of a job has been fixed. This should allow the Resque
  instrumentation work correctly with the resque-lonely_job gem.

## v3.5.8 ##

  * Key Transactions

    The Ruby agent now supports Key Transactions! Check out more details on the
    feature at https://newrelic.com/docs/site/key-transactions

  * Ruby 2.0

    The Ruby agent is compatible with Ruby 2.0.0 which was just released.

  * Improved Sinatra instrumentation

    Several cases around the use of conditions and pass in Sinatra are now
    better supported by the Ruby agent. Thanks Konstantin for the help!

  * Outbound HTTP headers

    Adds a 'X-NewRelic-ID' header to outbound Net::HTTP requests. This change
    helps improve the correlation of performance between services in a service-
    oriented architecture for a forthcoming feature. In the meantime, to disable
    the header, set this in your newrelic.yml:

      cross_application_tracer:
        enabled: false

  * Automatically detect Resque dispatcher

    The agent does better auto-detection for the Resque worker process.
    This should reduce the need to set NEW_RELIC_DISPATCHER=resque directly.

## v3.5.7 ##

  * Resolved some issues with tracking of frontend queue time, particularly
    when the agent is running on an app hosted on Heroku.  The agent will now
    more reliably parse the headers described in
    https://newrelic.com/docs/features/tracking-front-end-time and will
    automatically detect whether the times provided are in seconds,
    milliseconds or microseconds.

## v3.5.6 ##

  * Use HTTPS by default

    The agent now defaults to using SSL when it communicates with New Relic's
    servers.  By default is already configured New Relic does not transmit any
    sensitive information (e.g. SQL parameters are masked), but SSL adds an
    additional layer of security.  Upgrading customers may need to remove the
    "ssl: false" directive from their newrelic.yml to enable ssl.  Customers on
    Jruby may need to install the jruby-openssl gem to take advantage of this
    feature.

  * Fix two Resque-related issues

    Fixes a possible hang on exit of an instrumented Resque master process
    (https://github.com/defunkt/resque/issues/578), as well as a file descriptor
    leak that could occur during startup of the Resque master process.

  * Fix for error graph over 100%

    Some errors were double counted toward the overall error total. This
    resulted in graphs with error percentages over 100%. This duplication did
    not impact the specific error traces captured, only the total metric.

  * Notice gracefully handled errors in Sinatra

    When show_exceptions was set to false in Sinatra, errors weren't caught
    by New Relic's error collector. Now handled errors also have the chance
    to get reported back.

  * Ruby 2.0 compatibility fixes

    Ruby 2.0 no longer finds protected methods by default, but will with a flag.
    http://tenderlovemaking.com/2012/09/07/protected-methods-and-ruby-2-0.html

    Thanks Ravil Bayramgalin and Charlie Somerville for the fixes.

  * Auto-detect Trinidad as dispatcher

    Code already existing for detecting Trinidad as a dispatcher, but was only
    accessible via an ENV variable. This now auto-detects on startup. Thanks
    Robert Rasmussen for catching that.

  * Coercion of types in collector communication

    Certain metrics can be recorded with a Ruby Rational type, which JSON
    serializes as a string rather than a floating point value. We now treat
    coerce each outgoing value, and log issues before sending the data.

  * Developer mode fix for chart error

    Added require to fix a NameError in developer mode for summary page. Thanks
    to Ryan B. Harvey.

  * Don't touch deprecated RAILS_ROOT if on Rails 3

    Under some odd startup conditions, we would look for the RAILS_ROOT constant
    after failing to find the ::Rails.root in a Rails 3 app, causing deprecation
    warnings. Thanks for Adrian Irving-Beer for the fix.

## v3.5.5 ##

  * Add thread profiling support

    Thread profiling performs statistical sampling of backtraces of all threads
    within your Ruby processes. This feature requires MRI >= 1.9.2, and is
    controlled via the New Relic web UI. JRuby support (in 1.9.x compat mode) is
    considered experimental, due to issues with JRuby's Thread#backtrace.

  * Add audit logging capability

    The agent can now log all of the data it sends to the New Relic servers to
    a special log file for human inspection. This feature is off by default, and
    can be enabled by setting the audit_log.enabled configuration key to true.
    You may also control the location of the audit log with the audit_log.path key.

  * Use config system for dispatcher, framework, and config file detection

    Several aspects of the agent's configuration were not being handled by the
    configuration system.  Detection/configuration of the dispatcher (e.g. passenger,
    unicorn, resque), framework (e.g. rails3, sinatra), and newrelic.yml
    location are now handled via the Agent environment, manual, and default
    configuration sources.

  * Updates to logging across the agent

    We've carefully reviewed the logging messages that the agent outputs, adding
    details in some cases, and removing unnecessary clutter. We've also altered
    the startup sequence to ensure that we don't spam STDOUT with messages
    during initialization.

  * Fix passing environment to manual_start()

    Thanks to Justin Hannus.  The :env key, when passed to Agent.manual_start,
    can again be used to specify which section of newrelic.yml is loaded.

  * Rails 4 support

    This release includes preliminary support for Rails 4 as of 4.0.0.beta.
    Rails 4 is still in development, but the agent should work as expected for
    people who are experimenting with the beta.

## v3.5.4 ##

  * Add queue time support for sinatra apps

    Sinatra applications can now take advantage of front end queue time
    reporting. Thanks to Winfield Peterson for this contribution.

  * Simplify queue time configuration for nginx 1.2.6+

    Beginning in version 1.2.6, recently released as a development version, the
    $msec variable can be used to set an http header.  This change allows front
    end queue time to be tracked in New Relic simply by adding this line to the
    nginx config:

    proxy_set_header X-Queue-Start "t=${msec}000"

    It will no longer be necessary to compile a patched version of nginx or
    compile in the perl or lua module to enable this functionality.

    Thanks to Lawrence Pit for the contribution.

  * Report back build number and stage along with version info

    In the 3.5.3 series the agent would fail to report its full version number
    to NewRelic's environment report.  For example it would report its version
    as 3.5.3 instead of 3.5.3.25 or 3.5.3.25.beta.  The agent will now report
    its complete version number as defined in newrelic_rpm.gemspec.

  * The host and the port that the agent reports to can now be set from environment vars

    The host can be set with NEW_RELIC_HOST and the port with NEW_RELIC_PORT.  These setting
    will override any other settings in your newrelic.yml.

  * Fix RUM reporting to multiple applications

    When the agent is configured to report to multiple "roll up" applications
    RUM did not work correctly.

## v3.5.3 ##

  * Update the collector protocol to use JSON and Ruby primitives

    The communication between the agent and the NewRelic will not longer be
    marshaled Ruby objects, but rather JSON in the case of Ruby 1.9 and marshaled
    Ruby primitives in the case of 1.8.  This results in greater harvest efficiency
    as well as feature parity with other New Relic agents.

  * Fix incorrect application of conditions in sinatra instrumentation

    The agent's sinatra instrumentation was causing sinatra's conditions to
    be incorrectly applied in some obscure cases.  The bug was triggered
    when a condition was present on a lower priority route that would match
    the current request, except for the presence of a higher priority route.

## v3.5.2 ##

 * Simplified process of running agent test suite and documented code
   contribution process in GUIDELINES_FOR_CONTRIBUTING.

## v3.5.1 ##

 * Enabling Memory Profiling on Lion and Mountain Lion

   The agent's list of supported platforms for memory profiling wasn't correctly checking
   for more recent versions of OS X.

 * Fixed an arity issue encountered when calling newrelic_notice_error from Rails applications.

 * End user queue time was not being properly reported, works properly now.

 * Server-side configuration for ignoring errors was not being heeded by agent.

 * Better handling of a thread safety issue.

   Some issues may remain, which we are working to address, but they should be gracefully handled
   now, rather than crashing the running app.

 * Use "java_import" rather than "include_class" when require Java Jars into a JRuby app.

   Thanks to Jan Habermann for the pull request

 * Replaced alias_method mechanism with super call in DataMapper instrumentation.

   Thanks to Michael Rykov for the pull request

 * Fixed the Rubinius GC profiler.

   Thanks to Dirkjan Bussink

 * Use ActiveSupport.on_load to load controller instrumentation Rails 3.

   Thanks to Jonathan del Strother

 * Reduce the number of thread local reference in a particular high traffic method

   Thanks to Jeremy Kemper

## v3.5.0.1 ##

 * (Fix) Due to a serious resource leak we have ended support for versions of Phusion Passenger
   older than 2.1.1. Users of older versions are encouraged upgrade to a more recent version.

## v3.5.0 ##

 * (Fix) RUM Stops Working After 3.4.2.1 Agent Upgrade

   v3.4.2.1 introduced a bug that caused the browser monitor auto instrumentation
   (for RUM) default to be false. The correct value of true is now used

 * When the Ruby Agent detects Unicorn as the dispatcher it creates an INFO level log message
   with additional information

   To help customers using Unicorn, if the agent detects it (Unicorn) is being used as the
   dispatcher an INFO level log message it created that includes a link to New Relic
   online doc that has additional steps that may be required to get performance data reporting.

 * (Fix) In version 3.4.2 of the Ruby Agent the server side value for Apdex T was disregarded

   With version 3.4.2 of the agent, the value set in the newrelic.yml file took precedence over the
   value set in the New Relic UI.  As of version 3.5.0 only the value for Apdex T set in the
   New Relic UI will be used. Any setting in the yaml file will be ignored.

 * Improved Error Detection/Reporting capabilities for Rails 3 apps

   Some errors are missed by the agent's exception reporting handlers because they are
   generated in the rails stack, outside of the instrumented controller action. A Rack
   middleware is now included that can detect these errors as they bubble out of the middleware stack.
   Note that this does not include Routing Errors.

 * The Ruby Agent now logs certain information it receives from the New Relic servers

   After connecting to the New Relic servers the agent logs the New Relic URL
   of the app it is reporting to.

 * GC profiling overhead for Ruby 1.9 reduced

   For Ruby 1.9 the amount of time spent in GC profiling has been reduced.

 * Know issue with Ruby 1.8.7-p334, sqlite3-ruby 1.3.0 or older, and resque 1.23.0

   The Ruby Agent will not work in conjunction with Ruby 1.8.7-p334, sqlite3-ruby 1.3.3
   or earlier, and resque 1.23.0. Your app will likely stop functioning. This is a known problem
   with Ruby versions up to 1.8.7-p334. Upgrading to the last release of Ruby 1.8.7
   is recommended.  This issue has been present in every version of the agent we've tested
   going back for a year.


## v3.4.2.1 ##

* Fix issue when app_name is nil

  If the app_name setting ends up being nil an exception got generated and the application
  wouldn't run. This would notably occur when running a Heroku app locally without the
  NEW_RELIC_APP_NAME environment variable set. A nil app_name is now detected and an
  error logged specifying remediation.

## v3.4.2 ##

 * The RUM NRAGENT tk value gets more robustly sanitized to prevent potential XSS vulnerabilities

   The code that scrubs the token used in Real User Monitoring has been enhanced to be
   more robust.

 * Support for Apdex T in server side configuration

   For those using server side configuration the Ruby Agent now supports setting
   the Apdex T value via the New Relic UI.

 * Refactoring of agent config code

   The code that reads the configuration information and configures the agent
   got substantially reorganized, consolidated, simplified, and made more robust.

## v3.4.1 ##
#### Bug Fixes ####
 * Fix edge case in RUM auto instrumentation where X-UA-Compatible meta tag is
   present but </head> tag is missing.

   There is a somewhat obscure edge case where RUM auto instrumentation will
   crash a request. The issue seems to be triggered when the X-UA-Compatible
   meta tag is present and the </head> tag is missing.

 * Fixed reference to @service.request_timeout to @request_timeout in
   new_relic_service.rb. (Thanks to Matthew Savage)

   When a timeout occurred during connection to the collector an "undefined
   method `request_timeout' for nil:NilClass'" would get raised.

 * preserve visibility on traced methods.

   Aliased methods now have the same visibility as the original traced method.
   A couple of the esoteric methods created in the process weren't getting the
   visibility  set properly.

 * Agent service does not connect to directed shard collector after connecting
   to proxy

   After connecting to collector proxy name of real collector was updated, but
   ip address was not being updated causing connections to go to the proxy.
   Agent now looks up ip address for real collector.

 * corrupt marshal data from pipe children crashing agent

   If the agent received corrupted data from the Reqsue worker child agent
   it could crash the agent itself. fixed.

 * should reset RubyBench GC counter between polls

   On Ruby REE, the GC profiler does not reset the counter between polls. This
   is only a problem if GC could happen *between* transactions, as in, for
   example, out-of-band GC in Unicorn. fixed.

v3.4.0.1
 * Prevent the agent from resolving the collector address when disabled.
 * Fix for error collector configuration that was introduced during beta.
 * Preserve method visibility when methods are traced with #add_method_tracer and #add_transaction_tracer

v3.4.0
 * Major refactor of data transmission mechanism.  This enabled child processes to send data to parent processes, which then send the data to the New Relic service.  This should only affect Resque users, dramatically improving their experience.
 * Moved Resque instrumentation from rpm_contrib to main agent.  Resque users should discontinue use of rpm_contrib or upgrade to 2.1.11.
 * Resolve issue with configuring the Error Collector when using server-side configuration.

v3.3.5
 * [FIX] Allow tracing of methods ending in ! and ?
 * [PERF] Give up after scanning first 50k of the response in RUM
   auto-instrumentation.
 * [FIX] Don't raise when extracting metrics from SQL queries with non UTF-8 bytes.
 * Replaced "Custom/DJ Locked Jobs" metric with new metrics for
   monitoring DelayedJob: queue_length, failed_jobs, and locked_jobs, all under
   Workers/DelayedJob.  queue_length is also broken out by queue name or priority
   depending on the version of DelayedJob deployed.

v3.3.4.1
 * Bug fix when rendering empty collection in Rails 3.1+

v3.3.4
  * Rails 3 view instrumentation

v3.3.3
  * Improved Sinatra instrumentation
  * Limit the number of nodes collected in long running transactions to prevent leaking memory

v3.3.2.1
  * [SECURITY] fix for cookie handling by End User Monitoring instrumentation

v3.3.2
  * deployments recipe change: truncate git SHAs to 7 characters
  * Fixes for obfuscation of PostgreSQL and SQLite queries
  * Fix for lost database connections when using a forking framework
  * Workaround for RedHat kernel bug which prevented blocking reads of /proc fs
  * Do not trap signals when handling exceptions

v3.3.1
  * improved Ruby 1.8.6 support
  * fix for issues with RAILS_ROOT deprecation warnings
  * fixed incorrect 1.9 GC time reporting
  * obfuscation for Slow SQL queries respects transaction trace config
  * fix for RUM instrumentation repoting bad timing info in some cases
  * refactored ActiveRecord instrumentation, no longer requires Rails

v3.3.0
  * fix for GC instrumentation when using Ruby 1.9
  * new feature to correlate browser and server transaction traces
  * new feature to trace slow sql statements
  * fix to help cope with malformed rack responses
  * do not try to instrument versions of ActiveMerchant that are too old

v3.2.0.1
  * Updated LICENSE
  * Updated links to support docs

v3.2.0
  * Fix over-detection of mongrel and unicorn and only start the agent when
    actual server is running
  * Improve developer mode backtraces to support ruby 1.9.2, windows
  * Fixed some cases where Memcache instrumentation was failing to load
  * Ability to set log destination by NEW_RELIC_LOG env var
  * Fix to mutex lib load issue
  * Performance enhancements (thanks to Jeremy Kemper)
  * Fix overly verbose STDOUT message (thanks to Anselm Helbig)

v3.1.2
  * Fixed some thread safety issues
  * Work around for Ruby 1.8.7 Marshal crash bug
  * Numerous community patches (Gabriel Horner, Bradley Harris, Diego Garcia,
    Tommy Sullivan, Greg Hazel, John Thomas Marino, Paul Elliott, Pan Thomakos)
  * Fixed RUM instrumentation bug

v3.1.1
  * Support for Rails 3.1 (thanks to Ben Hoskings via github)
  * Support for Rubinius
  * Fixed issues affecting some Delayed Job users where log files were not appearing
  * Fixed an issue where some instrumentation might not get loaded in Rails apps
  * Fix for memcached cas method (thanks to Andrew Long and Joseph Palermo )
  * Fix for logger deprecation warning (thanks to Jonathan del Strother via github)
  * Support for logging to STDOUT
  * Support for Spymemcached client on jruby

v3.1.0
  * Support for aggregating data from short-running
    processes to reduce reporting overhead
  * Numerous bug fixes
  * Increased unit test coverage

v3.0.1
  * Updated Real User Monitoring to reduce javascript size and improve
    compatibility, fix a few known bugs

v3.0.0
  * Support for Real User Monitoring
  * Back end work on internals to improve reliability
  * added a 'log_file_name' and 'log_file_path' configuration variable to allow
    setting the path and name of the agent log file
  * Improve reliability of statistics calculations
  * Remove some previously deprecated methods
  * Remove Sequel instrumentation pending more work

v2.14.1
  * Avoid overriding methods named 'log' when including the MethodTracer module
  * Ensure that all load paths for 'new_relic/agent' go through 'new_relic/control' first
  * Remove some debugging output from tests

v2.14.0
  * Dependency detection framework to prevent multi-loading or early-loading
    of instrumentation files

v2.13.5
  * Moved the API helper to the github newrelic_api gem.
  * Revamped queue time to include server, queue, and middleware time
  * Increased test coverage and stability
  * Add Trinidad as a dispatcher (from Calavera, on github)
  * Sequel instrumentation from Aman Gupta
  * patches to 1.9 compatibility from dkastner on github
  * Support for 1.9.2's garbage collection instrumentation from Justin Weiss
  * On Heroku, existing queue time headers will be detected
  * Fix rack constant scoping in dev mode for 1.9 (Rack != ::Rack)
  * Fixes for instrumentation loading failing on Exception classes that
    are not subclasses of StandardError
  * Fix active record instrumentation load order for Rails 3

v2.13.4
  * Update DNS lookup code to remove hardcoded IP addresses

v2.13.3
  * Dalli instrumentation from Mike Perham (thanks Mike)
  * Datamapper instrumentation from Jordan Ritter (thanks Jordan)
  * Apdex now defaults to 0.5
    !!! Please be aware that if you are not setting an apdex,
    !!! this will cause a change in the apparent performance of your app.
  * Make metric hashes threadsafe (fixes problems sending metrics in Jruby
    threaded code)
  * Delete obsolete links to metric docs in developer mode
  * Detect gems when using Bundler
  * Fix newrelic_ignore in Rails 3
  * Break metric parser into a separate vendored gem
  * When using Unicorn, preload_app: true is recommended to get proper
    after_fork behavior.

v2.13.2
  * Remove a puts. Yes, a whole release for a puts.

v2.13.1
  * Add missing require in rails 3 framework control

v2.13.0
  * developer mode is now a rack middleware and can be used on any framework;
    it is no longer supported automatically on versions of Rails prior to 2.3;
    see README for details
  * memcache key recording for transaction traces
  * use system_timer gem if available, fall back to timeout lib
  * address instability issues in JRuby 1.2
  * renamed executable 'newrelic_cmd' to 'newrelic'; old name still supported
    for backward compatibility
  * added 'newrelic install' command to install a newrelic.yml file in the
    current directory
  * optimization to execution time measurement
  * optimization to startup sequence
  * change startup sequence so that instrumentation is installed after all
    other gems and plugins have loaded
  * add option to override automatic flushing of data on exit--send_data_on_exit
    defaults to 'true'
  * ignored errors no longer affect apdex score
  * added record_transaction method to the api to allow recording
    details from web and background transactions occurring outside RPM
  * fixed a bug related to enabling a gold trial / upgrade not sending
    transaction traces correctly

v2.12.3
  * fix regression in startup sequence

v2.12.2
  * fix for regression in Rails 2.1 inline rendering
  * workaround bug found in some rubies that caused a segv and/or NoMemoryError
    when deflating content for upload
  * avoid creating connection thread in unicorn/passenger spawners

v2.12.1
  * fix bug in profile mode
  * fix race condition in Delayed::Job instrumentation loading
  * fix glassfish detection in latest glassfish gem

v2.12.0
  * support basic instrumentation for ActsAsSolr and Sunspot

v2.11.3
  * fix bug in startup when running JRuby

v2.11.2
  * fix for unicorn not reporting when the proc line had 'master' in it
  * fix regression for passenger 2.0 and earlier
  * fix after_fork in the shim

v2.11.1
  * republished gem without generated rdocs

v2.11.0
  * rails3 instrumentation (no developer mode support yet)
  * removed the ensure_worker_thread started and instead defined an after_fork
    handler that will set up the agent properly in forked processes.
  * change at_exit handler so the shutdown always goes after other shutdown
    handlers
  * add visibility to active record db transactions in the rpm transaction
    traces (thanks to jeremy kemper)
  * fix regression in merb support which caused merb apps not to start
  * added NewRelic::Agent.logger to the public api to write to the agent
    log file.
  * optimizations to background thread, controller instrumentation, memory
    usage
  * add logger method to public_api
  * support list notation for ignored exceptions in the newrelic.yml

v2.10.8
  * fix bug in delayed_job instrumentation that caused the job queue sampler
    to run in the wrong place
  * change startup sequence and code that restarts the worker loop
    thread
  * detect the unicorn master and dont start the agent; hook in after_fork
  * fix problem with the Authlogic metric names which caused errors in
    developer mode.  Authlogic metrics now adhere to the convention of
    prefixing the name with  'Custom'
  * allow more correct overriding of transaction trace settings in the
    call to #manual_start
  * simplify WorkerLoop and add better protection for concurrency
  * preliminary support for rails3

v2.10.6
  * fix missing URL and referrer on some traced errors and transactions
  * gather traced errors *after* executing the rescue chain in ActionController
  * always load controller instrumentation
  * pick up token validation from newrelic.yml

v2.10.5
  * fix bug in delayed_job instrumentation occurring when there was no DJ log

v2.10.4
  * fix incompatibility with Capistrano 2.5.16
  * strip down URLs reported in transactions and errors to path only

v2.10.3
  * optimization to reduce overhead: move background samplers into foreground thread
  * change default config file to ignore RoutingErrors
  * moved the background task instrumentation into a separate tab in the RPM UI
  * allow override of the RPM application name via NEWRELIC_APP_NAME environment variable
  * revised Delayed::Job instrumentation so no manual_start is required
  * send buffered data on shutdown
  * expanded support for queue length and queue time
  * remove calls to starts_with to fix Sinatra and non-rails deployments
  * fix problem with apdex scores recording too low in some circumstances
  * switch to jeweler for gem building
  * minor fixes, test improvements, doc and rakefile improvements
  * fix incompatibility with Hoptoad where Hoptoad was not getting errors handled by New Relic
  * many other optimizations, bug fixes and documentation improvements

v2.10.2.
  * beta release of 2.10
  * fix bugs with Sinatra app instrumentation
  * minor doc updates

v2.10.1.
  * alpha release of 2.10
  * rack support, including metal; ignores 404s; requires a module inclusion (see docs)
  * sinatra support, displays actions named by the URI pattern matched
  * add API method to abort transaction recording for in-flight transactions
  * remove account management calls from newrelic_api.rb
  * truncating extremely large transaction traces for efficiency
  * fix error reporting in recipes; add newrelic_rails_env option to recipes to
    override the rails env used to pull the app_name out of newrelic.yml
  * added TorqueBox recognition (thanks Bob McWhirter)
  * renamed config settings: enabled => monitor_mode; developer => developer_mode;
    old names will still work in newrelic.yml
  * instrumentation for DelayedJob (thanks Travis Tilley)
  * added config switches to turn off certain instrumentation when you aren't
    interested in the metrics, to save on overhead--see newrelic.yml for details.
  * add profiling support to dev mode; very experimental!
  * add 'multi_threaded' config option to indicate when the app is running
    multi-threaded, so we can disable some instrumentation
  * fix test failures in JRuby, REE
  * improve Net::HTTP instrumentation so it's more efficient and distinguishes calls
    between web and non-web transactions.
  * database instrumentation notices all database commands in addition to the core commands
  * add support for textmate to dev mode
  * added add_transaction_tracer method to support instrumenting methods as
    if they were web transactions; this will facilitate better visibility of background
    tasks and eventually things like rack, metal and Sinatra
  * adjusted apdex scores to reflect time spent in the mongrel queue
  * fixed incompatibility with JRuby on startup
  * implemented CPU measure for JRuby which reflects the cpu burn for
    all controller actions (does not include background tasks)
  * fixed scope issue with GC instrumentation, subtracting time from caller
  * added # of GC calls to GC instrumentation
  * renamed the dispatcher metric
  * refactored stats_engine code for readability
  * optimization: reduce wakeup times for harvest thread

v2.10.0.
  * alpha release of 2.10
  * support unicorn
  * instrumentation of GC for REE and MRE with GC patch
  * support agent restarting when changes are made to the account
  * removed #newrelic_notice_error from Object class, replaced by NewRelic::Agent#notice_error
  * collect histogram statistics
  * add custom parameters to newrelic_notice_error call to display
    extra info for errors
  * add method disable_all_tracing(&block) to execute a block without
    capturing metrics
  * newrelic_ignore now blocks all instrumentation collection for
    the specified actions
  * added doc to method_tracer API and removed second arg
    requirement for add_method_tracer call
  * instrumentation for Net::HTTP
  * remove method_tracer shim to avoid timing problems in monitoring daemons
  * for non-rails daemons, look at APP_ROOT and NRCONFIG env vars for custom locations

v2.9.9.
  * Disable at_exit handler for Unicorn which sometimes caused the
    agent to stop reporting immediately.

v2.9.8.
  * add instrumentation for Net::HTTP calls, to show up as "External"
  * added support for validating agents in the cloud.
  * recognize Unicorn dispatcher
  * add NewRelic module definitions to ActiveRecord instrumentation

v2.9.5.
  * Snow Leopard memory fix

v2.9.4.
  * clamp size of data sent to server
  * reset statistics for passenger when forking to avoid erroneous data
  * fix problem deserializing errors from the server
  * fix incompatibility with postgres introduced in 2.9.

v2.9.3.
  * fix startup failure in Windows due to memory sampler
  * add JRuby environment information

v2.9.2.
  * change default apdex_t to 0.5 seconds
  * fix bug in deployments introduced by multi_homed setting
  * support overriding the log in the agent api
  * fix JRuby problem using objectspace
  * display custom parameters when looking at transactions in dev mode
  * display count of sql statements on the list of transactions in dev mode
  * fixes for merb--thanks to Carl Lerche

v2.9.1.
  * add newrelic_ignore_apdex method to controller classes to allow
    you to omit some actions from apdex statistics
  * Add hook for Passenger shutdown events to get more timely shutdown
    notices; this will help in more accurate memory readings in
    Passenger
  * add newrelic_notice_error to Object class
  * optional ability to verify SSL certificates, note that this has some
    performance and reliability implications
  * support multi-homed host with multiple apps running on duplicate
    ports

v2.9.0.
  Noteworthy Enhancements
  * give visibility to templates and partials in Rails 2.1 and later, in
    dev mode and production
  * change active record metrics to capture statistics in adapter log()
    call, resulting in lower overhead and improved visibility into
    different DB operations; only AR operations that are not hitting the
    query cache will be measured to avoid overhead
  * added mongrel_rpm to the gem, a standalone daemon listening for custom
    metric values sent from local processes (experimental); do mongrel_rpm
    --help
  * add API for system monitoring daemons (refer to KB articles); changed
    API for manual starting of the agent; refer to
    NewRelic::Agent.manual_start for details
  * do certificate verification on ssl connections to
    collector.newrelic.com
  * support instances appearing in more than one application by allowing a
    semicolon separated list of names for the newrelic.yml app_name
    setting.
  * combined agent logfiles into a single logfile
  * use rpm server time for transaction traces rather than agent time

  Developer Mode (only) Enhancements
  * show partial rendering in traces
  * improved formatting of metric names in traces
  * added number of queries to transactions in the transaction list
  * added some sorting options for the transaction list
  * added a page showing the list of active threads

  Compatibility Enhancements
  * ruby 1.9.1 compatibility
  * support concurrency when determining busy times, for 2.2 compatibility
  * in jruby, use Java used heap for memory sampling if the system memory
    is not accessible from an unsupported platform
  * jruby will no longer start the agent now when running the console or
    rake tasks
  * API support for RPM as a footnote add-in
  * webrick support restored

  Noteworthy bugfixes
  * sample memory on linux by reading /proc/#{$$}/status file
  * fixed ambiguous 'View' metrics showing up in controller breakdown
  * removed Numeric extensions, including round_to, and to_ms
  * using a different timeout mechanism when we post data to RPM
  * remove usage of Rails::Info which had a side effect of enabling
    ActiveRecord even when it wasn't an active framework
  * moved CPU sampler off background thread and onto the harvest thread
  * tests now run cleanly in any rails app using test:newrelic or
    test:plugins

  Agent improvements to support future RPM enhancements
  * add instrumentation to capture metrics on response codes; not yet
    working in rails 2.3.*
  * added http referrer to traced errors
  * capture gem requirements from rails
  * capture cpu utilization adjusted for processor count
  * transaction sampling

v2.8.10.
  * fix thin support with rails 2.3.2 when using script/server
  * fix incompatibility with rails 2.3.2 and script/server options
    processing
  * minor tweak to environment gathering for gem mode

v2.8.9.
  * fix problem finding the newrelic controller in dev mode
  * fix incompatibility with older versions of optparse
  * fix potential jvm problem with jruby
  * remove test:all task definition to avoid conflicts
  * change error message about window sampler in windows not supported to a
    warning message

v2.8.8.
  * fix error with jruby on windows
  * fix problem where webrick was being incorrectly detected causing some
    problems with mongrel application assignments--had to disable webrick
    for now

v2.8.7.
  * fix for ssl connection hanging problems
  * fix problem recognizing mongrel in rails 2.3.2
  * fastcgi support in rails 2.3.2
  * put back webrick support

v2.8.6.
  * fix for capture_params when using file uploads in controller actions
  * use pure ruby NS lookup for collector host to eliminate possibly
    blocking applications

v2.8.5.
  * fix reference to CommandError which was breaking some cap scripts
  * fix incompatibility with Rails 2.0 in the server API
  * fix problem with litespeed with Lite accounts
  * fix problem when ActiveRecord is disabled
  * moved merb instrumentation to Merb::Controller instead of
    AbstractController to address incompatibility with MailController
  * fix problem in devmode displaying sql with embedded urls

v2.8.4.
  * fix bug in capistrano recipe causing cap commands to fail with error
    about not finding Version class

v2.8.3.
  * refactor unit tests so they will run in a generic rails environment
  * require classes in advance to avoid autoloading.  this is to address
    incompatibilities with desert as well as more flexibility in gem
    initialization
  * fixed newrelic_helper.rb 1.9 incompatibility

v2.8.2.
  * fix Ruby 1.9 syntax compatibility errors
  * update the class loading sanity check, will notify server of errors
  * fix agent output on script and rake task execution

v2.8.1.
  * Convert the deployment information upload script to an executable and
    put in the bin directory.  When installed as a gem this command is
    symlinked to /usr/bin.  Usage: newrelic_cmd deployments --help
  * Fix issue invoking api when host is not set in newrelic.yml
  * Fix deployments api so it will work from a gem
  * Fix thin incompatibility in developer mode

v2.8.0.
  * add beta of api in new_relic_api.rb
  * instrumented dynamic finders in ActiveRecord
  * preliminary support for capturing deployment information via capistrano
  * change memory sampler for solaris to use /usr/bin/ps
  * allow ERB in newrelic.yml file
  * merged support for merb into this version
  * fix incompatibility in the developer mode with the safe_erb plugin
  * fix module namespace issue causing an error accessing
    NewRelic::Instrumentation modules
  * fix issue where the agent sometimes failed to start up if there was a
    transient network problem
  * fix IgnoreSilentlyException message

v2.7.4.
  * fix error when trying to serialize some kinds of Enumerable objects
  * added extra debug logging
  * added app_name to app mapping

v2.7.3.
  * fix compatibility issue with 1.8.5 causing error with Dir.glob

v2.7.2.
  * fix problem with passenger edge not being a detected environment

v2.7.1.
  * fix problem with skipped dispatcher instrumentation

v2.7.0.
  * Repackage to support both plugin and Gem installation
  * Support passenger/litespeed/jruby application naming
  * Update method for calculating dispatcher queue time
  * Show stack traces in RPM Transaction Traces
  * Capture error source for TemplateErrors
  * Clean up error stack traces.
  * Support query plans from postgres
  * Performance tuning
  * bugfixes

v2.5.3.
  * fix error in transaction tracing causing traces not to show up

v2.5.2.
  * fixes for postgres explain plan support

v2.5.1.
  * bugfixes

v2.5.0.
  * add agent support for rpm 1.1 features
  * Fix regression error with thin support

v2.4.3.
  * added 'newrelic_ignore' controller class method with :except and :only options for finer grained control
    over the blocking of instrumentation in controllers.
  * bugfixes

v2.4.2.
  * error reporting in early access

v2.4.1.
  * bugfix: initializing developer mode

v2.4.0.
  * Beta support for LiteSpeed and Passenger

v2.3.7.
  * bugfixes

v2.3.6.
  * bugfixes

v2.3.5.
  * bugfixes: pie chart data, rails 1.1 compatibility

v2.3.4.
  * bugfix

v2.3.3.
  * bugfix for non-mysql databases

v2.3.2.
  * bugfixes
  * Add enhancement for Transaction Traces early access feature

v2.3.1.
  * bugfixes

v2.3.0.
  + Add support for Transaction Traces early access feature

v2.2.2.
  * bugfixes

v2.2.1.
  + Add rails 2.1 support for Developer Mode
  + Changes to memory sampler: Add support for JRuby and fix Solaris support.
  * Stop catching exceptions and start catching StandardError; other exception cleanup
  * Add protective exception catching to the stats engine
  * Improved support for thin domain sockets
  * Support JRuby environments

v2.1.6.
  * bugfixes

v2.1.5.
  * bugfixes

v2.1.4.
  * bugfixes

v2.1.3.
  * bugfixes

v2.1.2.
  * bugfixes

v2.1.1.
  * bugfixes

v2.1.0.
  * release for private beta


