Improvements
Domain error handlers will now be scoped to the transaction the error occurred in.
Previously, the
'error'
event handlers would not be scoped to a transaction causing our API methods to not associate data correctly (e.g. usingnoticeError
would not associate the error with the transaction and would instead be unscoped).
Bug fixes
Reworked the SQL parser to handle new lines in the query.
Previously the agent would have difficulty classifying queries with new lines in them. Thanks to Libin Lu (@evollu) for the fix!
Postgres instrumentation is now compatible with inputs with text getter attributes.
Thanks again to Libin Lu (@evollu) for the fix!
Improvements
Improved agent startup speed by ~10% by simplifying environment checks.
Removed prolific
fs.exists
andfs.stat
checks, instead simply handling the error for mis-used files which greatly reduces disk access.Added slightly more trace-level logging around the creation of segments.
Added examples for using the
newrelic.createBackgroundTransaction
method in a number of different use cases.
Bug fixes
Removed excessive segment creation from PG instrumentation.
For queries with many results we would create a segment for each result. This would result in excessive object allocation and then cause harsh GC thrashing.
Fixed a bug in agent connect that could cause an identity crisis under specific use cases.
When using the agent with multiple app names, transaction information could be misattributed to other services if they share the same first app name. This resolves that by using all of the host names to uniquely identify the agent.
Improvements
Director instrumentation that will now name the transaction correctly, as well as create segments corresponding to the handlers registered with director.
Transaction naming refactor - this should clear up some inconsistent naming issues in our router instrumentations.
Previously the instrumentation was tasked with the maintenance of the transaction state name, now this has been abstracted into its own class to be used by instrumentations.
Express instrumentation refactored to scope transaction storage to the incoming request object.
Previously the express instrumentation used a stack to track which router was expecting middleware to finish and keep track of which transaction is being executed. The new implementation has a stronger guarantee on scoping work to the correct transaction.
Bug fixes
- The agent now uses the correct units (was seconds, now milliseconds) for slow queries - this fixes and issue where query traces in the databases tab were slower than the reported maximum.
Improvements
- The following attributes are now sent to Insights along with transaction events: databaseDuration, databaseCallCount.
- Updated Redis instrumentation to work with version 2.x of the redis module.
- Improvements to error tracking on systems that have a lot of errors.
- Minor improvements in tests and logging.
Bug fixes
Fixed a few issues with the Express instrumentation.
Middleware functions mounted with a path variable now generate the correct middleware metrics. Routers mounted using route methods now generate the correct trace segments and times. Routers mounted on root path are now not included in trace when they contain no matching routes.
New features
- Express middleware metrics are now enabled by default.
Improvements
- The following attributes are now sent to Insights along with transaction events: externalDuration, externalCallCount, and queueDuration.
- Custom SSL certificates (from the agent configuration) are now used even when a proxy is not explicitly defined. This is useful in some environments that use an implicit proxy for all network traffic.
Bug fixes
Fixed duplicated external transactions for
https
requests in Node > 0.10.Any external transaction that used the
https
module to make the request would appear twice in transaction traces due tohttps.request
internally usinghttp.request
. This has now been resolved.Updated eslint dev dependency to 2.9.0 (was 0.24.1).
Fixed an issue with transaction naming precedence.
Custom naming of transactions will no longer be replaced by names generated by the instrumentation.
Fixed tests which broke under Node 6.0.
Node 6.0.0 changed some messaging and internal functionality which our tests were asserting on. These tests have been updated to work with either the new version or the older ones.
Fixed installing GCC 5 in Travis for testing native modules in Node >= 3.0.
Starting in Node 3.0, native modules were compiled with C++11 features enabled. The version of GCC preinstalled on Travis was too old to support that so we now manually install GCC 5 and set it as the system compiler.
Fixed metrics that were being scoped to themselves.
Some metrics were scoped to themselves, causing a strange visual glitch in the New Relic UI. This self-scoping has been removed.
Added tests for transaction naming with parallel requests in Express.
Bug fixes
- Fixed issue with checking listener count for
uncaughtException
andunhandledRejection
global events. - Fixed a number of issues with promise instrumentation of Bluebird.
Notes
Importante
This release has been unpublished from npmjs.org. Use version 1.27.1 or higher.
New Features
Reworked promise instrumentation to be more reliable and reusable.
Promise instrumentation has been rewritten to be applicable to any A+ compliant promise library. This change brings more consistent instrumentation of Bluebird promises.
This change also allows users to see the execution order of chained promises in their Transaction Traces. This is an opt-in process and can be achieved by setting
feature_flag.promise_segments
to true in the agent config.
Bug fixes
The agent now properly checks for custom SSL certificates.
The check previously was falsely positive if there was an empty list of custom certificates. This caused red herrings to be admitted into the debug logs. Thanks to Seth Shober (@sethshober) for the fix!
Promise error handling is now more consistent.
Previously the agent would notice errors being emitted on
unhandledRejection
regardless of other listeners. Errors coming in on theunhandledRejection
event will not be recorded if there are handlers for the event - this is more in line with our error handling practices in other instrumentations.
Improvements
Added a
.npmignore
file to exclude non-essential files.The agent will now omit tests and examples on install from npm, drastically improving download times. Thanks to Serge Havas (@Sinewyk) for the contribution!
Logging has been reworked to reduce CPU overhead.
The check to see if a logging call was valid happened fairly late in the logic, causing unnecessary work to be done regardless of logger state. This has been rectified, netting a large decrease in CPU overhead.
New features
Added ioredis instrumentation.
Big thanks to Guilherme Souza (@guilhermef) for the contribution!
Added a new shutdown call to the public API.
Thanks to @echmykhun for the contribution!
The new shutdown API call will gracefully stop the agent. It can optionally harvest any pending data waiting to be sent to the New Relic servers before shutting down.
To read more about this new API, please read our README, or visit our docs page.
Added support for truncated segment notifiers.
Segments related to work that happens after a transaction has finished will now be labeled as Truncated in the UI.
Bug fixes
Fixed an issue in the express instrumentation related to inactive/lost transaction state.
Thanks to Jacob Page (@DullReferenceException) for submitting this fix.
Previously, the agent would crash if there was no active transaction when an Express middleware would handle the request.
Improvements
The agent now uses MongoDB's APM API for its instrumentation.
Method discovery for instrumentation is now done through MongoDB's APM API in newer versions of the MongoDB driver.
New features
Added capturing errors from the unhandledRejection global event.
If a promise is rejected with an error, and the error is not handled, the error will now be reported to New Relic.
Bug fixes
Fixed issue with attaching an event handler every time Express was required.
Fixed issue with chained promises losing context.
Previously the transaction state was getting lost when an error was thrown early in a promise chain.
Fixed issue with the agent crashing when an http Server did not have the address() getter.
Fixed issue with Express instrumentation when a wrapped layer object was missing a method.
Improvements
- Added more logging around the CAT feature.