# New Relic Ruby Agent Release Notes #

## v3.15.0 ##

* Rails 5 support

This release includes experimental support for Rails 5 as of 5.0.0.beta2.
Please note that this release does not include any support for ActionCable,
the WebSockets framework new to Rails 5.

* Don't include extension from single format Grape API transaction names

Starting with Grape 0.12.0, an API with a single format no longer declares
methods with `.:format`, but with an extension such as `.json`. Thanks Daniel
Doubrovkine for the contribution!

* Fix warnings about shadowing outer local variable when running tests

Thanks Rafael Almeida de Carvalho for the contribution!

* Check config first for Rails middleware instrumentation installation

Checking the config first avoids issues with mock classes that don't implement
`VERSION`. Thanks Jesse Sanford for the contribution!

* Remove a trailing whitespace in the template for generated newrelic.yml

Thanks Paul Menzel for the contribution!

* Reference external resources in comments and readme with HTTPS

Thanks Benjamin Quorning for the contribution!

## v3.14.3 ##

* Don't inadvertently send sensitive information from DataMapper SQLErrors

DataObjects::SQLError captures the SQL query, and when using versions of
data_objects prior to 0.10.8, built a URI attribute that contained the
database connection password. The :query attribute now respects the obfuscation
level set for slow SQL traces and splices out any password parameters to the
URI when sending up traced errors to New Relic.

* Improved SQL obfuscation algorithm

To help standardize SQL obfuscation across New Relic language agents, we've
improved the algorithm used and added more test cases.

* Configurable longer sql_id attribute on slow SQL traces

The sql_id attribute on slow SQL traces is used to aggregate normalized
queries together. Previously, these IDs would generally be 9-10 digits long,
due to a backend restriction. If `slow_sql.use_longer_sql_id` is set to `true`,
these IDs will now be 18-19 digits long.

## v3.14.2 ##

* Improved transaction names for Sinatra

The agent will now use sinatra.route for transaction names on Sinatra 1.4.3+,
which sets it in the request environment. This gives names that closer resemble the
routes defined in the Sinatra DSL.  Thanks to Brian Phillips for the suggestion!

* Bugfix for error flag on transaction events

There was an issue causing the error flag to always be set to false for Insights
transaction events that has been fixed.

* Official support for Sidekiq 4

The Ruby agent now officially supports Sidekiq 4.

* Additional attributes collected

The agent now collects the following information in web transactions:
Content-Length HTTP response and Content-Type HTTP request headers.

## 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 ##

## 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