New features
Feature flags may now be set from environment variables.
Using the naming convention
NEW_RELIC_FEATURE_FLAG_<feature flag name in upper case>.
Improvements
Transaction events may be harvested in two payloads now.
This change reduces the occurrence of harvests being rejected due to large payloads. Payloads will only be split when they are large (greater than 1/3 the maximum).
Bug fixes
- Updated Hapi v17 instrumentation to wrap
serverexport, in addition toServer.
Improvements
- Replaced
trusted_account_idsarray withtrusted_account_key. - Added node v10 to the test matrix.
Bug fixes
Added config
utilizationenv vars to theBOOLEAN_VARSset.This ensures that if these boolean config values are set outside of a config file, their values are respected, particularly when they are disabled.
Improvements
Added
nonceoption fornewrelic.getBrowserTimingHeader()This allows people to pass in a string to be injected as the
nonceproperty of the generated script tag. Special thanks to João Vieira (@joaovieira) for contributing this feature!Expose the External segment on the
httprequest instance for outbound calls.
Fixes
Added check to mark Hapi
'onPreResponse'extensions as error handlers.Previously, the agent was unable to mark any Hapi errors as handled, even if they were, resulting in inaccurate reporting. This change assumes that
'onPreResponse'extensions act as error handlers, so errors are only reported if they persist to the final response.
Improvements
- Added more tests for transaction naming with Restify.
Fixes
Fixed issue with tracking external requests to default ports.
Special thanks to Ryan King for pinpointing the cause of this issue.
Added extra check for handling arrays of functions when wrapping middleware mounters.
This fixes a bug with the agent incorrectly assuming that arrays passed as the first argument in middleware would only contain route paths, causing a fatal error.
The agent now reports the total time of the transaction on transaction events.
New features
Added an option for using the
finallymethod on promises for instrumentation.The promise instrumentation would use
Promise#finallyif available. This change is in response to Node v10 promises callingtheninside theirfinallymethod, which caused infinite recursion in the agent's promise instrumentation.Added seen/sent/dropped supportability metrics for all event collections.
Improvements
Refactored harvest cycle into separate class.
This refactoring eases managing harvested data and re-merging unharvested values on failure.
No longer download gcc on test suites that do not require it.
Bug fixes
Updated
WebFrameworkShimto handle arrays of routes when wrapping middleware mounters.Previously, a transaction that hit a shared middleware (eg,
app.use(['/one', '/two'], ...)) would always be tagged with<unknown>in its name, due to the agent not interpreting arrays of paths. Now transaction names will include all paths for a shared middleware, comma-delimited, followed by the current route ('WebTransaction/Expressjs/GET//one,/two/one').
Fixes
- Make
require()statements explicitly referencepackage.jsonas a.jsonfile.
This solves a problem when requiring/importing newrelic from a Typescript file.
- Check if
process.mainModule.filenameexists before using in missing config file check.
When the agent is preloaded with Node's --require flag, mainModule is not yet defined when the agent checks for a config file, resulting in a TypeError in the event that no config file exists. Defaulting to the file path being executed in process.argv ensures that the app will not crash when preloaded without a config file.
- Updated dev dependency tap to
v12.0.1. - Fixed identification of errors with express.
Previously the call next('router') was considered an error. This is actually valid usage of express and will no longer generate an error.
- Removed
debug.internal_metricsconfiguration.
This legacy debug configuration was never used since trace-level logging provides everything this did and more.
- Upgraded optional dependency
@newrelic/native-metricsto v3.
With this update comes pre-built binaries for Node 5 and 7. GC metrics are also now aggregated in C++ until the agent is ready to harvest them instead of hopping into JS for each event.
- Added additional checks to
uninstrumentedensuring that files with names matching instrumented modules do not result in a false uninstrumented status.
For example, some users load config/env info before the agent. In that case, a file responsible for exporting DB config information (config/redis.js), may result in a false uninstrumented status, because the agent would interpret redis.js as the module itself.
Fixes
Fixed metric merging when using debug.internal_metrics.
The debug metrics cache would cause timestamps for harvested metrics to get stuck at agent startup. This will no longer happen, and the debug cache is reset each harvest.
Improvements
- Modularized configuration constants to improve readability.
Fixes
Updated use of
fs.unlinkwithout a callback tofs.unlinkSync.As of Node v10, the callback is no longer optional, which was causing a false test failure.
Fixed access to properties on promisified methods.
Improvements
- Optimized
unhandledRejectionreporting when usingasync_hooks. - Replaced all uses of
util._extendwithObject.assign. - Completed TODOs regarding the Node 0.10 and 0.12 deprecation.
- Added PriorityQueue serialization benchmarks.
Bug fixes
The agent no longer resizes the metric timeslice start time to be the earliest start time of the transactions that finish during the timeslice.
Background transactions created may now be named through
API#setTransactionName.Previously, the agent didn't respect the transaction naming precedence for background transactions. Background transaction naming behavior is now in line with web transaction behavior.
Logger no longer tries to create very large log messages.
When a message is created that would be too large to log, a process warning is emitted.
The agent will now respect event count limits when merging data from a failed send.
Previously, when merging data into an event pool the agent wouldn't maintain the size limit of the reservoir.
Added check for a route prefix when wrapping Hapi route handlers.
Previously, route prefixes specified via plugin options weren't being included in transaction names. Now, if the agent finds a route prefix associated with a given realm, it is prepended to the route path in the transaction name.
Improvements
Added PriorityQueue class for collecting events.
This replaces the Reservoir class for event sampling. Using priority sampling allows the agent to maintain randomness across a given time period while improving the chances that events will be coordinated across Transaction, Error, and Custom event pools.
The agent will now allow external instrumentation modules to fail in a safe way.
Previously, the agent would stop running if an externally loaded instrumentation failed for any reason. Due to the way external instrumentations can be updated independently, the agent should allow them to fail and carry on after logging a warning.
Added the
strip_exception_messages.enabledconfig option.The agent can now be configured to redact error messages on collected errors.
Added the
attributes.include_enabledconfig option.The agent can now be configured to disallow attribute include patterns to be specified.
Fixes.
Updated logic around wrapping route handlers when
configobject is present.Before, the agent would only attempt to wrap
config.handlerwhen anyconfigobject was present, without defaulting to the roothandlerif it didn't exist.